案例背景
近期"AI换脸"诈骗事件频发,许多人在社交媒体上收到"好友"的借钱请求,结果发现是骗子利用AI技术伪造了好友的声音和面容。这让我们意识到网络社交中情感判断的重要性。本教程将基于微信好友签名数据,使用SnowNLP进行情感分析,并通过PyEcharts可视化结果,帮助用户识别好友签名中的情感倾向。
技术准备
-
Python 3.x
-
所需库:pyecharts, snownlp, csv
-
数据文件:微信好友信息CSV文件(包含签名列)
实现步骤
第一步:准备数据
假设我们有一个名为my_wechat_friends.csv
的文件,其中第6列(索引5)是好友的签名信息。
昵称,性别,地区,...,签名
张三,1,北京,...,生活很美好
李四,2,上海,...,最近心情不太好
...
第二步:情感分析代码实现
from pyecharts.charts import Pie
from pyecharts import options as opts
from collections import Counter
from snownlp import SnowNLP
import csv
def get_csv_data(filename, index):
"""读取CSV文件中指定列的数据"""
lst_data = []
with open(filename, 'r', encoding='utf-8') as fr:
reader = csv.reader(fr)
for row in reader:
if len(row) > index: # 确保索引有效
lst_data.append(row[index])
return lst_data
def analyze_mood(signature_list):
"""分析签名情感倾向"""
# 跳过标题行
signatures = signature_list[1:] if len(signature_list) > 0 else []
positive_count = 0
negative_count = 0
neutral_count = 0
for sig in signatures:
if not sig.strip(): # 跳过空签名
continue
try:
s = SnowNLP(sig)
sentiment = s.sentiments
# 情感分类标准
if sentiment > 0.7: # 积极
positive_count += 1
elif sentiment < 0.3: # 消极
negative_count += 1
else: # 中性
neutral_count += 1
except:
# 处理可能的分析错误
neutral_count += 1
return positive_count, negative_count, neutral_count
def create_emotion_chart(positive, negative, neutral):
"""创建情感分析饼图"""
emotion_types = ['积极签名', '消极签名', '中性签名']
values = [positive, negative, neutral]
# 计算百分比
total = sum(values)
percentages = [f'{v/total*100:.1f}%' for v in values]
# 创建饼图
pie = (
Pie()
.add(
"",
[list(z) for z in zip(emotion_types, values)],
radius=["30%", "75%"], # 环形饼图
center=["50%", "50%"],
rosetype="radius", # 通过半径显示数值大小
label_opts=opts.LabelOpts(
formatter="{b}: {c} ({d}%)", # 显示名称、数值和百分比
color="#333"
)
)
.set_global_opts(
title_opts=opts.TitleOpts(
title="微信好友签名情感分析",
subtitle=f"共分析 {total} 位好友签名 (结合近期AI诈骗热点)",
pos_left="center",
pos_top="20"
),
legend_opts=opts.LegendOpts(
orient="vertical",
pos_top="15%",
pos_left="2%"
),
tooltip_opts=opts.TooltipOpts(
trigger="item",
formatter="{a} <br/>{b}: {c} ({d}%)"
)
)
.set_colors(["#67C23A", "#F56C6C", "#909399"]) # 设置颜色: 绿-积极,红-消极,灰-中性
)
return pie
第三步:执行分析并生成可视化
# 主程序
if __name__ == "__main__":
# 1. 获取签名数据
signatures = get_csv_data("my_wechat_friends.csv", 5) # 假设签名在第6列
# 2. 分析情感
positive, negative, neutral = analyze_mood(signatures)
print(f"分析结果: 积极 {positive}, 消极 {negative}, 中性 {neutral}")
# 3. 创建图表
chart = create_emotion_chart(positive, negative, neutral)
# 4. 保存为HTML文件
chart.render("wechat_friends_emotion_analysis.html")
print("情感分析图表已生成: wechat_friends_emotion_analysis.html")
第四步:解读分析结果
结合近期AI诈骗热点,我们可以从情感分析中获得以下洞察:
-
积极签名占比高:如果好友签名大多积极向上,说明整体社交圈氛围健康。但仍需警惕,骗子可能伪装成正能量好友。
-
消极签名突增:如果发现某些好友签名突然变得消极,可能是账号被盗用的信号,需特别关注。
-
中性签名分析:中性签名中可能隐藏着广告或诈骗信息,需要进一步检查内容。
进阶功能:添加风险提示
我们可以修改代码,对消极签名进行关键词检测,添加诈骗风险提示:
def analyze_mood_with_risk(signature_list):
"""分析情感并检测风险关键词"""
# ...(前面的情感分析代码保持不变)...
risk_keywords = ['转账', '借钱', '紧急', '帮忙', '验证码', '点击']
risk_signatures = []
for sig in signatures:
if not sig.strip():
continue
# 检测风险关键词
if any(keyword in sig for keyword in risk_keywords):
risk_signatures.append(sig)
return positive_count, negative_count, neutral_count, risk_signatures
# 修改主程序
if __name__ == "__main__":
signatures = get_csv_data("my_wechat_friends.csv", 5)
positive, negative, neutral, risks = analyze_mood_with_risk(signatures)
print(f"发现 {len(risks)} 条可能的风险签名:")
for i, sig in enumerate(risks, 1):
print(f"{i}. {sig}")
# ...(其余代码保持不变)...
最终效果
生成的HTML文件将展示一个交互式饼图,显示好友签名的情感分布。用户可以:
-
悬停查看具体数值
-
点击图例筛选特定情感类别
-
结合右侧的图例直观理解分布情况
项目总结
通过本教程,我们实现了:
-
微信好友签名数据的自动收集
-
使用SnowNLP进行中文情感分析
-
通过PyEcharts生成专业可视化图表
-
结合近期热点添加风险检测功能
这个工具可以帮助用户:
-
了解社交圈的整体情感氛围
-
及时发现异常情感变化(可能是账号异常)
-
识别潜在的诈骗风险签名
-
在AI诈骗盛行的当下,提高社交安全意识