太阳图Sunburst chart构建多层饼图

数据可视化

本文将介绍7种用于显示多元分类数据的可视化方法。每一种都将通过概念、Python代码和获得的结果进行解释。

让我们开始吧...使用太阳图Sunburst chart构建多层饼图

获取数据

首先导入库:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

%matplotlib inline

本文将使用一个包含5个类别的模拟数据集

生成的数据集包含了购物顾客的信息:地点、产品、付款方式、性别和年龄段。

可以使用random库生成每个分类变量,如下所示的代码。

import random
import pandas as pd
n=1000
dict_loca = {1:'New York', 2:'Boston', 3:'Other'}
list_loca = [dict_loca.get(random.randint(1,3)) for i in range(0,n)]

dict_prod = {1:'food', 2:'beverage'}
list_prod = [dict_prod.get(random.randint(1,2,)) for i in range(0,n)]

dict_pay = {1:'cash', 2:'credit card'}
list_pay = [dict_pay.get(random.randint(1,2,)) for i in range(0,n)]

dict_gender = {1:'male', 2:'female'}
list_gender = [dict_gender.get(random.randint(1,2)) for i in range(0,n)]

dict_age = {1:'<25', 2:'25-50', 3:'>=50'}
list_age = [dict_age.get(random.randint(1,3)) for i in range(0,n)]

df = pd.DataFrame(zip(list_loca, list_prod, list_pay, list_gender, list_age),
                  columns=['location''product''payment''gender''age'])
                  
df.head()

   location   product      payment  gender    age
0  New York      food         cash  female  25-50
1  New York      food         cash    male  25-50
2     Other      food  credit card    male    <25
3  New York  beverage         cash  female  25-50
4    Boston      food         cash    male    <25

如果您想尝试将可视化代码应用于其他多元分类数据集,可以跳过下一步。

让我们对DataFrame进行分组,以获取每个类别组合的频率。然后,将获得的结果添加到DataFrame中。

count_gb = df.groupby(['location''product''payment',
                       'gender''age'])['age'].count()
df_m = df.groupby(['location''product''payment',
                   'gender''age']).count()
df_m['freq'] = list(count_gb)
df_m.reset_index(inplace=True)
df_m


   location   product      payment  gender    age
0    Boston  beverage  credit card    male    <25
1     Other      food         cash  female  25-50
2    Boston  beverage  credit card  female    <25
3    Boston  beverage  credit card  female   >=50
4  New York      food  credit card    male  25-50
   location   product      payment  gender    age  freq
0    Boston  beverage         cash  female  25-50    16
1    Boston  beverage         cash  female    <25    15
2    Boston  beverage         cash  female   >=50    18
3    Boston  beverage         cash    male  25-50     9
4    Boston  beverage         cash    male    <25    10
..      ...       ...          ...     ...    ...   ...
67    Other      food  credit card  female    <25    22
68    Other      food  credit card  female   >=50    15
69    Other      food  credit card    male  25-50     9
70    Other      food  credit card    male    <25     8
71    Other      food  credit card    male   >=50    11

[72 rows x 6 columns]

现在DataFrame准备好了,让我们继续进行可视化部分。

基本上,太阳图是一种多层饼图。由于能够在一个图表中表达多层数据,这是显示多元分类数据或分层数据的良好选择。

在相同级别上,每个项目的面积表示其与其他项目的百分比比较。

使用太阳图的一个限制是,如果每个级别中有太多的类别,注释的密度会受到限制。

顺便说一下,这可以通过使用颜色标度来区分值或创建一个可以进行筛选的交互式太阳图来解决。

我们将使用Plotly,这是一个强大的Python库,用于创建数据可视化。使用Plotly的优点是它可以轻松创建交互式图表。

import plotly.express as px
fig = px.sunburst(df_m, path=['location''product',
                              'payment''gender''age'],
                  values='freq',
                  color='freq',
                  color_continuous_scale='rdbu_r',
                  width=960, height=600
                 )
fig.update_layout(margin = dict(t=0, l=0, r=0, b=0))
fig.show()


不同分类维度,巧妙地交互动图分帧显示:

女性为视觉重心

太阳图Sunburst chart构建多层饼图_第1张图片

现金为视觉重心:

太阳图Sunburst chart构建多层饼图_第2张图片

事物为视觉重心:

太阳图Sunburst chart构建多层饼图_第3张图片

纽约为关注视觉重心:

太阳图Sunburst chart构建多层饼图_第4张图片

Super !

使用太阳图来显示多元分类数据 下图显示了交互功能的工作原理。

本文由 mdnice 多平台发布

你可能感兴趣的:(后端)