第一步 导入数据
data = pd.read_csv('path', names = [col1, col2, col3])
第二步 查看数据
2.1 查看数据的前5行
data.head()
2.2 查看数据的所有列的名字
data.columns
2.3 删除掉不需要的列
data.drop(columns = [col1, col2], axis = 1, inplace = True)
2.4 查看所有列的数据类型,查看数据类型,非常重要,因为有的时间类型数据,会被python认为是object
。
data.dtypes
第三步 处理数据
3.1 将object转化为time数据类型
data['报名时间'] = pd.to_datetime(data['报名时间'], format = '%Y-%m-%d')
第四步 分析数据
4.1 可以查看,某一个列下的数据分布
比如:
data['性别'].value_counts()
但是,这样的代码,只会返回给我们一系列数据,如果我们希望数据的呈现形式,更加形象,我们可以这样:
data['性别'].value_counts().plot(kind = 'bar', color = 'yellow')
4.2 如果,我想要查看,根据性别来划分,不同性别的参赛选手的参赛身份我可以
data.groupby(['性别','参赛身份']).姓名.count()
4.3 如果,我想要查看,不同时间段,选手参赛情况,那么这是一个时间序列问题,x轴应该是时间,y轴应该是这个时间对应的参赛人数。
在x轴,可以按照年
划分,可以按照月
划分,也可以按照日
划分。因为我的数据,对应的时间段较短,因此,用 日
作为x轴单位。
我目前想出来的绘制这样一个图的方式是:
- 单独抽出一个按照时间聚合的DataFrame
time = data.groupby('报名时间').性别.count()
- 接着,我们需要将这个单独抽出来的数据,转化为
DataFrame
time = pd.DataFrame(time)
- 接着原本的
报名时间
就成为了index。这个时候,我们需要将报名时间
放入列中
time.reset_index(level ='报名时间', inplace = True)
这个时候,报名时间和参赛人数,就都在这个DataFrame的列中了
4. 最后,我们就可以做出我们想要的图啦
import matplotlib.pyplot as plt
%matplotlib inline
fig = plt.figure(figsize = (20,5)
ax = fig.add_subplot(1,1,1)
ax.plot(time['报名时间'], time['性别']
ax.tick_params(axis = 'x', rotation = 45)
最后的效果是:
最后一行代码的作用是,将x轴的label从横着排列到旋转45度,这样就可以更加清楚地显示给读者啦。
综上,可以得出结论,随着时间的变化,参加比赛的报名人数明显减少。