基于python的时间序列数据_Python处理时间序列数据

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

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

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

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

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

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

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

from dateutil.parser import parse

v1 = parse('2018-09-02')

print("解析后的时间格式为:",v1)

# 这里的v1是一个datetime.datetime对象,如果需要转str请参照以下

print(v1.strftime('%Y-%m-%d %H:%M:%S'))

方法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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值