别再只画词云了!用Python+Pyecharts玩转《三国演义》多维可视化(人物出场、章节字数一网打尽)
·
三国演义文本挖掘实战:从词云到多维交互式分析
当提到文本可视化,大多数人的第一反应往往是词云——这种色彩斑斓但信息密度低的图表早已成为入门级分析的代名词。本文将带您突破传统词云的局限,使用Python构建一个完整的《三国演义》分析仪表盘,涵盖人物社交网络、章节结构、高频人物统计等维度,并通过Pyecharts实现交互式可视化。
1. 文本分析的基础工程
文本分析的第一步永远是数据清洗与结构化处理。《三国演义》作为古典文学作品,存在大量别名、称谓变化等需要规范化的内容。我们需要建立人物别名映射表,确保"玄德"、"刘豫州"等不同称谓都能正确归并为"刘备"。
核心清洗步骤:
# 人物别名映射字典
name_mapping = {
'孔明': '诸葛亮',
'云长': '关羽',
'玄德': '刘备',
'孟德': '曹操',
# 其他映射关系...
}
def normalize_name(raw_name):
return name_mapping.get(raw_name, raw_name)
处理后的数据应包含以下关键字段:
| 字段名 | 类型 | 说明 |
|---|---|---|
| chapter | int | 章节编号 |
| character | str | 标准化后的人物名 |
| count | int | 出现次数 |
| relation | dict | 人物共现关系 |
2. 人物维度分析体系
2.1 出场频次统计
使用Pyecharts构建交互式柱状图,不仅能展示TOP15人物的出场次数,还能通过点击查看细节:
from pyecharts.charts import Bar
from pyecharts import options as opts
bar = (
Bar()
.add_xaxis(top_characters)
.add_yaxis("出场次数", frequencies)
.set_global_opts(
title_opts=opts.TitleOpts(title="三国人物出场频次TOP15"),
datazoom_opts=[opts.DataZoomOpts()] # 添加数据缩放控件
)
)
bar.render("character_frequency.html")
2.2 社交关系网络分析
人物关系网络能直观展示三国阵营分布。我们使用NetworkX构建图结构,并通过边权重表示人物关联强度:
import networkx as nx
G = nx.Graph()
for char1, char2, weight in co_occurrences:
G.add_edge(char1, char2, weight=weight)
# 使用力导向布局算法
pos = nx.spring_layout(G, k=0.5, iterations=50)
关系强度分级策略:
- 强关系(>0.6):绿色实线
- 中等关系(0.3-0.6):黄色实线
- 弱关系(<0.3):蓝色虚线
3. 文本结构可视化
3.1 章节字数趋势分析
通过折线图观察各章回字数变化,可发现原著的结构特点:
line = (
Line()
.add_xaxis(chapter_numbers)
.add_yaxis("字数", word_counts,
markline_opts=opts.MarkLineOpts(
data=[opts.MarkLineItem(type_="average")]
))
.set_global_opts(title_opts=opts.TitleOpts(title="章回字数趋势"))
)
3.2 关键词演进分析
使用滑动窗口统计不同章节的关键词变化,制作热力图展示故事焦点转移:
from pyecharts.charts import HeatMap
heatmap = (
HeatMap()
.add_xaxis(chapter_ranges)
.add_yaxis("关键词", keywords, frequency_matrix)
.set_global_opts(
visualmap_opts=opts.VisualMapOpts(max_=100)
)
)
4. 高级可视化技巧
4.1 交互式词云增强版
传统词云只能展示频率,我们增强为带交互功能的词云:
wordcloud = (
WordCloud()
.add(series_name="人物词频",
data_pair=word_freq_pairs,
word_size_range=[20, 100],
tooltip_opts=opts.TooltipOpts(
formatter="{b}: {c}次")
)
)
4.2 多维数据联动
通过Pyecharts的联动功能,实现图表间交互:
// 在渲染后的HTML中添加JS联动代码
chart1.on('click', function(params) {
// 根据点击的人物更新其他图表
updateRelationGraph(params.name);
});
5. 分析结论与项目扩展
通过本项目的多维分析,我们可以发现:
- 曹操、刘备、诸葛亮构成核心人物三角
- 章节字数呈现"战争章节膨胀"现象
- 人物关系网络清晰反映魏蜀吴阵营划分
项目扩展建议:
- 添加时间轴展示故事发展
- 整合地理信息绘制势力范围变化
- 使用BERT等模型进行情感分析
完整项目代码已包含以下关键文件:
project/
├── data_processing.py # 数据清洗
├── visualization.py # 可视化模块
├── config.py # 别名映射配置
└── main.py # 主入口
更多推荐
所有评论(0)