Twitter hangulatelemzés Python használatával
A Twitter hangulatelemzése a Python használatával a tweetekben kifejezett érzelmek vagy vélemények automatikus megértése. A szöveg elemzésével a tweeteket pozitív negatívnak vagy semlegesnek minősíthetjük. Ez segít a vállalkozásoknak és a kutatóknak valós időben nyomon követni a közhangulatú márka hírnevét vagy az eseményekre adott reakciókat. A Python-könyvtárak, például a TextBlob Tweepy és az NLTK megkönnyítik a tweet-ek gyűjtését, a szöveg feldolgozását és a hangulatelemzés hatékony elvégzését.
Hogyan hasznos a Twitter-hangulatelemzés?
- A Twitter hangulatelemzése azért fontos, mert segít az embereknek és a vállalkozásoknak valós időben megérteni, mit gondol a közvélemény.
- Naponta több millió tweet kerül közzétételre, amelyekben megosztják véleményüket a márkatermékekkel kapcsolatos eseményekről vagy társadalmi kérdésekről. Ennek a hatalmas adatfolyamnak az elemzésével a vállalatok mérni tudják a vásárlói elégedettséget, és gyorsan tudják kezelni a negatív visszajelzéseket, és jobb döntéseket hoznak az emberek tényleges érzései alapján.
- A kutatók és a kormányok számára is hasznos a közhangulat nyomon követése választási válságok vagy nagy események idején, mivel a nyers tweeteket értékes betekintésekké alakítja.
Lépésről lépésre történő megvalósítás
1. lépés: Telepítse a szükséges könyvtárakat
Ez a blokk telepíti és importálja a szükséges könyvtárakat. Használ pandák adatok betöltésére és kezelésére TfidfVektorizer szöveget számokká alakítani és scikit tanulni modellt képezni.
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
2. lépés: Töltse be az adatkészletet
- Itt töltjük be a Sentiment140 adatkészlet tömörített CSV fájlból letöltheti a Kaggle webhelyről.
- Csak a polaritást tartjuk meg, és a tweet szövegoszlopai átnevezzük őket az egyértelműség kedvéért, és kinyomtatjuk az első néhány sort az adatok ellenőrzéséhez.
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 ())
Kimenet:
Kimenet 3. lépés: Csak pozitív és negatív érzelmeket őrizzen meg
- Itt eltávolítjuk azokat a semleges tweeteket, ahol a polaritás 2, leképezi a címkéket, így a 0 negatív marad, a 4 pedig 1 lesz pozitívnak.
- Ezután kiírjuk, hogy hány pozitív és negatív tweet maradt az adatokban.
df = df [ df . polarity != 2 ] df [ 'polarity' ] = df [ 'polarity' ] . map ({ 0 : 0 4 : 1 }) print ( df [ 'polarity' ] . value_counts ())
Kimenet:
Kimenet 4. lépés: Tisztítsa meg a tweeteket
- Itt egy egyszerű függvényt definiálunk, amely az összes szöveget kisbetűssé alakítja a konzisztencia érdekében, és az adatkészlet minden tweetjére alkalmazza.
- Ezután megmutatja az első néhány tweet eredeti és tisztított verzióját.
def clean_text ( text ): return text . lower () df [ 'clean_text' ] = df [ 'text' ] . apply ( clean_text ) print ( df [[ 'text' 'clean_text' ]] . head ())
Kimenet:
Kimenet 5. lépés: A vonatteszt megosztása
- Ez a kód felosztja a tiszta_szöveg és a polaritás oszlopokat képzési és tesztelési készletekre, 80/20-as felosztással.
- random_state=42 biztosítja a reprodukálhatóságot.
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 ))
Kimenet:
Vonat mérete: 1280000
Teszt mérete: 320000
6. lépés: Végezze el a vektorizálást
- Ez a kód egy TF IDF-vektort hoz létre, amely a szöveget numerikus jellemzőkké alakítja unigramok és bigramok segítségével, amelyek legfeljebb 5000 jellemzőt tartalmaznak.
- Illeszti és átalakítja a betanítási adatokat, átalakítja a tesztadatokat, majd kinyomtatja a kapott TF IDF mátrixok alakjait.
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 )
Kimenet:
TF-IDF forma (vonat): (1280000 5000)
TF-IDF forma (teszt): (320000 5000)
7. lépés: Tanítsa meg Bernoulli Naive Bayes modelljét
- Itt edzünk a Bernoulli Naive Bayes osztályozó a TF IDF jellemzőiről a képzési adatokból.
- Megjósolja a tesztadatok véleményét, majd kinyomtatja a pontosságot és egy részletes osztályozási jelentést.
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 ))
Kimenet:
Kimenet 9. lépés: Train Support Vector Machine (SVM) modell
- Ez a kód megtanítja a Támogatja a vektorgépet (SVM) maximum 1000 iterációval a TF IDF szolgáltatásain.
- Megjósolja a tesztcímkéket, majd kinyomtatja a pontosságot és egy részletes osztályozási jelentést, amely megmutatja, hogy az SVM milyen jól teljesített.
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 ))
Kimenet:
Kimenet 10. lépés: A logisztikai regressziós modell betanítása
- Ez a kód megtanítja a Logisztikai regresszió modell akár 100 iterációval a TF IDF funkcióin.
- Megjósolja a tesztadatok hangulatcímkéit, és kinyomtatja a pontossági és részletes osztályozási jelentést a modell értékeléséhez.
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 ))
Kimenet:
Kimenet 11. lépés: Készítsen jóslatokat a minta-tweetekre
- Ez a kód három minta tweetet vesz, és ugyanazt a vektort használva TF IDF funkciókká alakítja át őket.
- Ezután a betanított BernoulliNB SVM és logisztikai regressziós modellek segítségével megjósolja a véleményüket, és kinyomtatja az egyes osztályozók eredményeit.
- Ahol az 1 a pozitív, a 0 a negatív.
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 ))
Kimenet:
Kimenet Láthatjuk, hogy modelljeink jól működnek, és ugyanazokat az előrejelzéseket adják még különböző megközelítésekkel is.
Kvíz létrehozásaA forráskódot innen töltheti le - Twitter hangulatelemzés Python használatával