圖1
圖2
圖3
圖4
圖5
圖6
「鏈接」
者:俊欣
來源:關于數據分析與可視化
今天我們就來說說如何用Pyecharts模塊來制作炫酷的可視化大屏,最后的效果如下
步驟如下:
這次我們使用的數據是虛構的某超市2021年第一季度的訂單數據,總共是有1000條,
df.info()
output
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1000 entries, 0 to 999
Data columns (total 17 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 訂單編號 1000 non-null object
1 分支 1000 non-null object
2 省份 1000 non-null object
3 顧客類型 1000 non-null object
4 性別 1000 non-null object
5 商品類型 1000 non-null object
6 單價 1000 non-null float64
7 數量 1000 non-null int64
8 Tax 5% 1000 non-null float64
9 總價 1000 non-null float64
10 日期 1000 non-null datetime64[ns]
.......
dtypes: datetime64[ns](1), float64(7), int64(1), object(8)
memory usage: 132.9+ KB
其中顧客的類型有普通顧客與會員,性別有男性與女性,剩下的還有包括商品類型、購買時間、支付方式、各個商品的毛利率等數據,
接下來我們開始各個圖表的繪制,我們先來看餅圖的繪制,代碼并不復雜,首先我們對“商品類型”這一列的數據進行統計
products_type_index = df["商品類型"].value_counts().index.tolist()
products_type_values = df["商品類型"].value_counts().values.tolist()
然后再調用Pyecharts()模塊中的Pie()實例進行圖表的繪制
def pie_chart_2():
c = (
Pie(init_opts=opts.InitOpts(chart_id=4, bg_color='#1C1C1C',
theme=ThemeType.INFOGRAPHIC))
.add("", [list(z) for z in zip(products_type_index,
products_type_values)])
.set_global_opts(title_opts=opts.TitleOpts(title="商品類型分布圖",
title_textstyle_opts=opts.TextStyleOpts(font_size=25, color='#FFFFFF')),
legend_opts=opts.LegendOpts(orient="vertical",
pos_left="5%",
pos_top="10%"))
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
)
return c
if __name__ == "__main__":
map = map_chart()
map.render("4.html")
output
另外,我們也看到了單張圖片當中有兩張餅圖的情況,這是使用了Pyecharts()模塊當中的Grid()實例,將若干張繪制完成的圖表遵從一定的順序來進行組合
grid = (
Grid(init_opts=opts.InitOpts(width='1000px', height='600px',
chart_id=3, bg_color='#1C1C1C'))
.add(c_1, grid_opts=opts.GridOpts(pos_left="60%"))
.add(c_2, grid_opts=opts.GridOpts(pos_right="50%"))
)
同樣地,我們將不同省份的數據給篩選出來之后,然后進行圖表的繪制
city_index = df["省份"].value_counts().index.tolist()
city_values = df["省份"].value_counts().values.tolist()
地圖的繪制用的是Pyecharts模塊當中的Map()實例,可以看到顧客幾乎都分布在北京、浙江以及上海這幾個地方
def map_chart():
c = (
Map(init_opts=opts.InitOpts(chart_id=2,
bg_color='#1C1C1C'))
.add("商家A", [list(z) for z in zip(city_index,
city_values)], "china")
.set_global_opts(
title_opts=opts.TitleOpts(title="顧客在全國的分布圖",
title_textstyle_opts=opts.TextStyleOpts(font_size=25,
color='#FFFFFF')),
visualmap_opts=opts.VisualMapOpts(max_=250),
)
)
return c
if __name__ == "__main__":
map = map_chart()
map.render("2.html")
output
我們針對的是購買時間,看一下哪些購買時間段的人會比較多
hour_index = df["小時"].value_counts().index.tolist()
hour_index_str = [str(hour_ind) + "時" for hour_ind in hour_index]
hour_values = df["小時"].value_counts().values.tolist()
調用Bar()實例進行繪制圖表
def bar_chart():
c = (
Bar(init_opts=opts.InitOpts(chart_id=5, bg_color='#1C1C1C',
theme=ThemeType.CHALK))
.add_xaxis(hour_index_str)
.add_yaxis("商家A", hour_values)
.set_global_opts(title_opts=opts.TitleOpts(title="購物的時間分布",
subtitle="購物時間",
title_textstyle_opts=opts.TextStyleOpts(font_size=25, color='#FFFFFF')))
)
return c
if __name__ == "__main__":
map = map_chart()
map.render("5.html")
output
將繪制出來的若干份圖表組合到一塊兒,總共有這幾種方式
我們使用的是Page()示例來順序展示多張圖表,先實例化該對象
page = Page(layout=Page.DraggablePageLayout, page_title="基于Pyecharts的銷售數據大屏")
之所以用DraggablePageLayout屬性是為了調整成我們所想要的布局,然后將我們所繪制的圖表一一添加
page.add(
title(),
map_chart(),
pie_chart(),
pie_chart_2(),
bar_chart(),
)
page.render('test_2.html')
最后生成一個test_2.html的文件,然后我們將布局調整成我們想要的結果
對圖片布局完成之后,要記得點擊左上角的save config按鈕對布局文件進行保存。之后本地會生成一個chart_config.json文件,然后運行下面的代碼
page.save_resize_html('test_2.html', cfg_file='chart_config.json', dest='可視化大屏.html')
打開重新生成的可視化大屏.html,便是新的內容
有粉絲提到說是不是可以寫一篇用Pyecharts模塊做可視化大屏的相關教程,小編立馬就答應了他的請求。那么今天我們就來說說如何用Pyecharts模塊來制作炫酷的可視化大屏,最后的效果如下
步驟如下:
這次我們使用的數據是虛構的某超市2021年第一季度的訂單數據,總共是有1000條,
df.info()
output
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1000 entries, 0 to 999
Data columns (total 17 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 訂單編號 1000 non-null object
1 分支 1000 non-null object
2 省份 1000 non-null object
3 顧客類型 1000 non-null object
4 性別 1000 non-null object
5 商品類型 1000 non-null object
6 單價 1000 non-null float64
7 數量 1000 non-null int64
8 Tax 5% 1000 non-null float64
9 總價 1000 non-null float64
10 日期 1000 non-null datetime64[ns]
.......
dtypes: datetime64[ns](1), float64(7), int64(1), object(8)
memory usage: 132.9+ KB
其中顧客的類型有普通顧客與會員,性別有男性與女性,剩下的還有包括商品類型、購買時間、支付方式、各個商品的毛利率等數據,
接下來我們開始各個圖表的繪制,我們先來看餅圖的繪制,代碼并不復雜,首先我們對“商品類型”這一列的數據進行統計
products_type_index = df["商品類型"].value_counts().index.tolist()
products_type_values = df["商品類型"].value_counts().values.tolist()
然后再調用Pyecharts()模塊中的Pie()實例進行圖表的繪制
def pie_chart_2():
c = (
Pie(init_opts=opts.InitOpts(chart_id=4, bg_color='#1C1C1C',
theme=ThemeType.INFOGRAPHIC))
.add("", [list(z) for z in zip(products_type_index,
products_type_values)])
.set_global_opts(title_opts=opts.TitleOpts(title="商品類型分布圖",
title_textstyle_opts=opts.TextStyleOpts(font_size=25, color='#FFFFFF')),
legend_opts=opts.LegendOpts(orient="vertical",
pos_left="5%",
pos_top="10%"))
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
)
return c
if __name__ == "__main__":
map = map_chart()
map.render("4.html")
另外,我們也看到了單張圖片當中有兩張餅圖的情況,這是使用了Pyecharts()模塊當中的Grid()實例,將若干張繪制完成的圖表遵從一定的順序來進行組合
grid = (
Grid(init_opts=opts.InitOpts(width='1000px', height='600px',
chart_id=3, bg_color='#1C1C1C'))
.add(c_1, grid_opts=opts.GridOpts(pos_left="60%"))
.add(c_2, grid_opts=opts.GridOpts(pos_right="50%"))
)
同樣地,我們將不同省份的數據給篩選出來之后,然后進行圖表的繪制
city_index = df["省份"].value_counts().index.tolist()
city_values = df["省份"].value_counts().values.tolist()
地圖的繪制用的是Pyecharts模塊當中的Map()實例,可以看到顧客幾乎都分布在北京、浙江以及上海這幾個地方
def map_chart():
c = (
Map(init_opts=opts.InitOpts(chart_id=2,
bg_color='#1C1C1C'))
.add("商家A", [list(z) for z in zip(city_index,
city_values)], "china")
.set_global_opts(
title_opts=opts.TitleOpts(title="顧客在全國的分布圖",
title_textstyle_opts=opts.TextStyleOpts(font_size=25,
color='#FFFFFF')),
visualmap_opts=opts.VisualMapOpts(max_=250),
)
)
return c
if __name__ == "__main__":
map = map_chart()
map.render("2.html")
我們針對的是購買時間,看一下哪些購買時間段的人會比較多
hour_index = df["小時"].value_counts().index.tolist()
hour_index_str = [str(hour_ind) + "時" for hour_ind in hour_index]
hour_values = df["小時"].value_counts().values.tolist()
調用Bar()實例進行繪制圖表
def bar_chart():
c = (
Bar(init_opts=opts.InitOpts(chart_id=5, bg_color='#1C1C1C',
theme=ThemeType.CHALK))
.add_xaxis(hour_index_str)
.add_yaxis("商家A", hour_values)
.set_global_opts(title_opts=opts.TitleOpts(title="購物的時間分布",
subtitle="購物時間",
title_textstyle_opts=opts.TextStyleOpts(font_size=25, color='#FFFFFF')))
)
return c
if __name__ == "__main__":
map = map_chart()
map.render("5.html")
將繪制出來的若干份圖表組合到一塊兒,總共有這幾種方式
我們使用的是Page()示例來順序展示多張圖表,先實例化該對象
page = Page(layout=Page.DraggablePageLayout, page_title="基于Pyecharts的銷售數據大屏")
之所以用DraggablePageLayout屬性是為了調整成我們所想要的布局,然后將我們所繪制的圖表一一添加
page.add(
title(),
map_chart(),
pie_chart(),
pie_chart_2(),
bar_chart(),
)
page.render('test_2.html')
最后生成一個test_2.html的文件,然后我們將布局調整成我們想要的結果
對圖片布局完成之后,要記得點擊左上角的save config按鈕對布局文件進行保存。之后本地會生成一個chart_config.json文件,然后運行下面的代碼
page.save_resize_html('test_2.html', cfg_file='chart_config.json', dest='可視化大屏.html')
打開重新生成的可視化大屏.html,便是新的內容
*請認真填寫需求信息,我們會在24小時內與您取得聯系。