这是我参与8月更文挑战的第7天,活动详情查看: 8月更文挑战
前言
- 词云 (WordCloud)是对文本中出现频率较高的词语给予视觉化展示的图形, 是一种常见的文本挖掘的方法。目前已有多种数据分析工具支持这种图形,如Matlab, SPSS, SAS, R 和 Python 等等,也有很多在线网页能生成 wordcloud。
1. 网站分析及其源数据获取--《啥是佩奇》B站视频弹幕
- 分析
- 首先,由图中可知,此视频共有882条弹幕
- 接下来进入按下F12键进入开发者模式获取弹幕源数据
- 注:B站的弹幕数据有现成接口,只需找到对应视频的cid值即可
- 弹幕共有882条,cid=72342029
2. 数据获取--绕过需要cookies的接口获取数据
# -!- coding: utf-8 -!-
from bs4 import BeautifulSoup # 解析HTML,XML文档
import numpy as np
import requests
# 获取数据
# 目标url
url = 'http://comment.bilibili.com/72342029.xml'
# 向目标url发送get请求
html = requests.get(url).content
html_data = str(html, 'utf-8')
soup = BeautifulSoup(html_data, 'lxml')
results = soup.find_all('d')
comments = [comment.text for comment in results]
comments_dict = {'comments': comments}
df = pd.DataFrame(comments_dict)
df.to_csv('bilibili.csv', encoding='utf-8')
成功获取到882条弹幕
3. 数据可视化
from PIL import Image
from wordcloud import WordCloud, ImageColorGenerator
import matplotlib.pyplot as plt
import pandas as pd
import jieba
# jieba分词,对弹幕数据生成词云
df = pd.read_csv('bilibili.csv', header=None)
text = ''
for line in df[1]:
text += ' '.join(jieba.cut(line, cut_all=False))
#background_Image = plt.imread('peiqi_1.jpg')
background_Image = np.array(Image.open("peiqi_1.jpg"))
wc = WordCloud(
background_color='white',
mask=background_Image,
font_path='C:\Windows\Fonts\simhei.ttf',
max_words=2000,
max_font_size=80,
random_state=30,
)
wc.generate_from_text(text)
# 看看词频高的有哪些,把无用信息去除
process_word = WordCloud.process_text(wc, text)
sort = sorted(process_word.items(), key=lambda e:e[1], reverse=True) print(sort[:50])
mg_colors = ImageColorGenerator(background_Image) wc.recolor(color_func=img_colors)
plt.imshow(wc)
plt.axis('off')
wc.to_file("peggy.jpg")
print('Yeah Successfully!')