[PYTHON] [Einführung in Pandas] Ich habe versucht, die Austauschdaten durch Dateninterpolation zu erhöhen ♬

In Bezug auf die Dateninterpolation haben wir uns zuvor mit gewöhnlichen Zeitreihendaten befasst. Dieses Mal haben wir durch Interpolation der täglichen Daten zum Zweck des Backtests 6-Stunden-, 4-Stunden-, 1-Stunden- und 10-Minuten-Daten erstellt und deren Richtigkeit überprüft.

Was ich getan habe

・ Lagrange-Interpolationsformel ・ Interpolation von Pandas-Daten ・ 6 Stunden bis 10 Minuten Datenerstellung ・ Siehe Genauigkeit

・ Lagrange-Interpolationsformel

【Referenz】 ・ [Interpolation] Interpolieren von linearer Interpolation zu quadratischer Interpolation und Lagrange-Interpolation ♬ Zunächst kann die durch (x0, y0), (x1, y1) gehende lineare Interpolationsfunktion durch die folgende Funktion berechnet werden.

def interpolation(x0,y0,x1,y1,x):
    dn = (x0-x1)
    return y0*(x-x1)/dn + y1*(x0-x)/dn
#Lagrange interpolation
# y0*(x-x1)/(x0-x1)+y1*(x-x0)/(x1-x0)

Eine quadratische Interpolationsfunktion, die drei Punkte (x0, y0), (x1, y1), (x2, y2) durchläuft, kann wie folgt berechnet werden.

def interpolation2(x0,y0,x1,y1,x2,y2,x):
    dn1 = (x0-x1)*(x0-x2)
    dn2 = (x1-x2)*(x1-x0)
    dn3 = (x2-x0)*(x2-x1)
    return y0*(x-x1)*(x-x2)/dn1+y1*(x-x2)*(x-x0)/dn2+y2*(x-x0)*(x-x1)/dn3

Wenn die Endpunktverarbeitung eine Funktion ist, die die obigen zwei Punkte durchläuft und die anderen Funktionen, die drei Punkte durchlaufen, kombiniert werden, ist die Funktion, die 10 Punkte zwischen den beiden Punkten interpoliert, wie folgt.

m=10
sigxm=np.zeros(m*pitch-(m-1))
sigxm[0]=y[0]
sigxm[m*pitch-m]=y[pitch-1]
for i in range(1,m*pitch-m,1):
    if i%m==0:
        sigxm[i]=y[int(i/m)]
    if i > m*pitch-(2*m+1):
        sigxm[i] = interpolation(int(i/m),y[int(i/m)],int(i/m)+1,y[int(i/m)+1],int(i/m)+(i%m)/m)
    else:
        sigxm[i] = interpolation2(int(i/m),y[int(i/m)],int(i/m)+1,y[int(i/m)+1],int(i/m)+2,y[int(i/m)+2],int(i/m)+(i%m)/m)

Letztes Mal habe ich gesagt, dass auch eine Interpolation n-ter Ordnung möglich ist, aber bei der tatsächlichen Interpolation wird eine glatte Funktion mit der obigen Funktion erhalten, die die quadratische Interpolation kombiniert, so dass ich die obige Funktion auch dieses Mal übernehmen werde. Dieses Mal erstellen wir durch Ersetzen der Variablen y dieser Funktion durch Pandas-Daten Interpolationsdaten für Umtausch- und Bestandsdaten.

・ Interpolation von Pandas-Daten

Aus der Schlussfolgerung heraus ändern sich die linearen Interpolations- und quadratischen Interpolationsfunktionen nicht. Dann kann die Berechnung des m-Teilungspunktes durch die folgende Funktion berechnet werden. Lesen Sie zuerst die Austauschdaten mit pandas.DataReader.

df=DataReader.get_data_yahoo("{}".format("JPY=X"),start,end)

Wenn Sie dann y durch df ["Schließen"] ersetzen und wie unten gezeigt nacheinander berechnen, können Sie auch Pandas-Daten berechnen.

m=24
sigxm=np.zeros(m*pitch-(m-1))
sigxm[0]=df["Close"][0]
sigxm[m*pitch-m]=df["Close"][pitch-1]
for i in range(1,m*pitch-m,1):
    if i%m==0:
        sigxm[i]=df["Close"][int(i/m)]
    if i > m*pitch-(2*m+1):
        sigxm[i] = interpolation(int(i/m),df["Close"][int(i/m)],int(i/m)+1,df["Close"][int(i/m)+1],int(i/m)+(i%m)/m)
    else:
        sigxm[i] = interpolation2(int(i/m),df["Close"][int(i/m)],int(i/m)+1,df["Close"][int(i/m)+1],int(i/m)+2,df["Close"][int(i/m)+2],int(i/m)+(i%m)/m)

dfsigxm = pd.DataFrame()
dfsigxm["sig"] = sigxm
date_df=dfsigxm['sig'].index.tolist()
plot_fig(date_df,dfsigxm,m,end)

Dann wird dfsigxm, berechnet durch Ändern von m durch die obige Funktion, durch die folgende Funktion plot_fig (data_df, dfsig, m, end) aufgezeichnet.

def plot_fig(data_df,dfsig,m,end):
    fig, (ax1,ax2) = plt.subplots(2,1,figsize=(1.6180 * 8, 4*2),dpi=100)
    ax1.plot(date_df[0:],dfsig["sig"][0:])
    ax2.plot(date_df[0:32*m],dfsig["sig"][0:32*m])
    ax1.grid()
    ax2.grid()
    plt.pause(1)
    plt.savefig("./fx/{}_{}_{}_{}_.png ".format(m,"interpolate","JPN=X",end))
    plt.close()

・ 6 Stunden bis 10 Minuten Datenerstellung

Sie können 6 Stunden Daten mit m = 4, 4 Stunden mit m = 6, 1 Stunde mit m = 24 und 10 Minuten mit m = 24 * 6 berechnen. Die Ergebnisse sind wie folgt. Da m = 1 ein gerader Graph ist, bleiben die Endpunkte erhalten, aber ansonsten gibt es fast keine Änderung, einschließlich der vergrößerten Ansicht unten, aber die Plotdichte hat zugenommen, und wenn Sie genau hinschauen, haben sich die Zahlen auf der horizontalen Achse erhöht. Ich verstehe. hokan_USDJPY.gif

・ Siehe Genauigkeit

Das Einfache ist, es mit der tatsächlichen 10-Minuten-Bar zu vergleichen, aber es scheint, dass es keine Website gibt, die es bekommen kann.

Zusammenfassung

・ 6 Stunden, 4 Stunden, 1 Stunde und 10 Minuten Daten wurden erstellt, indem tägliche Austauschdaten mit Pandas erfasst und interpoliert wurden. ・ Es wurde eine glatte Datenzeichenfolge erstellt

・ Leider war es nicht möglich, mit den tatsächlichen Daten zu vergleichen und zu verifizieren.

Ganzer Code

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import pandas_datareader.data as DataReader
import datetime as dt

def plot_fig(data_df,dfsig,m,end):
    fig, (ax1,ax2) = plt.subplots(2,1,figsize=(1.6180 * 8, 4*2),dpi=100)
    ax1.plot(date_df[0:],dfsig["sig"][0:],"o-")
    ax2.plot(date_df[0:32*m],dfsig["sig"][0:32*m],"o-")
    ax1.grid()
    ax2.grid()
    plt.pause(1)
    plt.savefig("./fx/{}_{}_{}_{}_.png ".format(m,"interpolate","JPN=X",end))
    plt.close()

def interpolation(x0,y0,x1,y1,x):
    return y0 + (y1 - y0) * (x - x0) / (x1 - x0)

def interpolation2(x0,y0,x1,y1,x2,y2,x):
    dn1 = (x0-x1)*(x0-x2)
    dn2 = (x1-x2)*(x1-x0)
    dn3 = (x2-x0)*(x2-x1)
    return y0*(x-x1)*(x-x2)/dn1+y1*(x-x2)*(x-x0)/dn2+y2*(x-x0)*(x-x1)/dn3

def calc_interpolate(df,pitch,m):
    sigxm=np.zeros(m*pitch-(m-1))
    sigxm[0]=df["Close"][0]
    sigxm[m*pitch-m]=df["Close"][pitch-1]
    for i in range(1,m*pitch-m,1):
        if i%m==0:
            sigxm[i]=df["Close"][int(i/m)]
        if i > m*pitch-(2*m+1):
            sigxm[i] = interpolation(int(i/m),df["Close"][int(i/m)],int(i/m)+1,df["Close"][int(i/m)+1],int(i/m)+(i%m)/m)
        else:
            sigxm[i] = interpolation2(int(i/m),df["Close"][int(i/m)],int(i/m)+1,df["Close"][int(i/m)+1],int(i/m)+2,df["Close"][int(i/m)+2],int(i/m)+(i%m)/m)
    return sigxm        

start = dt.date(2020,1,1)
end = dt.date(2020,6,15)
df=DataReader.get_data_yahoo("{}".format("JPY=X"),start,end)

m=1
dfsigxm = pd.DataFrame()
dfsigxm["sig"] = df["Close"]
print(dfsigxm)
date_df=dfsigxm['sig'].index.tolist()
plot_fig(date_df,dfsigxm,m,end)

m=4
pitch = len(df)
sigx2=calc_interpolate(df,pitch,m)
dfsigx2 = pd.DataFrame()
dfsigx2["sig"] = sigx2
print(dfsigx2)
date_df=dfsigx2['sig'].index.tolist()
plot_fig(date_df,dfsigx2,m,end)

m=6
sigxm=calc_interpolate(df,pitch,m)
dfsigxm = pd.DataFrame()
dfsigxm["sig"] = sigxm
print(dfsigxm)
date_df=dfsigxm['sig'].index.tolist()
plot_fig(date_df,dfsigxm,m,end)

m=24
sigxm=calc_interpolate(df,pitch,m)
dfsigxm = pd.DataFrame()
dfsigxm["sig"] = sigxm
print(dfsigxm)
date_df=dfsigxm['sig'].index.tolist()
plot_fig(date_df,dfsigxm,m,end)

m=24*6
sigxm=calc_interpolate(df,pitch,m)
dfsigxm = pd.DataFrame()
dfsigxm["sig"] = sigxm
print(dfsigxm)
date_df=dfsigxm['sig'].index.tolist()
plot_fig(date_df,dfsigxm,m,end)

Recommended Posts

[Einführung in Pandas] Ich habe versucht, die Austauschdaten durch Dateninterpolation zu erhöhen ♬
[Einführung in die Simulation] Ich habe versucht, durch Simulation einer Koronainfektion zu spielen ♬
[Einführung in die Simulation] Ich habe versucht, durch Simulation einer Koronainfektion zu spielen ♬ Teil 2
[Pandas] Ich habe versucht, Verkaufsdaten mit Python zu analysieren. [Für Anfänger]
Ich habe versucht, fMRI-Daten mit Python zu analysieren (Einführung in die Dekodierung von Gehirninformationen)
Ich habe versucht, die Blasensortierung nach Sprache zu programmieren
Ich habe versucht, durch Schaben ein Bild zu bekommen
Ich habe versucht, die Daten mit Zwietracht zu speichern
Ich habe versucht, CloudWatch-Daten mit Python abzurufen
Ich habe versucht, Drachenkugeln nach Adalin zu klassifizieren
[Einführung in PID] Ich habe versucht, ♬ zu steuern und zu spielen
Ich habe versucht, die Daten des Laptops durch Booten unter Ubuntu zu retten
[Einführung in Docker] Ich habe versucht, verschiedene Docker-Kenntnisse zusammenzufassen, die durch das Studium gewonnen wurden (Windows / Python).
Ich habe versucht zu debuggen.
Ich möchte einem Pandas-Datenrahmen eine group_id geben
Ich habe versucht, das Spiel in der J League vorherzusagen (Datenanalyse)
[Einführung in Pytorch] Ich habe versucht, Cifar10 mit VGG16 ♬ zu kategorisieren
Ich habe versucht zusammenzufassen, wie man Pandas von Python benutzt
[Einführung in AWS] Ich habe versucht, mit der Sprach-Text-Konvertierung zu spielen ♪
[Einführung] Ich habe versucht, es selbst zu implementieren, während ich den Dichotomiebaum erklärte
[Erste Datenwissenschaft ⑤] Ich habe versucht, meinem Freund zu helfen, die erste Eigenschaft durch Datenanalyse zu finden
Ich habe versucht, Pferderennen vorherzusagen, indem ich alles von der Datenerfassung bis zum tiefen Lernen getan habe
[Einführung] Ich habe versucht, es selbst zu implementieren, während ich erklärte, um die Dichotomie zu verstehen
Ich habe versucht, Stückpreisdaten nach Sprache mit Real Gachi von Python zu aggregieren und zu vergleichen
Ich habe versucht, einen Pandas-Datenrahmen zu erstellen, indem ich mit Python Informationen zum Lebensmittelrückruf abgekratzt habe
Ich habe eine Funktion zum Abrufen von Daten aus der Datenbank spaltenweise mithilfe von SQL mit SQLite3 von Python [SQLite3, SQL, Pandas] erstellt.
Django super Einführung von Python-Anfängern! Teil 6 Ich habe versucht, die Login-Funktion zu implementieren
Ich habe versucht, Videos mit der Youtube Data API (Anfänger) zu suchen.
Ich habe versucht, PredNet zu lernen
Ich habe versucht, mit Python faker verschiedene "Dummy-Daten" zu erstellen
Ich habe versucht, die Erkennung von Anomalien durch spärliches Strukturlernen zu implementieren
[Ich habe versucht, Pythonista 3 zu verwenden] Einführung
Ich habe versucht, SVM zu organisieren.
Ich habe versucht, die Videoerstellung durch parallele Verarbeitung zu beschleunigen
Ich habe versucht, PCANet zu implementieren
Einführung in die nichtlineare Optimierung (I)
[Django] Ich habe versucht, Zugriffsbeschränkungen durch Klassenvererbung zu implementieren.
Ich habe versucht, den in Pandas häufig verwendeten Code zusammenzufassen
Ich habe versucht, MNIST nach GNN zu klassifizieren (mit PyTorch-Geometrie).
[Einführung in das Modell der Infektionskrankheiten] Ich habe versucht, zu passen und zu spielen ♬
Ich habe versucht, Linux wieder einzuführen
Ich habe versucht, Pylint vorzustellen
Ich habe Pandas 'Sql Upsert ausprobiert
Mongodb Kürzeste Einführung (3) Ich habe versucht, sogar Millionen zu beschleunigen
Ich habe versucht, SparseMatrix zusammenzufassen
Ich habe versucht, scRNA-seq-Daten mithilfe der topologischen Datenanalyse (TDA) zu analysieren.
jupyter ich habe es berührt
Ich habe versucht, StarGAN (1) zu implementieren.
Ich habe versucht, mit pypyodbc schnell Daten von AS / 400 abzurufen
Ich habe versucht, einen einfachen Kredit-Score mit logistischer Regression zu erstellen.
Ich habe versucht, den Getränkepräferenzdatensatz durch Tensorzerlegung zu visualisieren.
Ich habe versucht, die Satzklassifizierung durch Self Attention mit PyTorch zu implementieren
Ich habe versucht, BigQuery-Daten mit Jupyter Lab mit GCP zu visualisieren
Ich habe versucht, die Befehle zusammenzufassen, die Anfängeringenieure heute verwenden
Ich ließ RNN Sin Wave lernen und versuchte vorherzusagen
Ich habe versucht, Boeing die Geigenleistung durch Posenschätzung vorzustellen
Ich habe versucht, das Schichtplanungsproblem mit verschiedenen Methoden zu lösen
[Python] Ich habe versucht, mithilfe der YouTube-Daten-API verschiedene Informationen abzurufen!
Ich habe versucht, mit pypyodbc Preparation 1 schnell Daten von AS / 400 abzurufen