咔片PPT · AI自动生成演示文稿,模板丰富、排版精美 讯飞智文 · 一键生成PPT和Word,高效应对学习与办公

在做专题分析或者业务汇报时,数据分析师不仅要取数分析,还要产出完整的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}
{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来的快速高效。不过,具体怎么做,可能还要看领导看场景。