十分钟掌握数据可视化基本操作(下)

Posted 程序员大咖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了十分钟掌握数据可视化基本操作(下)相关的知识,希望对你有一定的参考价值。

Python实战社群

Java实战社群

长按识别下方二维码,按需求添加

扫码关注添加客服

进Python社群▲

十分钟掌握数据可视化基本操作(下)

扫码关注添加客服

进Java社群


作者丨老肥 

来源丨老肥码码码


和之前学习Pandas一样,我们继续以宝可梦数据集作为学习可视化的例子,进而梳理Python绘图的基本操作,主要涉及seaborn以及matplotlib两个可视化库。

上半篇我们主要使用matplotlib来进行柱状图、散点图、饼图折线图等的绘制,下半篇主要使用seaborn来进行箱线图、小提琴图、分簇散点图、热力图等的绘制。

箱线图

箱线图可以提供数据位置及其分散情况的关键信息,主要用于反映原始数据分布的特征,还可以进行多组数据分布特征的比较。

十分钟掌握数据可视化基本操作(下)

如上图所示,箱线图主要包含几个关键的数据,上、下四方位数,中位数,上、下边缘以及异常值。简单来说,上四分位数表示全部数据中有四分之一的数据大于它,异常值表示远离上或下四分位数。

我们来用箱线图观察一下宝可梦的各项属性的分散情况。

df2=df.drop(['Generation','Total','Legendary'],axis=1)
sns.boxplot(data=df2)
plt.show()

十分钟掌握数据可视化基本操作(下)

可以看到每种属性都有异常值,远超于普通宝可梦,其中血量值的异常值数量最多。

接着我们来看不同的代目的各种属性的分布特征,共用同一个Y轴,同时绘制四张子图。

fig,axes=plt.subplots(1,4,sharey=True)
sns.boxplot(x="Generation",y="Attack",data=df,ax=axes[0])
sns.boxplot(x="Generation",y="Sp.Atk",data=df,ax=axes[1])
sns.boxplot(x="Generation",y="Defense",data=df,ax=axes[2])
sns.boxplot(x="Generation",y="Sp.Def",data=df,ax=axes[3])
fig.set_size_inches(20,7)

十分钟掌握数据可视化基本操作(下)

总体来看,五代目宝可梦的攻击力水平要高于其他代目,二代目宝可梦的特殊攻击水平要低于其他代目。

我们还可以用箱线图来观察不同类型的宝可梦对其防御数值的影响,结果显而易见,钢铁类型的宝可梦拥有最为卓越的防御属性。

plt.subplots(figsize=(20,5))
plt.title('Defence by Type 1')
sns.boxplot(x='Type1',y='Defense',data=df2)
plt.ylim(0,240) # 设置y轴的范围
plt.show()

十分钟掌握数据可视化基本操作(下)

另外我们还可以在boxplot中添加参数hue,分门别类地进行箱线图绘制,这里根据是否为神兽来做区分,显然神兽的防御属性远超非神兽。

十分钟掌握数据可视化基本操作(下)

小提琴图

小提琴图结合了箱线图与核密度估计图的特点,它表征了在一个或多个分类变量情况下,连续变量数据的分布并进行了比较,它是一种观察多个数据分布有效方法。

这里我们绘制不同类型的宝可梦的攻击力值小提琴图。

plt.title('Attack by Type1')
sns.violinplot(x="Type1", y ="Attack",data=df2)
plt.ylim(0,200)
plt.show()

十分钟掌握数据可视化基本操作(下)

小提琴图中宽度较厚的部分表示具有较高密度点的区域,而较薄的部分则表示低密度点的区域。我们可以清楚地看到有一部分电系宝可梦的攻击力在60左右,小提琴图有明显的膨胀部分;而岩石系的宝可梦的攻击力分布较为平均,小提琴图呈长窄形状。

我们对不同代目的宝可梦绘制了总属性值的小提琴图,并且将是否为神兽区分开来。

plt.title('Strongest Generation')
sns.violinplot(x="Generation",y="Total",data=df,hue="Legendary",split=True)
plt.show()

十分钟掌握数据可视化基本操作(下)

根据小提琴图我们似乎可以得出一代目的神兽实力最为强劲,三代目的非神兽实力则更优。

热力图

这里采用热力图来可视化数据各列之间的相关性。可以看到特殊攻击、攻击和特殊防御的数值与是否为神兽的相关性较高,而代目与其他数据的相关性较低。

df3=df.drop(['Total'],axis=1)
sns.heatmap(df3.corr(),annot=True)
plt.show()

十分钟掌握数据可视化基本操作(下)

分簇散点图

分簇散点图可以理解为数据点不重叠的分类散点图,swarmplot函数类似于stripplot函数,但该函数可以对点进行一些调整,使得数据点不重叠。

swarmplot()可以自己实现对数据分类的展现,也可以作为箱线图、小提琴图的一种补充,用来显示所有结果以及基本分布情况。

首先通过melt将宝可梦的各项数据汇到同一列中,即把窄宽的数据拉伸为长瘦型,将宝可梦的各项数值按照类型以分簇散点图的形式展现出来。

df5=pd.melt(df2, id_vars=["Name", "Type1", "Type2"], var_name="Stat")
sns.swarmplot(x="Stat", y="value", data=df5, hue="Type1",dodge=True)
plt.legend(bbox_to_anchor=(1, 1), loc=2, borderaxespad=0.)
plt.show()

十分钟掌握数据可视化基本操作(下)

参考资料

  • Visualizing Pokémon Stats with Seaborn

  • Seaborn官方文档


十分钟掌握数据可视化基本操作(下)
  
    
    
  
程序员专栏
 扫码关注填加客服 
长按识别下方二维码进群
十分钟掌握数据可视化基本操作(下)

十分钟掌握数据可视化基本操作(下)

近期精彩内容推荐:  

十分钟掌握数据可视化基本操作(下) 

十分钟掌握数据可视化基本操作(下) 

十分钟掌握数据可视化基本操作(下) 

十分钟掌握数据可视化基本操作(下) 


十分钟掌握数据可视化基本操作(下)



在看点这里好文分享给更多人↓↓

以上是关于十分钟掌握数据可视化基本操作(下)的主要内容,如果未能解决你的问题,请参考以下文章

3分钟掌握一个有数小技能:制作动态标题

几分钟即可实现数据可视化,是怎么做到的?

10分钟入门Matplotlib: 数据可视化介绍&使用教程

25分钟掌握Hive基本操作

不敲一个代码,10分钟做出数据可视化大屏,这个教程太赞了

48个值得掌握的JavaScript代码片段(上)