Python處理時間序列資料

2022-06-18 21:00:20 字數 3569 閱讀 4145

初償用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

Pandas時間序列資料處理

時間序列資料是以時間為自變數,描述物件在時間過程中的發展 變化。比如,超市每天的銷售額,景區每天的旅客流量等。因此,處理時間序列資料是pandas資料分析中重要的一類方法。一 時間索引轉換 一般來說,我們獲得的資料不是以時間作為索引的。即使原始資料的第一列是時間,當我們匯入python後仍然會重新建...

時間序列資料

出生 gdp溫度 時間要素 年 季度 月 周 日 數值要素 長期變動趨勢 相當長的一段時間,受長期趨勢影響 持續上公升 下降 不規則變動 隨機擾動項 含白噪音 迴圈變動 市場經濟的商業週期 或者整個國家的經濟週期 1 資料具有週期性才能使用時間序列分解,例如資料是月份資料,季度資料,如果是年份資料則...

時間序列資料python庫彙總

由於我熱衷於機器學習在時間序列中的應用,特別是在醫學檢測和分類中,在嘗試的過程中,一直在尋找優質的python庫 而不是從頭開始編寫 去實現我對於資料處理的需求。以下是我在處理時間序列資料 time series data 我希望其中一些對你也有用!這個庫可以幫助你建立時間序列資料,特別是在使用延遲...