当前位置: 首页 > 科技观察

用Python画了几个词云图,惊艳了大家

时间:2023-03-21 12:36:35 科技观察

在数据可视化图表中,词云图的应用随处可见。它通常从一段输入文本中提取词频,然后根据词汇出现的频率将高频词集中展示,简单、直观、高效。今天就来分享一下如何用Python画出超棒的词云图。做个小测试,我们先来尝试绘制一个简单的词云图,使用Python中的wordcloud模块来绘制,importjiebafromwordcloudimportWordCloudimportmatplotlib.pyplotasplt,我们导入文本内容,去掉换行和空格,代码如下:text=open(r"明朝那些事.txt",encoding='utf8').read()text=text.replace('\n',"").replace("\u3000","")我们需要把它分成一个个的词。这时候我们就需要用到jieba模块了。代码如下:text_cut=jieba.lcut(text)#将分割后的单词用某个符号分开,连接成一个字符串text_cut=''.join(text_cut)当然,里面可能会有很多不相关的内容我们不需要阅读的结果。这时候,我们就需要用到停用词了。我们可以自己建,也可以直接用别人建好的停用词表。这里,小编使用的是后者。代码如下:stop_words=open(r"常用中文停用词列表.txt").read().split("\n")下面是绘制词云图的核心代码。word_cloud=WordCloud(font_path="simsun.ttc",#设置词云字体background_color="white",#词云图背景颜色stopwords=stop_words)#去除停用词word_cloud.generate(text_cut)word_cloud.to_file("1.png")这样一个极其简单的词云图就输出好了,当然我们可以给它添加背景图,如下图,需要添加的主要代码如下:background=Image.open(r"5.png")graph=np.array(background)并在WorCloud中添加mask参数#使用WordCloud生成词云word_cloud=WordCloud(font_path="simsun.ttc",#设置词云字体background_color="white",#词云图的背景色stopwords=stop_words,#去掉的停用词mask=graph)word_cloud.generate(text_cut)word_cloud.to_file("1.png")输出深度优化另外还有一个模块stylecloud绘制生成的词云图也很酷,其中我们主要用到如下函数。gen_stylecloud(text=None,icon_name='fasfa-flag',colors=None,palette='cartocolors.qualitative.Bold_5',background_color="white",max_font_size=200,max_words=2000,stopwords=True,custom_stopwords=STOPWORDS,output_name='stylecloud.png',)一些常用的参数是icon_name:词云图的形状max_font_size:最大字体大小max_words:最大可容纳的词数stopwords:用于过滤常见的停止wordscustom_stopwords:如果有自建的停用词列表,可以配合palette:Palette下面尝试画一个词云图,代码如下:stylecloud.gen_stylecloud(text=text_cut,palette='tableau.blueRed_6',icon_name='fasfa-apple-alt',font_path=r'田英章楷书3500字.ttf',output_name='2.png',stopwords=True,custom_stopwords=stop_words)输出中的palette参数用作调色板,可以任意更改。详情参考:https://jiffyclub.github.io/palettable/这个网站。pyecharts最后我们来看看如何使用Pyecharts模块绘制词云图。代码如下frompyechartsimportoptionsasoptsfrompyecharts.chartsimportPage,WordCloudwords=[("皇帝",10000),("朱元璋",6181),("明朝",4386),("朝廷",4055),("明军",2467),("兵士",2244),("张居正",1868),("王守仁",1281)]c=(WordCloud().add("",words,word_size_range=[20,100]).set_global_opts(title_opts=opts.TitleOpts(title="BasicExample")))c.render("1.html")输出的结果有点简单,但这里值得注意的是pyecharts中WordCloud()方法传入的数据是指定的词及其出现频率,与前面的操作不同