天天看点

给报告加分:善用高大上的图表

作者:数据好玩

在做专题分析或者业务汇报时,数据分析师不仅要取数分析,还要产出完整的PPT报告。报告做到什么程度,主要看领导风格。有的不在乎报告美观度,正确的数据、科学的分析、可落地的结论和建议、有逻辑的报告框架这4点达成了就差不多了,报告不丑就行。有的比较在乎报告美观度,除了以上4点,数据分析师还要在报告美化上下功夫。而报告美化的技巧之一就是使用高大上的图表来展示数据,本文就总结下一些高大上的图表的具体应用场景和Python绘图过程。

1. 地图

应用场景:

主要用于展示各国家数据、各省份数据、各城市数据等

Python绘图过程:

# 假设我们有一份2021年全国各省GDP的数据
df = pd.read_excel(r'.\2021年全国各省GDP.xlsx')
df.head()


# 绘制GDP地图

# 创建数据对
data_pair = [list(z) for z in zip(df['省份'], df['GDP(亿元)'])]

# 创建地图
c = (
    Map()
    .add(
        series_name='GDP(亿元)',
        data_pair=data_pair,
        maptype='china',
    )
     .set_global_opts(
        title_opts=opts.TitleOpts('2021年全国各省GDP'), 
        visualmap_opts=opts.VisualMapOpts(
            min_=min(df['GDP(亿元)']),
            max_=max(df['GDP(亿元)']),
            range_text=['高', '低'],
            pos_top='center',
            is_piecewise=True,
            pieces=[
                {'min':0, 'max':10000, 'label':'0-1W', 'color':'#dae8ff'},
                {'min':10000, 'max':50000, 'label':'1W-5W', 'color':'#b6d2ff'},
                {'min':50000, 'max':80000, 'label':'5W-8W', 'color':'#aacbff'},
                {'min':80000, 'max':100000, 'label':'8W-10W', 'color':'#6da6ff'},
                {'min':100000, 'max':150000, 'label':'10W-15W', 'color':'#3d89ff'},
            ]
        ),
    )
    .set_series_opts(
        label_opts=opts.LabelOpts(is_show=True),
        showLegendSymbol=False,
    )
)
c.render("2021年全国各省GDP地图.html")  #保存到本地
c.render_notebook()  #在notebook中显示
           

源数据:

给报告加分:善用高大上的图表

图表:

给报告加分:善用高大上的图表

2. 桑基图

应用场景:

主要用于展示页面流转数据、用户迁移数据、构成数据等

Python绘图过程:

# 假设我们有一份用户等级迁移数据
customer_level = pd.DataFrame({
    'cst_grp_from': ['1月_M0','1月_M0','1月_M0','1月_M1','1月_M1','1月_M1','1月_M1','1月_M1','1月_M2','1月_M2','1月_M2','1月_M2','1月_M2','1月_M2','1月_M3','1月_M3','1月_M3','1月_M3','1月_M3','1月_M3'],
    'cst_grp_to': ['2月_M0','2月_M1','2月_M2','2月_M0','2月_M1','2月_M2','2月_M3','2月_M4','2月_M0','2月_M1','2月_M2','2月_M3','2月_M4','2月_M5','2月_M0','2月_M1','2月_M2','2月_M3','2月_M4','2月_M5'],
    'cnt': np.random.randint(10000, 50000, 20)
})
customer_level.head()


# 绘制用户等级迁移桑基图

# 创建nodes
node_contents = sorted(list(set(customer_level['cst_grp_from'].tolist() + customer_level['cst_grp_to'].tolist())))
nodes = [{'name': x} for x in node_contents]

# 创建links
links = [{'source': x, 'target': y, 'value': z} for x, y, z in zip(customer_level['cst_grp_from'], customer_level['cst_grp_to'], customer_level['cnt'])]
links

# 创建桑基图
c = (
    Sankey()
    .add(
        series_name='数量',
        nodes=nodes,
        links=links,
        linestyle_opt=opts.LineStyleOpts(opacity=0.3, curve=0.4, color="source"),
        label_opts=opts.LabelOpts(position="right"),
    )
    .set_global_opts(title_opts=opts.TitleOpts(title="用户等级迁移"))
)
c.render("用户等级迁移桑基图.html")  #保存到本地
c.render_notebook()  #在notebook中显示
           

源数据:

给报告加分:善用高大上的图表

图表:

给报告加分:善用高大上的图表

3. 漏斗图

应用场景:

主要用于展示转化数据等

Python绘图过程:

# 假设我们有一份按月的贷款转化数据
df = pd.DataFrame({
    '月份': ['2022-10', '2022-11', '2022-12'],
    '注册': np.random.randint(low=5000, high=6000, size=3),
    '申请': np.random.randint(low=4000, high=5000, size=3),
    '通过': np.random.randint(low=3000, high=4000, size=3),
    '放款': np.random.randint(low=2000, high=3000, size=3),
})
df


# 绘制12月的贷款转化漏斗图
data = df[df['月份']=='2022-12'].drop('月份', axis=1)
data_pair = [list(z) for z in zip(list(data.columns), list(map(int, list(data.iloc[0, :].values))))]

c = (
    Funnel()
    .add(
        series_name="人数",
        data_pair=data_pair,
        gap=2,
        tooltip_opts=opts.TooltipOpts(formatter="{a} <br/>{b} : {c}"),
        label_opts=opts.LabelOpts(is_show=True, position="inside"),
        itemstyle_opts=opts.ItemStyleOpts(border_color="#fff", border_width=1),
    )
    .set_global_opts(title_opts=opts.TitleOpts(title="12月贷款转化漏斗"))
)
c.render("12月的贷款转化漏斗.html")  #保存到本地
c.render_notebook()  #在notebook中显示
           

源数据:

给报告加分:善用高大上的图表

图表:

给报告加分:善用高大上的图表

4. 词云图

应用场景:

主要用于展示商品评论数据、新闻话题热度数据等

Python绘图过程:

# 假设我们有一份苹果iPhone13的用户评价数据
df = pd.DataFrame({
    '评价': ['外观', '续航', '服务', '清晰度', '手感', '散热', '系统', '游戏', '重量', '音效', '拍照'],
    '数量': np.random.randint(low=10000, high=1000000, size=11)
})
df.head()


# 绘制评价数据的词云图
words = list(zip(df['评价'], df['数量']))
c = (
    WordCloud()
    .add(
        series_name="数量",
        data_pair=words,
        word_size_range=[10, 100],
        shape=SymbolType.DIAMOND
    )
    .set_global_opts(title_opts=opts.TitleOpts(title="iPhone13评价"))
)
c.render("iPhone13评价词云图.html")  #保存到本地
c.render_notebook()  #在notebook中显示
           

源数据:

给报告加分:善用高大上的图表

图表:

给报告加分:善用高大上的图表

5. 热力图

应用场景:

主要用于展示相关度数据、同级比较数据等

Python绘图过程:

# 假设我们有一份产品销售数据
df = pd.DataFrame({
    '日期': pd.date_range(start='2022-12-01', end='2022-12-31'),
    '产品A': np.random.randint(low=100, high=1000, size=31),
    '产品B': np.random.randint(low=100, high=1000, size=31),
    '产品C': np.random.randint(low=100, high=1000, size=31),
    '产品D': np.random.randint(low=100, high=1000, size=31),
    '产品E': np.random.randint(low=100, high=1000, size=31),
})
df.head()


# 计算产品之间的相关系数
corr = df.corr()

# 绘制相关系数热力图
plt.figure(figsize=(8, 6), dpi=100)
heatmap = sns.heatmap(
    data=corr,
    vmin=-1,
    vmax=1,
    cmap=sns.diverging_palette(0, 230, 90, 60, as_cmap=True),  #网上找的一个比较清晰好看的配色方案
    annot=True,
    fmt='.2f',
    annot_kws={'size':10},
    linewidths=2,
    cbar_kws={'shrink': .8},
    square=True,
    mask=np.triu(np.ones_like(corr, dtype=bool)),  #只显示对脚线下面部分图
)
heatmap_fig = heatmap.get_figure()
heatmap_fig.savefig('产品相关系数热力图.png')
           

源数据:

给报告加分:善用高大上的图表

图表:

给报告加分:善用高大上的图表

6. 箱线图

应用场景:

主要用于展示数据分布,比单一的平均值好

Python绘图过程:

# 假设我们有某3家公司的员工工资数据
fk = Faker(locale='zh-CN')  #用于构造虚假数据
df = pd.DataFrame({
    '公司': np.random.choice(['华为', '腾讯', '阿里'], size=100),
    '姓名': [fk.name() for i in range(100)],
    '工资': np.random.randint(low=5000, high=50000, size=100)
})
df.head()


# 绘制3家公司的员工工资的箱线图
box = sns.boxplot(data=df, x='公司', y='工资', palette='Set2')
box_fig = box.get_figure()
box_fig.savefig('员工工资箱线图.png')
           

源数据:

给报告加分:善用高大上的图表

图表:

给报告加分:善用高大上的图表

7. 其他图表

还有一些在特定场景下很适合的图表,比如帕累托图(柱线组合图)、瀑布图、字母饼图、复合条饼图、雷达图、旭日图等,这些用Excel就能很容易画出来,不需要借助诸如Python等工具,如下图所示,这里就不一一展示了。

给报告加分:善用高大上的图表

题外话

话说回来,现在一些大厂已经开始反内卷了,反对在PPT上耗费时间,只产出了一点有价值的结论,却花费了更多的时间在展示它上面,不如将时间投入到分析和挖掘上,获得更多有价值的结论和建议,用PPT还不如用Excel来的快速高效。不过,具体怎么做,可能还要看领导看场景。