Analiza nastrojów na Twitterze to proces wykorzystujący Pythona do automatycznego zrozumienia emocji i opinii wyrażanych w tweetach. Analizując tekst, możemy sklasyfikować tweety jako pozytywne, negatywne lub neutralne. Pomaga to firmom i badaczom śledzić w czasie rzeczywistym reputację marki nastrojów społecznych lub reakcje na wydarzenia. Biblioteki Pythona, takie jak TextBlob Tweepy i NLTK, ułatwiają zbieranie tweetów, przetwarzanie tekstu i wydajne przeprowadzanie analizy nastrojów. 
W jaki sposób analiza nastrojów na Twitterze jest przydatna?
- Analiza nastrojów na Twitterze jest ważna, ponieważ pomaga ludziom i firmom zrozumieć w czasie rzeczywistym, co myśli opinia publiczna.
- Codziennie publikowane są miliony tweetów, w których wyrażane są opinie na temat wydarzeń związanych z produktami marek lub kwestii społecznych. Analizując ten ogromny strumień danych, firmy mogą mierzyć trendy w zakresie zadowolenia klientów, wcześnie wykrywać trendy i szybko reagować na negatywne opinie i podejmować lepsze decyzje w oparciu o rzeczywiste odczucia klientów.
- Monitorowanie nastrojów społecznych podczas kryzysów wyborczych lub dużych wydarzeń jest również przydatne dla badaczy i rządów, ponieważ pozwala przekształcić nieprzetworzone tweety w cenne spostrzeżenia.
Wdrażanie krok po kroku
Krok 1: Zainstaluj niezbędne biblioteki
Ten blok instaluje i importuje wymagane biblioteki. Używa pandy do ładowania i obsługi danych TfidfVectorizer aby zamienić tekst na liczby i scikit naucz się trenować model.
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
Krok 2: Załaduj zbiór danych
- Tutaj ładujemy Zbiór danych Sentiment140 ze spakowanego pliku CSV możesz go pobrać z Kaggle.
- Zachowujemy tylko polaryzację, a kolumny tekstu tweeta zmieniają ich nazwy dla przejrzystości i drukują kilka pierwszych wierszy w celu sprawdzenia danych.
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())
Wyjście:
WyjścieKrok 3: Zachowaj tylko pozytywne i negatywne uczucia
- Tutaj usuwamy neutralne tweety, w których polaryzacja wynosi 2, odwzorowując etykiety, więc 0 pozostaje ujemne, a 4 staje się 1 dla dodatniego.
- Następnie drukujemy, ile pozytywnych i negatywnych tweetów pozostało w danych.
df = df[df.polarity != 2] df['polarity'] = df['polarity'].map({0: 0 4: 1}) print(df['polarity'].value_counts())
Wyjście:
WyjścieKrok 4: Wyczyść tweety
- Tutaj definiujemy prostą funkcję konwertującą cały tekst na małe litery, aby zachować spójność, stosując ją do każdego tweeta w zbiorze danych.
- Następnie pokazuje oryginalne i oczyszczone wersje pierwszych kilku tweetów.
def clean_text(text): return text.lower() df['clean_text'] = df['text'].apply(clean_text) print(df[['text' 'clean_text']].head())
Wyjście:
WyjścieKrok 5: Podział testu pociągu
- Ten kod dzieli kolumny clean_text i polarity na zestawy szkoleniowe i testowe przy użyciu podziału 80/20.
- random_state=42 zapewnia powtarzalność.
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))
Wyjście:
Rozmiar pociągu: 1280000
Rozmiar testowy: 320000
Krok 6: Wykonaj wektoryzację
- Ten kod tworzy wektoryzator TF IDF, który konwertuje tekst na cechy numeryczne przy użyciu unigramów i bigramów ograniczonych do 5000 funkcji.
- Dopasowuje i przekształca dane szkoleniowe oraz przekształca dane testowe, a następnie drukuje kształty powstałych macierzy TF IDF.
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)
Wyjście:
Kształt TF-IDF (pociąg): (1280000 5000)
Kształt TF-IDF (test): (320000 5000)
Krok 7: Wytrenuj model Naive Bayesa Bernoulliego
- Tutaj trenujemy A Bernoulli Naiwny Bayes klasyfikator cech TF IDF z danych szkoleniowych.
- Przewiduje nastawienie do danych testowych, a następnie drukuje dokładność i szczegółowy raport klasyfikacyjny.
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))
Wyjście:
WyjścieKrok 9: Wytrenuj model maszyny wektorów nośnych (SVM).
- Ten kod uczy a Maszyna wektorów nośnych (SVM) z maksymalnie 1000 iteracjami funkcji TF IDF.
- Przewiduje etykiety testowe, a następnie drukuje dokładność i szczegółowy raport klasyfikacyjny pokazujący, jak dobrze działał 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('nSVM Classification Report:n' classification_report(y_test svm_pred))
Wyjście:
plik odczytu basha
WyjścieKrok 10: Wytrenuj model regresji logistycznej
- Ten kod uczy a Regresja logistyczna model z maksymalnie 100 iteracjami funkcji TF IDF.
- Przewiduje etykiety nastrojów dla danych testowych i drukuje raport dotyczący dokładności i szczegółowej klasyfikacji na potrzeby oceny 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('nLogistic Regression Classification Report:n' classification_report(y_test logreg_pred))
Wyjście:
WyjścieKrok 11: Przewiduj przykładowe tweety
- Ten kod pobiera trzy przykładowe tweety i przekształca je w funkcje TF IDF przy użyciu tego samego wektoryzatora.
- Następnie przewiduje ich nastroje, korzystając z wyszkolonych modeli BernoulliNB SVM i regresji logistycznej, a następnie drukuje wyniki dla każdego klasyfikatora.
- Gdzie 1 oznacza wartość dodatnią, a 0 oznacza wartość ujemną.
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))
Wyjście:
WyjścieWidzimy, że nasze modele działają dobrze i dają te same przewidywania, nawet przy różnych podejściach.
Utwórz quizMożesz pobrać kod źródłowy stąd- Analiza nastrojów na Twitterze przy użyciu języka Python