当前位置: 首页 > article >正文

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

安装依赖

pip install pandas snownlp matplotlib openpyxl jinja2

代码实战

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

from transformers import pipeline

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

实时监控集成

# 示例:Flask API端点

from flask import Flask, request

app = 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


http://www.kler.cn/a/598001.html

相关文章:

  • ADC噪声全面分析 -04- 有效噪声带宽简介
  • Tomcat常见漏洞攻略
  • 分布式系统设计陷阱,白话CAP理论
  • 【嵌入式学习2】位运算 - 控制语句
  • 游戏引擎学习第175天
  • 前端 -- 计算机图形学基础:光与三角形面(Mesh)求交
  • gonet开源游戏服务器环境配置
  • MySQL颠覆版系列————MySQL新特性(开启数据库的新纪元)上篇
  • 1. 页面级一多开发:
  • Unity摄像机基本操作详解:移动、旋转与缩放
  • Java处理Markdown格式内容转换为Word文档
  • JavaScript 性能优化实战
  • 计算机网络的分类及其性能指标
  • Redis简单介绍和安装
  • Centos7搭建Zabbix4.x监控HCL模拟网络设备:zabbix-server搭建及监控基础02
  • 系统转换、系统维护、净室软件工程、构件软件工程(高软51)
  • c++有n个范围是-1e9~1e9的数,去统计每个数的个数?
  • 位示图大小的计算
  • 【递归、搜索和回溯算法】专题三 :穷举VS暴搜VS深搜VS回溯VS剪枝
  • 【ROS实战】02-ROS架构介绍