目的:熟悉时间序列数据的处理方法和时间序列的使用,并用可视化展示出来。

下载数据:可以通过复制链接下载;也可以通过软件直接下载,下载文件存放在当前工作目录下。数据来源:#下载数据 !curl -o FremontBridge.csv https://data.seattle.gov/api/views/65db-xm6k/rows.csv?accessType=DOWNLOAD

代码:

!curl -o FremontBridge.csv https://data.seattle.gov/api/views/65db-xm6k/rows.csv?accessType=DOWNLOAD

前两章已经提到过数据处理的基本步骤,在此不做过多的陈述。基本是导入模块和读取数据形成数据框。

#导入模块
import pandas as pd
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborndata = pd.read_csv('FremontBridge.csv', index_col='Date', parse_dates=True)
data.head()

数据显示的前五行:

由于该列名较长,不便于之后的计算和数据查看,所以对列名进行重命名。并且计算东、西方向的总和,使用到df.eval()函数,该函数在Python数据统计分析和数据处理过程中使用较多,对该函数进行基本介绍。

函数:data.eval(expr, inplace=False, **kwargs)

参数说明:expr:表达式 str类型,可接受算术运算符(+/-等)、比较运算符(>/</=)、逻辑运算符(&/|)、对象属性和索引以及其他运算。

inplace:Boolean 类型,主要是为了表示是否在原数据框上进行修改,默认为否

代码:

data.columns #查看数据框列名
data.columns = ['East', 'West'] #数据框重命名列名,该名称可以命名为中文#法一:直接计算
data['Total'] = data.East + data.West #新增总和列
#法二:引用表达式计算函数
data['Total'] = data.eval('East + West')
#等同于 data.eval('Total = East + West', inplace= True)

数据处理结果差不多完成了,执行data.dropna().describe()函数,查看数据基本统计信息

用所有数据绘制图形。

seaborn.set()
data.plot()
plt.ylabel('Hourly Bicycle Count')

结果:

结论:该图形的数据量较大,导致不能直观的观察结果。所以考虑绘制每周的自行车流量图形。

代码如下:

#重新取样,按周统计
weekly = data.resample('W').sum()
weekly.plot(style=[':','--','-'])
plt.ylabel('Weekly bicycle count')

显示结果:

结论:用每周的自行车流量绘图,图像显示还是不够平滑,考虑到按日统计30天的移动平均。

移动平均是时间序列数据中使用到的一个重要计算方式,还有加权平均以及其他平均,初略介绍这类方法。

  • 移动平均介绍:时间序列数据中通常包含有趋势性变动和周期性变动两种变动因素,周期性变动因素往往会掩盖数据的趋势性变动规律,通过对数据进行移动平均处理可有效反映出数据的趋势性变动规律。
  • 处理方法为,针对时间序列中的每个数据,求该数据与之前若干个数据的平均值,由各点处的平均值形成一组新的时间序列数据,其将反映出原时间序列数据的整体变化趋势。

调用函数:

  • df.rolling(window, min_periods=None, freq=None, center=False, win_type=None, on=None, axis=0, closed=None)

部分参数说明:

  • window:表示时间窗的大小,注意有两种形式(int or offset)。如果使用int,则数值表示计算统计量的观测值的数量即向前几个数据。如果是offset类型,表示时间窗的大小。
  • min_periods:最少需要有值的观测点的数量,对于int类型,默认与window相等。对于offset类型,默认为1。
  • center:是否使用window的中间值作为label,默认为false。只能在window是int时使用。

代码:

#计算数据30日的移动平均
daily = data.resample('D').sum()
daily.rolling(30, center=True).mean().plot(style=[':','--','-'])
plt.ylabel('mean of 30 days count')#获得平滑图像
daily.rolling(50, center=True, win_type='gaussian').sum(std=10).plot(style=[':','--','-'])

图像展示:

结论:该自行车流量在年代中具有明显的周期性特征。

然后考虑自行车流量在一天之内的周期性特征,代码如下:

by_time = data.groupby(data.index.time).mean()
hourly_tricks = 4 * 60 * 60 * np.arange(6)
by_time.plot(xticks=hourly_tricks, style=[':','--','-'])

图像显示:

结论:一周之中,自行车流量最多在8:00-10:00、17:00-18:00,即上下班高峰期时间段。

进而观察一周之内的人流量情况,工作日与节假日的自行车流量的区别。代码如下:

by_weekday = data.groupby(data.index.dayofweek).mean()
xticks = ['','Mon','Tues','Wed','Thurs','Fri','Sat','Sun']
by_weekday.plot(style=[':','--','-'])
# plt.xticks = by_weekday.index
plt.gca().set_xticklabels(xticks)

图像:

结论:工作日西雅图大桥自行车流量明显高于休息日。

然而,从上图来看,受工作日自行车流量影响,之前一天中自行车流量的周期性特征不能代表休息日车流量的周期性特征。所以对工作日和休息日的数据分别进行观察。

使用到np.where(判断条件, '命名值1', '命名值2'), 命名值1代表True的值,命名值2代表False的值。

相当于代码:

data['weekend'] = 'weekend'
data['weekend'][data.index.weekday < 5] = 'weekday'

代码:

#工作日和休息日每小时的数据
weekend = np.where(data.index.weekday < 5, 'Weekday', 'Weekend')#where作为条件选择
by_time = data.groupby([weekend, data.index.time]).mean()fig, ax = plt.subplots(1, 2, figsize=(14, 5))
by_time.ix['Weekday'].plot(ax=ax[0], title='Weekdays',xticks=hourly_tricks, style=[':','--','-'])
by_time.ix['Weekend'].plot(ax=ax[1], title='Weekends',xticks=hourly_tricks, style=[':','--','-'])

图像:

结论:工作日在上下班时间出现峰值,而休息日白天的周期性特征不明显。

Python数据处理(三)——美国西雅图自行车流量可视化相关推荐

  1. python画误差棒_Python数据处理从零开始----第四章(可视化)(3)散点图和误差棒...

    目录 Python数据处理从零开始----第四章(可视化)③散点图和误差棒 Python数据处理从零开始----第四章(可视化)④误差图 =============================== ...

  2. python科赫曲线绘制正方形_Python数据处理从零开始----第四章(可视化)(14)使用seaborn绘制热图...

    目录 Python数据处理从零开始----第四章(可视化)①③多变量绘图 Python数据处理从零开始----第四章(可视化)(14)使用seaborn绘制热图 seaborn.heatmapHeat ...

  3. Python数据分析实战,,美国总统大选数据可视化分析[基于pandas]

    目录 前言 一.任务详情 二.数据集来源 三.实现过程 四.运行代码 前言 在学习Python数据分析的过程中,是离不开实战的. 今天跟大家带来数据分析可视化经典项目,美国总统大选数据可视化分析,希望 ...

  4. Python数据处理(一)——以美国各州统计数据为例

    编写本篇文章的目的:了解Python数据处理的基本步骤,计算美国各州的人口密度,数据来源:https://github.com/jakevdp/data-USstates/ ,共3张数据表格:stat ...

  5. 【Python数据处理篇——DataFrame数据可视化】饼图、散点图、折线图、柱形图、直方图

    欢迎访问我搞事情的[知乎账号]:Coffee 以及我的[B站漫威剪辑账号]:VideosMan 若我的笔记对你有帮助,请用小小的手指,点一个大大的赞哦. 关于DataFrame的相关知识,我还进行了汇 ...

  6. python绘制小提琴图数据_Python数据处理从零开始----第四章(可视化)(16)一文解决小提琴图violin plot...

    原文:Python数据处理从零开始----第四章(可视化)(16)一文解决小提琴图violin plot​www.jianshu.com Python数据处理从零开始----第四章(可视化)(16)一 ...

  7. Python数据处理(一):处理 JSON、XML、CSV 三种格式数据

    Python 数据处理系列博客来啦! 本系列将以<Python数据处理>这本书为基础,以书中每章一篇博客的形式带大家一起学习 Python 数据处理.书中有些地方讲的不太详细,我会查阅其他 ...

  8. python绘制dca曲线_Python数据处理从零开始----第四章(可视化)(9)线性相关曲线...

    原文:Python数据处理从零开始----第四章(可视化)(9)线性相关曲线​www.jianshu.com ============================================= ...

  9. python离散积分_科学网—python数据处理笔记(三)通道积分图 - 钱磊的博文

    通道积分是除了p-v图外又一件分析分子云气体运动的利器.在不同的通道查看,可以看到一些速度不同寻常的气体,这些气体就是恒星形成研究中十分感兴趣的高速气体.这些高速气体对于分子云中的能量平衡以及恒星的形 ...

最新文章

  1. 常用的PHP正则表达式汇总
  2. Android堆栈分析
  3. TSQL中实现ORACLE的多列IN 多列匹配。
  4. sql server 缓存_搜索SQL Server查询计划缓存
  5. 通过zabbix_sender实现批量传递key值
  6. Jenkins+Github(Robotframework代码)
  7. java中解决request中文乱码问题
  8. windows vs2012 cuda6.5 caffe 简单安装方法
  9. Spark机器学习库简介
  10. RJ45-网口变压器及网口变压器-cpu之间的一些抗干扰防雷设计
  11. windows环境命令行创建虚拟环境
  12. Cron 表达式 星期建议使用 MON 等单词缩写
  13. 企业微信发消息通知-java
  14. Ubuntu16.04 + cuda8.0 + GTX1080 + matlab14.04a + Opencv3.0 + caffe 安装教程
  15. tableau的骑行路线地理数据可视化
  16. C Primer Plus(6) 中文版 第5章 运算符、表达式和语句 5.2 基本运算符
  17. 练习记录-用FSL工具对DTI数据进行FDT预处理
  18. 色彩RGBA值写作代码
  19. Compose也能跨平台?Compose Multiplatform是啥?KMM又是什么?
  20. javaweb JAVA JSP在线考试系统网上考试系统jsp网上在线考核网站源码(在线考试报名)

热门文章

  1. 网工笔记(三):IP Multicast组播技术
  2. 鸿蒙操作系统pc,不负期待!鸿蒙操作系统将于6月2日正式发布,你的手机更新了吗?...
  3. 【转】电脑电源如何安装 (清晰大图详解电脑组装时各接口线缆细节)
  4. JavaWeb前端: JavaScript 简介
  5. 获取Android 手机设备信息:包括机型、操作系统版本号、手机分辨率、运营商、当前联网方式、IMEI、MEID、MAC地址
  6. 路由token验证和路由守卫~~狂徒李四
  7. plc无法跟计算机通信,无法与PLC通信
  8. メンアットワーク!3 men at work3 猎人们的青春攻略
  9. 这一次,抄袭的人竟然是Facebook!美版微信要出现了吗?!
  10. 【转】DICOM医学图像处理:浅析SWF、MWL、SPS、MPPS