在平时的工作中,我们会遇到数据分类的情况,比如将一些文本划分为各个标签。如果人工分类这块的工作量将是非常大,而且分类数据的准确性也不高。我们需要用到一些工具来实现。提高效率的同时也提高准确率。
1.示例数据
用户ID | 时间戳 | 评论场景 | 评论内容 |
U001 | 2023/10/1 9:05 | 电商购物 | "刚收到快递,包装完好,实物比图片还漂亮!" |
U001 | 2023/10/3 14:30 | 电商购物 | "用了两天发现电池续航很差,和宣传不符,失望。" |
U001 | 2023/10/5 11:15 | 客服沟通 | "客服很快解决了问题,补偿了优惠券,态度点赞!" |
U002 | 2023/10/2 18:20 | 社交媒体 | "今天和朋友聚餐,餐厅氛围超棒,但菜品有点咸。" |
U003 | 2023/10/4 10:00 | 旅行预订 | "航班延误了3小时,机场服务混乱,体验极差!" |
U003 | 2023/10/4 15:45 | 旅行预订 | "酒店免费升级了海景房,意外惊喜!" |
2.数据分析
数据清洗
通过python工具去除文字中的特殊符号。
安装依赖
pip install pandas snownlp matplotlib openpyxl jinja2
代码实战
import pandas as pdfrom snownlp import SnowNLPimport matplotlib.pyplot as pltfrom datetime import datetime# 1. 数据加载df = pd.read_excel("数据分析.xlsx", sheet_name="Sheet1”)# 2. 情绪分析函数(使用SnowNLP中文情感分析)def classify_sentiment(text):score = SnowNLP(text).sentimentsif score > 0.6:return ("积极", score)elif score < 0.4:return ("消极", score)else:return ("中性", score)# 应用情绪分类df[["情绪标签", "情绪强度"]] = df["评论内容"].apply(lambda x: pd.Series(classify_sentiment(x)))# 3. 生成统计报告report = df.groupby("情绪标签").agg(评论数量=("用户ID", "count"),用户数=("用户ID", pd.Series.nunique),平均情绪强度=("情绪强度", "mean")).reset_index()# 4. 用户情绪轨迹分析user_timelines = []for uid, group in df.groupby("用户ID"):timeline = group.sort_values("时间戳").reset_index(drop=True)user_timelines.append({"用户ID": uid,"情绪变化序列": " → ".join(timeline["情绪标签"]),"关键转折点": timeline.iloc[[0, -1]][["时间戳", "情绪标签"]].to_dict("records")})# 5. 可视化生成# 设置matplotlib的字体配置plt.rcParams['axes.unicode_minus'] = False # 解决负号 '-' 显示为方块的问题plt.rcParams['font.family'] = 'Kaiti SC' # 可以替换为其他字体plt.figure(figsize=(12, 6))# 情绪分布饼图ax1 = plt.subplot(121)df["情绪标签"].value_counts().plot.pie(autopct="%1.1f%%", ax=ax1)ax1.set_title("情绪分布比例")# 时间线示例(U001)ax2 = plt.subplot(122)u001 = df[df["用户ID"] == "U001"].sort_values("时间戳")ax2.plot(u001["时间戳"], u001["情绪强度"], marker="o", linestyle="--")ax2.set_title("U001情绪波动趋势")plt.xticks(rotation=45)plt.tight_layout()plt.savefig("sentiment_analysis.png", dpi=300)# 6. 导出报告with pd.ExcelWriter("情绪分析报告.xlsx") as writer:df.to_excel(writer, sheet_name="原始数据+情绪标注", index=False)pd.DataFrame(report).to_excel(writer, sheet_name="统计摘要", index=False)pd.DataFrame(user_timelines).to_excel(writer, sheet_name="用户轨迹", index=False)print("分析完成!生成文件:情绪分析报告.xlsx 和 sentiment_analysis.png")
生成文件
原始数据+情绪标注
统计摘要
用户分析
分析饼图
效率提升
目前模型如果在大数据下会比较慢,需要更换模型
# 使用HuggingFace中文模型(需GPU支持)
from transformers import pipelineclassifier = pipeline("text-classification", model="uer/roberta-base-finetuned-jd-binary-chinese")
实时监控集成
# 示例:Flask API端点
from flask import Flask, requestapp = Flask(__name__)@app.route("/predict", methods=["POST"])def predict():text = request.json["text"]return {"sentiment": classify_sentiment(text)}
动态阈值调整
# 基于历史数据自动校准阈值
def auto_threshold(df):q_low = df["情绪强度"].quantile(0.3)q_high = df["情绪强度"].quantile(0.7)return q_low, q_high