【Pyecharts】20W條淘寶文胸商品評論資料視覺化~
咳咳~不要懷疑,這是一個正經的視覺化專案,而且附帶一點科普?
資料來源(資料集獲取 關注我)
-
資料來自爬蟲獲取,淘寶約50個文胸商品的20W條評論資料~
-
資料已上傳至Kesci~
前言
對於很多隻知道A/B/C的紳士們,我們在看資料之前可能先得了解點知識~
首先我們得先了解兩個概念——上胸圍 & 下胸圍,具體看示意圖:
透過上胸圍與下胸圍的差值,我們就可以確定罩杯的大小了,具體的對應關係可參考下圖:
有了下胸圍 & 罩杯就能確定文胸對應的尺碼了~
當然這又有分為英式尺碼和國際尺碼,具體參考下圖:
from pyecharts.charts import *from pyecharts import options as optsfrom pyecharts.commons.utils import JsCodefrom collections import Counterimport reimport pandas as pdimport jiebaimport jieba.posseg as psgfrom stylecloud import gen_stylecloudfrom IPython.display import Image
In [2]:
patterns = re.compile(r'(?P<datetime>.*),顏色分類:(?P<color>.*?);尺碼:(?P<size>.*?),(?P<comment>.*)')with open('/home/kesci/input/cup6439/cup_all.txt', 'r') as f:
data = f.readlines()obj_list = []for item in data:
obj = patterns.search(item)
obj_list.append(obj.groupdict())
data = pd.DataFrame(obj_list)data = pd.concat([data, data['size'].str.extract('(?P<circumference>[7-9]{1}[0|5]{1}).*(?P<cup>[a-zA-Z])',
expand=True)], axis=1)data.head()
Out[2]:
In [3]:
w_all = []for item in data.color:
w_l = psg.cut(item)
w_l = [w for w, f in w_l if f in ('n', 'nr') and len(w)>1]
w_all.extend(w_l)c = Counter(w_all)
In [4]:
counter = c.most_common(50)bar = (Bar(init_opts=opts.InitOpts(theme='purple-passion', width='1000px', height='800px'))
.add_xaxis([x for x, y in counter[::-1]])
.add_yaxis('出現次數', [y for x, y in counter[::-1]], category_gap='30%')
.set_global_opts(title_opts=opts.TitleOpts(title="出現最多的關鍵詞",
pos_left="center",
title_textstyle_opts=opts.TextStyleOpts(font_size=20)),
datazoom_opts=opts.DataZoomOpts(range_start=70, range_end=100, orient='vertical'),
visualmap_opts=opts.VisualMapOpts(is_show=False, max_=6e4, min_=3000, dimension=0,
range_color=['#f5d69f', '#f5898b', '#ef5055']),
legend_opts=opts.LegendOpts(is_show=False),
xaxis_opts=opts.AxisOpts(is_show=False,),
yaxis_opts=opts.AxisOpts(axistick_opts=opts.AxisTickOpts(is_show=False),
axisline_opts=opts.AxisLineOpts(is_show=False)))
.set_series_opts(label_opts=opts.LabelOpts(is_show=True,
position='right',
font_style='italic'),
itemstyle_opts={"normal": {
"barBorderRadius": [30, 30, 30, 30],
'shadowBlur': 10,
'shadowColor': 'rgba(120, 36, 50, 0.5)',
'shadowOffsetY': 5,
}
}).reversal_axis())bar.render_notebook()
Out[4]:
In [5]:
t_data = data.groupby(['circumference', 'cup'])['datetime'].count().reset_index()t_data.columns = ['circumference', 'cup', 'num']#t_data.num = round(t_data.num.div(t_data.num.sum(axis=0), axis=0) * 100, 1)data_pair = [
{"name": 'A',
"label":{"show": True},
"children": []},
{"name": 'B',
"label":{"show": True},
"children": []},
{"name": 'C',
"label":{"show": True},
'shadowBlur': 10,
'shadowColor': 'rgba(120, 36, 50, 0.5)',
'shadowOffsetY': 5,
"children": []},
{"name": 'D',
"label":{"show": False},
"children": []},
{"name": 'E',
"label":{"show": False},
"children": []}
]for idx, row in t_data.iterrows():
t_dict = {"name": row.cup,
"label":{"show": True},
"children": []}
if row.num > 3000:
child_data = {"name": '{}-{}'.format(row.circumference, row.cup), "value":row.num, "label":{"show": True}}
else:
child_data = {"name": '{}-{}'.format(row.circumference, row.cup), "value":row.num, "label":{"show": False}}
if row.cup == "A":
data_pair[0]['children'].append(child_data)
elif row.cup == "B":
data_pair[1]['children'].append(child_data)
elif row.cup == "C":
data_pair[2]['children'].append(child_data)
elif row.cup == "D":
data_pair[3]['children'].append(child_data)
elif row.cup == "E":
data_pair[4]['children'].append(child_data)
In [6]:
c = (Sunburst(
init_opts=opts.InitOpts(
theme='purple-passion',
width="1000px",
height="1000px"))
.add(
"",
data_pair=data_pair,
highlight_policy="ancestor",
radius=[0, "100%"],
sort_='null',
levels=[
{},
{
"r0": "20%",
"r": "48%",
"itemStyle": {"borderColor": 'rgb(220,220,220)', "borderWidth": 2}
},
{"r0": "50%", "r": "80%", "label": {"align": "right"},
"itemStyle": {"borderColor": 'rgb(220,220,220)', "borderWidth": 1}}
],
)
.set_global_opts(
visualmap_opts=opts.VisualMapOpts(is_show=False, max_=90000, min_=3000,
range_color=['#f5d69f', '#f5898b', '#ef5055']),
title_opts=opts.TitleOpts(title="文 胸\n\n尺 碼 分 布",
pos_left="center",
pos_top="center",
title_textstyle_opts=opts.TextStyleOpts(font_style='oblique', font_size=30),))
.set_series_opts(label_opts=opts.LabelOpts(font_size=18, formatter="{b}: {c}")))c.render_notebook()
Out[6]:
In [7]:
grid = Grid(init_opts=opts.InitOpts(theme='purple-passion', width='1000px', height='1000px'))for idx, c in enumerate(['70', '75', '80', '85', '90', '95']):
if idx % 2 == 0:
x = 30
y = int(idx/2) * 30 + 20
else:
x = 70
y = int(idx/2) * 30 + 20
pos_x = str(x)+'%'
pos_y = str(y)+'%'
pie = Pie(init_opts=opts.InitOpts())
pie.add(
c,
[[row.cup, row.num]for i, row in t_data[t_data.circumference==c].iterrows()],
center=[pos_x, pos_y],
radius=[70, 100],
label_opts=opts.LabelOpts(formatter='{b}:{d}%'),
)
pie.set_global_opts(
title_opts=opts.TitleOpts(title="下胸圍={}".format(c),
pos_top=str(y-1)+'%', pos_left=str(x-4)+'%',
title_textstyle_opts=opts.TextStyleOpts(font_size=15)),
legend_opts=opts.LegendOpts(is_show=True))
grid.add(pie,grid_opts=opts.GridOpts(pos_left='20%'))grid.render_notebook()
Out[7]:
In [8]:
w_all = []for item in data.comment:
w_l = jieba.lcut(item)
w_all.extend(w_l)c = Counter(w_all)
In [10]:
gen_stylecloud(' '.join(w_all),
size=1000,
#max_words=1000,
font_path='/home/kesci/work/font/simhei.ttf',
#palette='palettable.tableau.TableauMedium_10',
icon_name='fas fa-heartbeat',
output_name='comment.png',
custom_stopwords=['沒有','使用者','填寫','評論']
)Image(filename='comment.png')
Out[10]:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69977871/viewspace-2700676/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- pyecharts做資料視覺化(二)Echarts視覺化
- 淘寶商品評論資料介面,電商平臺評論介面,行業商品評論資料介面程式碼封裝教程行業封裝
- 淘寶商品評論介面,商品評論內容,天貓商品評論介面程式碼展示
- 淘寶API分享:獲取淘寶商品評論API
- 淘寶天貓商品評論資料採集API介面程式碼展示API
- 淘寶商品銷量資料介面,淘寶商品月銷量,淘寶商品總銷量資料介面
- 【NBA 視覺化】使用Pyecharts實現湖人19-20賽季投籃資料視覺化~視覺化Echarts
- 用視覺化報告拿到20W年終獎的時候,才知道資料視覺化的重要視覺化
- Python爬蟲,抓取淘寶商品評論內容!Python爬蟲
- 京東商品評論資料介面,電商平臺評論介面,行業商品評論資料介面程式碼封裝教程行業封裝
- Python資料視覺化工具pyecharts使用細則Python視覺化Echarts
- 【Python視覺化】使用Pyecharts進行奧運會視覺化分析~Python視覺化Echarts
- SoviChart資料視覺化:條形圖(Bar chart)視覺化
- 呼叫API介面獲取淘寶商品評論:方法與實戰API
- Javascript抓取京東、淘寶商品資料JavaScript
- 網路爬蟲 淘寶/天貓獲得淘寶商品評論 API 返回值說明爬蟲API
- 【資料視覺化】周杰倫新歌《Mojito》豆瓣短評資料視覺化
- Java“牽手”淘寶商品列表頁資料採集+淘寶商品價格資料排序,淘寶API介面申請指南Java排序API
- Python——視覺化神器pyecharts的正確開啟方式Python視覺化Echarts
- 資料看板視覺化視覺化
- 資料視覺化【十五】視覺化
- 大資料視覺化大資料視覺化
- 警惕“資料視覺化”視覺化
- 資料視覺化基本原理——視覺化模型視覺化模型
- 資料視覺化與資訊視覺化怎麼搞?視覺化
- 遇見大資料視覺化 : 那些 WOW 的資料視覺化案例大資料視覺化
- 淘寶/天貓淘寶評論問答列表(item_question_answer-淘寶評論問答列表介面)
- 增補部落格 第九篇 python 圖書評論資料分析與視覺化Python視覺化
- 中秋味的視覺化大屏 【以python pyecharts為工具】視覺化PythonEcharts
- 什麼是資料視覺化,為什麼資料視覺化很重要?視覺化
- 資料視覺化--實驗五:高維非空間資料視覺化視覺化
- 論移動端的資料視覺化呈現Top 25視覺化
- 視覺化之資料視覺化最強工具推薦視覺化
- 採集淘寶商品詳情頁資料
- 淘寶API分享:關鍵字搜尋淘寶商品,獲取商品ID,詳情資料API
- 淘寶API系列:如何採集淘寶商品詳情頁資料?API
- 新冠肺炎資料視覺化視覺化
- 資料視覺化的秘密視覺化