数据可视化
本文将介绍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()
不同分类维度,巧妙地交互动图分帧显示:
女性为视觉重心
现金为视觉重心:
事物为视觉重心:
纽约为关注视觉重心:
Super !
使用太阳图来显示多元分类数据 下图显示了交互功能的工作原理。
本文由 mdnice 多平台发布