使用python统计《三国演义》小说里人物出现次数前十名,并实现可视化。
一、安装所需要的第三方库
jieba (jieba是优秀的中文分词第三分库)
pyecharts (一个优秀的数据可视化库)
《三国演义》.txt下载地址(提取码:kist )
使用pycharm安装库
- 打开Pycharm选择【File】下的Settings

- 出现下面页面,

- 选择右边的【+】出现下面页面,在此页面顶端搜索想要的库,然后安装就可以了

二、编写代码
import jieba #导入库
import os
print("人物出现次数前十名:")
txt = open('三国演义.txt', 'r' ,encoding='gb18030').read()
words = jieba.lcut(txt)
counts = {}
for word in words:
if len(word) == 1:
continue
elif word == "诸葛亮" or word == "孔明曰":
rword = "孔明"
elif word == "关公" or word == "云长":
rword = "关羽"
elif word == "玄德" or word == "玄德曰":
rword = "刘备"
elif word == "孟德" or word == "丞相":
rword = "曹操" # 把相同意思的名字归为一个人
else:
rword = word
counts[rword] = counts.get(rword, 0) + 1
items = list(counts.items())
items.sort(key=lambda x: x[1], reverse=True)
for i in range(10):
word, count=items[i]
print("{}:{}".format(word, count)) # 打印前十名名单
- 结果如下图:

- 可以看到这里面有很多不是人物的名字,所以咱们要把这些删掉。更改代码如下
import jieba #导入库
import os
print("人物出现次数前十名:")
txt = open('三国演义.txt', 'r' ,encoding='gb18030').read()
remove = {"将军", "却说", "不能", "后主", "上马", "不知", "天子", "大叫", "众将", "不可",
"主公", "蜀兵", "只见", "如何", "商议", "都督", "一人", "汉中", "人马",
"陛下", "魏兵", "天下", "今日", "左右", "东吴", "于是", "荆州", "不能", "如此",
"大喜", "引兵", "次日", "军士", "军马","二人","不敢"} # 这些文字是要排出掉的,多次运行程序所得到的
words = jieba.lcut(txt)
counts = {}
for word in words:
if len(word) == 1:
continue
elif word == "诸葛亮" or word == "孔明曰":
rword = "孔明"
elif word == "关公" or word == "云长":
rword = "关羽"
elif word == "玄德" or word == "玄德曰":
rword = "刘备"
elif word == "孟德" or word == "丞相":
rword = "曹操" # 把相同意思的名字归为一个人
else:
rword = word
counts[rword] = counts.get(rword, 0) + 1
for word in remove:
del counts[word] #匹配文字相等就删除
items = list(counts.items())
items.sort(key=lambda x: x[1], reverse=True)
for i in range(10):
word, count=items[i]
print("{}:{}".format(word, count)) # 打印前十名名单
- 运行结果如下图

可以看到现在都是人物名称了
- 导出数据,代码如下
import jieba #导入库
import os
print("人物出现次数前十名:")
txt = open('三国演义.txt', 'r' ,encoding='gb18030').read()
remove = {"将军", "却说", "不能", "后主", "上马", "不知", "天子", "大叫", "众将", "不可",
"主公", "蜀兵", "只见", "如何", "商议", "都督", "一人", "汉中", "人马",
"陛下", "魏兵", "天下", "今日", "左右", "东吴", "于是", "荆州", "不能", "如此",
"大喜", "引兵", "次日", "军士", "军马","二人","不敢"} # 这些文字是要排出掉的,多次运行程序所得到的
words = jieba.lcut(txt)
counts = {}
for word in words:
if len(word) == 1:
continue
elif word == "诸葛亮" or word == "孔明曰":
rword = "孔明"
elif word == "关公" or word == "云长":
rword = "关羽"
elif word == "玄德" or word == "玄德曰":
rword = "刘备"
elif word == "孟德" or word == "丞相":
rword = "曹操" # 把相同意思的名字归为一个人
else:
rword = word
counts[rword] = counts.get(rword, 0) + 1
for word in remove:
del counts[word] #匹配文字相等就删除
items = list(counts.items())
items.sort(key=lambda x: x[1], reverse=True)
#导出数据
fo = open("三国人物出场次数.txt", "a", encoding='utf-8')
for i in range(10):
word, count=items[i]
word = str(word)
count = str(count)
fo.write(word)
fo.write(':') #使用冒号分开
fo.write(count)
fo.write('\n') #换行
fo.close() #关闭文件
- 现在咱们运行看是否导出,运行结果如下图。

可以看到已经生成一个名为三国人物出场次数.txt的文件,而文件里的内容就是咱们刚才的数据。
三、数据可视化
- 想要可视化首先咱们要有数据,咱们把刚才导出的数据转换为字典形式。代码如下
#将txt文本里的数据转换为字典形式
fr = open('三国人物出场次数.txt', 'r', encoding='utf-8')
dic = {}
keys = [] # 用来存储读取的顺序
for line in fr:
v = line.strip().split(':')
dic[v[0]] = v[1]
keys.append(v[0])
fr.close()
print(dic)
-运行结果如下

- 使用pyecharts绘图
- 先倒入模块
from pyecharts import options as opts
from pyecharts.charts import Bar
- 代码如下
# 绘图
list1=list(dic.keys())
list2=list(dic.values()) #提取字典里的数据作为绘图数据
c = (
Bar()
.add_xaxis(list1)
.add_yaxis("人物出场次数",list2)
.set_global_opts(
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
)
.render("人物出场次数可视化图.html")
)
- 运行程序看到目录下会生成一个名为人物出场次数可视化图.html的文件,如下图

- 使用浏览器打开,就可以看到数据以图形的方式呈现出来。

三、全部代码呈现
#《三国演义》的人物出场次数Python代码:
import jieba #导入库
import os
from pyecharts import options as opts
from pyecharts.charts import Bar
print("人物出现次数前十名:")
txt = open('三国演义.txt', 'r' ,encoding='gb18030').read()
remove = {"将军", "却说", "不能", "后主", "上马", "不知", "天子", "大叫", "众将", "不可",
"主公", "蜀兵", "只见", "如何", "商议", "都督", "一人", "汉中", "人马",
"陛下", "魏兵", "天下", "今日", "左右", "东吴", "于是", "荆州", "不能", "如此",
"大喜", "引兵", "次日", "军士", "军马","二人","不敢"} # 这些文字是要排出掉的,多次运行程序所得到的
words = jieba.lcut(txt)
counts = {}
for word in words:
if len(word) == 1:
continue
elif word == "诸葛亮" or word == "孔明曰":
rword = "孔明"
elif word == "关公" or word == "云长":
rword = "关羽"
elif word == "玄德" or word == "玄德曰":
rword = "刘备"
elif word == "孟德" or word == "丞相":
rword = "曹操" # 把相同意思的名字归为一个人
else:
rword = word
counts[rword] = counts.get(rword, 0) + 1
for word in remove:
del counts[word] #匹配文字相等就删除
items = list(counts.items())
items.sort(key=lambda x: x[1], reverse=True)
#导出数据
fo = open("三国人物出场次数.txt", "a", encoding='utf-8')
for i in range(10):
word, count=items[i]
word = str(word)
count = str(count)
fo.write(word)
fo.write(':') #使用冒号分开
fo.write(count)
fo.write('\n') #换行
fo.close() #关闭文件
#将txt文本里的数据转换为字典形式
fr = open('三国人物出场次数.txt', 'r',encoding='utf-8' )
dic = {}
keys = [] # 用来存储读取的顺序
for line in fr:
v = line.strip().split(':')
dic[v[0]] = v[1]
keys.append(v[0])
fr.close()
print(dic)
# 绘图
list1=list(dic.keys())
list2=list(dic.values()) #提取字典里的数据作为绘图数据
c = (
Bar()
.add_xaxis(list1)
.add_yaxis("人物出场次数",list2)
.set_global_opts(
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
)
.render("人物出场次数可视化图.html")
)
使用python统计《三国演义》小说里人物出现次数前十名,并实现可视化。的更多相关文章
- Python统计日志中每个IP出现次数
介绍了Python统计日志中每个IP出现次数的方法,实例分析了Python基于正则表达式解析日志文件的相关技巧,需要的朋友可以参考下 本脚本可用于多种日志类型 #-*- coding:utf-8 -* ...
- python 统计字符串中指定字符出现次数的方法
python 统计字符串中指定字符出现次数的方法: strs = "They look good and stick good!" count_set = ['look','goo ...
- python统计英文首字母出现的次数
使用python解析有道词典导出的xml格式单词,统计各个首字母出现的次数,并按次数由多到少进行排序 相关实现 导出的xml格式如下 <wordbook> <item> < ...
- python统计字符串里每个字符的次数
方法一: 推导式 dd="ewq4aewtaSDDSFDTFDSWQrtewtyufashas" print {i:dd.count(i) for i in dd} 方法二: co ...
- 【python】一篇文章里的词频统计
一.环境 1.python3.6 2.windows系统 3.安装第三方模块 pip install wordcloud #词云展示库 pip install jieba #结巴分词 pip inst ...
- 简易安装python统计包
PythonCharm简易安装python统计包及 本文介绍使用pythonCharm IDE 来安装Python统计包或一些packages的简单过程,基本无任何技术难度,顺便提一提笔者在安装过程中 ...
- Python统计列表中的重复项出现的次数的方法
本文实例展示了Python统计列表中的重复项出现的次数的方法,是一个很实用的功能,适合Python初学者学习借鉴.具体方法如下:对一个列表,比如[1,2,2,2,2,3,3,3,4,4,4,4],现在 ...
- Python抓取小说
Python抓取小说 前言 这个脚本命令MAC在抓取小说写,使用Python它有几个码. 代码 # coding=utf-8 import re import urllib2 import chard ...
- 使用jieba分析小说人物出现次数
分析: 1. 读取小说,以读的形式打开 with open('文件名.txt','r',encoding='utf8') as f: str = f.read() 2. 切割小说 ret = jieb ...
随机推荐
- 存储系列1-openfiler开源存储管理平台实践
(一)openfiler介绍 Openfiler能把标准x86/64架构的系统变为一个更强大的NAS.SAN存储和IP存储网关,为管理员提供一个强大的管理平台,并能应付未来的存储需求.openfile ...
- 性能测试之JVM的故障排查-堆内存泄漏
JVM异常说明(超链接) 一文中已介绍了,JVM每个运行时区域--程序计数器 .Java虚拟机栈.本地方法栈.Java堆.方法区.直接内存发生OutOfMemoryError的不同原因和不同错误信息. ...
- 安卓日常开发和逆向中常用的shell命令与非shell命令
简述shell 命令与 非shell命令区别 shell命令不用先adb shell进入界面执行 非shell命令必须要 adb shell进入界面执行 基础非shell命令 1.安装app adb ...
- maven打包插件
如何把依赖的jar包中的资源抽到当前jar中 maven-compiler-plugin:编译插件,可指定资源jdk版本,前提是当前代码使用的jdk版本 大于或等于 source maven-asse ...
- BrowserSync 热更新的使用(保存后自动刷新)
BrowserSync使用的优点,BrowserSync监听条件中的文件,发现更新会立刻刷新浏览器,就像 vue中的热更新一样,解放F5实现自动更新,提高开发效率, 解决了使用双屏幕时来回切换的烦恼! ...
- 项目实战:流水线图像显示控件(列刷新、1ms一次、缩放、拽拖、拽拖预览、性能优化、支持OpenGL GPU加速)
需求 流水线图像扫描采集控件(带模拟数据测试)性能需求 1.需至少满足可1ms接收一次列数据,而不丢包(接收后可不必立马显示) 2.图片刷新率可达30HZ:限制需求 1.图片高度最小只能 ...
- [Luogu P1122]最大子树和 (简单树形DP)
题面 传送门:https://www.luogu.org/problemnew/show/P1122 Solution 这是一道简单的树形DP题. 首先,我们可以转换一下题面,可以发现,题目要求我们求 ...
- windows下redis的PHP扩展安装
1.查看已安装PHP的信息,打印phpinfo(); 主要看三个信息:PHP版本,是否线程安全(TS或NTS),系统是x64还是x86.用以确定扩展文件的版本. 2.需要php_redis.dll这个 ...
- redhat 7.4从openssh7.6离线升级openssh8.4p1解决方法
具体需求 这几天生产环境服务器又进行了安全扫描,每次都会报一下漏洞错误.虽然只有一个高危问题,但是每次看到ssh远程漏洞都很烧脑 "主要是里面坑太多了",闲话就不说了,今天我们来看 ...
- C语言经典100例-ex002
系列文章<C语言经典100例>持续创作中,欢迎大家的关注和支持. 喜欢的同学记得点赞.转发.收藏哦- 后续C语言经典100例将会以pdf和代码的形式发放到公众号 欢迎关注:计算广告生态 即 ...