关注我,每天用Python做一件有趣的事,掌握一些实用的技巧。
数据可视化是数据分析中最基本的一项技能,为了让我们的数据更具说服力,数据形象化就是一个很好的工具。在这篇文章中,我们将介绍5种超越柱状图和方块图的可视化技术,这些技术可以使你的数据加美观和有效。我们将使用python中的Plotly图形库,它能够以最小的工作量提供动画和交互式绘图。
Plotly的优点是什么?
绘图是高度集成的:与jupyter notebooks一起产生作用,可以嵌入到网站中,并与Dash完全集成——Dash是构建仪表板和分析应用程序的一个很好的工具。
正式开始
如果你没有安装plotly,只需在终端中运行以下命令:
<code>pip
install plotly/<code>
接下来正式开始数据可视化进阶教程。
1.动画
我们的工作经常涉及到时间数据,我们研究这个或那个指标的演变。绘图动画是一个很好的工具,可以通过一行代码观察数据在时间上的变化。
<code>import
plotly.express as px
from
vega_datasets import data
df
=data.disasters()
df
=df[df.Year > 1990]
fig
=px.bar(df,
y
="Entity",
x
="Deaths",
animation_frame
="Year",
orientation
='h',
range_x
=[0, df.Deaths.max()],
color
="Entity")
=1000,
height
=800,
xaxis_showgrid
=False,
yaxis_showgrid
=False,
paper_bgcolor
='rgba(0,0,0,0)',
plot_bgcolor
='rgba(0,0,0,0)',
title_text
='Evolution of Natural Disasters',
showlegend
=False)
='Number of Deaths')
='')
fig.show()
/<code>
只要你有一个时间变量来过滤,几乎所有的数据都可以动画化。设置散点图动画的示例:
<code>import
plotly.express as px
df
=px.data.gapminder()
fig
=px.scatter(
df,
x
="gdpPercap",
y
="lifeExp",
animation_frame
="year",
size
="pop",
color
="continent",
hover_name
="country",
log_x
=True,
size_max
=55,
range_x
=[100, 100000],
range_y
=[25, 90],
)
=1000,
height
=800,
xaxis_showgrid
=False,
yaxis_showgrid
=False,
paper_bgcolor
='rgba(0,0,0,0)',
plot_bgcolor
='rgba(0,0,0,0)')
/<code>
2.太阳风暴图
太阳风暴图是一个很好地可视化你的数据的方式。如果你想通过一个或多个分类变量来分解一个给定的数量,那就去做一个日光图。
比如说,我们要分解一天中每个性别和时间的平均消费金额。这是一个双group by语句,可以通过可视化而不是表输出有效地传递:
绘图是交互式的,允许你单击并浏览每个类别。你只需要定义所有类别,声明它们之间的层次结构并分配相应的值,在我们的例子中,这将是group by语句的输出。
<code>import
plotly.graph_objects asgo
import
plotly.express as pximport
numpy as npimport
pandas as pd df = px.data.tips() fig =go
.Figure(go
.Sunburst( labels=["Female"
,"Male"
,"Dinner"
,"Lunch"
,'Dinner '
,'Lunch '
], parents=[""
,""
,"Female"
,"Female"
,'Male'
,'Male'
], values=np.append
( df.groupby('sex'
).tip.mean().values, df.groupby(['sex'
,'time'
]).tip.mean().values), marker=dict(colors=px.colors.sequential.Emrld)), layout=go
.Layout(paper_bgcolor='rgba(0,0,0,0)'
, plot_bgcolor='rgba(0,0,0,0)'
)) fig.update_layout(margin=dict(t=0
, l=0
, r=0
, b=0
), title_text='Tipping Habbits Per Gender, Time and Day'
) fig.show()/<code>
现在,让我们在层次结构中添加另一层:
因此,我们在另一个group by语句中添加包含三个分类变量的值。
<code>import
plotly.graph_objects asgo
import
plotly.express as pximport
pandas as pdimport
numpy as np df = px.data.tips() fig =go
.Figure(go
.Sunburst(labels=["Female"
,"Male"
,"Dinner"
,"Lunch"
,'Dinner '
,'Lunch '
,'Fri'
,'Sat'
,'Sun'
,'Thu'
,'Fri '
,'Thu '
,'Fri '
,'Sat '
,'Sun '
,'Fri '
,'Thu '
], parents=[""
,""
,"Female"
,"Female"
,'Male'
,'Male'
,'Dinner'
,'Dinner'
,'Dinner'
,'Dinner'
,'Lunch'
,'Lunch'
,'Dinner '
,'Dinner '
,'Dinner '
,'Lunch '
,'Lunch '
], values=np.append
( np.append
( df.groupby('sex'
).tip.mean().values, df.groupby(['sex'
,'time'
]).tip.mean().values, ), df.groupby(['sex'
,'time'
,'day'
]).tip.mean().values), marker=dict(colors=px.colors.sequential.Emrld)), layout=go
.Layout(paper_bgcolor='rgba(0,0,0,0)'
, plot_bgcolor='rgba(0,0,0,0)'
)) fig.update_layout(margin=dict(t=0
, l=0
, r=0
, b=0
), title_text='Tipping Habbits Per Gender, Time and Day'
) fig.show()/<code>
3.平行类别
探索分类变量之间关系的另一个好方法是这个流程图。你可以在移动中拖放、突出显示和探索价值观,这对演示非常有用。
<code>import
plotly.expressas
px from vega_datasetsimport
data
import
pandasas
pd df =data
.movies() df = df.dropna() df['Genre_id'
] = df.Major_Genre.factorize()[0
] fig = px.parallel_categories( df, dimensions=['MPAA_Rating'
,'Creative_Type'
,'Major_Genre'
], color="Genre_id"
, color_continuous_scale=px.colors.sequential.Emrld, ) fig.show()/<code>
4.平行坐标
平行坐标绘图是上述绘图的连续版本。在这里,每个和弦代表一个单独的观察。这是一个很好的工具,用于发现异常值(与其他数据隔离的单线程)、集群、趋势和冗余变量(例如,如果两个变量的每个观测值相似,它们将位于水平线上并指示冗余)。
5.仪表图和指示器
仪表仅仅是为了美观。它们是报告一些成功指标或关键绩效指标并将它们与目标联系起来的一种好方法。
指标在商业和咨询领域非常有用。它们用文本标记来补充你的视觉效果,吸引你的观众的注意力,并传达你的成长指标。
最后,如果你对Python数据可视化感兴趣,我们还有一篇更加全面的的文章,大家可以点击标题进行收藏学习:《Python数据可视化的完整版操作指南(建议收藏)》
--END--
欢迎大家关注我们的公众号:为AI呐喊(weainahan)
为了帮助更多缺少项目实战的同学入门Python,我们在头条上创建了一个专栏:《7小时快速掌握Pthon核心编程》,欢迎大家点击下方链接或者阅读原文进行试看~
专栏
7小时内快速搞定Python核心编程
160币
0人已购