【实战】deepseek数据分类用户评论数据

在平时的工作中,我们会遇到数据分类的情况,比如将一些文本划分为各个标签。如果人工分类这块的工作量将是非常大,而且分类数据的准确性也不高。我们需要用到一些工具来实现。提高效率的同时也提高准确率。

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工具去除文字中的特殊符号。

安装依赖

python 复制代码
pip install pandas snownlp matplotlib openpyxl jinja2

代码实战

python 复制代码
import pandas as pd

from snownlp import SnowNLP

import matplotlib.pyplot as plt

from datetime import datetime



# 1. 数据加载

df = pd.read_excel("数据分析.xlsx", sheet_name="Sheet1")



# 2. 情绪分析函数(使用SnowNLP中文情感分析)

def classify_sentiment(text):

    score = SnowNLP(text).sentiments

    if 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支持)

python 复制代码
from transformers import pipeline

classifier = pipeline("text-classification", model="uer/roberta-base-finetuned-jd-binary-chinese")

实时监控集成

示例:Flask API端点

python 复制代码
from flask import Flask, request

app = Flask(__name__)



@app.route("/predict", methods=["POST"])

def predict():

    text = request.json["text"]

    return {"sentiment": classify_sentiment(text)}

动态阈值调整

基于历史数据自动校准阈值

python 复制代码
def auto_threshold(df):

    q_low = df["情绪强度"].quantile(0.3)

    q_high = df["情绪强度"].quantile(0.7)

    return q_low, q_high
相关推荐
CCC:CarCrazeCurator10 分钟前
从零开始构建一个编码智能体
人工智能·ai·transformer
小超同学你好18 分钟前
OpenClaw 中的 Skills 机制与复现
人工智能·语言模型·langchain
mCell6 小时前
关于 Openclaw,最近的一点思考。
人工智能·安全·aigc
qq_171538856 小时前
纳采问名定佳期:中国传统订婚文化的千年传承与地域风华
人工智能
zzb15806 小时前
RAG from Scratch-优化-query
java·数据库·人工智能·后端·spring·mybatis
uzong6 小时前
315晚会曝光“AI大模型被投毒”,让AI听话,GEO是什么,带给我们什么思考
人工智能
V搜xhliang02467 小时前
机器人建模(URDF)与仿真配置
大数据·人工智能·深度学习·机器学习·自然语言处理·机器人
房产中介行业研习社7 小时前
2026年3月哪些房源管理系统功能全
大数据·运维·人工智能
Shining05967 小时前
CUDA 编程系列(三)《内存模型与规约优化》
人工智能·学习·其他·学习方法·infinitensor
lisw057 小时前
基于图像的恶意软件分类方法!
人工智能·机器学习