Analýza sentimentu Twitter pomocou Pythonu
Analýza sentimentu na Twitteri je proces používania Pythonu na automatické pochopenie emócií alebo názorov vyjadrených v tweetoch. Analýzou textu môžeme tweety klasifikovať ako pozitívne negatívne alebo neutrálne. To pomáha podnikom a výskumníkom sledovať verejnú náladu značky alebo reakcie na udalosti v reálnom čase. Knižnice Pythonu ako TextBlob Tweepy a NLTK uľahčujú zhromažďovanie tweetov, spracovávajú text a efektívne vykonávajú analýzu sentimentu.
Ako je analýza sentimentu na Twitteri užitočná?
- Analýza sentimentu na Twitteri je dôležitá, pretože pomáha ľuďom a firmám pochopiť, čo si verejnosť myslí v reálnom čase.
- Každý deň sa zverejňujú milióny tweetov, v ktorých sa zdieľajú názory na udalosti značiek produktov alebo sociálne problémy. Analýzou tohto obrovského toku údajov môžu spoločnosti merať trendy na mieste spokojnosti zákazníkov, rýchlo zvládnuť negatívnu spätnú väzbu a robiť lepšie rozhodnutia na základe toho, ako sa ľudia skutočne cítia.
- Pre výskumníkov a vlády je tiež užitočné monitorovať náladu verejnosti počas volebných kríz alebo veľkých udalostí, pretože surové tweety premieňajú na cenné informácie.
Krok za krokom implementácia
Krok 1: Nainštalujte potrebné knižnice
Tento blok nainštaluje a importuje požadované knižnice. Používa sa pandy na načítanie a spracovanie údajov TfidfVectorizer zmeniť text na čísla a scikit učiť sa trénovať 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
Krok 2: Načítajte množinu údajov
- Tu načítame Súbor údajov Sentiment140 zo zazipovaného súboru CSV si ho môžete stiahnuť z Kaggle.
- Zachovávame iba polaritu a stĺpce textu tweetu ich pre prehľadnosť premenujeme a vytlačíme niekoľko prvých riadkov na kontrolu údajov.
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 ())
výstup:
Výstup Krok 3: Udržujte iba pozitívne a negatívne pocity
- Tu odstraňujeme neutrálne tweety, kde polarita je 2, mapuje štítky, takže 0 zostáva záporná a 4 sa stáva 1 kladnou.
- Potom vytlačíme, koľko pozitívnych a negatívnych tweetov zostalo v údajoch.
df = df [ df . polarity != 2 ] df [ 'polarity' ] = df [ 'polarity' ] . map ({ 0 : 0 4 : 1 }) print ( df [ 'polarity' ] . value_counts ())
výstup:
Výstup Krok 4: Vyčistite tweety
- Tu definujeme jednoduchú funkciu na konverziu celého textu na malé písmená, aby sa zabezpečila konzistentnosť, aplikovaná na každý tweet v množine údajov.
- Potom zobrazí pôvodné a vyčistené verzie niekoľkých prvých tweetov.
def clean_text ( text ): return text . lower () df [ 'clean_text' ] = df [ 'text' ] . apply ( clean_text ) print ( df [[ 'text' 'clean_text' ]] . head ())
výstup:
Výstup Krok 5: Rozdelenie testu vlaku
- Tento kód rozdeľuje stĺpce clean_text a polarity na tréningové a testovacie sady pomocou rozdelenia 80/20.
- random_state=42 zaisťuje reprodukovateľnosť.
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 ))
výstup:
Veľkosť vlaku: 1280000
Veľkosť testu: 320 000
Krok 6: Vykonajte vektorizáciu
- Tento kód vytvára vektorizér TF IDF, ktorý konvertuje text na numerické prvky pomocou unigramov a bigramov obmedzených na 5000 prvkov.
- Prispôsobí a transformuje trénovacie údaje a transformuje testovacie údaje a potom vytlačí tvary výsledných matíc TF IDF.
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 )
výstup:
Tvar TF-IDF (vlak): (1280000 5000)
Tvar TF-IDF (test): (320 000 5 000)
Krok 7: Trénujte model Bernoulli Naive Bayes
- Tu trénujeme a Bernoulli Naivný Bayes klasifikátor na vlastnostiach TF IDF z tréningových údajov.
- Predpovedá pocity pre testovacie údaje a potom vytlačí presnosť a podrobnú klasifikačnú správu.
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 ))
výstup:
Výstup Krok 9: Model vlakového podporného vektorového stroja (SVM).
- Tento kód trénuje a Support Vector Machine (SVM) s maximálne 1000 iteráciami na vlastnostiach TF IDF.
- Predpovedá testovacie štítky a potom vytlačí presnosť a podrobnú klasifikačnú správu ukazujúcu, ako dobre fungoval SVM.
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 ))
výstup:
Výstup Krok 10: Trénujte model logistickej regresie
- Tento kód trénuje a Logistická regresia model s až 100 iteráciami na vlastnostiach TF IDF.
- Predpovedá štítky sentimentu pre testovacie údaje a vytlačí presnú a podrobnú klasifikačnú správu na vyhodnotenie modelu.
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 ))
výstup:
Výstup Krok 11: Urobte predpovede na vzorových Tweetoch
- Tento kód vezme tri vzorové tweety a transformuje ich na funkcie TF IDF pomocou rovnakého vektorizátora.
- Potom predpovedá ich sentiment pomocou trénovaných modelov BernoulliNB SVM a Logistic Regression a vytlačí výsledky pre každý klasifikátor.
- Kde 1 znamená pozitívny a 0 negatívny.
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 ))
výstup:
Výstup Vidíme, že naše modely fungujú dobre a poskytujú rovnaké predpovede aj pri rôznych prístupoch.
Vytvoriť kvízZdrojový kód si môžete stiahnuť tu - Analýza sentimentu Twitter pomocou Pythonu