Tweet o google analytics usando a PNL

Prajwal Luís
Prajwal Luís

Siga

Jul 23, 2019 · 9 min de leitura

Introdução

Nos últimos dias, com a explosão do Big Data, há uma grande demanda para as organizações e cientistas de dados para efectuar a extracção de informação a utilizar não tradicionais fontes de dados. A pesquisa mostrou que quase 80% dos dados existem como dados de texto não estruturados, portanto, a análise de texto é fundamental para analisar a riqueza de informações disponíveis nas transcrições de bate-papo, postagens de mídia social, análises, feeds de notícias etc.

o que é Análise de texto?

Text analytics é o processo de síntese de dados não estruturados para ajudar a descobrir padrões e permitir a tomada de decisões. Até os últimos anos, a análise de texto tinha que ser realizada à moda antiga, ou seja, categorização ocular e manual do texto, o que é ineficiente e demorado. Além disso, esta não é uma solução prática ao lidar com milhões de documentos, como dados do twitter.

os dados do Twitter (também conhecidos como tweets) são uma rica fonte de informações sobre um grande conjunto de tópicos. Esses dados podem ser usados para encontrar tendências relacionadas a uma palavra-chave específica, medir o sentimento da marca ou coletar feedback sobre novos produtos e serviços. Esta postagem fornecerá um guia passo a passo para análise de texto nos dados do twitter.

como realizar análises de texto nos dados do twitter?

as etapas envolvidas na análise de texto são:

Etapa 1: coletar tweets

Etapa 2: Pré-processo de tweets

Passo 3: Aplicar a análise de sentimento

Passo 4: Aplique o reconhecimento de entidades nomeadas

Passo 5: Cluster tweets

Etapa 6: Visualizar análise

anexo jupyter notebook que executa os passos acima em uma amostra de twitter de dados aqui.

Etapa 1: colete tweets

os dados do tweet podem ser acessados programaticamente de duas maneiras, ou seja, API Rest do Twitter ou API de Streaming.

a API Rest permite coletar a lista de todos os tweets ou seguidores para um usuário específico. Você também pode consultar a conta de um usuário e até modificá-la, desde que tenha as permissões necessárias. Onde como a API de Streaming permite coletar tweets em tempo real com base em termos de pesquisa, ids de usuário ou locais.

para acessar a API, você precisará de 4 Informações do Twitter, ou seja, chave da API, segredo da API, token de acesso e segredo do token de acesso. As etapas detalhadas para configurar uma conta e conectar-se aos serviços da API do twitter usando pacotes python são abordadas no blog aqui.

para nossa análise, usei o serviço de API de streaming do twitter e coletei tweets para vinte empresas FTSE 100 ao longo de uma semana a partir de 1º de outubro de 2016. Isso resultou em um total de 37.313 tweets. A saída da API de streaming precisa ser analisada em um formato adequado antes de qualquer análise. Na próxima seção, abordamos as etapas envolvidas no pré-processamento de tweets.

Etapa 2: pré-processar tweets

aqui, analisamos a resposta da API do twitter em uma tabela estruturada. A resposta da API de streaming do twitter está no formato abaixo:

o código detalhado para analisar a saída da API do twitter está abaixo. A saída é estruturada em campos-chave como” doc_id”,” nome de usuário”,” texto ” etc. A resposta analisada pode ser armazenada em um banco de dados ou em um arquivo JSON.

import simplejson as json
def get_tweet(doc):
tweetItem = {}
#Available tweet data
tweetItem = doc
#hashtags are identified and provided as a field in the tweet
tweetItem = map(lambda x: x,doc)
# user_mentiones are identified and provided as a field
tweetItem = map(lambda x: x,doc
) # symbols e.g. $APPL are identified and provided as a field
tweetItem = map(lambda x: x,doc)
tweetItem = doc
tweetItem = doc
tweetItem = doc try: tweetItem = doc
except KeyError as e:
tweetItem = 0
pass
return tweetItem

Etapa 3: Análise de sentimento

as pessoas expressam suas opiniões por meio de tweets e geralmente têm sentimentos associados a ele, ou seja, positivos, negativos ou neutros. A análise desse sentimento pode levar a algumas informações úteis sobre o tópico ou a empresa que está sendo discutida. Portanto, sugerimos o uso de algoritmos de análise de sentimento para realizar essa análise. Criei um blog separado com detalhes sobre a realização de análises de sentimentos usando o algoritmo de aprendizado profundo aqui.

o sentimento é um indicador útil, no entanto, os tweets contêm informações adicionais, como nomes de pessoas, lugares e organizações. Os dados quando extraídos podem levar a insights muito úteis sobre seu produto ou empresa. Portanto, na próxima etapa, abordamos o uso de algoritmos de reconhecimento de entidade nomeados, projetados para extrair essas informações.

Passo 4: Reconhecimento de entidade nomeado

o algoritmo de reconhecimento de entidade nomeado identificará tags-chave, como pessoas, locais ou organizações contidas nos tweets. Por exemplo, se houver uma menção de “Londres” em seu tweet, o algoritmo marcaria isso como “localização”. No entanto, como os tweets geralmente não seguem a sintaxe padrão em inglês, a precisão das tags é de cerca de 60% a 70%.

você pode usar o Tagger Stanford Ner para obter o reconhecimento de entidade para os tweets. No exemplo abaixo, usei um tweet de Donald Trump.

# -*- coding: utf-8 -*-
from nltk.tag import StanfordNERTagger
from nltk.tokenize import word_tokenize
st = StanfordNERTagger('/stanford-ner/classifiers/english.all.3class.distsim.crf.ser.gz',
'/usr/share/stanford-ner/stanford-ner.jar',
encoding='utf-8')#a tweet by Donald Trump
text = 'Just had a very good call with @SwedishPM Stefan Löfven who assured me that American citizen A$AP Rocky will be treated fairly. Likewise, I assured him that A$AP was not a flight risk and offered to personally vouch for his bail, or an alternative....'
tokenized_text = word_tokenize(text)
classified_text = st.tag(tokenized_text)
print(classified_text)

Passo 5: Clustering de tweets semelhantes

vários tweets são muito semelhantes entre si, isso pode ser devido a pessoas twittar sobre o mesmo tópico, isso causa muito barulho nos dados. Portanto, para reduzir o ruído, seria útil agrupar os tweets em grupos com base em sua semelhança. Isso pode ser feito usando o algoritmo de agrupamento.

o funcionamento interno dos algoritmos é baseado em um conceito de aprendizado de máquina conhecido como tf-idf (frequência de termo — frequência inversa do documento) matriz. Aqui, cada tweet é tratado como um documento (d) e as palavras dentro do tweet como termo (t).

Frequência do Termo-a frequência inversa do documento é uma estatística numérica que demonstra a importância de uma palavra para um corpus.

a frequência do termo é apenas a proporção do número da palavra atual para o número de todas as palavras no documento/string/etc.

Prazo de Frequência Fórmula

Frequência de prazo t_i, onde n_t — o número de t_i no documento atual/string, a soma de n_k é o número de todos os termos no documento atual/string.

a frequência inversa do documento é um log da razão entre o número de todos os documentos / string no corpus e o número de documentos com o termo t_i.

Inverse Document Frequency Fórmula

tf-idf(t, d, D) é o produto tf(t, d) idf(t, D). Detalhes adicionais sobre tf-idf estão disponíveis no blog aqui.

TF-IDF Fórmula

No código abaixo, a fim de obter o agrupamento, para além da introdução de texto, o único parâmetro adicional que precisa ser especificado na caixa de entrada é a similaridade. Você pode definir o limite na função ” get_clusters (processedTweets, similarity_threshold)”. Portanto, todos os tweets, que são 80% semelhantes, serão agrupados com base na medida de similaridade conhecida como similaridade de cosseno.

def cluster_text(dist_text,processedTweets,dist_threshold_txt):
cluster_id = 1
for i in range(dist_text.shape):
try:
doc_dist_array_txt = dist_text
# identify document ids where the tweets are similar
similarDocs = np.where(doc_dist_array_txt <= dist_threshold_txt)
processedTweets.ix.isin(), 'cluster_ref'] = cluster_id
cluster_id = cluster_id + 1
except ValueError:
continue
return processedTweets
# %%%%%%%%% Calculate Cosine distance of documents %%%%%%%%%%%%%%
def tokenize_only(text):
# first tokenize by sentence, then by word to ensure that punctuation is caught as it's own token
tokens =
filtered_tokens =
# filter out any tokens not containing letters (e.g., numeric tokens, raw punctuation)
for token in tokens:
if re.search('', token):
filtered_tokens.append(token)
return filtered_tokens
def get_clusters(processedTweets, similarity_threshold):
tweets = processedTweets.tolist()
#Define count vectorizer parameters
vectorizer = CountVectorizer(max_df=1.0, min_df=1, stop_words=stopwords, tokenizer=tokenize_only)
# Get document term frequency matix
dtf_matrix = vectorizer.fit_transform(tweets) #fit the vectorizer to tweets which does not contain'htttp' and 'RT'
dist_text = np.around(abs(1 - cosine_similarity(dtf_matrix)),2)
# --------1D clustering based on distance measure
# Pre clustering setup
processedTweets = None # Tweets that are 1-similarithy% similar, as defined by dist_threshold
# Clustering of tweets based on text
processedTweets = cluster_text(dist_text,processedTweets,dist_threshold_txt = (1-similarity_threshold))
return processedTweets

os resultados conterão uma coluna adicional “cluster_ref”. O cluster_ref agrupará todos os documentos semelhantes em um único grupo, por exemplo, se o documento 1 e o documento 2 forem semelhantes, portanto, ambos têm cluster_ref de 1.

Passo 6: Visualização de resultados

a visualização dos resultados acima ajudaria a gerar insights sobre a opinião do consumidor sobre o produto ou empresa. Na seção abaixo, usarei o Tableau para fins de visualização. Por favor, veja o link para o painel aqui.

o primeiro gráfico mostrado abaixo é o sentimento positivo, negativo e médio (Linha Azul) de cada empresa. As barras representam o sentimento médio para a empresa e não são ponderadas para o número de tweets. Esse sentimento não ponderado não fornece uma comparação precisa entre as empresas, pois não leva em consideração o número de tweets.

Deixe uma resposta

O seu endereço de email não será publicado.