1. 程式人生 > >python彙總資料:日線->周線

python彙總資料:日線->周線

背景

將浦發銀行一年日線的收盤價彙總成周線資料。

程式碼

"""
資料按周彙總
"""
import numpy as np
import datetime

"""

step1 :讀取資料

    2017浦發銀行.CSV:
    時間,收盤價(浦發銀行),成交量(浦發銀行)
    2017-01-03,12.3804137039431,21377729.6808511
    2017-01-04,12.403199741435,39048562.9770213
    2017-01-05,12.3804137039431,34807692.2229787
    2017-01-06,12.2892695539754,22639651.1540426
    …………

"""
def datestr2date(s): s = s.decode('utf-8') #weekday函式返回 日期對應星期的天數,0代表星期一 return datetime.datetime.strptime(s,"%Y-%m-%d").date() filepath = r"C:\Users\tinysoft\Desktop\2017浦發銀行.CSV" #delimiter 引數指定了檔案中的分隔符 #usecols 中的引數指定感興趣的資料列 #unpack 引數設定為True使得不同列的資料分開儲存 #skiprows 跳過一行 #dtype 設定轉換過來的資料的格式
d,c,v = np.loadtxt(filepath,delimiter=',',skiprows=1,usecols=(0,1,2),unpack=True, dtype={"names":('date','close','vol'), "formats":(np.object_,np.float32,np.float64)} , converters={0:datestr2date}) """ step2:從日線資料統計出周線資料: 開盤價,收盤價,最高價,最低價,實際開始日,實際截止日 """
weeksummary = [] start = 0 pwd = d[0].weekday() len_d = len(d) for i in range(1,len_d): wd = d[i].weekday() """ 判斷兩個日期之間夾著一個星期日(日期之間相差的天數如果大於7-星期幾) """ if (d[i]-d[i-1]).days > (6-d[i-1].weekday()): copen = c[start] #開盤價 cclose = c[i-1] #收盤價 cmax = np.max(c[start:i]) #最高價 cmin = np.min(c[start:i]) #最低價 dstart = d[start] #實際開始日 dendt = d[i-1] #實際截止日 weeksummary.append((copen,cclose,cmax,cmin,dstart,dendt)) start = i pwd = wd """ step3:展示周線資料 """ namesarr = ["實際開始日","實際截止日","開盤價","收盤價","最高價","最低價"] #格式化時間樣式 datefomat = lambda d : d.strftime("%Y-%m-%d") + "\t" #格式化價格 cfomat = lambda close : "%.2f"%close + "\t" strs = "{0}".format(namesarr) indexslist = [4,5,0,1,2,3] for dicts in weeksummary: strs +="\n" for i in indexslist: strs += datefomat(dicts[i]) if i>3 else cfomat(dicts[i]) print(strs)

結果

>>> 
===== RESTART: E:/桌面space/臨時資料/python/《python資料分析基礎-numpy學習指南》/資料按周彙總.py =====
['實際開始日', '實際截止日', '開盤價', '收盤價', '最高價', '最低價']
2017-01-03  2017-01-06  12.38   12.29   12.40   12.29   
2017-01-09  2017-01-13  12.30   12.36   12.36   12.24   
2017-01-16  2017-01-20  12.58   12.61   12.61   12.46   
2017-01-23  2017-01-26  12.59   12.71   12.71   12.59   
2017-02-03  2017-02-03  12.63   12.63   12.63   12.63   
2017-02-06  2017-02-10  12.65   12.74   12.74   12.65   
2017-02-13  2017-02-17  12.80   12.64   12.80   12.64   
2017-02-20  2017-02-24  12.84   12.69   12.84   12.68   
2017-02-27  2017-03-03  12.60   12.42   12.60   12.42   
2017-03-06  2017-03-10  12.46   12.33   12.48   12.32   
2017-03-13  2017-03-17  12.41   12.30   12.41   12.30   
2017-03-20  2017-03-24  12.26   12.12   12.26   11.99   
2017-03-27  2017-03-31  12.18   12.16   12.18   12.01   
2017-04-05  2017-04-07  12.27   12.23   12.27   12.23   
2017-04-10  2017-04-14  12.13   11.78   12.13   11.78   
2017-04-17  2017-04-21  11.82   11.43   11.82   11.32   
2017-04-24  2017-04-28  11.39   11.55   11.55   11.39   
2017-05-02  2017-05-05  11.51   11.33   11.51   11.33   
2017-05-08  2017-05-12  11.29   11.55   11.55   11.10   
2017-05-15  2017-05-19  11.60   11.41   11.60   11.40   
2017-05-22  2017-05-26  11.42   12.84   12.93   11.42   
2017-05-31  2017-06-02  12.84   12.89   12.92   12.84   
2017-06-05  2017-06-09  12.85   12.93   12.93   12.80   
2017-06-12  2017-06-16  12.78   12.35   12.78   12.35   
2017-06-19  2017-06-23  12.40   12.64   12.64   12.29   
2017-06-26  2017-06-30  12.64   12.65   12.79   12.64   
2017-07-03  2017-07-07  12.56   12.60   12.66   12.55   
2017-07-10  2017-07-14  12.53   13.59   13.59   12.53   
2017-07-17  2017-07-21  13.76   13.45   13.76   13.45   
2017-07-24  2017-07-28  13.67   13.47   13.67   13.38   
2017-07-31  2017-08-04  13.36   12.87   13.44   12.87   
2017-08-07  2017-08-11  12.93   12.68   12.93   12.68   
2017-08-14  2017-08-18  12.56   12.51   12.59   12.49   
2017-08-21  2017-08-25  12.51   12.78   12.78   12.43   
2017-08-28  2017-09-01  12.89   12.77   12.96   12.71   
2017-09-04  2017-09-08  12.78   13.03   13.03   12.78   
2017-09-11  2017-09-15  12.99   12.83   13.04   12.83   
2017-09-18  2017-09-22  12.91   12.89   12.91   12.87   
2017-09-25  2017-09-29  12.94   12.87   12.94   12.84   
>>>