Analiza raspoloženja na Twitteru pomoću Pythona
Analiza raspoloženja na Twitteru proces je korištenja Pythona za automatsko razumijevanje emocija ili mišljenja izraženih u tweetovima. Analizom teksta tweetove možemo klasificirati kao pozitivne negativne ili neutralne. To pomaže tvrtkama i istraživačima da prate reputaciju brenda raspoloženja javnosti ili reakcije na događaje u stvarnom vremenu. Python biblioteke poput TextBlob Tweepy i NLTK olakšavaju prikupljanje tweetova, obradu teksta i učinkovitu analizu raspoloženja.
Kako je Twitter analiza raspoloženja korisna?
- Analiza raspoloženja na Twitteru važna je jer pomaže ljudima i tvrtkama da razumiju što javnost misli u stvarnom vremenu.
- Milijuni tweetova objavljuju se svaki dan u kojima se dijele mišljenja o događajima proizvoda marki ili društvenim problemima. Analizom ovog ogromnog toka podataka tvrtke mogu rano mjeriti trendove zadovoljstva kupaca, brzo rješavati negativne povratne informacije i donositi bolje odluke na temelju toga kako se ljudi stvarno osjećaju.
- Također je korisno za istraživače i vlade da prate javno raspoloženje tijekom izbornih kriza ili velikih događaja jer sirove tweetove pretvara u vrijedne uvide.
Implementacija korak po korak
Korak 1: Instalirajte potrebne biblioteke
Ovaj blok instalira i uvozi potrebne biblioteke. Koristi se pande za učitavanje i rukovanje podacima TfidfVektorizator pretvoriti tekst u brojeve i scikit nauči trenirati model.
Python pip install pandas scikit - learn import pandas as pd from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.model_selection import train_test_split from sklearn.naive_bayes import BernoulliNB from sklearn.linear_model import LogisticRegression from sklearn.svm import LinearSVC from sklearn.metrics import accuracy_score classification_report
Korak 2: Učitajte skup podataka
- Ovdje učitavamo Skup podataka Sentiment140 iz komprimirane CSV datoteke koju možete preuzeti s Kagglea.
- Zadržavamo samo stupce polariteta i teksta tweeta, preimenujemo ih radi jasnoće i ispisujemo prvih nekoliko redaka za provjeru podataka.
df = pd . read_csv ( 'training.1600000.processed.noemoticon.csv.zip' encoding = 'latin-1' header = None ) df = df [[ 0 5 ]] df . columns = [ 'polarity' 'text' ] print ( df . head ())
Izlaz:
Izlaz Korak 3: Zadržite samo pozitivne i negativne osjećaje
- Ovdje uklanjamo neutralne tweetove gdje je polaritet 2 mapira oznake tako da 0 ostaje negativno, a 4 postaje 1 za pozitivno.
- Zatim ispisujemo koliko je pozitivnih i negativnih tweetova ostalo u podacima.
df = df [ df . polarity != 2 ] df [ 'polarity' ] = df [ 'polarity' ] . map ({ 0 : 0 4 : 1 }) print ( df [ 'polarity' ] . value_counts ())
Izlaz:
Izlaz Korak 4: Očistite Tweetove
- Ovdje definiramo jednostavnu funkciju za pretvaranje cijelog teksta u mala slova radi dosljednosti koja se primjenjuje na svaki tweet u skupu podataka.
- Zatim prikazuje izvorne i pročišćene verzije prvih nekoliko tweetova.
def clean_text ( text ): return text . lower () df [ 'clean_text' ] = df [ 'text' ] . apply ( clean_text ) print ( df [[ 'text' 'clean_text' ]] . head ())
Izlaz:
Izlaz Korak 5: Podjela testa vlaka
- Ovaj kod dijeli stupce clean_text i polarity u skupove za obuku i testiranje korištenjem podjele 80/20.
- random_state=42 osigurava ponovljivost.
X_train X_test y_train y_test = train_test_split ( df [ 'clean_text' ] df [ 'polarity' ] test_size = 0.2 random_state = 42 ) print ( 'Train size:' len ( X_train )) print ( 'Test size:' len ( X_test ))
Izlaz:
Veličina vlaka: 1280000
Veličina testa: 320000
Korak 6: Izvedite vektorizaciju
- Ovaj kod stvara TF IDF vektorizator koji pretvara tekst u numeričke značajke pomoću unigrama i bigrama ograničenih na 5000 značajki.
- Uklapa i transformira podatke o obuci i transformira testne podatke, a zatim ispisuje oblike rezultirajućih TF IDF matrica.
vectorizer = TfidfVectorizer ( max_features = 5000 ngram_range = ( 1 2 )) X_train_tfidf = vectorizer . fit_transform ( X_train ) X_test_tfidf = vectorizer . transform ( X_test ) print ( 'TF-IDF shape (train):' X_train_tfidf . shape ) print ( 'TF-IDF shape (test):' X_test_tfidf . shape )
Izlaz:
TF-IDF oblik (vlak): (1280000 5000)
TF-IDF oblik (test): (320000 5000)
Korak 7: Obuka Bernoulli Naive Bayesovog modela
- Ovdje treniramo a Bernoulli Naivni Bayes klasifikator na značajkama TF IDF iz podataka o obuci.
- Predviđa osjećaje za testne podatke, a zatim ispisuje točnost i detaljno izvješće o klasifikaciji.
bnb = BernoulliNB () bnb . fit ( X_train_tfidf y_train ) bnb_pred = bnb . predict ( X_test_tfidf ) print ( 'Bernoulli Naive Bayes Accuracy:' accuracy_score ( y_test bnb_pred )) print ( ' n BernoulliNB Classification Report: n ' classification_report ( y_test bnb_pred ))
Izlaz:
Izlaz Korak 9: Model Vektorskog stroja za podršku vlaku (SVM).
- Ovaj kod trenira a Support Vector Machine (SVM) s maksimalno 1000 ponavljanja na TF IDF značajkama.
- Predviđa ispitne naljepnice, zatim ispisuje točnost i detaljno izvješće o klasifikaciji koje pokazuje koliko je SVM dobro radio.
svm = LinearSVC ( max_iter = 1000 ) svm . fit ( X_train_tfidf y_train ) svm_pred = svm . predict ( X_test_tfidf ) print ( 'SVM Accuracy:' accuracy_score ( y_test svm_pred )) print ( ' n SVM Classification Report: n ' classification_report ( y_test svm_pred ))
Izlaz:
Izlaz Korak 10: Obuka modela logističke regresije
- Ovaj kod trenira a Logistička regresija model s do 100 ponavljanja na značajkama TF IDF.
- Predviđa oznake osjećaja za testne podatke i ispisuje točnost i detaljno izvješće o klasifikaciji za procjenu modela.
logreg = LogisticRegression ( max_iter = 100 ) logreg . fit ( X_train_tfidf y_train ) logreg_pred = logreg . predict ( X_test_tfidf ) print ( 'Logistic Regression Accuracy:' accuracy_score ( y_test logreg_pred )) print ( ' n Logistic Regression Classification Report: n ' classification_report ( y_test logreg_pred ))
Izlaz:
Izlaz Korak 11: Napravite predviđanja na uzorcima Tweetova
- Ovaj kod uzima tri uzorka tweetova i pretvara ih u TF IDF značajke pomoću istog vektorizatora.
- Zatim predviđa njihov sentiment koristeći uvježbane BernoulliNB SVM i modele logističke regresije i ispisuje rezultate za svaki klasifikator.
- Gdje 1 označava pozitivno, a 0 negativno.
sample_tweets = [ 'I love this!' 'I hate that!' 'It was okay not great.' ] sample_vec = vectorizer . transform ( sample_tweets ) print ( ' n Sample Predictions:' ) print ( 'BernoulliNB:' bnb . predict ( sample_vec )) print ( 'SVM:' svm . predict ( sample_vec )) print ( 'Logistic Regression:' logreg . predict ( sample_vec ))
Izlaz:
Izlaz Vidimo da naši modeli dobro funkcioniraju i da daju ista predviđanja čak i s različitim pristupima.
Napravi kvizMožete preuzeti izvorni kod ovdje- Analiza raspoloženja na Twitteru pomoću Pythona