Python数据集的可视化技巧是什么
Python数据集的可视化技巧是什么
本篇内容主要讲解“Python数据集的可视化技巧是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python数据集的可视化技巧是什么”吧!
本文涉及三个实用的可视化工具:
图形分类相关性
散点图矩阵
使用Seaborn的分类散点图注释和图注释
总的来说,本文会教大家制作一些好看又中用的图表。
本文将使用kaggle上的国际足联2019年完整的球员数据集,其***版数据库包括了每个注册在内的球员的详细信息。
由于该数据集有许多列,因此我们只关注分类列和连续列的子集。
importnumpyasnpimportpandasaspdimportseabornassnsimportmatplotlib.pyplotasplt%matplotlibinline#WedontProbablyneedtheGridlines.Dowe?Ifyescommentthislinesns.set(style="ticks")player_df=pd.read_csv("../input/data.csv")numcols=['Overall','Potential','Crossing','Finishing','ShortPassing','Dribbling','LongPassing','BallControl','Acceleration','SprintSpeed','Agility','Stamina','Value','Wage']catcols=['Name','Club','Nationality','PreferredFoot','Position','BodyType']#Subsetthecolumnsplayer_dfplayer_df=player_df[numcols+catcols]#Fewrowsofdataplayer_df.head(5)
球员数据
虽然该数据格式良好,但是因为工资和值列是以欧元为单位,并包含字符串,需要进行一些预处理,才能使它们为后续分析提供数值。
defwage_split(x):try:returnint(x.split("K")[0][1:])except:return0player_df['Wage']=player_df['Wage'].apply(lambdax:wage_split(x))defvalue_split(x):try:if'M'inx:returnfloat(x.split("M")[0][1:])elif'K'inx:returnfloat(x.split("K")[0][1:])/1000except:return0player_df['Value']=player_df['Value'].apply(lambdax:value_split(x))
图形分类相关性
简单来说,相关性是衡量两个变量如何一起运动的指标。
例如,在现实生活中,收入与支出呈正相关,其中一个变量随着另一个变量的增加而增加。
学习成绩和电子游戏的使用呈负相关,其中一个变量的增加意味着另一个变量的减少。
因此如果预测变量与目标变量呈正相关或负相关,那么该变量就有研究价值。
研究不同变量之间的相关性对于理解数据非常有意义。
使用Seaborn即可轻松创建出相当不错的关系图。
corr=player_df.corr()g=sns.heatmap(corr,vmax=.3,center=0,square=True,linewidths=.5,cbar_kws={"shrink":.5},annot=True,fmt='.2f',cmap='coolwarm')sns.despine()g.figure.set_size_inches(14,10)plt.show()
所有的分类变量都去哪了?
你有注意到什么问题吗?
有问题,因为该图仅计算了数值列之间的相关性。
如果目标变量是club或position,会出现什么情况?
如果想得到三种不同情况之间的相关性,可使用以下相关性度量来计算。
1. 数值变量
该变量可通过Pearson相关性的方式得到,用于度量两个变量如何一起运动,范围为[-1,1]。
2. 分类变量
使用克莱姆V系数来分类案例。该系数是两个离散变量之间的相互关联,并与具有两个或多层次的变量一起使用。它也是一个对称的度量,因为变量的顺序无关紧要,即克莱姆(A,B)==克莱姆(B,A)。
例如,在数据集中,Club和Nationality一定有某种关联。
可用堆叠图来验证这一点,这是理解分类变量和分类变量间分布的一个***方法,因为在该数据中有很多国籍和俱乐部,所以使用数据的子集。
只保留***的球队(保留波尔图足球俱乐部只是为了让样本更加多样化)和最常见的国籍。
俱乐部偏好在很大程度上反映了“国籍”:了解前者有助于预测后者。
由图可知,英国球员更可能效力于切尔西队或曼联队,而不是在巴塞罗那队、拜仁慕尼黑队或波尔图队。
同理,克莱姆V系数也也捕获到了同样的信息。
如果所有俱乐部拥有的球员的国籍比例相同,那么克莱姆V系数则为0。
如果每个俱乐部偏好单一国籍的球员,则克莱姆系数V==1,例如,所有的英国球员在曼联队效力,所有的德国球员在拜仁慕尼黑队效力等等。
在所有其他情况下,范围则为[0,1]。
3. 数值变量和分类变量
对连续分类案例使用相关比率。
在不涉及太多数学的情况下,该变量用于离散程度的衡量。
如果给定一个数字,就能找出它的类别吗?
例如,假设数据集中有“SprintSpeed”和“Position”两列分类,那么:
守门员:58(De Gea)、52(T. Courtois)、58(M. Neuer)、 43(G. Buffon)
中后卫:68(D. Godin)、59(V. Kompany)、73(S. Umtiti)、 75(M. Benatia)
前锋:91(C.Ronaldo)、94(G. Bale)、80(S.Aguero)、 76(R. Lewandowski)
由上可知,这些数字很好地预测了他们所处的位置,因此相关性很高。
如果某球员冲刺速度超过85,那么该球员肯定是前锋。
这个比率也在[0,1]之间。
执行此操作的代码取自dython包,代码不会很多,最终结果如下:
player_dfplayer_df=player_df.fillna(0)results=associations(player_df,nominal_columns=catcols,return_results=True)
分类vs.分类、分类vs.数值、数值vs.数值,这些使图表更为有趣。
很美,不是吗?
只要看看数据,就能对足球有如此多的了解,例如:
球员的位置与运球能力高度相关。总不能让梅西踢后卫吧!
值与传球和控球的相关性比运球更高。规则是永远传球,正如内马尔的传球。
“俱乐部”和“收入”有很高的相关性并且可预测。
“体型”与“踢球偏好的脚”高度相关。这是否意味着如果某球员是瘦子,就很可能喜欢用左脚踢球?这可能没啥实际意义,需要进一步调查。
此外,通过这个简单的图表,就能找到上述这么多信息,这在没有分类变量的典型相关图中是见不到的。
大家可深入研究这张图表,得到更多有意义的结果,但关键是图表能让大家在现实生活中更容易找到某种规律。
散点图矩阵
虽然前文谈到了很多相关性,但它是一个变幻无常的指标,为了让大家理解,我们来看一个例子。
“Anscombe四重奏”由四个相关性几乎近似于1的数据集组成,但具有非常不同的数据分布,并且在绘制时呈现出非常不同的效果。
Anscombe四重奏:相关性变化无常
因此,有时绘制相关数据变得至关重要,并且需要单独查看分布。
现在数据集中有很多列,把它们全都绘制成图形会很费力。
其实只需几行代码就可以解决。
filtered_player_df=player_df[(player_df['Club'].isin(['FCBarcelona','ParisSaint-Germain','ManchesterUnited','ManchesterCity','Chelsea','RealMadrid','FCPorto','FCBayernMünchen']))&(player_df['Nationality'].isin(['England','Brazil','Argentina','Brazil','Italy','Spain','Germany']))]#Singlelinetocreatepairplotg=sns.pairplot(filtered_player_df[['Value','SprintSpeed','Potential','Wage']])
非常好,在该图中可看到很多信息。
工资和价值高度相关。
大多数其它值也是相关的,然而“潜力”与“价值”的比的趋势是不寻常的。可以看到,当到达特定的潜在阀值时,价值如何呈指数增长。这些信息对建模很有帮助,可以对“潜力”进行转换使其更具有相关性吗?
警告:没有分类列!
在此基础上能做得更好吗?总能做到。
g=sns.pairplot(filtered_player_df[['Value','SprintSpeed','Potential','Wage','Club']],hue='Club')
图上的信息很多,只需添加“hue”参数到分类变量“club”中即可。
波尔图队的工资分配趋向于工资少的那一端。
该图无法看出波尔图队球员价值的急剧分布,波尔图队的球员们总是在寻求机会。
许多粉红点(代表切尔西队)在“潜力”和“工资”图上形成了一个集群。切尔西队有很多工资较低的高潜力球员,需要更多关注。
还可从工资/价值子图中获取一些信息。
年薪50万的蓝点是梅西。此外,比梅西更有价值的橙点是内马尔。
尽管该技巧仍然不能解决分类问题,但还有一些其它方法来研究分类变量分布,虽然是个例。
分类散点图
如何查看分类数据和数字数据之间的关系?
就像输入名字一样,输入分类散点图的图片。为每个类别绘制一组点,在y轴上稍微分散,以便于查看。
这是我们目前绘制这种关系的***方法。
g=sns.swarmplot(y="Club",x='Wage',data=filtered_player_df,#Decreasethesizeofthepointstoavoidcrowdingsize=7)#removethetopandrightlineingraphsns.despine()g.figure.set_size_inches(14,10)plt.show()
分类散点图
为什么不用箱形图呢?中位数在哪?可以绘制出来吗?当然可以。在顶部覆盖一个条形图,就得到了一个好看的图形。
g=sns.boxplot(y="Club",x='Wage',data=filtered_player_df,whis=np.inf)g=sns.swarmplot(y="Club",x='Wage',data=filtered_player_df,#Decreasethesizeofthepointstoavoidcrowdingsize=7,color='black')#removethetopandrightlineingraphsns.despine()g.figure.set_size_inches(12,8)plt.show()
有趣的分类散点图+箱形图
很好,在图表上可看出各个点的分布和一些统计数据,并能明确地了解工资差异。
图中最右边的点是梅西,这样一来,就不用通过图表下方的文字来说明。
该图可用来做演示,如果老板要求把梅西写在这张图上,那么就可加上图片注释。
max_wage=filtered_player_df.Wage.max()max_wage_player=filtered_player_df[(player_df['Wage']==max_wage)]['Name'].values[0]g=sns.boxplot(y="Club",x='Wage',data=filtered_player_df,whis=np.inf)g=sns.swarmplot(y="Club",x='Wage',data=filtered_player_df,#Decreasethesizeofthepointstoavoidcrowdingsize=7,color='black')#removethetopandrightlineingraphsns.despine()#Annotate.xyforcoordinate.max_wageisxand0isy.Inthisplotyrangesfrom0to7foreachlevel#xytextforcoordinatesofwhereIwanttoputmytextplt.annotate(s=max_wage_player,xy=(max_wage,0),xytext=(500,1),#Shrinkthearrowtoavoidocclusionarrowprops={'facecolor':'gray','width':3,'shrink':0.03},backgroundcolor='white')g.figure.set_size_inches(12,8)plt.show()
带注释的统计信息和点群,可用于演讲中。
看看该图下方的波尔图队,工资预算如此之小,难以和其它高收入的球队们竞争。
皇马和巴塞罗那有许多高薪球员。
曼联的工资中位数***。
曼联和切尔西注重平等,许多球员的工资水平都差不多。
虽然内马尔比梅西更受重视,但梅西和内马尔的工资差距巨大。
由此可知,在这个疯狂的世界中,有些正常只是表面的。
到此,相信大家对“Python数据集的可视化技巧是什么”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
推荐阅读
-
python(中无效的十进制怎么解决 python怎么转换进制)
python怎么转换进制?Python执行二进制转换:1.十进制到二进制(bin)首先,让让我们看看如何将十进制转换成二进制。我...
-
python怎么清除完全相同的行(python splte如何分隔有多个相同符号的str)
pythonsplte如何分隔有多个相同符号的str?str你的string内容str_(相同的符号)执行完了以后再在相同符号的...
-
python(编程控制电脑关机 如何控制电脑关机)
如何控制电脑关机?可以在电脑的运行窗口中输入输入公式,给电脑可以设置自动关机。1.按开快捷键winr然后打开运行窗口。2.在运行窗...
-
python中的特殊标识符(python 中 标识符中可以有逗号吗)
python中标识符中可以有逗号吗?在python语言中合法的标识符是字母、数字以及_,所以我合法的标识符中肯定不能有逗号if...
-
python(excel 提取数据写入新表 python导入excel数据找不到工作簿)
python导入excel数据找不到工作簿?我可以导入数据后找不到工作,不是因为他的工作没有被转移。什么软件可提取并合并Exce...
-
python中字典定义的四种方法(python global关键字的用法详解)
pythonglobal关键字的用法详解?global标志实际上是目的是提示python讲解器,说被其修饰的变量是全局变量。这样...
-
python(array用法 python如何对两个数组做差处理)
python如何对两个数组做差处理?Python中的列表中的元素肯定不能真接相加,减。t最佳的位置的是将列表装换成Python中的...
-
python多行注释符号怎么表示
python多行注释符号怎么表示这篇文章主要介绍“python多行...
-
python支持的操作系统是什么
python支持的操作系统是什么这篇文章主要介绍“python支持...
-
python如何判断列表为空
python如何判断列表为空这篇文章主要介绍“python如何判断...