如何以50个时间段保存timeseries图像

2024-03-28 09:18:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图每50天保存收盘价(PX_LAST)的图像,增量为1天(例如,图1从0-50开始,图2从1-51开始,等等)。下面是我为整个数据集保存图像的代码

start_date = datetime. date(2001, 1, 3)
end_date = datetime. date(2020, 10, 16)
delta = datetime. timedelta(days=50)

while start_date <= end_date:
    last_date = start_date
    last_date+= delta
    for i in range(148):
        plt.plot(data.PX_LAST[start_date:last_date])
        plt.savefig("spy_image" + str(i) +".png")
    start_date += delta

样本数据集-

 Dates  PX_OPEN PX_HIGH PX_LOW  PX_LAST
2000-01-03  148.25  148.25  143.875 145.4375
2000-01-04  143.5313    144.0625    139.6406    139.75
2000-01-05  139.9375    141.5313    137.25  140.0
2000-01-06  139.625 141.5   137.75  137.75
2000-01-07  140.3125    145.75  140.0625    145.75
2000-01-10  146.25  146.9063    145.0313    146.25
2000-01-11  145.8125    146.0938    143.5   144.5
2000-01-12  144.5938    144.5938    142.875 143.0625
2000-01-13  144.4688    145.75  143.2813    145.0
2000-01-14  146.5313    147.4688    145.9688    146.9688
2000-01-18  145.3438    146.625 145.1875    145.8125
2000-01-19  145.3125    147.0   145.0   147.0
2000-01-20  146.9688    146.9688    143.8125    144.75
2000-01-21  145.5   145.5   144.0625    144.4375
2000-01-24  145.6563    145.8438    139.4063    140.3438
2000-01-25  140.5156    141.9375    139.0   141.9375
2000-01-26  141.0   141.5469    140.0938    140.8125
2000-01-27  141.8438    142.2188    138.125 140.25
2000-01-28  139.4375    140.0625    135.5313    135.875
2000-01-31  135.8125    139.6719    135.0   139.5625
2000-02-01  139.75  141.6875    138.5313    140.9375
2000-02-02  141.2813    142.25  140.375 141.0625
2000-02-03  140.875 143.25  140.0   143.1875
2000-02-04  143.1875    144.0   142.125 142.5938
2000-02-07  142.5625    142.7813    141.4375    142.375
2000-02-08  143.9688    144.5625    143.625 144.3125
2000-02-09  144.4688    144.4688    141.2656    141.2813
2000-02-10  141.625 142.5625    140.875 141.5625
2000-02-11  141.8438    141.9375    138.0313    138.6875
2000-02-14  139.7813    139.7813    138.3125    139.5
2000-02-15  139.25  141.2188    137.7969    141.0938
2000-02-16  140.375 140.9375    138.7969    139.0
2000-02-17  140.4375    140.4375    138.2188    138.2813
2000-02-18  138.875 138.875 134.625 135.3125
2000-02-22  135.1875    136.3438    133.5313    134.9688
2000-02-23  135.625 137.4688    134.5   136.5625
2000-02-24  136.6875    137.0313    133.0938    133.8125
2000-02-25  135.1875    136.7188    133.125 133.3281
2000-02-28  133.375 136.6875    132.7188    136.125
2000-02-29  136.0625    137.4375    135.75  137.4375
2000-03-01  137.625 139.0   137.2188    138.4375
2000-03-02  138.6875    139.125 137.3438    138.5313
2000-03-03  140.4375    141.7188    139.7188    141.125
2000-03-06  140.8125    141.3438    138.75  139.75
2000-03-07  140.0   140.1563    135.2188    137.0469
2000-03-08  136.4688    137.8438    135.0313    136.875
2000-03-09  137.25  140.875 136.125 140.875
2000-03-10  140.1875    142.0   139.5313    140.125
2000-03-13  136.6875    140.4688    136.5   138.5938
2000-03-14  139.2813    140.0938    136.1563    136.625
2000-03-15  136.875 140.4375    136.0625    139.8125
2000-03-16  141.625 146.8438    140.875 146.3438
2000-03-17  145.8125    148.0   145.4375    146.9375
2000-03-20  146.875 147.3438    144.7813    146.1875
2000-03-21  145.5313    149.75  144.5   149.1875
2000-03-22  149.5625    150.8438    148.6875    150.0938
2000-03-23  149.1563    153.4688    149.1563    152.6563
2000-03-24  152.875 155.75  151.7188    153.5625
2000-03-27  153.375 153.7813    151.8125    151.9375
2000-03-28  151.25  152.9844    150.5938    151.0625
2000-03-29  151.5625    152.4844    149.6563    151.2188
2000-03-30  150.1563    151.9219    147.125 148.6875
2000-03-31  149.625 152.3125    148.4375    150.375
2000-04-03  150.125 151.25  148.6875    151.25
2000-04-04  151.75  153.0   145.75  145.75
2000-04-05  147.875 150.8125    147.625 149.1875
2000-04-06  150.25  151.6875    149.0   150.4844
2000-04-07  151.5625    152.125 150.5   151.4375
2000-04-10  151.75  153.1094    150.3125    150.8438
2000-04-11  150.0   151.625 148.375 150.4063
2000-04-12  150.375 151.1563    146.1563    146.2813
2000-04-13  147.4688    148.1563    141.125 144.25
2000-04-14  142.625 142.8125    133.5   136.0
2000-04-17  135.1875    140.75  134.6875    140.75
2000-04-18  140.5625    144.4688    139.7813    144.4688
2000-04-19  144.5   145.125 142.5313    143.125
2000-04-20  143.5625    143.9375    142.375 143.8125
2000-04-24  141.5   143.3125    140.5   142.25
2000-04-25  144.625 148.1563    144.4375    148.1563
2000-04-26  147.9688    148.75  146.0   146.4844
2000-04-27  143.0   147.3438    143.0   146.0
2000-04-28  147.0   147.8594    145.0625    145.0938
2000-05-01  146.5625    148.4844    145.8438    147.0625
2000-05-02  145.5   147.125 144.125 144.125
2000-05-03  144.0   144.0   139.7813    140.75
2000-05-04  142.0   142.3594    140.75  141.8125
2000-05-05  141.0625    144.0   140.9375    143.5313
2000-05-08  142.75  143.375 141.8438    142.4531
2000-05-09  143.0625    143.4063    140.2656    141.3125
2000-05-10  140.5   140.9688    137.75  138.125
2000-05-11  140.125 141.5   139.125 141.2813
2000-05-12  141.8125    143.4688    141.625 142.8125
2000-05-15  142.75  145.6094    142.0   145.2813
2000-05-16  146.5625    147.7188    145.3125    146.6875
2000-05-17  145.6875    146.1875    144.4688    145.1563
2000-05-18  145.625 146.3125    143.375 143.375
2000-05-19  142.5625    143.2344    140.4063    141.125
2000-05-22  141.25  141.4688    137.0   140.0625
2000-05-23  140.4375    140.8125    137.5625    138.0
2000-05-24  138.0   140.6875    136.5   140.25

Tags: 数据代码图像datetimedatepltstart增量
1条回答
网友
1楼 · 发布于 2024-03-28 09:18:56

您尚未指定如何处理缺少的天数,但您的方法可能是这样的:

import matplotlib.pyplot as plt
import pandas as pd

df = pd.read_csv("test.txt", delim_whitespace=True,  parse_dates=["Dates"])
df = df.sort_values("Dates")

startdt= df["Dates"].min()
enddt = df["Dates"].max()
delta = pd.Timedelta(20, unit="D")
delta1d = pd.Timedelta(1, unit="D")
i = 0

if startdt + delta > enddt:
    df.plot(x="Dates", y="PX_LAST", color="blue")
    plt.savefig(f"spy_image_{i:02d}.png")
    print(f"saved image {i:02d} covering period from {startdt:%Y-%m-%d} to {enddt:%Y-%m-%d}")
    plt.close()
else:    
    while startdt + delta <= enddt:
        temp = df[(df["Dates"] >= startdt) & (df["Dates"] <= startdt + delta)]
        temp.plot(x="Dates", y="PX_LAST", color="blue")
        plt.savefig(f"spy_image_{i:02d}.png")
        print(f"saved image {i:02d} covering period from {startdt:%Y-%m-%d} to {startdt+delta:%Y-%m-%d}")
        plt.close()
        i += 1
        startdt += delta1d
    
print("finished")

相关问题 更多 >