数据分析进阶 - 使用Pyecharts搭建数据看板

前言

之前尝试过多种数据可视化的方式,包括TableauSupersetmatplotlib 等,在之前的博客中都有所介绍,今天主要介绍如何利用Pyecharts来搭建数据看板~

温馨提示

如果在使用过程中遇到无法渲染(即输出均为空白)的情况,可以考虑使用环境是否受网络限制无法读取JS文件,这个时候可以按以下步骤进行处理:

1、前往https://github.com/pyecharts/pyecharts-assets下载assets文件
2、存放在当地目录或者配置在服务器

wget https://github.com/pyecharts/pyecharts-assets/archive/master.zip
cd pyecharts-assets
python -m http.server

3、修改代码

from pyecharts.globals import CurrentConfig, OnlineHostType

# 存放目录
CurrentConfig.ONLINE_HOST="D:\\public\\pyecharts-assets-master\\assets\\"

# 配置服务器
CurrentConfig.ONLINE_HOST = "http://127.0.0.1:8000/assets/"

安装

pip install pyecharts

使用

具体图例可参考官方文档:https://pyecharts.org/#/zh-cn/intro

import json
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Sankey, Page, Pie, Scatter, Funnel, Line
from pyecharts.components import Table
from pyecharts.commons.utils import JsCode
1、看板标题
def plot_dashboard_title():
    pic = Pie(init_opts=opts.InitOpts(chart_id=1)).set_global_opts(title_opts=opts.TitleOpts(title="数据可视化看板", 
    title_textstyle_opts=opts.TextStyleOpts(font_size=28), pos_left="center", pos_top="middle"))
    pic.render("./dashboard_output/dashboard_title.html")
    return pic
2、桑基图
def plot_sankey():
    with open('./dashboard_data/node.json', 'r', encoding='utf-8') as f:
        node = json.load(f)
    with open('./dashboard_data/link.json', 'r', encoding='utf-8') as f:
        link = json.load(f)
        
    pic = (Sankey(init_opts=opts.InitOpts(width='1300px', height='800px'))
           .add('', node, link, node_width=30, node_gap=10, node_align='left',
                linestyle_opt=opts.LineStyleOpts(opacity=0.3, curve=0.5, color='source'),
                label_opts=opts.LabelOpts(position='left'), )
           .set_global_opts(title_opts=opts.TitleOpts(title="场景归因入口UV流向分布"))
           )
    pic.render("./dashboard_output/sankey_image.html")
    return pic
3、数据表
def plot_table():
    df = pd.read_csv('./dashboard_data/dz_gy_data.csv')
    df['rate'] = df.apply(lambda x: round(x['result_user']/x['apply_user'],3), axis=1)
    df['page'] = df.apply(lambda x: x['new_source_event'].split('-')[0], axis=1)
    df['source'] = df.apply(lambda x: x['new_source_event'].split('-')[1], axis=1)
    df = df.sort_values(by=['apply_cnt'], ascending=False)
    headers = ['一级页面', '归因入口', '页面浏览PV', '页面浏览UV', '提交率(提交UV/页面浏览UV)']
    rows = df[['page', 'source', 'apply_cnt', 'apply_user', 'rate']].values.tolist()
    pic = Table().add(headers, rows).set_global_opts(title_opts=opts.ComponentTitleOpts(title="")) 
    pic.render("./dashboard_output/table_image.html")
    return pic
4、散点图
def plot_scatter():
    df = pd.read_csv('./dashboard_data/dz_gy_data.csv')
    data = df[['new_source_event', 'pv', 'uv']].sort_values(by=['pv'], ascending=False).head(5)
    pic = (Scatter(init_opts=opts.InitOpts(width='610px',height='400px')).add_xaxis(
    data['pv'].astype(int)).add_yaxis("",[list(z) for z in zip(data['uv'], data.new_source_event)],
    label_opts=opts.LabelOpts(formatter=JsCode("function(params){return params.value[2]}")),).set_global_opts(
    title_opts=opts.TitleOpts(title=name+"TOP5归因入口页面浏览PV与UV分布"),yaxis_opts=opts.AxisOpts(name="UV"),
    xaxis_opts=opts.AxisOpts(name="PV"),))
    pic.render("./dashboard_output/bubble_image.html")
    return pic
5、漏斗图
def plot_funnel():
    df = pd.read_csv('./dashboard_data/dz_funnel_data.csv')
    data = df.values.tolist()[0]
    header = ["阶段一", "阶段二", "阶段三", "阶段四","阶段五", "阶段六"]
    pic = (Funnel(init_opts=opts.InitOpts(width='615px', height='400px')).add("漏斗", 
    [list(z) for z in zip(header, data)], label_opts=opts.LabelOpts(position='left')).set_global_opts(
        title_opts=opts.TitleOpts(title=name+"漏斗转化"), legend_opts=opts.LegendOpts(is_show=False)))
    pic.render("./dashboard_output/funnel_image.html")
    return pic
5、折线图
def plot_trend_line():
    df = pd.read_csv('./dashboard_data/dz_trend_uv.csv')
    pic = Line().add_xaxis(xaxis_data=[str(i) for i in df.s_date.tolist()])\
        .add_yaxis(series_name='页面1', y_axis=df['uv1'].tolist(),label_opts=opts.LabelOpts(is_show=False))\
        .add_yaxis(series_name='页面2', y_axis=df['uv2'].tolist(), label_opts=opts.LabelOpts(is_show=False))\
        .add_yaxis(series_name='页面3', y_axis=df['uv3'].tolist(), label_opts=opts.LabelOpts(is_show=False))\
        .set_global_opts(title_opts=opts.TitleOpts(title="各页面日浏览"+name),
        tooltip_opts=opts.TooltipOpts(trigger="axis"),
                         yaxis_opts=opts.AxisOpts(type_="value",
                         axistick_opts=opts.AxisTickOpts(is_show=True),
                         splitline_opts=opts.SplitLineOpts(is_show=True),),)\
        .set_series_opts(markarea_opts=opts.MarkAreaOpts(data=[opts.MarkAreaItem(name="特殊日", x=('4','6')),
                                                               opts.MarkAreaItem(name="特殊日", x=('14','16')),
                                                               opts.MarkAreaItem(name="特殊日", x=('24','26'))]))
    pic.render("./dashboard_output/line_image.html")
    return pic
6、看板搭建
def dashboard_output():
    page = Page(layout=Page.DraggablePageLayout).add(
        plot_dashboard_title(),
        plot_gy_sankey(),
        plot_gy_table(),
        plot_scatter(),
        plot_funnel(),
        plot_trend_line()
    )
    page.render("./dashboard_output/page_draggable.html")
7、调整布局保存chart_config.json

在这里插入图片描述

8、根据布局重新输出
Page.save_resize_html("./dashboard_output/page_draggable.html", cfg_file="./dashboard_output/chart_config.json",
dest="./dashboard_output/new_page_draggable.html")
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Pyecharts数据看板是指在一个大屏上显示多项数据图,如地图、折线图、柱状图、漏斗图等等。在Pyecharts 0.5.x版本中,可以使用grid来实现数据看板的功能。Grid是Pyecharts中的一个自定义图表接口,可以并行显示多张图表。你可以参考官方教程中的代码来实现数据看板的功能。\[1\]\[2\] 在低版本的Pyecharts包中,如果想要实现含地图的数据看板,需要将地图添加进去。你可以从https://github.com/pyecharts/pyecharts-assets下载assets文件,并将其存放在本地目录或配置在服务器上。然后使用命令python -m http.server来启动服务器。\[3\] 希望以上信息对你有帮助! #### 引用[.reference_title] - *1* *2* [pyecharts0.5.x制作含地图的数据看板](https://blog.csdn.net/u012848304/article/details/105706070)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [数据分析进阶 - 使用Pyecharts搭建数据看板](https://blog.csdn.net/Totoro1745/article/details/127034850)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值