初償用python處理時間序列的資料,碰到一些坑。以此文記錄一下,希望後來者可以少走彎路。
背景說明:我是用乙個已有的csv資料表作為原材料進行處理的。
目的:實現時間序列的視覺化,及週期性的視覺化。
1、碰到的第乙個坑是,匯入到時間資料,預設的是字串的資料型別。因此,在視覺化的時候,會出現沒有按時間先後順序的方式繪圖的狀況。
因此,需要將字串解析為時間型別的資料型別。
方法1:是在讀取資料的時候,採用parse_dates=true,自動解析其中的時間資料。
方法2:使用dateuyil包中的parser.parse解析時間字串:
from dateutil.parser import parsev1 = 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 pd2、第2個坑是處理數值型資料的時候,在匯入pandas下預設是object的資料型別,此時需要強制轉換資料型別,但是我一直沒法轉換。datestrs = ['2018/09/02','2018/09/03','2018/09/04']
print(pd.to_datetime(datestrs))
出現的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 我希望其中一些對你也有用!這個庫可以幫助你建立時間序列資料,特別是在使用延遲...