【資料視覺化】周杰倫新歌《Mojito》豆瓣短評資料
In [1]:
# 匯入包import numpy as np import pandas as pd import jieba import time import requests from pyecharts.charts import Pie, Bar, Line, Pagefrom pyecharts import options as opts from pyecharts.globals import SymbolType
In [2]:
# 讀入資料df_douban = pd.read_csv('/home/kesci/input/mojito6931/Mojito豆瓣短評資料6.12.csv')df_douban.head()
Out[2]:
In [3]:
# 重複值df_douban.duplicated().sum()
Out[3]:
In [4]:
df_douban.info()
In [5]:
# 提取星級df_douban['star'] = df_douban.rating_num.str.extract(r'(\d)')# 刪除列df_douban = df_douban.drop(['rating_num', 'user_url', 'comment_time'], axis=1) df_douban.head(3)
Out[5]:
In [6]:
# 異常值df_douban['content'] = df_douban.content.replace('?', '微笑')
In [7]:
# 輸入API Key和Secret Keyak = 'iBrqRI4BQunrDH7Bi1060bBG'sk = 'IkBdZFZQ2kBKVp3i1iXlDVcZzPQdGNmP'host = '{}&client_secret={}'.format(ak, sk)# 發起請求r = requests.post(host) # 獲取tokentoken = r.json()['access_token']def get_sentiment_score(text):
""" 輸入文字,返回情感傾向得分 """
url = '{}'.format(token)
data = {
'text': text
}
data = json.dumps(data) #字典-字串
# 發起請求
try:
res = requests.post(url, data=data, timeout=3)
items_score = res.json()['items']
except Exception as e:
time.sleep(3)
res = requests.post(url, data=data, timeout=3)
items_score = res.json()['items']
return items_score
In [8]:
score_list = [] step = 0for i in df_douban['content']:
score = get_sentiment_score(i)
# 列印進度
step += 1
print('我正在獲取第{}個評分'.format(step), end='\r')
score_list.append(score)
In [9]:
# 提取正負機率positive_prob = [i[0]['positive_prob'] for i in score_list]negative_prob = [i[0]['negative_prob'] for i in score_list]df_douban['positive_prob'] = positive_probdf_douban['negative_prob'] = negative_prob# 正負向df_douban['label'] = ['正向' if i >0.5 else '負向' for i in df_douban.positive_prob]df_douban.head()
Out[9]:
In [10]:
# 計數star_num = df_douban.star.value_counts()star_num = star_num.sort_index()star_num
Out[10]:
In [11]:
# 資料對data_pair = [list(z) for z in zip([i+'星' for i in star_num.index], star_num.values.tolist())]# 餅圖pie1 = Pie(init_opts=opts.InitOpts(width='1350px', height='750px'))pie1.add('', data_pair, radius=['35%', '60%'])pie1.set_global_opts(title_opts=opts.TitleOpts(title='豆瓣短評評分佔比'),
legend_opts=opts.LegendOpts(orient='vertical', pos_top='15%', pos_left='2%')
) pie1.set_series_opts(label_opts=opts.LabelOpts(formatter='{b}:{d}%'))pie1.render_notebook()
Out[11]:
In [12]:
bins = [0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0] score_num = pd.cut(df_douban.positive_prob, bins=bins)score_num = score_num.value_counts().sort_index()score_num
Out[12]:
In [13]:
# 柱形圖bar1 = Bar(init_opts=opts.InitOpts(width='1350px', height='750px'))bar1.add_xaxis(score_num.index.astype('str').tolist())bar1.add_yaxis('', score_num.values.tolist(), category_gap='0%')bar1.set_global_opts(title_opts=opts.TitleOpts(title='基於百度AI評論情感得分'),
visualmap_opts=opts.VisualMapOpts(max_=200))bar1.render_notebook()
Out[13]:
In [14]:
def get_cut_words(content_series):
# 讀入停用詞表
stop_words = []
with open(r"/home/kesci/input/stop6931/哈工大停用詞表.txt", 'r', encoding='gb18030') as f:
lines = f.readlines()
for line in lines:
stop_words.append(line.strip())
# 新增關鍵詞
my_words = ['周杰倫', '一首歌']
for i in my_words:
jieba.add_word(i) # 自定義停用詞
my_stop_words = ['歌有', '真的', '這首', '一首', '一點',
'反正', '一段', '一句', '首歌']
stop_words.extend(my_stop_words)
# 分詞
word_num = jieba.lcut(content_series.str.cat(sep='。'), cut_all=False)
# 條件篩選
word_num_selected = [i for i in word_num if i not in stop_words and len(i)>=2]
return word_num_selected
In [15]:
text1 = get_cut_words(content_series=df_douban[(df_douban.star=='4')|(df_douban.star=='5')]['content'])text1[:5]
Out[15]:
In [16]:
! pip install stylecloud
In [17]:
import stylecloudfrom IPython.display import Image # 用於在jupyter lab中顯示本地圖片# 繪製詞雲圖stylecloud.gen_stylecloud(text=' '.join(text1),
max_words=1000,
collocations=False,
font_path=r'/home/kesci/input/經典綜藝體簡.TTF',
icon_name='fas fa-thumbs-up',
size=612,
output_name='豆瓣正向評分詞雲圖.png')Image(filename='豆瓣正向評分詞雲圖.png')
Out[17]:
In [18]:
text2 = get_cut_words(content_series=df_douban[(df_douban.star=='1')|(df_douban.star=='2')]['content'])text2[:5]
Out[18]:
In [19]:
# 繪製詞雲圖stylecloud.gen_stylecloud(text=' '.join(text2),
max_words=1000,
collocations=False,
font_path=r'/home/kesci/input/經典綜藝體簡.TTF',
icon_name='fas fa-thumbs-down',
size=612,
output_name='豆瓣負向評分詞雲圖.png')Image(filename='豆瓣負向評分詞雲圖.png')
Out[19]:
In [20]:
page = Page()page = page.add(pie1, bar1)page.render('Mojito豆瓣資料分析.html')
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69977871/viewspace-2700670/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 豆瓣電影資料分析和視覺化視覺化
- 資料視覺化豆瓣電影 TOP250視覺化
- 資料看板視覺化視覺化
- 資料視覺化【十五】視覺化
- 大資料視覺化大資料視覺化
- 警惕“資料視覺化”視覺化
- 遇見大資料視覺化 : 那些 WOW 的資料視覺化案例大資料視覺化
- 資料視覺化能否代替資料分析視覺化
- 什麼是資料視覺化,為什麼資料視覺化很重要?視覺化
- 資料視覺化--實驗五:高維非空間資料視覺化視覺化
- 新冠肺炎資料視覺化視覺化
- 資料視覺化的秘密視覺化
- 視覺化中的資料視覺化
- 如何看待資料視覺化?視覺化
- Matlab資料視覺化Matlab視覺化
- 資料視覺化實踐視覺化
- 資料視覺化的作用視覺化
- 細談資料視覺化視覺化
- 資料視覺化學習資源視覺化
- 用python寫一個豆瓣短評通用爬蟲(登入、爬取、視覺化)Python爬蟲視覺化
- 資料視覺化基本原理——視覺化模型視覺化模型
- 資料視覺化與資訊視覺化怎麼搞?視覺化
- 大資料時代,人人都在談資料視覺化。大資料視覺化
- 豆瓣短評榜單短評下載
- (在模仿中精進資料視覺化03)OD資料的特殊視覺化方式視覺化
- python 資料視覺化利器Python視覺化
- pyecharts做資料視覺化(二)Echarts視覺化
- python資料視覺化——echartsPython視覺化Echarts
- 視覺化資料分析軟體視覺化
- 如何做好資料視覺化視覺化
- 資料視覺化的藝術視覺化
- 什麼是資料視覺化?視覺化
- 資料視覺化:基本圖表視覺化
- 資料視覺化明星Tableau Software視覺化
- 【matplotlib教程】資料視覺化視覺化
- 什麼是資料視覺化?hightopo資料視覺化助力企業數字化視覺化
- 視覺化之資料視覺化最強工具推薦視覺化
- Python資料科學(八)- 資料探索與資料視覺化Python資料科學視覺化