pyechart+pandas对19大报告文件做词云图

742 阅读3分钟

「这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战

pyechart-词云图

相关库查询地址
jieba分词库github.com/fxsjy/jieba
pyechartpyecharts.org/#/zh-cn/
pandaspandas.pydata.org/pandas-docs…

对19大报告.txt文件的内容做词云图

  1. 具体需求:
  • 只统计两个字的以上的词
  • 只对两个字以上,出现次数前100的词进行统计
  1. 目的:
  • 掌握pyecharts词云图支持
  • 掌握使用jieba库分析
  • 掌握pandas分组统计

1. 数据的获取

数据获取思路:

  1. 19大报告文件内容如下,可用其他文件代替 在这里插入图片描述

  2. 分析词云所需的数据类型

具体问题具体分析,查看官网:pyechart官方手册(中文的哟) 在这里插入图片描述

import jieba
from pyecharts.charts import WordCloud
import pandas as pd 
from pyecharts import options as opts
#定义一个列表,存储数据
wordlist = []
#文件的读取
with open("19大报告.txt") as file:
    s = file.read()
    #使用jieba默认模式切割单词
    words = jieba.lcut(s)
    #取出除每一个单词
    for word in words:
    	#去除小于2个字的词
        if len(word) > 1:
            #数据的添加,
            wordlist.append({"word":word,"count":1})

2.统计词频

(可以使用pandas分组统计),降序排序后取前100的数据 pandas-DataFrame数据结构

  • DataFrame是一种带标记的二维数据结构,它的不同数据列类型可以不同。你可以把它想象成一个Excel表格或者一个数据库表格。

2.1 创建DataFrame

通常常见DataFrame的方式有如下几种:

  • 从一维list,Series等对象作为值(value) - 组成的字典来创建;
  • 从二维的ndarray对象创建;
  • 从文件或者数据库中读入一个二维数据表格 pandas库官方文档地址:pandas.pydata.org/pandas-docs…

2.2 分组计算groupby、求和sum:

以单词分组,数据形式-->word:count(例如:发展 :1)

2.3 降序排序后取前100的数据

词频统计代码如下:

#wordlist为列表类型,元素为字典类型[{"word":发展,"count":1},...,...,]
df = pd.DataFrame(wordlist)
# 以word的值作为关键词分组,再统计每组的(count)的总数sum
#groupby DataFrame中的分组函数
dfword = df.groupby('word')['count'].sum()
# sort_values以列的值排序,ascending为false时降序排序
dfword2 = dfword.sort_values(ascending=False)
#将dfword2 的前100数据转为DataFrame。
dfword3 = pd.DataFrame(dfword2.head(100),columns=['count'])
# 此时列”word“是作为列索引,可将其转为列
dfword3['word'] = dfword3.index

我们想要的结果 在这里插入图片描述

3.词云图的制作

既然有数据,那么作图就比较简单了,直接上代码了

#将word列转为列表
word = dfword3['word'].tolist()
#将count列转为列表
count = dfword3['count'].tolist()
#用for循环合并数据
a = [list(z) for z in zip(word,count)]
c = (
		#WordCloud类的实列化
        WordCloud()
        #添加图名称、数据、字体的随机大小、图像类型
        .add("", a, word_size_range=[20, 100],shape="diamond")
        #图像的具体设置也可以再全局设置中设置,其中还有一些好玩的设置,这里就不在深入了
        .set_global_opts(title_opts=opts.TitleOpts(title="19大报告词云图"))
    )
#在jupyter上显示
c.render_notebook()

让我们看一下最终成品 在这里插入图片描述

让我跟党走,为祖国谋发展