基于词频绘制词云图

(打工人小小记录)根据给定词和词频绘制

1)日常倒库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from wordcloud import WordCloud
import re
2)防止乱码
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
3)绘图函数

font_path需要设置字体路径,可能会导致乱码,字体在c盘fonts文件夹。WordCloud()有很多参数,供更改图片样式。

def draw_wordcloud(fre,font,seed):    
    wc=WordCloud(font_path=font,background_color='white',scale=25)
    wc.generate_from_frequencies(fre.to_dict(),max_font_size=None)
    wc.recolor(random_state=seed,color_func=None,colormap=None)
    plt.figure(figsize=(16,14))
    plt.imshow(wc)
    plt.axis("off")
    plt.show()
    file_path='fre.index.name+fre.name+'词云图.png'
    wc.to_file(file_path)
4)数据规范

数据来自平台可视化数据,从开发者模式可以将文本数字复制下来,保存为txt文件。ps:WS模式

with open('品牌.txt','r',encoding='utf-8') as f:
    content = f.read()

从字符串中提取需要的数据

ex1=r': {showName: "(.*?)",'
p1=re.findall(ex1,content)   #名称
ex2=r'\d: "(\d\.\d+)"'
p2=re.findall(ex2,content)   #占比
ex3=r'\d: "(\d+,\d+)"'
p3=re.findall(ex3,content)   #TGI
ex4=r'\d: "(\d+\.\d)"'
p4=re.findall(ex4,content)   #推荐指数

将列表合并为Dataframe格式

df = pd.DataFrame({'品牌':p1,'占比':p2,'TGI指数':p3,'推荐指数':p4})
df=df.loc[1:,]  #剔除最大,防干扰
df['TGI指数上']=df['TGI指数'].map(lambda x:x.split(',')[1]).astype(int)
df['TGI指数下']=df['TGI指数'].map(lambda x:x.split(',')[0]).astype(int)
5)绘图

分别绘制根据占比、TGI、推荐指数产生的词云图

df['占比'] =df['占比'].astype(float)
frequencies1=df.set_index('品牌')['占比']
draw_wordcloud(frequencies1,'STKAITI.TTF',1)

df['TGI指数median'] =((df['TGI指数上']+df['TGI指数下'])/2).astype(int)
frequencies2=df.set_index('品牌')['TGI指数median']
draw_wordcloud(frequencies2,'STKAITI.TTF',2)

df['推荐指数'] =df['推荐指数'].astype(float)
frequencies3=df.set_index('品牌')['推荐指数']
draw_wordcloud(frequencies3,'STKAITI.TTF',3)

放一张图
在这里插入图片描述

6)小结

经过上半年的窘迫,太久没有用python了,还是要加练习和积累,漫漫python路~