%matplotlib inlineimport pandas as pd
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')
plt.style.use("bmh")
plt.rc('font', family='SimHei', size=20) #显示中文
pd.set_option('display.max_columns',1000)
pd.set_option('display.width', 1000)
pd.set_option('display.max_colwidth',1000)

这一部分我们做点时间维度相关的分析,比如看看到底这个城市的人周末骑自行车出行多,还是工作日多

也就是咱们看看大家都是骑车出去玩,还是去工作。

4.1 区分工作日和周末

加载数据

bikes = pd.read_csv('bikes.csv', sep=';', encoding='latin1', parse_dates=['Date'], dayfirst=True, index_col='Date')
bikes.head()
Berri 1 Bré–Žeuf (donné–‘s non disponibles) Cé­Œe-Sainte-Catherine Maisonneuve 1 Maisonneuve 2 du Parc Pierre-Dupuy Rachel1 St-Urbain (donné–‘s non disponibles)
Date
2012-01-01 35 NaN 0 38 51 26 10 16 NaN
2012-01-02 83 NaN 1 68 153 53 6 43 NaN
2012-01-03 135 NaN 2 104 248 89 3 58 NaN
2012-01-04 144 NaN 1 116 318 111 8 61 NaN
2012-01-05 197 NaN 2 124 330 97 13 95 NaN
bikes.columns
Index(['Berri 1', 'Bré–Žeuf (donné–‘s non disponibles)', 'Cé­Œe-Sainte-Catherine', 'Maisonneuve 1', 'Maisonneuve 2', 'du Parc', 'Pierre-Dupuy', 'Rachel1', 'St-Urbain (donné–‘s non disponibles)'], dtype='object')
bikes['Berri 1'].unique()[:5]
array([ 35,  83, 135, 144, 197], dtype=int64)
bikes['Berri 1'].value_counts()[:5]
3341    3
1986    2
303     2
3698    2
3964    2
Name: Berri 1, dtype: int64
bikes['Berri 1'].plot(figsize=(20,10))
<matplotlib.axes._subplots.AxesSubplot at 0xe8ff7b8>

咱们先随便选一列出来吧,比如选’Berri 1’单独成一个berri_bikes的dataframe

berri_bikes = bikes[['Berri 1']].copy()
berri_bikes[:5]
Berri 1
Date
2012-01-01 35
2012-01-02 83
2012-01-03 135
2012-01-04 144
2012-01-05 197

然后为了区分工作日和周末,我们加一列’weekday’。

对了,这里要提到一个概念,叫做index,也就是大家在数据库里面熟知的索引,在dataframe里面也有,比如我们刚才的数据,index就是日期。

berri_bikes.index
DatetimeIndex(['2012-01-01', '2012-01-02', '2012-01-03', '2012-01-04', '2012-01-05', '2012-01-06', '2012-01-07', '2012-01-08', '2012-01-09', '2012-01-10',...'2012-10-27', '2012-10-28', '2012-10-29', '2012-10-30', '2012-10-31', '2012-11-01', '2012-11-02', '2012-11-03', '2012-11-04', '2012-11-05'], dtype='datetime64[ns]', name='Date', length=310, freq=None)

*如果仔细观察,你会发现里面有些天的数据丢失了。(牛逼的数据分析师真的一眼能看出来,咳咳,反正我也没一眼看出来)

我们通过.day可以直接看到是一个月的第几天。

berri_bikes.index.day #一个月的第几天
Int64Index([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10,...27, 28, 29, 30, 31,  1,  2,  3,  4,  5], dtype='int64', name='Date', length=310)

然后我们发个大招,其实dataframe对于日期类型的数据,可以直接知道是星期几!!!

berri_bikes.index.weekday #一周的第几天
Int64Index([6, 0, 1, 2, 3, 4, 5, 6, 0, 1,...5, 6, 0, 1, 2, 3, 4, 5, 6, 0], dtype='int64', name='Date', length=310)

其中0是星期一,1是星期二,以此类推。所以我们可以直接生成一列,指明是星期几啦。

berri_bikes.loc[:,'weekday'] = berri_bikes.index.weekday
berri_bikes[:5]
Berri 1 weekday
Date
2012-01-01 35 6
2012-01-02 83 0
2012-01-03 135 1
2012-01-04 144 2
2012-01-05 197 3

4.2 分组+排序+聚合统计

用过SQL里面的groupby吗,恰巧pandas的dataframe也有一个.groupby()函数,而且好用得一塌糊涂。

比如呢,下面这句 berri_bikes.groupby('weekday').aggregate(sum) 的意思就是说,“你给老纸把数据按照星期几分一下组,然后给我加和一下,结果返给我!!!”

berri_bikes.loc[berri_bikes['weekday']==0,'Berri 1'].max()
6206
weekday_counts = berri_bikes.groupby('weekday').aggregate(sum)
weekday_counts
Berri 1
weekday
0 134298
1 135305
2 152972
3 160131
4 141771
5 101578
6 99310
weekday_counts.index
Int64Index([0, 1, 2, 3, 4, 5, 6], dtype='int64', name='weekday')

哦,对了,我也不喜欢数字0, 1, 2, 3, 4, 5, 6,像我这种智商欠费的同学,根本对应不上星期几,所以取个名字好了,然后加上去。

weekday_counts.index = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
weekday_counts
Berri 1
Monday 134298
Tuesday 135305
Wednesday 152972
Thursday 160131
Friday 141771
Saturday 101578
Sunday 99310

完美!然后我们再画个图,哈哈哈,又是画图!

weekday_counts.plot(figsize=(20,10),kind='bar')
<matplotlib.axes._subplots.AxesSubplot at 0xee7fb00>

看似这个地区的同学骑自行车很多时候是工作日骑的,是去上班?

4.3 把刚才学的放一块儿

把刚才学到的东西串一块儿,能看到很神奇pandas处理结果啦。

你可以试试把sum 换做 max或者numpy.median,求最大和平均,也可以试试更多的函数!!

bikes = pd.read_csv('bikes.csv', sep=';', encoding='latin1', parse_dates=['Date'], dayfirst=True, index_col='Date')
# Add the weekday column
berri_bikes = bikes[['Berri 1']].copy()
berri_bikes.loc[:,'weekday'] = berri_bikes.index.weekday# Add up the number of cyclists by weekday, and plot!
weekday_counts = berri_bikes.groupby('weekday').aggregate(sum)
weekday_counts.index = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
weekday_counts.plot(kind='bar')
<matplotlib.axes._subplots.AxesSubplot at 0x11518eb8>

2-4_Date_Type_analysis相关推荐

  1. 2.4_Date_Type_analysis数据类型分析

    文章目录 4.1 区分工作日和周末 4.2 分组+排序+聚合统计 4.3 把刚才学的放一块儿 # * coding:utf-8_*_ # 作者 :XiangLin # 创建时间 :11/02/2020 ...

最新文章

  1. 地理信息技术加持 用数字孪生让城市更“聪明”
  2. 二调建设用地地类代码_二调土地地类代码表
  3. 国内第一本micropython的书出版《机器人Python极客编程入门与实战》
  4. 软件设计文档国家标准_GB8567--88
  5. 通讯故障_掌握PLC必备知识,人机界面和 PLC 出现通讯故障如何分析解决
  6. PowerShell_9_零基础自学课程_9_高级主题:静态类和类的操作
  7. [1] 图像预处理----图像灰度化处理
  8. 毕业设计任务书参考地址
  9. 物联网技术:射频识别技术RFID解析
  10. JavaScript交互式网页设计 • 【第3章 JavaScript浏览器对象模型】
  11. 小白也能轻松看懂的lora物联网!
  12. NLP中的数据增强:UDA、EDA
  13. 计算机和应用物理学,专业篇丨应用物理学:仰望星空还是脚踏实地?
  14. 使用connet或者手动关联react和redux
  15. skywalking实现分布式系统链路追踪
  16. 机器学习中的无监督学习应用在哪些领域呢?自动驾驶?医疗影像?卷积神经网络?
  17. 移动硬盘占用率100%导致无法读取故障修复
  18. CString 和 LPCTSTR等之间的转换
  19. HTTP/3: 实用部署选项(第3部分)
  20. VUE使用three.js模型缩放卡顿问题

热门文章

  1. 布隆,牛逼!布谷鸟,牛逼!
  2. import和require
  3. 网络测速linux,Linux系统下的网络带宽测速
  4. 某客户回滚段达到32765处理
  5. 开发项目时mysql常用语句_项目开发中常用到的SQL语句
  6. 修改app绕过模拟器检测_通过手机模拟器爬腾讯新闻APP数据
  7. 基于WSL2+NVIDIA Docker的开发环境最佳实践
  8. Qt 窗体显示在屏幕最上面
  9. 中国互联网2010年最佳阵容(漫画版)
  10. stm32单片机实现多个闹钟_STM32实现对RTC闹钟唤醒的设计