【資料視覺化】周杰倫新歌《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 = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={}&client_secret={}'.format(ak, sk)# 發起請求r = requests.post(host) # 獲取tokentoken = r.json()['access_token']def get_sentiment_score(text):
""" 輸入文字,返回情感傾向得分 """
url = 'https://aip.baidubce.com/rpc/2.0/nlp/v1/sentiment_classify?charset=UTF-8&access_token={}'.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視覺化
- 資料視覺化【十五】視覺化
- 資料看板視覺化視覺化
- Matlab資料視覺化Matlab視覺化
- 資料視覺化能否代替資料分析視覺化
- 用python寫一個豆瓣短評通用爬蟲(登入、爬取、視覺化)Python爬蟲視覺化
- 什麼是資料視覺化,為什麼資料視覺化很重要?視覺化
- 資料視覺化--實驗五:高維非空間資料視覺化視覺化
- 資料視覺化實踐視覺化
- python資料視覺化——echartsPython視覺化Echarts
- 如何看待資料視覺化?視覺化
- 視覺化中的資料視覺化
- python 資料視覺化利器Python視覺化
- 資料視覺化的秘密視覺化
- 【matplotlib教程】資料視覺化視覺化
- 資料視覺化的作用視覺化
- 什麼是資料視覺化?hightopo資料視覺化助力企業數字化視覺化
- 資料視覺化基本原理——視覺化模型視覺化模型
- Python資料科學(八)- 資料探索與資料視覺化Python資料科學視覺化
- (在模仿中精進資料視覺化03)OD資料的特殊視覺化方式視覺化
- 豆瓣短評榜單短評下載
- Python資料視覺化matplotlib庫Python視覺化
- pyecharts做資料視覺化(二)Echarts視覺化
- 資料視覺化的藝術視覺化
- 什麼是資料視覺化?視覺化
- 新冠肺炎資料視覺化視覺化
- 視覺化資料分析軟體視覺化
- 如何做好資料視覺化視覺化
- Matplotlib資料視覺化基礎視覺化
- 視覺化之資料視覺化最強工具推薦視覺化
- 如何將資料進行資料視覺化展現?視覺化
- Python疫情資料分析,並做資料視覺化展示Python視覺化
- 大資料時代,人人都在談資料視覺化。大資料視覺化
- 資料視覺化Seaborn從零開始學習教程(三) 資料分佈視覺化篇視覺化
- [資料分析與視覺化] Python繪製資料地圖2-GeoPandas地圖視覺化視覺化Python地圖
- 資料視覺化的基本原理——視覺通道視覺化
- 資料中臺助力資料視覺化智慧治理視覺化
- 關於資料視覺化的思考視覺化