Python数据分析可视化Seaborn实例讲解

本文通过Python Seaborn库对马拉松数据进行可视化分析,揭示了马拉松比赛中的选手表现特点。研究发现,大部分选手后半程速度较慢,且全程成绩与前后半程耗时差异显著相关。此外,男性选手在各年龄段的前后半程差异系数普遍高于女性,而80岁以上女选手表现出色。最后,数据显示显著后半程加速的选手通常能取得较好成绩。
摘要由CSDN通过智能技术生成
Seaborn是一种基于matplotlib的图形可视化python libraty。它提供了一种高度交互式界面,便于用户能够做出各种有吸引力的统计图表。 Seaborn其实是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,在大多数情况下使用seaborn就能做出很具有吸引力的图,而使用matplotlib就能制作具有更多特色的图。应该把Seaborn视为matplotlib的补充,而不是替代物。同时它能高度兼容numpy与pandas数据结构以及scipy与statsmodels等统计模式。掌握seaborn能很大程度帮助我们更高效的观察数据与图表,并且更加深入了解它们。 实验数据可以从这里[下载](https://github.com/jakevdp/marathon-data)。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
%matplotlib inline
warnings.filterwarnings('ignore')
默认情况下,Pandas会把时间列加载为Python字符串格式(类型是object),写一个把字符串转换成时间类型的函数
def convert_time(s):
    h,m,s=map(int,s.split(':'))
    return pd.datetools.timedelta(hours=h,minutes=m,seconds=s)
data=pd.read_csv('marathon-data.csv',converters={
  'split':convert_time,'final':convert_time})
data.head()
age gender split final
0 33 M 01:05:38 02:08:51
1 32 M 01:06:26 02:09:28
2 31 M 01:06:49 02:10:42
3 38 M 01:06:16 02:13:45
4 31 M 01:06:32 02:13:59
data.dtypes
age                 int64
gender             object
split     timedelta64[ns]
final     timedelta64[ns]
dtype: object

添加一列,将时间换算成秒:

data['split_sec']=data['split'].map(lambda x:x.seconds)
data['final_sec']=data['final'].map(lambda x:x.seconds)
data.head()
age gender split final split_sec final_sec
0 33 M 01:05:38 02:08:51 3938 7731
1 32 M 01:06:26 02:09:28 3986 7768
2 31 M 01:06:49 02:10:42 4009 7842
3 38 M 01:06:16 02:13:45 3976 8025
4 31 M 01:06:32 02:13:59 3992 8039

用sns.jointplot可以同时看到两个变量的联合分布与单变量的独立分布,这个图形中使用白色背景。

with sns.axes_style('white'):
    g=sns.jointplot('split_sec','final_sec',data,kind='kde')
    g.ax_joint.plot(np.linspace(4000,16000),np.linspace(8000,32000),':k')

这里写图片描述

可以使用六边形块代替频次直方图

with sns.axes_style('white'):
    g=sns.jointplot('split_sec','final_sec',data,kind='hex',color='r')
    g.ax_joint.plot(np.linspace(4000,16000),np.linspace(8000,32000),':b')

这里写图片描述

上图表示的是马拉松前半程成绩与全程成绩的对比。图中的实点线表示一个人全程保持一个速度跑完马拉松,即上半程与下半程耗时相同。然而实际的成绩分布表明,绝大多数人都是越往后跑得越慢(也符合常理)。如果你参加过跑步比赛,那么就一定知道有些人在比赛的后半程速度更快—也就是在比赛中“后半程加速”。
创建一列split_frac来表示前后半程的差异,衡量比赛选手后半程加速或前半程加速的程度。

data["split_frac"]=1-2*data['split_sec']/data['final_sec']
data.head()
age gender split final split_sec final_sec split_frac
0 33 M 01:05:38 02:08:51 3938 7731 -0.018756
1 32 M 01:06:26 02:09:28 3986 7768 -0.026262
2 31 M 01:06:49 02:10:42 4009 7842 -0.022443
3 38 M 01:06:16 02:13:45 3976 8025 0.009097
4 31 M 01:06:32 02:13:59 3992 8039 0.006842

如果前后半程差异系数( split_frac)小于0,就表示这个人是后半程加速型选手。画出差异系数的分布图。

sns.distplot(data['split_frac'],kde=False,color='g')
plt.axvline(0, color="r",linestyle="--")#画垂直x轴的线

这里写图片描述
上图表示前后半程差异系数分布图,0表示前后半程耗时相同。

sum(data['
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值