可视化:气泡图 / 主题词云
Visualize: Bubble Chart & Topic Wordclouds
LDA 跑出来的主题是"静态"的 — 只告诉你这个语料库在讲什么。老板们更想知道的是:主题怎么分布、哪些主题火、每个主题具体讲啥。这一节全部搞定。
1. 主题-词分布表(必看)
import pandas as pd
rows = []
for tid in range(lda.num_topics):
for word, prob in lda.show_topic(tid, topn=15):
rows.append({'主题': f'T{tid}', '词': word, '概率': f'{prob:.4f}'})
pd.DataFrame(rows).to_excel('topic_words.xlsx', index=False)
print('已导出 topic_words.xlsx')
2. 主题-文档分布:每条评论属于哪个主题
def get_dominant_topic(lda, bow):
topics = lda.get_document_topics(bow, minimum_probability=0)
return max(topics, key=lambda x: x[1])[0]
df['topic'] = df['tokens'].apply(
lambda t: get_dominant_topic(lda, dictionary.doc2bow(t))
)
df.to_csv('comments_with_topic.csv', index=False)
print(df['topic'].value_counts().sort_index())
# T0 12345
# T1 11290
# T2 9876
3. 主题气泡图(pyLDAvis)
import pyLDAvis
import pyLDAvis.gensim_models
vis = pyLDAvis.gensim_models.prepare(lda, corpus, dictionary)
pyLDAvis.save_html(vis, 'lda_bubble.html')
# 在浏览器打开 lda_bubble.html 看交互式气泡图
气泡图怎么看:
• 气泡大小 = 主题在语料中的占比
• 气泡距离 = 主题之间的相似度(近=相似)
• 鼠标悬停看主题 Top 30 词 + 频率
• 右侧滑块调 λ:λ 小看"主题专属词",λ 大看"高频词"
• 气泡大小 = 主题在语料中的占比
• 气泡距离 = 主题之间的相似度(近=相似)
• 鼠标悬停看主题 Top 30 词 + 频率
• 右侧滑块调 λ:λ 小看"主题专属词",λ 大看"高频词"
4. 每个主题画一个词云
from wordcloud import WordCloud
import matplotlib.pyplot as plt
fig, axes = plt.subplots(2, 5, figsize=(20, 8)) # 10 个主题
axes = axes.flatten()
for i in range(10):
topic_words = dict(lda.show_topic(i, topn=30))
wc = WordCloud(
width=400, height=300,
font_path='/System/Library/Fonts/PingFang.ttc',
background_color='white',
).generate_from_frequencies(topic_words)
axes[i].imshow(wc, interpolation='bilinear')
axes[i].set_title(f'主题 {i}', fontsize=12)
axes[i].axis('off')
plt.tight_layout()
plt.savefig('topic_wordclouds.png', dpi=150, bbox_inches='tight')
5. 主题强度随时间变化(进阶)
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('comments_with_topic.csv')
df['date'] = pd.to_datetime(df['date'])
# 按月统计每个主题的占比
monthly = df.groupby([df['date'].dt.to_period('M'), 'topic']).size().unstack(fill_value=0)
monthly_pct = monthly.div(monthly.sum(axis=1), axis=0)
fig, ax = plt.subplots(figsize=(14, 6))
monthly_pct.plot.area(ax=ax, alpha=0.7, colormap='tab20')
ax.set_title('主题占比随时间变化')
ax.set_xlabel('月份')
ax.set_ylabel('占比')
ax.legend(title='主题', bbox_to_anchor=(1.02, 1))
plt.tight_layout()
plt.savefig('topic_evolution.png', dpi=150)
实战洞察:电商评论里"物流"主题春节前一定暴涨,"健康"主题疫情期一定暴涨 — 一眼看出"什么火什么冷"。
我们的 LDA 主题分析软件把这 5 张图全包了,5 万条评论 1 键出图。
我们的 LDA 主题分析软件把这 5 张图全包了,5 万条评论 1 键出图。
小结:10 章 30 节核心要点
- 第 1 章:字符串、列表字典、文件 IO — 文本分析的三件套
- 第 2 章:关键词词典 → SnowNLP → 双引擎 — 准确率 60% → 92%
- 第 3 章:词云基础 → 自定义形状 → 等大文字 — 论文/抖音/营销全覆盖
- 第 4 章:预处理 → 训练 LDA → 气泡图/词云 — 主题分析完整流水线
- 第 5 章:jieba + Counter → 指定关键词 → 繁简体 — 词频分析 3 步走
- 第 6 章:共现矩阵 → 力导向网络图 → 中心度 — 10 万条评论的隐藏关系
- 第 7 章:Word2Vec 训练 → 语义类比 → 词嵌入散点图 — 语义分析入门
- 第 8 章:正则去噪 → 去重去水军 → 批量改名 — 工程化最后一公里
- 第 9 章:Requests → Selenium 反检测 → 3 层抓取架构 — 数据采集的标准流水线
- 第 10 章:多线程下载 → 关键词分类 → 4K 优先 — 图片采集 1 键入库
学完这套教程,你已经能独立完成一个完整的文本分析项目。想偷懒?用我们的淘宝软件,导入数据一键出图。