Аналіз настроїв у Твіттері — це процес використання Python для автоматичного розуміння емоцій або думок, висловлених у твітах. Аналізуючи текст, ми можемо класифікувати твіти як позитивні, негативні або нейтральні. Це допомагає компаніям і дослідникам відстежувати суспільний настрій, репутацію бренду або реакцію на події в реальному часі. Бібліотеки Python, такі як TextBlob Tweepy та NLTK, спрощують збір твітів, обробку тексту та ефективний аналіз настроїв. 
Чим корисний аналіз настроїв у Twitter?
- Аналіз настроїв у Twitter важливий, оскільки він допомагає людям і компаніям зрозуміти, що думає громадськість у реальному часі.
- Щодня публікуються мільйони твітів, у яких діляться думками про події брендів, продукти чи соціальні проблеми. Аналізуючи цей величезний потік даних, компанії можуть на ранній стадії вимірювати тенденції задоволеності клієнтів, швидко реагувати на негативні відгуки та приймати кращі рішення на основі того, як люди насправді почуваються.
- Дослідникам і урядам також корисно відстежувати суспільні настрої під час виборчих криз або великих подій, оскільки це перетворює необроблені твіти на цінну інформацію.
Покрокове впровадження
Крок 1: Встановіть необхідні бібліотеки
Цей блок встановлює та імпортує необхідні бібліотеки. Це використовує панди для завантаження та обробки даних TfidfVectorizer перетворити текст на числа та scikit навчитися тренувати модель.
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
Крок 2: Завантажте набір даних
- Тут ми завантажуємо Набір даних Sentiment140 із заархівованого файлу CSV, який ви можете завантажити з Kaggle.
- Ми зберігаємо лише стовпці полярності та тексту твітів, перейменовуємо їх для ясності та друкуємо перші кілька рядків, щоб перевірити дані.
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())
Вихід:
ВихідКрок 3: Зберігайте лише позитивні та негативні настрої
- Тут ми видаляємо нейтральні твіти, де полярність 2, відображає мітки, тому 0 залишається негативним, а 4 стає 1 для позитивного.
- Потім ми друкуємо, скільки позитивних і негативних твітів залишилося в даних.
df = df[df.polarity != 2] df['polarity'] = df['polarity'].map({0: 0 4: 1}) print(df['polarity'].value_counts())
Вихід:
ВихідКрок 4. Очистіть твіти
- Тут ми визначаємо просту функцію для перетворення всього тексту на малі літери для узгодженості, застосовуючи її до кожного твіту в наборі даних.
- Потім показує оригінальні та очищені версії перших кількох твітів.
def clean_text(text): return text.lower() df['clean_text'] = df['text'].apply(clean_text) print(df[['text' 'clean_text']].head())
Вихід:
ВихідКрок 5: Тренуйте тестовий спліт
- Цей код розділяє стовпці clean_text і polarity на навчальні та тестові набори за допомогою розподілу 80/20.
- random_state=42 забезпечує відтворюваність.
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))
Вихід:
Розмір поїзда: 1280000
Розмір тесту: 320000
Крок 6: Виконайте векторизацію
- Цей код створює векторизатор TF IDF, який перетворює текст у числові функції за допомогою уніграм і біграм, обмежених 5000 функціями.
- Він підбирає та перетворює навчальні дані та перетворює тестові дані, а потім друкує форми отриманих матриць 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)
Вихід:
Форма TF-IDF (поїзд): (1280000 5000)
Форма TF-IDF (тест): (320000 5000)
Крок 7: Навчіть наївну байєсовську модель Бернуллі
- Тут ми тренуємо а Бернуллі Наївний Байєс класифікатор на особливості TF IDF з навчальних даних.
- Він передбачає настрої для даних тесту, а потім друкує точність і детальний звіт про класифікацію.
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))
Вихід:
ВихідКрок 9: модель Train Support Vector Machine (SVM).
- Цей код навчає a Машина підтримки векторів (SVM) з максимум 1000 ітерацій для функцій TF IDF.
- Він прогнозує тестові етикетки, а потім друкує точність і докладний звіт про класифікацію, що показує, наскільки добре працює 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))
Вихід:
форматування рядків
ВихідКрок 10: Навчіть модель логістичної регресії
- Цей код навчає a Логістична регресія модель із до 100 ітераціями функцій TF IDF.
- Він передбачає мітки настрою для даних тесту та друкує звіт про точність і детальну класифікацію для оцінки моделі.
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))
Вихід:
ВихідКрок 11: Зробіть прогнози на зразках твітів
- Цей код бере три зразки твітів і перетворює їх у функції TF IDF за допомогою того самого векторизатора.
- Потім він прогнозує їхні настрої за допомогою навчених моделей BernoulliNB SVM і логістичної регресії та друкує результати для кожного класифікатора.
- Де 1 означає позитивне, а 0 — негативне.
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))
Вихід:
ВихідМи бачимо, що наші моделі добре працюють і дають однакові прогнози навіть із різними підходами.
Створіть вікторинуВи можете завантажити вихідний код тут- Аналіз настроїв Twitter за допомогою Python