Elaborazione dati JSON di Twitter

Blog

Twitter consente di raccogliere tweet utilizzando tweepy , una libreria Python per accedere all'API Twitter. Qui non intendo fornire un tutorial su come raccogliere i tweet, poiché ci sono già diverse buone recensioni (dai un'occhiata ai riferimenti sotto), ma piuttosto darti un esempio completo di come elaborare gli oggetti tweet in ordine per costruire un dataframe pulito su cui possiamo eseguire analisi sui social media.



**TL;TR: **Nel frattempo, appiattiremo il JSON di Twitter, selezioneremo gli oggetti di testo tra le varie opzioni (tweet principale, re-tweet, citazione, ecc.), li puliremo (rimuoveremo i caratteri non alfabetici) , tradurre tweet non inglesi, calcolare il sentimento del testo e associare una posizione data una posizione definita dall'utente o la geolocalizzazione automatica.

**Librerie da utilizzare: ** panda , convertitore di paesi , GeoPy , spaCy , googletrans , NLTK .




Ogni tweet oggetto è disponibile in formato JSON, un mix di attributi 'a livello di root' e oggetti figlio (che sono rappresentati con il _{}_ notazione) . La pagina degli sviluppatori di Twitter fornisce il seguente esempio:

{ 'created_at': 'Wed Oct 10 20:19:24 +0000 2018', 'id': 1050118621198921728, 'id_str': '1050118621198921728', 'text': 'To make room for more expression, we will now count all emojis as equal—including those with gender‍‍‍ ‍‍and skin t… https://t.co/MkGjXf9aXm', 'user': {}, 'entities': {} }

Questo è ovviamente un piccolo esempio dell'enorme dizionario che compone ogni tweet. Un altro esempio popolare è questo Mappa degli oggetti di stato di Twitter .



Per la maggior parte dei tipi di analisi, avremo sicuramente bisogno di attributi come il testo del tweet, il nome utente o la posizione del tweet. Sfortunatamente, come puoi vedere, questi attributi non sono disponibili in un formato pulito, ma sono distribuiti tra i livelli JSON - per esempio. , le coordinate della posizione del tweet si trovano in

tweet_object['place']['bounding_box']['coordinates']

È per questo che i tweet raccolti necessitano di un ampio processo di pulizia e trasformazione, che è lo scopo di questo post.

I dati di Twitter

Recentemente effettuato a localizzazione della lingua progetto in cui avevo bisogno di fare un'analisi dei social media su Twitter. Per questo ho raccolto 52830 tweet nel corso di diversi giorni contenenti le seguenti parole chiave: '#FIFA20' , ' #FIFA21' , 'FIFA20' , 'FIFA21' , 'FIFA 20' , 'FIFA 21' e ‘#EASPORTSFIFA’ . Quindi, per fare un'analisi corretta su di essi, ho dovuto pulire in precedenza ogni oggetto tweet in modo da poter trarre conclusioni significative.

A causa della natura di quel progetto, ero principalmente interessato ai dati riguardanti la posizione del tweet (paese e coordinate), il sentimento della versione inglese del testo e la lingua in cui il testo è stato twittato. Ed era l'obiettivo delle fasi di elaborazione per lucidare e trovare questi attributi. Puoi trovare i dettagli del progetto nel seguente repository:

hectoramirez/Language-localization_FIFA

Questo è un progetto end-to-end in cui miriamo a eseguire una localizzazione linguistica per il videogioco FIFA con solo pubblico ...

github.com

Usiamo questo set di dati per esemplificare i passaggi dell'elaborazione dei tweet!

Come abbiamo visto, ci sono più campi nel Twitter JSON che contiene dati testuali. In un tipico tweet, c'è il testo del tweet, la descrizione dell'utente e la posizione dell'utente. In un tweet più lungo di 140 caratteri, c'è anche il JSON figlio del tweet esteso. E in un tweet citato, c'è il testo del tweet originale e il commento con il tweet citato.

Per analizzare i tweet su larga scala, vorremmo appiattire il tweet JSON in un unico livello. Questo ci consentirà di memorizzare i tweet in un formato DataFrame. Per fare ciò, definiremo la funzione |_+_| che occuperà diversi campi relativi al testo e alla posizione (questo memorizzato in |_+_|). Guarda:

flatten_tweets()

Ora, potresti voler studiare tutti i campi di testo (principale, re-tweet o citazione), tuttavia, qui manterrò solo un campo di testo per semplicità. Per questo, definiamo ora una funzione |_+_| che seleziona il testo principale se il tweet è un tweet principale o un re-tweet, e decidiamo di eliminare il testo citato poiché di solito è ripetitivo e potrebbe non essere informativo.

place

Ora costruiamo il frame di dati. Nota che scegliamo le colonne principali (campi) rilevanti per un'analisi dei social media. Ciò include la lingua del tweet, |_+_| e |_+_|, che viene impostato manualmente dall'utente. Manteniamo anche |_+_|, |_+_| e |_+_| campi da |_+_|. Questi campi compaiono quando il tweet è geo-taggato e di solito è contenuto in meno del 10% del totale dei tweet. Il seguente blocco di codice costruisce il dataframe:

def flatten_tweets(tweets): ''' Flattens out tweet dictionaries so relevant JSON is in a top-level dictionary. ''' tweets_list = [] # Iterate through each tweet for tweet_obj in tweets: ''' User info''' # Store the user screen name in 'user-screen_name' tweet_obj['user-screen_name'] = tweet_obj['user']['screen_name'] # Store the user location tweet_obj['user-location'] = tweet_obj['user']['location'] ''' Text info''' # Check if this is a 140+ character tweet if 'extended_tweet' in tweet_obj: # Store the extended tweet text in 'extended_tweet-full_text' tweet_obj['extended_tweet-full_text'] = tweet_obj['extended_tweet']['full_text'] if 'retweeted_status' in tweet_obj: # Store the retweet user screen name in # 'retweeted_status-user-screen_name' tweet_obj['retweeted_status-user-screen_name'] = tweet_obj['retweeted_status']['user']['screen_name'] # Store the retweet text in 'retweeted_status-text' tweet_obj['retweeted_status-text'] = tweet_obj['retweeted_status']['text'] if 'extended_tweet' in tweet_obj['retweeted_status']: # Store the extended retweet text in #'retweeted_status-extended_tweet-full_text' tweet_obj['retweeted_status-extended_tweet-full_text'] = tweet_obj['retweeted_status']['extended_tweet']['full_text'] if 'quoted_status' in tweet_obj: # Store the retweet user screen name in #'retweeted_status-user-screen_name' tweet_obj['quoted_status-user-screen_name'] = tweet_obj['quoted_status']['user']['screen_name'] # Store the retweet text in 'retweeted_status-text' tweet_obj['quoted_status-text'] = tweet_obj['quoted_status']['text'] if 'extended_tweet' in tweet_obj['quoted_status']: # Store the extended retweet text in #'retweeted_status-extended_tweet-full_text' tweet_obj['quoted_status-extended_tweet-full_text'] = tweet_obj['quoted_status']['extended_tweet']['full_text'] ''' Place info''' if 'place' in tweet_obj: # Store the country code in 'place-country_code' try: tweet_obj['place-country'] = tweet_obj['place']['country'] tweet_obj['place-country_code'] = tweet_obj['place']['country_code'] tweet_obj['location-coordinates'] = tweet_obj['place']['bounding_box']['coordinates'] except: pass tweets_list.append(tweet_obj) return tweets_list view raw flatten_tweets.py hosted with ❤ by GitHub

#twitter #sentiment-analysis #nlp #data-science #social-media-analysis

versodatascience.com

Elaborazione dati JSON di Twitter

Twitter consente di raccogliere tweet utilizzando tweepy, una libreria Python per accedere all'API Twitter. Qui non intendo fornire un tutorial su come raccogliere i tweet.