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

上一篇介绍了几个品牌的奶茶店数据可视化,由于时间原因没有附上数据和完整代码教程,这里将通过几个简单的图表,介绍如何使用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的入门基础有一些了解,如果需要绘制出更多炫酷效果的图表,则需要用到一些前端开发的知识,后续进阶我们再介绍。

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,864评论 6 494
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,175评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,401评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,170评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,276评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,364评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,401评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,179评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,604评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,902评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,070评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,751评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,380评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,077评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,312评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,924评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,957评论 2 351