1. 数据来源
2. 数据预处理
import pandas as pd
import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import jieba.analyse
# read in file with specified column names
df = pd.read_csv('网易云音乐精彩评论.csv',
names=['用户Id', '昵称', '评论内容', '点赞数'],
encoding='gbk')
encoding=’gbk’,因为csv文件是gbk编码的,如果不指定,会乱码。
3. 数据分析
# 分词2
word_list=[]
for comment in df['评论内容']:
try:
# topK: 返回几个 TF/IDF 权重最大的关键词,默认值为 20
# withWeight: 如果为 True,返回一个 list,其中每个元素都是 (关键词, 权重) 二元组;
# 如果为 False,返回一个 list,其中每个元素为关键词
# allowPOS: 仅包括指定词性的词,默认值为空,即不筛选
tags = jieba.analyse.extract_tags(comment, topK=10, withWeight=False, allowPOS=())
for t in tags:
word_list.append(t)
except Exception as e:
print(e)
# jieba.load_userdict('../myDict/myDict.txt')
# convert list to dictionary
word_list = dict(pd.Series(word_list).value_counts())
结果如下:
{'首歌': 22,
'评论': 19,
'内容': 12,
'成都': 10,
'大哭': 8,
'我们': 7,
'自己': 7,
'16': 7,
'周杰伦': 7,
'喜欢': 7,
'音乐': 6,
'初恋': 6,
'时候': 6,
'十年': 6,
'单曲': 6,
'网易': 5,
'钟无艳': 5,
'女朋友': 5,
'七里香': 5,
'我要': 4,
'赵雷': 4,
'回忆': 4,
'开口': 4,
'青春': 4,
'考研': 4,
...
'1800': 1,
'五湖四海': 1,
'义无反顾': 1,
'牵挂': 1,
...}
4. 词云图
# 制作图云
def wordCloud(wordList):
from wordcloud import WordCloud, ImageColorGenerator
import matplotlib.pyplot as plt
import numpy as np
import PIL.Image as Image
import os
d = os.path.dirname(__file__)
img = Image.open(os.path.join(d, "jupiter.png"))
width = img.width/80
height = img.height/80
alice_coloring = np.array(img)
my_wordcloud = WordCloud(background_color="white",
max_words=500, mask=alice_coloring,
max_font_size=200, random_state=42,
font_path=(os.path.join(d, "./PingFang.ttc")))
my_wordcloud = my_wordcloud.generate_from_frequencies(wordList)
image_colors = ImageColorGenerator(alice_coloring)
plt.figure(figsize=(width, height))
plt.imshow(my_wordcloud.recolor(color_func=image_colors))
plt.imshow(my_wordcloud)
plt.axis("off")
# 通过设置subplots_adjust来控制画面外边框
plt.subplots_adjust(bottom=.01, top=.99, left=.01, right=.99)
plt.savefig("jupiter_wordcloud_1.png",dpi=900)
plt.show()
wordCloud(word_list)
5. 问题
-
- 分词结果不太满意,一些停用词没有去掉。
-
- 词云图的字体不太满意,需要自己找一些字体。
-
- 分词之前最好导入自己的词典,这样分词效果会更好。