Analiza razpoloženja na Twitterju z uporabo Pythona
Analiza razpoloženja na Twitterju je postopek uporabe Pythona za samodejno razumevanje čustev ali mnenj, izraženih v tvitih. Z analizo besedila lahko tvite razvrstimo na pozitivne negativne ali nevtralne. To podjetjem in raziskovalcem pomaga spremljati ugled blagovne znamke v javnem razpoloženju ali reakcije na dogodke v realnem času. Knjižnice Python, kot sta TextBlob Tweepy in NLTK, olajšajo zbiranje tvitov, obdelajo besedilo in učinkovito izvajajo analizo razpoloženja.
Kako je koristna analiza razpoloženja na Twitterju?
- Analiza razpoloženja na Twitterju je pomembna, ker ljudem in podjetjem pomaga razumeti, kaj si javnost misli v realnem času.
- Vsak dan je objavljenih na milijone tvitov, ki delijo mnenja o dogodkih izdelkov blagovnih znamk ali družbenih vprašanjih. Z analizo tega ogromnega toka podatkov lahko podjetja zgodaj izmerijo trende zadovoljstva strank, hitro obravnavajo negativne povratne informacije in sprejemajo boljše odločitve na podlagi tega, kako se ljudje dejansko počutijo.
- Prav tako je koristno za raziskovalce in vlade, da spremljajo javno razpoloženje med volilnimi krizami ali velikimi dogodki, saj neobdelane tvite spremeni v dragocene vpoglede.
Implementacija po korakih
1. korak: Namestite potrebne knjižnice
Ta blok namesti in uvozi zahtevane knjižnice. Uporablja se pande za nalaganje in obdelavo podatkov TfidfVectorizer spremeniti besedilo v številke in scikit nauči se usposobiti 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
2. korak: Naložite nabor podatkov
- Tukaj naložimo Nabor podatkov Sentiment140 iz stisnjene datoteke CSV, ki jo lahko prenesete iz Kaggle.
- Hranimo samo stolpce s polarnostjo in besedilom tweeta, jih preimenujemo zaradi jasnosti in natisnemo prvih nekaj vrstic, da preverimo podatke.
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 ())
Izhod:
Izhod 3. korak: Ohranite samo pozitivna in negativna čustva
- Tukaj odstranimo nevtralne tvite, kjer je polarnost 2, preslika oznake, tako da 0 ostane negativna, 4 pa postane 1 za pozitivno.
- Nato natisnemo, koliko pozitivnih in negativnih tvitov je ostalo v podatkih.
df = df [ df . polarity != 2 ] df [ 'polarity' ] = df [ 'polarity' ] . map ({ 0 : 0 4 : 1 }) print ( df [ 'polarity' ] . value_counts ())
Izhod:
Izhod 4. korak: Očistite tvite
- Tukaj definiramo preprosto funkcijo za pretvorbo vsega besedila v male črke zaradi skladnosti, ki jo uporabi za vsak tvit v naboru podatkov.
- Nato prikaže izvirne in očiščene različice prvih nekaj tvitov.
def clean_text ( text ): return text . lower () df [ 'clean_text' ] = df [ 'text' ] . apply ( clean_text ) print ( df [[ 'text' 'clean_text' ]] . head ())
Izhod:
Izhod 5. korak: Testna delitev vlaka
- Ta koda razdeli stolpca clean_text in polarnost v nize za usposabljanje in testiranje z uporabo razdelitve 80/20.
- random_state=42 zagotavlja 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 ))
Izhod:
Velikost vlaka: 1280000
Preizkusna velikost: 320000
6. korak: Izvedite vektorizacijo
- Ta koda ustvari vektorizator TF IDF, ki pretvori besedilo v numerične funkcije z uporabo unigramov in bigramov, omejenih na 5000 funkcij.
- Prilega in preoblikuje podatke o usposabljanju in preoblikuje testne podatke ter nato natisne oblike dobljenih matrik 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 )
Izhod:
Oblika TF-IDF (vlak): (1280000 5000)
Oblika TF-IDF (test): (320000 5000)
7. korak: Usposobite Bernoullijev naivni Bayesov model
- Tukaj treniramo a Bernoullijev naivni Bayes klasifikatorja o funkcijah TF IDF iz podatkov o usposabljanju.
- Napove razpoloženja za testne podatke in nato natisne točnost in podrobno poročilo 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 ))
Izhod:
Izhod Korak 9: Model Train Support Vector Machine (SVM).
- Ta koda usposablja a Podporni vektorski stroj (SVM) z največ 1000 ponovitvami funkcij TF IDF.
- Predvidi testne nalepke, nato natisne točnost in podrobno poročilo o klasifikaciji, ki prikazuje, kako dobro je deloval 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 ))
Izhod:
Izhod 10. korak: Usposobite model logistične regresije
- Ta koda usposablja a Logistična regresija model z do 100 ponovitvami funkcij TF IDF.
- Predvidi oznake razpoloženja za testne podatke in natisne poročilo o natančnosti in podrobni klasifikaciji za oceno 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 ))
Izhod:
Izhod 11. korak: Naredite napovedi na podlagi vzorčnih tvitov
- Ta koda vzame tri vzorčne tvite in jih pretvori v funkcije TF IDF z uporabo istega vektorizatorja.
- Nato napove njihovo razpoloženje z uporabo usposobljenih modelov BernoulliNB SVM in logistične regresije ter natisne rezultate za vsak klasifikator.
- Pri čemer 1 pomeni pozitivno in 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 ))
Izhod:
Izhod Vidimo lahko, da naši modeli dobro delujejo in dajejo enake napovedi tudi z različnimi pristopi.
Ustvari kvizIzvorno kodo lahko prenesete tukaj- Analiza razpoloženja na Twitterju z uporabo Pythona