专栏名称: 小蚊子数据分析
数据分析知识、培训、招聘分享。
目录
相关文章推荐
发现新西兰  ·  突发:大S流感去世,年仅48岁 ·  5 天前  
51好读  ›  专栏  ›  小蚊子数据分析

手把手教你用Pyecharts制作数据可视化大屏

小蚊子数据分析  · 公众号  ·  · 2020-12-21 09:02

正文

今天手把手教你 用 pyecharts 制作一个简单的数据可视化大屏:

首先,新建一个文本文件,命名为 chart_config.json,文件中的内容如下:

[{"cid":"1","width":"1860px","height":"80px","top":"0px","left":"0px"}, {"cid":"2","width":"500px","height":"410px","top":"80px","left":"0px"}, {"cid":"3","width":"860px","height":"820px","top":"80px","left":"500px"}, {"cid":"4","width":"500px","height":"410px","top":"80px","left":"1360px"}, {"cid":"5","width":"500px","height":"410px","top":"490px","left":"0px"}, {"cid":"6","width":"500px","height":"410px","top":"490px","left":"1360px"}]

其中每个图表有 5 个参数:

cid 是图表编号,对应后面作图将用到的 chart_id;

width 是图表的宽度;

height 是图表的高度;

top 是图表距离顶部的位置;

left 是图表距离左边的位置。

这些参数决定了每个图表在大屏中的大小和位置。

然后,在 Jupyter Lab 中新建一个 Notebook,运行以下代码:

# 导入相关库from pyecharts import options as optsfrom pyecharts.charts import Map, Bar, Grid, Line, Page, Pie, Polarfrom pyecharts.commons.utils import JsCodefrom pyecharts.globals import ThemeType import pandas as pd
# 从 data 文件夹读取 Excel 中的数据df = pd.read_excel('./data/超市数据.xlsx')
# 用数据透视表的方法汇总各省销售额province_sale = df.pivot_table(values='销售额', index='省/自治区', aggfunc=sum)# 各地区销售额district_sale = df.pivot_table(values='销售额', index='地区', aggfunc=sum)# 每天各类产品销售额daily_sale = df.fillna(0).pivot_table(values='销售额', index='订单日期', columns='类别', aggfunc=sum).fillna(0)# 细分类别销售额parts_sale = df.fillna(0).pivot_table(values='销售额', index='子类别', aggfunc=sum).fillna(0)# 邮寄方式销售额mail_sale = df.fillna(0).pivot_table(values='销售额', index='邮寄方式', aggfunc=sum).fillna(0)
# 把数据整理成绘图所需的列表格式,规范名称,销售额换算成万元,保留一位小数list_province_sale = [list(z) for z in zip(province_sale.index.str.replace('自治区', ''), round(province_sale.销售额/10000, 1))]
# 求各省销售额的最大值max_sale = round(province_sale.销售额.max()/10000,0)
# 数据可视化大屏的标题def main_title(): c = ( Pie(init_opts=opts.InitOpts(chart_id=1, bg_color='#00589F')) .set_global_opts( title_opts=opts.TitleOpts(title="超市数据管理驾驶舱", title_textstyle_opts=opts.TextStyleOpts(font_size=36, color='#FFFFFF'), pos_left='center', pos_top='middle')) ) return c
# 柱形图def bar_sale() -> Bar: c = ( Bar(init_opts=opts.InitOpts(chart_id=2, bg_color='#00589F')) .add_xaxis(list(district_sale.index)) .add_yaxis("", list(round(district_sale.销售额/10000,1)), color='#5D9BCF', label_opts=opts.LabelOpts(color='#FFFFFF')) .set_global_opts( title_opts=opts.TitleOpts(title="各地区销售额汇总", pos_left='center', pos_top='10', title_textstyle_opts=opts.TextStyleOpts(color="#FFFFFF", font_size=16)), xaxis_opts=opts.AxisOpts ( axislabel_opts=opts.LabelOpts(color='#999999'), axistick_opts=opts.AxisTickOpts(is_align_with_label=True), axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color='#999999')), ), yaxis_opts=opts.AxisOpts( axislabel_opts=opts.LabelOpts(color='#999999'), axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color='#999999')), ), ) ) return c
# 数据地图def map_china() -> Map: # 绘制地图 c = ( # 主题样式和背景颜色 Map(init_opts=opts.InitOpts(chart_id=3, bg_color='#00589F')) # 添加地图数据 .add(series_name="省份", data_pair=list_province_sale, maptype="china", is_map_symbol_show=False) # 全局配置 .set_global_opts( # 标题文字 title_opts=opts.TitleOpts(title="{:,}".format(int(province_sale.销售额.sum())), # 副标题 subtitle='\t\t2016年到2019年总销售额', # 标题位置 pos_left='center', pos_top=20, # 标题颜色和大小 title_textstyle_opts=opts.TextStyleOpts(color="#FBC171", font_size=36), # 副标题颜色和大小 subtitle_textstyle_opts=opts.TextStyleOpts(color="#CCCCCC", font_size=15)), legend_opts=opts.LegendOpts(is_show=False), # 可视化组件参数 visualmap_opts=opts.VisualMapOpts( # 最大值 max_=max_sale, # 显示精确的分段值 is_piecewise=True, # 图例位置 pos_left='36%', pos_bottom=50, # 图例字体颜色 textstyle_opts=opts.TextStyleOpts(color="#FFFFFF")), ) # 隐藏文字标签 .set_series_opts(label_opts=opts.LabelOpts(is_show=False)) ) return c
# 折线图def line_daily() -> Line: c = ( Line(init_opts=opts.InitOpts(chart_id=4, bg_color='#00589F')) .add_xaxis(list(daily_sale.iloc[-30:,:].index.strftime('%Y-%m-%d'))) .add_yaxis("办公用品", list(round(daily_sale.iloc[-30:,:].办公用品,1)), is_smooth=True, color='#5D9BCF') .add_yaxis("家具", list(round(daily_sale.iloc[-30:,:].家具,1)), is_smooth=True, color='#FBC171') .set_series_opts( areastyle_opts=opts.AreaStyleOpts(opacity=0.2), label_opts=opts.LabelOpts(is_show=False), ) .set_global_opts( title_opts=opts.TitleOpts(title="分类产品每天销售额变化趋势", pos_left='center', pos_top='10', title_textstyle_opts=opts.TextStyleOpts(color="#FFFFFF", font_size=16)), xaxis_opts=opts.AxisOpts( axislabel_opts=opts.LabelOpts(color='#999999'), axistick_opts=opts.AxisTickOpts(is_align_with_label=True), axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color='#999999')), is_scale=False, boundary_gap=False), yaxis_opts=opts.AxisOpts( axislabel_opts=opts.LabelOpts(color='#999999'), axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color='#999999')), ), legend_opts=opts.LegendOpts(pos_top='36', textstyle_opts=opts.TextStyleOpts(color="#FFFFFF", font_size=12)), ) ) return c
# 饼图def pie_parts() -> Pie: x_data = list(parts_sale.index) y_data = list(round(parts_sale.销售额/10000,1)) data_pair = [list(z) for z in zip(x_data, y_data)] data_pair.sort(key=lambda x: x[1])
c = ( Pie(init_opts=opts.InitOpts(chart_id=5, bg_color="#00589F", theme=ThemeType.MACARONS)) .add( series_name="细分产品类别", data_pair=data_pair, rosetype="radius", radius="75%", center=["50%", "50%"], label_opts=opts.LabelOpts(is_show=False, position="center"), ) .set_global_opts( title_opts=opts.TitleOpts( title="细分产品类别分布", pos_left="center", pos_top="0", title_textstyle_opts=opts.TextStyleOpts(color="#FFFFFF"), ), legend_opts=opts.LegendOpts(is_show=False), ) ) return c
# 极坐标图def polar_parts() -> Polar: c = ( Polar(init_opts=opts.InitOpts(chart_id=6, bg_color="#00589F")) .add_schema( radiusaxis_opts=opts.RadiusAxisOpts(data=list(mail_sale.index), type_="category", axisline_opts=opts.AxisLineOpts






请到「今天看啥」查看全文