统计词频 并以饼状图展示
输入要求:不少于5个关键词
输出要求:在画板上展示5个饼状图 图的大小与词频相关;关键词在圆中心,饼状图以不同的颜色展示,字体颜色不限,能看清即可,关键词不能被遮盖。
其他事项:输出的图像要一直呈现,不能出现一闪而过的情况。
差不多是图上的效果
jieba分词出来是这样的:
我想要把它们装进一个列表里面,然后每一行里面的每一个词是一个列表元素,而不是每一行
def getsegwords(segwords_path):
segwords = []
with open(segwords_path, "r", encoding='utf-8') as f:
lines = f.readlines()
for line in lines:
for word in line:
segwords.append(word.strip())
return segwords
使用上面的代码出来的结果是每一个字都是一个列表元素:
网上到处找,最好,参考这个博客:
链接: Python嵌套列表转一维(压平嵌套列表)
使用extend方法进行转换!!!
问题描述: 需要处理的文本数据类型未明确,需要根据具体情况确定是否需要进行数据清洗,是否需要考虑停用词。输入的关键词需要统计的关键词,需要一行一个列出。需要用Python统计关键词的词频并利用饼状图展示,需要具体代码实现或者画图软件的使用方法。同时需展示关键词对应的频率大小,以及如何保证绘制的饼状图可以一直呈现,不会一闪而过。
解决方案: 1. 对于文本数据的处理: 根据具体情况决定是否需要进行数据清洗,数据清洗包括去掉特殊符号、英文、数字等。如果需要进行数据清洗,可以利用Python的re模块的正则表达式来处理。对于中文文本,可以利用jieba库进行分词,如果需要考虑停用词,可以利用中文停用词表过滤分词结果。
import matplotlib.pyplot as plt
import jieba
text = '''这是一段待统计关键词词频的文本。
词频统计可以用Python进行实现,Python中有丰富的统计库和绘图库。
利用jieba库可以方便地进行中文分词,统计关键词的出现次数,最后可以利用matplotlib库进行饼状图展示。'''
# 对文本内容进行分词
words = jieba.lcut(text)
# 统计每个关键词出现的次数
freq = {}
for w in words:
if len(w) < 2:
continue
freq[w] = freq.get(w, 0) + 1
# 将统计结果按照出现次数降序排列
freq = sorted(freq.items(), key=lambda x: x[1], reverse=True)
print(freq)
# 绘制饼状图并显示
labels = [f[0] for f in freq]
sizes = [f[1] for f in freq]
plt.pie(sizes, labels=labels, autopct='%1.1f%%')
plt.axis('equal')
plt.show()
代码中用到了jieba、matplotlib等库实现分词和饼状图的绘制,其中freq
记录了每个关键词出现的次数,sorted
函数用来按照关键词出现次数降序排列。饼状图的绘制使用pie
方法,labels
和sizes
分别表示标签和对应的数值。
代码示例:
for f in freq:
print(f[0], f[1])
# 或将结果保存到文件中
with open('freq.txt', 'w', encoding='utf8') as f:
for w, n in freq:
f.write('{} {}\n'.format(w, n))
plt.ion()
开启交互模式,之后利用plt.show()
即可一直显示图表。代码示例:
plt.pie(sizes, labels=labels, autopct='%1.1f%%')
plt.axis('equal')
plt.ion() # 开启交互模式
plt.show()
while True:
plt.pause(0.1) # 可以加一个while循环一直显示图表