美文网首页
附代码+3万多数据|全国主流奶茶店可视化实战教程

附代码+3万多数据|全国主流奶茶店可视化实战教程

作者: 迷途小球迷 | 来源:发表于2020-08-17 08:58 被阅读0次

    上一篇介绍了几个品牌的奶茶店数据可视化,由于时间原因没有附上数据和完整代码教程,这里将通过几个简单的图表,介绍如何使用pyecharts做数据可视化。

    数据方面选择了几个主流的奶茶门店:

    image

    数据整理清洗后,有36948条数据,如果需要样本数据,可以关注公众号并在后台回复:**奶茶数据 **,即可获取。

    image

    奶茶品牌列表以及该品牌全国的总门店数量:

    #奶茶品牌列表
    brand_list = ['1点点',
                   '益禾堂',
                   'CoCo都可',
                   '贡茶',
                   '蜜雪冰城',
                   '奈雪の茶',
                   '书亦烧仙草',
                   '瑞幸咖啡',
                   '喜茶',
                   '古茗',
                   '茶颜悦色']
    

    02

    分析思路

    样本数据中主要有两个维度:城市和品牌,我们做可视化的目的是给读者多角度展示数据背后的信息或者规律。一般我们可以通过两个维度做二维表,也可以通过品牌数量来增加一个维度做热力图,也可以通过城市位置属性做地理图。下面我们通过几个不同类型的图表,手把手教大家如何使用pyecharts进行数据可视化。

    03

    可视化教程

    3.1 柱状图Bar

    先介绍Pyecharts的构图原理:

    1)选择图表:每一种类型的图表,都需要声明不同的对象,比如柱状图是Bar;

    2)调整参数:创建好这个对象后,有几个必须添加的函数比如x轴 add_xaxis 和y轴 add_yaxis,全局配置项set_global_options 和系列配置项set_series_opts 将数据和我们想要的参数设置好;

    3)最后选择渲染到notebook中render_notebook 还是渲染到html文件render("grid_geo_bar.html")。

    柱状图是数据分析中非常常见的,其构造原理非常简单,我们只需要将X轴和Y的数据填好即可。

    比如横向比较不同品牌奶茶店在三个城市的门店数量:

    bar = (
        Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK, width='1000px', height='500px'))
        .add_xaxis(['1点点','益禾堂','CoCo都可','贡茶','蜜雪冰城','奈雪の茶','书亦烧仙草','瑞幸咖啡','喜茶'])
        .add_yaxis("上海市", [(len(df_new[(df_new['city']=='上海市') & (df_new['brand']==brand_array[j])])) for j in range(10)])
        .add_yaxis("广州市", [(len(df_new[(df_new['city']=='广州市') & (df_new['brand']==brand_array[j])])) for j in range(10)])
        .add_yaxis("深圳市", [(len(df_new[(df_new['city']=='深圳市') & (df_new['brand']==brand_array[j])])) for j in range(10)])
        .set_global_opts(legend_opts=opts.LegendOpts(pos_left="10%"))
    )
    bar.render_notebook()
    
    image

    这里三个Y轴的数据都是一个list,也可以通过直接填入数字代替,比如上海市的:

    .add_yaxis("上海市", [331, 3, 454, 22, 38, 22, 1, 554, 79, 0])
    

    3.2 地理坐标图Geo

    pyecharts 所有方法均支持上一个例子中的链式调用,也支持分步骤调用,这里我们演示另一种调用方法。

    并在这个例子中介绍如何使用初始化配置项init_opts和调整几个常见的参数。

    如下图中的theme和width、height可以调整主题和图表尺寸;

    add_schema(maptype="china") 设置地图类型,具体参考 pyecharts.datasets.map_filenames.json 文件;

    type_=ChartType.HEATMAP 设置图表类型,这里是热力图,Geo 图类型,有 scatter, effectScatter, heatmap, lines 4 种;

    VisualMapOpts(is_piecewise=False, min_=10,max_=1500) 视觉选项,设置热力图颜色对应的数值大小。

    heytea_map = df_new.groupby(by='city').count().sort_values(by='id',ascending=False)['id']
    g = Geo(init_opts=opts.InitOpts(theme=ThemeType.DARK, width='1000px', height='700px'))
    g.add_schema(maptype="china")
    # 使用数据分析大都需要使用 numpy/pandas,但是 numpy 的 numpy.int64/numpy.int32/... 等数据类型并不继承自 Python.int
    g.add("热力图",
          [list(z) for z in zip(heytea_map.index, heytea_map.values.tolist())],
         type_=ChartType.HEATMAP,)
    g.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    g.set_global_opts(
            visualmap_opts=opts.VisualMapOpts(is_piecewise=False, min_=10,max_=1500),
            title_opts=opts.TitleOpts(title="全国门店城市分布图"),
    
        )
    g.render_notebook()
    
    image

    3.3 组合图Grid

    介绍完两种不同的类型,我们就可以做一个组合图,原理是在原来Bar和Geo的基础上,增加一个Grid,把Bar和Geo的作为配置项添加进去,并设置好位置参数。

    bar = (
        Bar()
        .add_xaxis(city_array)
        .add_yaxis("", [len(df_new[(df_new['city']==city_array[i])]) for i in range(9)])
        .set_global_opts(legend_opts=opts.LegendOpts(pos_left="10%"))
    )
    geo = (
        Geo()
        .add_schema(maptype="china")
        .add("", [list(z) for z in zip(city_array, [len(df_new[(df_new['city']==city_array[i])]) for i in range(9)])])
        .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
        .set_global_opts(
            visualmap_opts=opts.VisualMapOpts(is_piecewise=True),
            title_opts=opts.TitleOpts(title="几大城市不同10种门店数量地理分布图"),
        )
    )
    grid = (
        Grid(init_opts=opts.InitOpts(theme=ThemeType.ESSOS, width='1000px', height='700px'))
        .add(bar, grid_opts=opts.GridOpts(pos_top="50%", pos_right="45%"))
        .add(geo, grid_opts=opts.GridOpts(pos_left="50%"))
        .render("grid_geo_bar.html")
    )
    
    image

    3.4 热力图

    根据样本数据,为了更直观查看多个主流城市对应奶茶门店的数量,这里推荐使用热力图,既有城市和品牌的维度,又有不同颜色区分门店数量的大小,能更好的为读者展示数据,更容易看懂。

    city_array = ['广州市','深圳市','上海市','北京市','重庆市','成都市','长沙市','杭州市','武汉市']
    brand_array = ['1点点','益禾堂','CoCo都可','贡茶','蜜雪冰城','奈雪の茶','书亦烧仙草','瑞幸咖啡','喜茶','古茗']
    value = [[i, j, len(df_new[(df_new['city']==city_array[i]) & (df_new['brand']==brand_array[j])])] for i in range(9) for j in range(10)]
    c = (
        HeatMap(init_opts=opts.InitOpts(theme=ThemeType.DARK, width='1000px', height='700px'))
        .add_xaxis(city_array)
        .add_yaxis(
            "",
            brand_array,
            value,
            label_opts=opts.LabelOpts(is_show=True, position="inside"),
        )
        .set_global_opts(
            title_opts=opts.TitleOpts(title="几大城市不同品牌门店数量热力图"),
            #visualmap_opts=opts.VisualMapOpts(),
            visualmap_opts=opts.VisualMapOpts(is_piecewise=False, min_=0,max_=550),
        )
        .render("heatmap_with_label_show.html")
    )
    
    image

    3.5 桑基图

    image

    当然还有另外一种图可以用于展示,但这里不太合适,就把图显示出来就好。为什么介绍热力图和桑基图呢,这里涉及到pyecharts绘图的一个难点,就是数据格式的问题。不同的图表,要求的数据格式不一样,比如柱状图只需要xy轴填入list列表即可,有的图需要在列表中嵌套多个dict字典,在数据量比较少的时候,可以直接声明数据:

    image

    但是数据量多则需要我们根据要求去讲dataframe中的数据转化好,并且注意数值必须是int,而不能是pandas中的int64,否则出来的图表是空白的,但是不会报错,这个新手入门比较难debug。

    到这里,学完这些,就可以算对pyecharts的入门基础有一些了解,如果需要绘制出更多炫酷效果的图表,则需要用到一些前端开发的知识,后续进阶我们再介绍。

    如果需要样本数据,可以关注公众号(迷途小球迷)并在后台回复:**奶茶数据 **,即可获取。

    相关文章

      网友评论

          本文标题:附代码+3万多数据|全国主流奶茶店可视化实战教程

          本文链接:https://www.haomeiwen.com/subject/ibyfjktx.html