案例5:基于社交媒体数据的网络舆情情感分析

一、引言

在当今数字化时代,社交媒体产生了海量的文本数据,这些数据反映了用户的各种情感和观点。对社交媒体数据进行情感分析,能够帮助企业、政府等机构了解公众的态度和情绪,从而做出更明智的决策。本文将使用 Python 结合pandasnltksklearntensorflow等库,对社交媒体数据进行清洗、特征提取,并分别使用随机森林分类器和 LSTM 模型进行情感分析。

二、代码实现

2.1 导入必要的库和设置字体

import pandas as pd
import re
import nltk
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.preprocessing import LabelEncoder
import matplotlib
# 
# 指定默认字体
matplotlib.rcParams['font.family'] = 'SimHei'  # 或其他支持中文的字体
matplotlib.rcParams['axes.unicode_minus'] = False  # 解决负号'-'显示为方块的问题
# 下载 NLP 资源
nltk.download('stopwords')
nltk.download('wordnet')

导入了多个用于数据处理、文本处理、可视化和机器学习的库。设置了matplotlib的字体和负号显示,同时下载了nltk所需的自然语言处理资源。

2.2 数据读取与预处理

# 读取 CSV 文件(无列名)
df = pd.read_csv(r'E:\Code\untitled1\机器学习基础训练营\机器学习百例\案例37:基于社交媒体数据的网络舆情分析(情感分析)\train.csv', encoding='latin-1', header=None)

# 手动添加列名
df.columns = ["sentiment", "id", "date", "query", "user", "text"]

# 只保留有用的两列(sentiment 和 text)
df = df[['sentiment', 'text']]

# 显示前几行数据
print(df.head())

# 数据清洗(去除特殊字符、链接、@用户)
def clean_text(text):
    text = text.lower()  # 转换为小写
    text = re.sub(r'http\S+', '', text)  # 移除 URL
    text = re.sub(r'@\w+', '', text)  # 移除 @用户
    text = re.sub(r'[^a-zA-Z\s]', '', text)  # 仅保留字母
    return text

df['cleaned_text'] = df['text'].apply(clean_text)

使用pandas读取 CSV 文件,由于文件没有列名,手动添加了列名。只保留了sentiment(情感标签)和text(文本内容)两列。定义了clean_text函数对文本进行清洗,包括转换为小写、移除 URL、@用户和非字母字符,并将清洗后的文本存储在新列cleaned_text中。

2.3 可视化情感分布

# 可视化情感分布
sns.countplot(x=df['sentiment'], palette="viridis")
plt.title("情感分布")
plt.show()

使用seaborncountplot函数绘制情感标签的分布直方图,直观地展示不同情感的数量分布情况。

2.4 特征提取与标签转换

# 使用 TF-IDF 向量化文本
vectorizer = TfidfVectorizer(max_features=5000, stop_words='english')
X = vectorizer.fit_transform(df['cleaned_text'])

# 转换标签
label_encoder = LabelEncoder()
y = label_encoder.fit_transform(df['sentiment'])

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=42)

使用TfidfVectorizer将清洗后的文本转换为 TF - IDF 特征矩阵X,设置最大特征数为 5000 并去除英文停用词。使用LabelEncoder将情感标签进行编码,得到标签向量y。将数据集按 90:10 的比例划分为训练集和测试集。

2.5 随机森林分类器训练与评估

from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, classification_report

# 训练随机森林分类器
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)

# 预测结果
y_pred = model.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"模型准确率: {accuracy:.4f}")

创建一个随机森林分类器对象,设置树的数量为 100,并使用训练集数据进行训练。对测试集进行预测,计算预测结果的准确率。

2.6 LSTM 模型训练与评估

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, LSTM, Dense, SpatialDropout1D
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences

# 设定超参数
max_words = 5000
max_len = 100
embedding_dim = 128

# 令 Tokenizer 适配文本数据
tokenizer = Tokenizer(num_words=max_words, oov_token="<OOV>")
tokenizer.fit_on_texts(df['cleaned_text'])
X_seq = tokenizer.texts_to_sequences(df['cleaned_text'])
X_pad = pad_sequences(X_seq, maxlen=max_len, padding='post')

# 训练/测试集划分
X_train, X_test, y_train, y_test = train_test_split(X_pad, y, test_size=0.2, random_state=42)

# 构建 LSTM 模型
model = Sequential([
    Embedding(input_dim=max_words, output_dim=embedding_dim, input_length=max_len),
    SpatialDropout1D(0.2),
    LSTM(128, dropout=0.2, recurrent_dropout=0.2),
    Dense(1, activation='sigmoid')
])

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

# 训练模型
model.fit(X_train, y_train, epochs=100, batch_size=16, validation_data=(X_test, y_test))

# 评估模型
loss, acc = model.evaluate(X_test, y_test)
print(f"LSTM 模型准确率: {acc:.4f}")

导入tensorflow相关库,设定了一些超参数,如最大词汇数、最大序列长度和嵌入维度。使用Tokenizer将文本转换为序列,再使用pad_sequences对序列进行填充,使其长度一致。将数据集按 80:20 的比例重新划分为训练集和测试集。构建了一个包含嵌入层、空间丢弃层、LSTM 层和全连接层的 LSTM 模型,使用二元交叉熵损失函数和adam优化器进行编译。训练模型并评估其准确率。

三、结论

通过上述步骤,我们完成了从社交媒体数据的读取、清洗、特征提取到使用随机森林分类器和 LSTM 模型进行情感分析的整个流程。数据清洗能够提高数据质量,TF - IDF 特征提取和词序列转换将文本数据转换为适合模型处理的形式。随机森林分类器和 LSTM 模型分别对情感进行分类预测,并通过准确率评估模型性能。在实际应用中,可以根据具体需求调整模型的超参数,尝试其他特征提取方法或模型结构,以提高情感分析的准确性。同时,还可以结合更多的特征,如文本长度、标点符号使用等,来丰富模型的输入信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值