【Python数据分析五十个小案例】使用自然语言处理(NLP)技术分析 Twitter 情感

时间:2024-12-05 18:45:37

在这里插入图片描述

博客主页:小馒头学python

本文专栏: Python爬虫五十个小案例

专栏简介:分享五十个Python爬虫小案例

在这里插入图片描述

项目简介

什么是情感分析

情感分析(Sentiment Analysis)是文本分析的一部分,旨在识别文本中传递的情感信息,例如正面、负面或中立情绪。

为什么选择 Twitter 数据

数据丰富:Twitter 上每天产生数百万条推文,内容多样。
即时性:适合实时分析。
公开可用:提供 API 可轻松访问。

NLP 在情感分析中的作用

通过 NLP 技术,可以将非结构化文本数据转化为结构化信息,提取情绪、关键词等有价值的内容。

项目准备

环境配置

  • 操作系统:Windows/Linux/MacOS
  • Python:版本 3.8+
  • 库依赖:tweepy,nltk,scikit-learn,pandas,matplotlib,seaborn,TensorFlow
pip install tweepy nltk scikit-learn pandas matplotlib seaborn tensorflow

必备库介绍

  • tweepy:用于访问 Twitter API
  • nltk:提供 NLP 工具,如分词、停用词处理
  • scikit-learn:模型训练与评估
  • TensorFlow:深度学习框架

数据获取与预处理

获取 Twitter 数据

import tweepy

# 设置 API 密钥
api_key = "YOUR_API_KEY"
api_secret = "YOUR_API_SECRET"
access_token = "YOUR_ACCESS_TOKEN"
access_token_secret = "YOUR_ACCESS_TOKEN_SECRET"

# 连接 Twitter API
auth = tweepy.OAuthHandler(api_key, api_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)

# 获取推文数据
tweets = api.search_tweets(q="AI", lang="en", count=100)
tweet_texts = [tweet.text for tweet in tweets]

print(tweet_texts[:5])  # 打印前5条推文

可视化

数据分布分析

import pandas as pd
from collections import Counter

# 加载推文数据
df = pd.DataFrame(tweet_texts, columns=["Tweet"])
df['Length'] = df['Tweet'].apply(len)

# 分析推文长度分布
print(df['Length'].describe())

数据可视化示例

import matplotlib.pyplot as plt
import seaborn as sns

# 可视化推文长度分布
sns.histplot(df['Length'], bins=20, kde=True)
plt.title("Tweet Length Distribution")
plt.xlabel("Length")
plt.ylabel("Frequency")
plt.show()

自然语言处理管道

数据清洗与预处理

import re
import nltk
from nltk.corpus import stopwords

nltk.download('stopwords')
stop_words = set(stopwords.words('english'))

def clean_text(text):
    text = re.sub(r"http\S+", "", text)  # 移除URL
    text = re.sub(r"@\w+", "", text)    # 移除@用户
    text = re.sub(r"#", "", text)       # 移除话题符号
    text = re.sub(r"[^a-zA-Z]", " ", text)  # 保留字母
    text = text.lower()                # 转为小写
    text = " ".join(word for word in text.split() if word not in stop_words)  # 移除停用词
    return text

df['Cleaned_Tweet'] = df['Tweet'].apply(clean_text)

词向量化

from sklearn.feature_extraction.text import TfidfVectorizer

vectorizer = TfidfVectorizer(max_features=1000)
X = vectorizer.fit_transform(df['Cleaned_Tweet']).toarray()

模型训练与评估

模型选择

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report

# 模拟情感标签
import numpy as np
df['Sentiment'] = np.random.choice(['Positive', 'Negative', 'Neutral'], len(df))

# 数据拆分
X_train, X_test, y_train, y_test = train_test_split(X, df['Sentiment'], test_size=0.2, random_state=42)

# 训练模型
model = RandomForestClassifier()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)

# 评估模型
print(classification_report(y_test, y_pred))

案例展示与结果分析

情感分类结果可视化

from sklearn.metrics import confusion_matrix
import seaborn as sns

cm = confusion_matrix(y_test, y_pred, labels=['Positive', 'Negative', 'Neutral'])
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=['Positive', 'Negative', 'Neutral'], yticklabels=['Positive', 'Negative', 'Neutral'])
plt.title("Confusion Matrix")
plt.xlabel("Predicted")
plt.ylabel("True")
plt.show()

示例 Tweet 的情感预测

sample_tweets = ["I love this product!", "This is the worst service ever."]
sample_cleaned = [clean_text(tweet) for tweet in sample_tweets]
sample_vectorized = vectorizer.transform(sample_cleaned).toarray()

print(model.predict(sample_vectorized))

总结

社交媒体情感分析利用自然语言处理(NLP)技术对平台上的用户文本进行情感分类,旨在识别推文或评论中的情绪倾向,如正面、负面或中立。这项技术在商业、舆情监控和社会研究等领域有广泛应用。例如,通过分析 Twitter 上的推文,企业可以了解用户对其品牌或产品的情感反应,从而优化市场营销策略。情感分析过程通常包括数据采集、文本清洗、特征提取以及模型训练等步骤,而现代深度学习模型(如 LSTM 和 BERT)在准确性和情感分类能力上表现尤为出色,感兴趣的同学可以自行去看看

若感兴趣可以访问并订阅我的专栏:Python数据分析五十个小案例

请添加图片描述