0.快速修改使用
1
2
|
0.1 修改对应的excel文件和其对应的列:59行修改excel文件名60行修改对应的列名
0.2 77行 500 的意思是取出出现频率前500的词汇,这个可以修改,比如100就把500改成100
|
1.需要的库
1
|
pip install pandas pkuseg numpy matplotlib PIL wordcloud
|
pkuseg是一个分词器:https://github.com/lancopku/pkuseg-python
pandas,matplottlib,PIL 用来辅助作图,pandas中包含处理excel格式的函数
wordcloud 用来生成词云
numpy用来进行科学计算
2.代码逻辑
1.从excel表中读取所需要的文字
2.采用分词器进行分词操作
3.过滤一些没用的符号,单个词
4.统计词频
5.生成词云
3.分块功能说明
3.1统计词频
1
2
3
4
5
6
7
8
9
10
|
def count_words(sp, n):
w = {}
for i in sp:
if i not in w:
w[i] = 1
else:
w[i] += 1
top = sorted(w.items(), key=lambda item:(-item[1], item[0]))
top_n = top[:n]
return top_n
|
输入分词后的结果,list格式。n为返回词频率由高到低前n的词。
3.2过滤
1
2
3
4
5
6
|
def filter_label(l):#过滤符号和单个词
temp=[]
for i in l:
if len(i)!=1 and i.find('nbsp')<0:
temp.append(i)
return temp
|
这部分可以根据自己需要修改,我主要是过滤掉符号,‘我,的,得’这些无意义的词,还有‘nbsp’。
3.3生成词云
这个地方坑比较多。我列举一下:
1.根据词的频率生成词云,必须先做成字典格式
2.需要自己读入文字格式文件,和自己选一张背景图,生成的词云将根据背景图来创建,不要自作聪明自己创建一个空的二维数组哈。
3.我用的图片
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
def DrawWordcloud(read_name):#生成词云
image = Image.open('back.jpg')#作为背景形状的图
graph = np.array(image)
#参数分别是指定字体、背景颜色、最大的词的大小、使用给定图作为背景形状
wc = WordCloud(font_path = 'simsun.ttc', background_color = 'White', max_words = 50, mask = graph)
# fp = pd.read_csv(read_name)#读取词频文件
# name = list(fp.name)#词
# value = fp.val#词的频率
name=[]
value=[]
for t in read_name:
name.append(t[0])
value.append(t[1])
for i in range(len(name)):
name[i] = str(name[i])
# print(name[i])
#注意因为要显示中文,所以需要转码
name[i] = name[i].encode('gb2312').decode('gb2312')
dic = dict(zip(name, value))#词频以字典形式存储
print(dic)
wc.generate_from_frequencies(dic)#根据给定词频生成词云
image_color = ImageColorGenerator(graph)
plt.imshow(wc)
plt.axis("off")#不显示坐标轴
plt.show()
wc.to_file('Wordcloud.png')#保存的图片命名为Wordcloud.png
|
4.结果图
5.工程代码
打包的所有文件:
https://github.com/liuzehao/wordcloud