Analiza nastrojów na Twitterze przy użyciu języka Python
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.
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: 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ście Krok 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ście Krok 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ście Krok 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 = ( 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 )
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 ( ' n BernoulliNB Classification Report: n ' classification_report ( y_test bnb_pred ))
Wyjście:
Wyjście Krok 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 ( ' n SVM Classification Report: n ' classification_report ( y_test svm_pred ))
Wyjście:
Wyjście Krok 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 ( ' n Logistic Regression Classification Report: n ' classification_report ( y_test logreg_pred ))
Wyjście:
Wyjście Krok 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 ( ' n Sample Predictions:' ) print ( 'BernoulliNB:' bnb . predict ( sample_vec )) print ( 'SVM:' svm . predict ( sample_vec )) print ( 'Logistic Regression:' logreg . predict ( sample_vec ))
Wyjście:
Wyjście Widzimy, ż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