Twitter Sentiment Analysis on prosessi, jossa Pythonilla ymmärretään automaattisesti twiiteissä ilmaistut tunteet tai mielipiteet. Analysoimalla tekstiä voimme luokitella tweetit positiivisiksi negatiivisiksi tai neutraaleiksi. Tämä auttaa yrityksiä ja tutkijoita seuraamaan julkisen mielialan brändin mainetta tai reaktioita tapahtumiin reaaliajassa. Python-kirjastot, kuten TextBlob Tweepy ja NLTK, helpottavat tweettien keräämistä, prosessoivat tekstiä ja suorittavat tunteiden analysoinnin tehokkaasti. 
Kuinka Twitter-tunneanalyysistä on hyötyä?
- Twitterin mielipideanalyysi on tärkeä, koska se auttaa ihmisiä ja yrityksiä ymmärtämään, mitä yleisö ajattelee reaaliajassa.
- Miljoonia twiittejä julkaistaan päivittäin, ja niissä jaetaan mielipiteitä brändituotteiden tapahtumista tai sosiaalisista ongelmista. Analysoimalla tätä valtavaa tietovirtaa yritykset voivat mitata asiakastyytyväisyystrendejä varhaisessa vaiheessa käsitellä negatiivista palautetta nopeasti ja tehdä parempia päätöksiä sen perusteella, miltä ihmiset todella tuntevat.
- Tutkijoille ja hallituksille on myös hyödyllistä seurata yleistä mielialaa vaalikriisien tai suurten tapahtumien aikana, koska se muuttaa raakatviiteistä arvokkaita oivalluksia.
Askel askeleelta toteutus
Vaihe 1: Asenna tarvittavat kirjastot
Tämä lohko asentaa ja tuo tarvittavat kirjastot. Se käyttää pandat ladata ja käsitellä tietoja TfidfVektorizer muuttaaksesi tekstin numeroiksi ja scikit oppia kouluttaa mallia.
Pythonpip 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
Vaihe 2: Lataa tietojoukko
- Täällä lataamme Sentiment140-tietojoukko pakatusta CSV-tiedostosta voit ladata sen Kagglesta.
- Säilytämme vain napaisuuden, ja twiitin tekstisarakkeet nimeää ne uudelleen selvyyden vuoksi ja tulostaa ensimmäiset rivit tietojen tarkistamiseksi.
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())
Lähtö:
LähtöVaihe 3: Pidä vain positiiviset ja negatiiviset tunteet
- Tässä poistamme neutraalit twiitit, joissa napaisuus on 2, kartoittaa tarrat siten, että 0 pysyy negatiivisena ja 4 muuttuu 1:ksi positiivisille.
- Sitten tulostetaan kuinka monta positiivista ja negatiivista twiittiä tiedoissa on jäljellä.
df = df[df.polarity != 2] df['polarity'] = df['polarity'].map({0: 0 4: 1}) print(df['polarity'].value_counts())
Lähtö:
LähtöVaihe 4: Puhdista twiitit
- Tässä määritämme yksinkertaisen toiminnon, joka muuntaa kaiken tekstin pieniksi kirjaimiin johdonmukaisuuden vuoksi, ja sitä sovelletaan jokaiseen tietojoukon twiittiin.
- Sen jälkeen näyttää muutaman ensimmäisen twiitin alkuperäiset ja puhdistetut versiot.
def clean_text(text): return text.lower() df['clean_text'] = df['text'].apply(clean_text) print(df[['text' 'clean_text']].head())
Lähtö:
LähtöVaihe 5: Junatestin jako
- Tämä koodi jakaa puhdas_teksti- ja polariteettisarakkeet harjoitus- ja testaussarjoiksi käyttämällä 80/20-jakoa.
- random_state=42 varmistaa toistettavuuden.
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))
Lähtö:
Junan koko: 1280000
Testin koko: 320000
Vaihe 6: Suorita vektorointi
- Tämä koodi luo TF IDF -vektorisoittimen, joka muuntaa tekstin numeerisiksi ominaisuuksiksi käyttämällä unigrammeja ja bigrammeja, joiden enimmäismäärä on 5000.
- Se sovittaa ja muuntaa harjoitustiedot ja muuntaa testitiedot ja tulostaa sitten tuloksena olevien TF IDF -matriisien muodot.
vectorizer = TfidfVectorizer(max_features=5000 ngram_range=(12)) 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)
Lähtö:
TF-IDF-muoto (juna): (1280000 5000)
TF-IDF-muoto (testi): (320000 5000)
Vaihe 7: Harjoittele Bernoulli Naive Bayes -mallia
- Täällä treenataan a Bernoulli Naive Bayes luokitin TF IDF -ominaisuuksista harjoitustiedoista.
- Se ennustaa testitiedon tunteita ja tulostaa sitten tarkkuuden ja yksityiskohtaisen luokitusraportin.
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('nBernoulliNB Classification Report:n' classification_report(y_test bnb_pred))
Lähtö:
LähtöVaihe 9: Kouluta tukivektorikoneen (SVM) malli
- Tämä koodi kouluttaa a Tuki Vector Machine (SVM) enintään 1000 iteraatiolla TF IDF:n ominaisuuksilla.
- Se ennustaa testitarrat ja tulostaa sitten tarkkuuden ja yksityiskohtaisen luokitusraportin, joka osoittaa, kuinka hyvin SVM toimi.
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('nSVM Classification Report:n' classification_report(y_test svm_pred))
Lähtö:
kokonaisluku merkkijonoksi javassa
LähtöVaihe 10: Harjoittele logistinen regressiomalli
- Tämä koodi kouluttaa a Logistinen regressio malli, jossa on jopa 100 iteraatiota TF IDF -ominaisuuksilla.
- Se ennustaa testitiedon tunnetarrat ja tulostaa tarkkuuden ja yksityiskohtaisen luokitusraportin mallin arviointia varten.
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('nLogistic Regression Classification Report:n' classification_report(y_test logreg_pred))
Lähtö:
LähtöVaihe 11: Tee ennusteita esimerkkitviiteistä
- Tämä koodi ottaa kolme esimerkkitviittiä ja muuntaa ne TF IDF -ominaisuuksiksi käyttämällä samaa vektorointia.
- Sen jälkeen se ennustaa heidän tunteensa käyttämällä koulutettuja BernoulliNB SVM- ja Logistic Regression -malleja ja tulostaa kunkin luokittelijan tulokset.
- Missä 1 tarkoittaa positiivista ja 0 negatiivista.
sample_tweets = ['I love this!' 'I hate that!' 'It was okay not great.'] sample_vec = vectorizer.transform(sample_tweets) print('nSample Predictions:') print('BernoulliNB:' bnb.predict(sample_vec)) print('SVM:' svm.predict(sample_vec)) print('Logistic Regression:' logreg.predict(sample_vec))
Lähtö:
LähtöNäemme, että mallimme toimivat hyvin ja antavat samoja ennusteita jopa erilaisilla lähestymistavoilla.
Luo tietokilpailuVoit ladata lähdekoodin täältä - Twitterin mielipideanalyysi Pythonilla