从CSV推文数据中提取Top10个@提及词及频次并完成柱状图可视化
基于推文数据集的@提及账号Top10统计与可视化实现
依赖库准备
需要提前安装用到的第三方库,执行安装命令:pip install pandas matplotlib
导入所需库:
import pandas as pd import matplotlib.pyplot as plt
数据集加载
读取本地CSV文件,确保读取后的数据帧中存在名为Tweets的推文文本列:
# 替换为你本地CSV文件的实际路径 df = pd.read_csv("tweets_dataset.csv") # 检查列名与数据完整性 print(df['Tweets'].head())
批量提取所有@提及账号
通过正则匹配所有推文中带@前缀的账号,核心规则匹配@后紧跟的账号字符:
# 正则规则:匹配@后连续的字母、数字、下划线(适配主流社交平台账号命名规则) mention_regex = r'@([A-Za-z0-9_]+)' # 逐行提取所有匹配到的账号,拆分嵌套列表、过滤空值 all_mentions = ( df['Tweets'] .dropna() # 过滤空推文 .str.findall(mention_regex) # 匹配所有@提及 .explode() # 将每行的多提及拆分为独立行 .dropna() # 过滤无匹配结果的空值 )
如果数据集里的账号包含中文、特殊符号,可将正则替换为更通用的规则:r'@([^\s,.!?()]+)',即匹配@后所有连续的非空白、非标点字符。
频次统计取Top10
直接对提取到的所有账号做计数排序,取前10条结果:
# 按出现次数降序排序,取前10个 top10_mentions = all_mentions.value_counts().head(10) # 打印统计结果 print(top10_mentions)
输出结果的索引即为账号名,对应的值就是该账号的累计出现次数。
柱状图可视化
# 解决matplotlib中文乱码问题 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False # 创建画布 plt.figure(figsize=(12, 6)) # 绘制柱状图 top10_mentions.plot(kind='bar', color='#2563eb', width=0.7) # 配置图表元素 plt.title('数据集内出现频次Top10的@提及账号', fontsize=14, pad=20) plt.xlabel('提及的社交账号', fontsize=12) plt.ylabel('累计出现次数', fontsize=12) # 旋转x轴标签避免文字重叠 plt.xticks(rotation=45, ha='right') # 为每个柱子添加顶部数值标注 for bar_idx, count in enumerate(top10_mentions.values): plt.text(bar_idx, count + 0.3, str(count), ha='center', fontsize=10) # 自动调整布局避免文字裁切 plt.tight_layout() # 展示图表 plt.show()
常见问题排查
- 如果提取到的账号列表为空:先检查正则规则是否匹配数据集内的@写法,注意区分全角@和半角@的差异,必要时可以在正则中加入全角@的匹配分支
- 如果需要过滤特定的无效账号(比如数据集所属的官方账号),可以在统计前加筛选步骤:
all_mentions = all_mentions[all_mentions != "需要排除的账号名"] - 如果柱状图文字出现重叠,可以适当增大figsize的尺寸,或者调整x轴标签的旋转角度
内容的提问来源于stack exchange,提问作者Maha Al
相关产品推荐
相关产品推荐

