Python处理时间序列数据

初偿用Python处理时间序列的数据,碰到一些坑。以此文记录一下,希望后来者可以少走弯路。

背景说明:我是用一个已有的csv数据表作为原材料进行处理的。

目的:实现时间序列的可视化,及周期性的可视化。

1、碰到的第一个坑是,导入到时间数据,默认的是字符串的数据类型。因此,在可视化的时候,会出现没有按时间先后顺序的方式绘图的状况。

因此,需要将字符串解析为时间类型的数据类型。

方法1:是在读取数据的时候,采用parse_dates=True,自动解析其中的时间数据。

方法2:使用dateuyil包中的parser.parse解析时间字符串:

from dateutil.parser import parse
v1 = parse(‘2018-09-02‘)
print("解析后的时间格式为:",v1)

方法3:利用pandas的to_datetime处理时间list

import pandas as pd
datestrs = [‘2018/09/02‘,‘2018/09/03‘,‘2018/09/04‘]
print(pd.to_datetime(datestrs))

2、第2个坑是处理数值型数据的时候,在导入pandas下默认是object的数据类型,此时需要强制转换数据类型,但是我一直没法转换。

出现的BUG就是:ValueError: could not convert string to float
后来找了半天才找到原因:是数据中含有空格或者“,”才导致无法将string转为int。
解决办法:replace(‘ ‘,‘‘).replace(‘,‘,‘‘)即替换掉其中的空格,删除其中的“,”

3、至于后面的绘图就很简单了,唯一值得说一下的是周期性的图的绘制。

我采用的是按“周”来绘图的,周期的固定的。实现过程看代码就好。

4、另外需要提一下,读取文件的时候需要设置encoding = ‘gbk‘。默认的是utf-8,但是系统会报错。

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 # Author:Leslie Dang
 4
 5 import numpy as np
 6 import pandas as pd
 7 import matplotlib.pyplot as plt
 8
 9 # 01从文件导入数据
10 data1 = pd.read_csv(‘01series.csv‘,parse_dates=True,index_col=0,encoding = ‘gbk‘)
11 print(data1)
12 # print(type(data1.index))
13 print(data1.dtypes)
14
15 # 02强制转换数据类型
16 print(‘***02强制转换数据类型***‘)
17
18 # ValueError: could not convert string to float
19 # 原因:很可能是你的数据中含有\t,或者空格,或者“,”
20 # 解决办法:replace(‘ ‘,‘‘).replace(‘,‘,‘‘)
21
22 for i in range(data1[‘销售额‘].count()):
23     data1[‘销售额‘][i] = data1[‘销售额‘][i].replace(‘ ‘,‘‘).replace(‘,‘,‘‘)
24
25 data1[‘销售额‘] = data1[‘销售额‘].astype(int)
26 print(data1.dtypes)
27
28 # 03绘图-线图
29 print(‘***03绘图***‘)
30 # plt.plot(data1[‘销售额‘],label = ‘销售额‘)
31 # plt.show()
32
33 # 04绘图-周期性分析图
34 print(‘***04绘图-周期性分析图***‘)
35
36 data1 = data1.set_index(‘星期‘)
37 print(data1)
38
39 count = data1[‘销售额‘].count()
40 circle = count//7
41 print(count,circle)
42 for i in range(circle):
43     plt.plot(data1[‘销售额‘][7*i:7*i+7])
44 plt.show()
45
46 # 思考:如何量化周期性?采用什么参数可以表达?周期性的强度如何?

这里补上我采用的数据源:

            星期    销售额
日期
2018-08-01  Wed  4,702,986
2018-08-02  Thu  5,034,151
2018-08-03  Fri  5,636,981
2018-08-04  Sat  6,377,764
2018-08-05  Sun  6,138,548
2018-08-06  Mon  5,335,273
2018-08-07  Tue  5,055,513
2018-08-08  Wed  5,159,413
2018-08-09  Thu  5,393,767
2018-08-10  Fri  5,920,339
2018-08-11  Sat  6,637,867
2018-08-12  Sun  6,292,839
2018-08-13  Mon  5,485,055
2018-08-14  Tue  5,274,536
2018-08-15  Wed  5,171,561
2018-08-16  Thu  5,269,780
2018-08-17  Fri  5,359,121
2018-08-18  Sat  6,353,952
2018-08-19  Sun  6,334,198
2018-08-20  Mon  5,577,552
2018-08-21  Tue  5,276,165
2018-08-22  Wed  5,403,919
2018-08-23  Thu  5,611,874
2018-08-24  Fri  6,073,795
2018-08-25  Sat  6,754,291
2018-08-26  Sun  6,333,426
2018-08-27  Mon  5,570,875
2018-08-28  Tue  5,327,305
2018-08-29  Wed  5,425,794 

原文地址:https://www.cnblogs.com/yimengtianya1/p/9576431.html

时间: 2024-10-28 14:51:01

Python处理时间序列数据的相关文章

Python 收集Twitter时间序列数据

CODE: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-7-18 @author: guaguastd @name: collect_time_series.py ''' if __name__ == '__main__': # import json import json # import partial from functools import partial # import trend from tren

python时间序列数据的对齐和数据库的分批查询

欲直接下载代码文件,关注我们的公众号哦!查看历史消息即可! 0. 前言 在机器学习里,我们对时间序列数据做预处理的时候,经常会碰到一个问题:有多个时间序列存在多个表里,每个表的的时间轴不完全相同,要如何把这些表在时间轴上进行对齐,从而合并成一个表呢?尤其是当这些表都存在数据库里,而且超级超级大的时候,怎样才能更高效地处理呢? 在上一篇文章中,已经介绍过了如何在Python中创建数据库连接以及对数据库进行增删改查.分组聚合以及批量读取和处理等操作. 今天就以上面的问题为导向,手把手教你如何用Pyt

用Python进行时间序列预测的7种方法

数据准备 数据集(JetRail高铁的乘客数量)下载. 假设要解决一个时序问题:根据过往两年的数据(2012 年 8 月至 2014 年 8月),需要用这些数据预测接下来 7 个月的乘客数量. import pandas as pd import numpy as np import matplotlib.pyplot as plt df = pd.read_csv('train.csv') df.head() df.shape 依照上面的代码,我们获得了 2012-2014 年两年每个小时的乘

使用python获取webservice数据并输出到文件

上头要求设置TCP备案检查,给了个WEBSERVICE接口.查了2天,才确认还是python比较好用,我这水平也就写个脚本把数据导出,过滤检索还是用的shell.写此文备忘.WEBSERVICE接口脚本如下: #! /usr/bin/python #coding:utf-8 import codecs import suds def main(file_name, out_file): url = 'http://121.14.4.210:8088/icpautobj/ws/getIcp?wsd

Python 获取接口数据,解析JSON,写入文件

Python 获取接口数据,解析JSON,写入文件 用于练手的例子,从国家气象局接口上获取JSON数据,将它写入文件中,并解析JSON: 总的来说,在代码量上,python代码量要比java少很多.而且python看起来更直观一些: 以下是代码: import types import urllib2 import json duan ="--------------------------" #在控制台断行区别的 #利用urllib2获取网络数据 def registerUrl():

[Python] Python 学习 - 可视化数据操作(一)

Python 学习 - 可视化数据操作(一) GitHub:https://github.com/liqingwen2015/my_data_view 目录 折线图 散点图 随机漫步 骰子点数概率 文件目录 折线图 cube_squares.py import matplotlib.pyplot as plt x_values=list(range(1, 5000)) y_values=[pow(x, 3) for x in x_values] plt.scatter(x_values, y_v

面板数据、截面数据、时间序列数据

截面数据.时间序列数据.面板数据是最常见的三种样本数据形式,网上对于此类数据的介绍比较零散,我在此做一个汇总归纳,如有错误,欢迎指正,我在此只做简单介绍,并不涉及具体分析,特别是面板数据,分析比较复杂,有专门的书籍可以参阅. 一.截面数据(Cross Section data) 1.概念: 截面数据是指由同一时期.不同个体的一个或多个统计指标所组成的数据集.该数据强调同一时期,因此也称为静态数据,我们平时获取的样本数据,大都具有同期性,因此截面数据也是最常见的 样本数据.例如:2016年各省份人

python数据分析笔记——数据加载与整理]

[ python数据分析笔记--数据加载与整理] https://mp.weixin.qq.com/s?__biz=MjM5MDM3Nzg0NA==&mid=2651588899&idx=4&sn=bf74cbf3cd26f434b73a581b6b96d9ac&chksm=bdbd1b388aca922ee87842d4444e8b6364de4f5e173cb805195a54f9ee073c6f5cb17724c363&mpshare=1&scene=

利用Python进行数据分析——数据规整化:清理、转换、合并、重塑(七)(2)

1.索引上的合并 有时候,DataFrame中的连接键位于其索引中.在这种情况下,你可以传入left_index = True或right_index = True(或两个都传)以说明索引应该被用作连接键: In [8]: left1 = pd.DataFrame({'key': ['a', 'b', 'a', 'a', 'b', 'c'], ...: 'value':range(6)}) In [9]: right1 = pd.DataFrame({'group_val':[3.5, 7]},