Tweet analytics utilizza la PNL

Prajwal Shreyas
Prajwal Shreyas

Seguire

Jul 23, 2019 · 9 min leggere

Introduzione

Negli ultimi giorni, con l’esplosione dei Big Data, c’è una grande richiesta per le organizzazioni e i dati di scienziati di eseguire l’estrazione di informazioni utilizzando non tradizionali fonti di dati. La ricerca ha dimostrato che quasi l ‘ 80% dei dati esiste come dati di testo non strutturati, quindi l’analisi del testo è fondamentale per analizzare la ricchezza di informazioni disponibili su trascrizioni di chat, post sui social media, recensioni, feed di notizie ecc.

Che cos’è l’analisi del testo?

L’analisi del testo è il processo di sintesi di dati non strutturati per aiutare a scoprire i modelli e consentire il processo decisionale. Fino agli ultimi anni l’analisi del testo doveva essere eseguita alla vecchia maniera, ovvero l’eyeballing e la categorizzazione manuale del testo, che è inefficiente e richiede molto tempo. Anche questa non è una soluzione pratica quando si tratta di milioni di documenti come i dati di Twitter.

Twitter data (noto anche come tweets) è una ricca fonte di informazioni su un ampio set di argomenti. Questi dati possono essere utilizzati per trovare le tendenze relative a una parola chiave specifica, misurare il sentimento del marchio o raccogliere feedback su nuovi prodotti e servizi. Questo post fornirà una guida passo passo per l’analisi del testo sui dati di Twitter.

Come eseguire l’analisi del testo sui dati di Twitter?

I passaggi coinvolti nell’analisi del testo sono:

Passaggio 1: Raccogliere tweet

Passaggio 2: Pre-processo tweets

Passo 3: Applicare sentiment analysis

Passo 4: Applicare il riconoscimento di entità con nome

Passo 5: Cluster tweets

Passo 6: Visualizzare l’analisi

Ho allegato un notebook jupyter che esegue i passaggi precedenti su un campione di dati di Twitter qui.

Passo 1: Raccogliere tweets

I dati tweet possono essere programmaticamente accessibili in due modi cioè Twitter Rest API o Streaming API.

L’API Rest consente di raccogliere l’elenco di tutti i tweet o follower per un determinato utente. Puoi anche interrogare l’account di un utente e persino modificarlo a condizione che tu abbia le autorizzazioni richieste. Dove come l’API di streaming ti consente di raccogliere tweet in tempo reale in base a termini di ricerca, ID utente o posizioni.

Per accedere all’API, avrai bisogno di 4 informazioni da Twitter, ovvero chiave API, segreto API, token di accesso e segreto token di accesso. I passaggi dettagliati per la creazione di un account e la connessione ai servizi API di Twitter utilizzando i pacchetti Python sono trattati nel blog qui.

Per la nostra analisi ho utilizzato il servizio twitter streaming API e raccolto tweet per venti società FTSE 100 nell’arco di una settimana a partire dal 1 ottobre 2016. Ciò ha portato a un totale di tweet 37,313. L’output dell’API di streaming deve essere analizzato in un formato adatto prima di qualsiasi analisi. Nella sezione successiva copriamo i passaggi coinvolti nella pre-elaborazione dei tweet.

Passo 2: Pre-processo tweets

Qui analizziamo la risposta dall’API di Twitter in una tabella strutturata. La risposta delle API di streaming di Twitter è nel formato seguente:

Il codice dettagliato per l’analisi dell’output dall’API di Twitter è riportato di seguito. L’output è strutturato in campi chiave come “doc_id”, “username”, “text” ecc. La risposta analizzata può essere memorizzata in un database o in un file 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

Passo 3: Sentiment Analysis

Le persone esprimono le loro opinioni tramite tweet e questi di solito hanno sentimento associato ad esso cioè positivo, negativo o neutro. L’analisi di questo sentimento può portare ad alcune informazioni utili sull’argomento o sulla società in discussione. Quindi suggeriamo l’uso di algoritmi di sentiment analysis per eseguire questa analisi. Ho creato un blog separato con dettagli sull’esecuzione di analisi del sentiment utilizzando l’algoritmo di deep learning qui.

Il sentiment è un indicatore utile, tuttavia i tweet contengono informazioni aggiuntive come nomi di persone, luoghi e organizzazioni. I dati quando estratti possono portare a intuizioni molto utili sul vostro prodotto o azienda. Quindi nella fase successiva copriamo l’uso di algoritmi di riconoscimento di entità nominate, che è stato progettato per estrarre queste informazioni.

Fase 4: Riconoscimento entità con nome

L’algoritmo di riconoscimento entità con nome identifica i tag chiave come persone, luoghi o organizzazioni contenuti nei tweet. Ad esempio, se c’è una menzione di “Londra” nel tuo tweet, l’algoritmo lo etichetterebbe come “Posizione”. Tuttavia, poiché i tweet generalmente non seguono la sintassi inglese standard, la precisione dei tag è di circa il 60% al 70%.

È possibile utilizzare il tagger NER di Stanford per ottenere il riconoscimento dell’entità per i tweet. Nell’esempio qui sotto ho usato un tweet di 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)

Punto 5: Clustering di tweet simili

Un certo numero di tweet sono molto simili tra loro, questo può essere dovuto a persone tweeting sullo stesso argomento questo provoca un sacco di rumore nei dati. Quindi, al fine di ridurre il rumore sarebbe utile raggruppare i tweet in gruppi in base alla loro somiglianza. Questo può essere fatto usando l’algoritmo di clustering.

Il funzionamento interno degli algoritmi si basa su un concetto di apprendimento automatico noto come tf-idf (term frequency — Inverse document frequency) matrix. Qui ogni tweet viene trattato come un documento (d) e le parole all’interno del tweet come termine (t).

Term Frequency-La frequenza inversa del documento è una statistica numerica che dimostra quanto sia importante una parola per un corpus.

La frequenza del termine è solo il numero di rapporto tra la parola corrente e il numero di tutte le parole nel documento / stringa / ecc.

Termine Formula di Frequenza

Frequenza del termine t_i, dove n_t — il numero di t_i nel documento corrente/stringa, la somma di n_k è il numero di tutti i termini nel documento corrente/string.

La frequenza inversa del documento è un registro del rapporto tra il numero di tutti i documenti/stringa nel corpus e il numero di documenti con termine t_i.

Inverse Documento Formula di frequenza

tf-idf (t, d, D) è il prodotto tf(t, d) a idf(t, D). Ulteriori dettagli su tf-idf sono disponibili nel blog qui.

TF-IDF Formula

Nel codice sottostante per ottenere il clustering, a parte l’input di testo, l’unico parametro aggiuntivo che deve essere specificato nell’input è la soglia di somiglianza. È possibile impostare la soglia nella funzione ” get_clusters (processedTweets, similarity_threshold)”. Quindi tutti i tweet, che sono simili all ‘ 80%, saranno raggruppati insieme in base alla misura di somiglianza nota come somiglianza del coseno.

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

I risultati conterranno una colonna aggiuntiva “cluster_ref”. Il cluster_ref raggrupperà tutti i documenti simili in un singolo gruppo, ad esempio se il documento 1 e il documento 2 sono simili, quindi entrambi hanno cluster_ref di 1.

Punto 6: Visualizzazione dei risultati

La visualizzazione dei risultati di cui sopra aiuterebbe a comprendere l’opinione dei consumatori sul prodotto o sull’azienda. Nella sezione seguente utilizzerò Tableau per scopi di visualizzazione. Si prega di consultare il link al cruscotto qui.

Il primo grafico mostrato di seguito è il sentiment positivo, negativo e medio (linea blu) di ogni azienda. Le barre rappresentano il sentimento medio per l’azienda e non è ponderato per il numero di tweet. Questo sentimento non ponderato non fornisce un confronto accurato tra le aziende in quanto non tiene conto del numero di tweet.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.