Bis Sie tägliche Daten für mehrere Jahre japanischer Bestände erhalten und diese in einer einzigen CSV (Python) speichern

Einführung

Dieser Artikel ist der Artikel zum 22. Tag von SFC Adventskalender 2019. Ich habe mich gefragt, worüber ich schreiben soll, aber dieses Mal habe ich beschlossen, den Code, den ich kürzlich geschrieben habe, neu zu schreiben und daraus einen Artikel zu machen.

Hintergrund

In den letzten Jahren, mit der Entwicklung verschiedener Software und Bibliotheken, wurden Aktienkursdaten von Einzelpersonen verwendet. Die Aktienkursdaten japanischer Aktien sind jedoch aus urheberrechtlichen Gründen schwierig zu handhaben (siehe hier für Einzelheiten), sodass derzeit eine große Menge an Aktienkursdaten verfügbar ist. Es gibt keinen Dienst, mit dem Sie alle auf einmal kostenlos herunterladen können.

Es gibt jedoch einige Dienste, mit denen Sie ein Jahr lang tägliche Daten für jede Marke herunterladen können. Zum Beispiel Stock Investment Memo und Buffett Code.

Diese Dienste sind sehr nützlich, wenn Sie die Aktienkurse für ein Jahr analysieren möchten. Sie sind jedoch etwas unpraktisch, da Sie eine große Anzahl von Dateien verarbeiten müssen, wenn Sie die Aktienkurse für mehrere Jahre analysieren möchten.

Lassen Sie uns dieses Mal die Verwendung von Aktienkursdaten für mehrere Jahre ermöglichen, indem Sie einen Code erstellen, der mehrere CSVs kombiniert, die von Stock Investment Memo heruntergeladen wurden. Machen wir das. Durch die Verwendung des DataFrame von Pandas, einer Python-Bibliothek, ist die Verwendung bei der Analyse mit Python so wie sie ist einfach.

Informationen zum Herunterladen von Daten

Wenn Sie das Obige lesen, fragen Sie sich möglicherweise: "Gibt es einen Code für den Download-Teil?" In dieser Hinsicht ist es natürlich möglich zu automatisieren, aber da unklar ist, ob Scraping und Automatisierung auf der Website des Stock Investment Memo zulässig sind, werde ich den Code in diesem Artikel nicht einführen.

Stattdessen wird Sehnsucht nach Freiberuflern dieser Code eingeführt. Sie können den Download mithilfe von vollständig automatisieren.

Darüber hinaus müssen zu diesem Zeitpunkt zwei Punkte geändert werden, sodass sie im Folgenden beschrieben werden.

  1. Informationen zum Speicherort der Datei

Es wird empfohlen, "download_dir =" C: \ Python \ "durch" download_dir = ". / Csv" zu ersetzen. Auf diese Weise können Sie die heruntergeladene Datei im Ordner direkt unter dem aktuellen Verzeichnis ablegen.

  1. Informationen zur iterativen Verarbeitung

Wenn Sie die Daten bis 2019 erhalten möchten, wo sie "für i in Reichweite" (Jahr 2019) sind: ", erhalten Sie die Daten bis" für i in Reichweite (Jahr 2020): ", 2020 Wenn Sie möchten, müssen Sie es um ein Jahr erhöhen, wie "für i in Reichweite (Jahr 2021):".

Datenaufbereitung

Laden Sie zunächst die Aktienkursdaten einer bestimmten Aktie für mehrere Jahre aus Stock Investment Memo herunter und speichern Sie sie mit der oben beschriebenen Methode.

wichtiger Punkt

Daten aus CSV lesen

Erstellen Sie Code zum Laden der heruntergeladenen CSV.

Code

import pandas as pd
import codecs

def read_csv(file_name: str) -> pd.core.frame.DataFrame:
    '''
    kabuoji3.Dateiname von CSV von com heruntergeladen[file_name]Geben Sie an und lesen Sie, formatieren Sie und DataFrame[df]Rückgabe als.
    '''
    with codecs.open(file_name, 'r', 'Shift_JIS', 'ignore') as f:
        df = pd.read_csv(f)
    df.columns = df.iloc[0]
    df.drop(df.index[[0,1]],inplace=True)
    df.index = pd.to_datetime(df.index, format='%Y-%m-%d')
    df.index.name = "Datum"
    return df

Kommentar

Der CSV-Zeichencode, der in der Aktieninvestitionsnotiz heruntergeladen werden kann, lautet "Shift_JIS". Wenn Sie also die CSV auf die übliche Weise lesen, können verstümmelte Zeichen auftreten. Um dies zu verhindern, wird hier "Codecs" verwendet, um den Zeichencode zum Öffnen der Datei anzugeben, und "Pandas" -Funktion "read_csv ()" wird verwendet, um die CSV als "DataFrame" zu lesen. Darüber hinaus enthält die im Aktieninvestitionsprotokoll heruntergeladene CSV-Datei Markeninformationen im Kopfteil, und "Spalten" und "Index" werden nicht korrekt erkannt. Daher ist der Vorgang des Löschens des Kopfes nach direkter Angabe dieser enthalten. Ich werde. Darüber hinaus kann durch Ausführen der Verarbeitung "to_datetime" in der Spalte "date" von "index" das Datum von "index" so behandelt werden, wie es als Typ "datetime" ist. Die endgültige Ausgabe ist der "DataFrame" von "Pandas", der die Aktienkursdaten für ein Jahr enthält.

Dateiliste lesen

Erstellen Sie eine Liste mit CSV-Dateinamen in einem Ordner und erkennen Sie, wie viele Jahre Bestandsdaten jede Datei enthält.

Code

from glob import glob

def get_price_data_by_year(year: int) -> pd.core.frame.DataFrame:
    '''
Liste der Dateien im Ordner[FILES_DICT]Bestimmtes Jahr ab[year]Beziehen Sie sich auf den Dateinamen des Aktienkurs-CSV von, read und DataFrame[df]Rückgabe als.
    '''
    file_name = FILES_DICT[str(year)]
    df = read_csv(file_name)
    return df

if __name__ == "__main__":
    
    #Geben Sie das Verzeichnis des Ordners an, der die heruntergeladene CSV enthält (relativer Pfad oder absoluter Pfad ist nach dem Ordnernamen zulässig)/*Vergiss nicht)
    CSV_FOLDER_DIRECTORY = './csv/*'

    #CSV oben_FOLDER_CSV-Dateiwörterbuch DATEIEN basierend auf VERZEICHNIS_Teil, der automatisch DICT erstellt (keine Bearbeitung erforderlich)
    FILES_DICT = {}
    files = glob(CSV_FOLDER_DIRECTORY)
    files.sort()
    for file_name in files:
        FILES_DICT[file_name[-8:-4]] = file_name

Kommentar

Der Teil "CSV_FOLDER_DIRECTORY =". / Csv / * "gibt den Ordner an, in dem die CSV organisiert ist. Sie können entweder einen relativen oder einen absoluten Pfad angeben. Fügen Sie jedoch nach dem Ordnernamen / * hinzu. Im weiteren Verlauf des Prozesses erstellen Sie ein CSV-Dateiwörterbuch "FILES_DICT". Es sollte als globale Variable definiert werden, damit innerhalb der Funktion darauf verwiesen werden kann. Die CSV, die im Aktieninvestitionsprotokoll heruntergeladen werden kann, wird unter einem Namen wie "7203_2012.csv" gespeichert. Durch Extrahieren des Teils "2012" (Jahre) daraus, Erstellen eines "Wörterbuchs" mit dem "Schlüssel" und dem Dateinamen "Wert", einer CSV-Datei mit Aktienkursdaten für ein bestimmtes Jahr Sie können sich leicht auf den Namen beziehen.

Datenkombination (Jahr angegeben)

Aktienkursdaten für mehrere Jahre vom angegebenen Jahr bis zum angegebenen Jahr werden der Reihe nach gelesen, kombiniert und als eine Daten ausgegeben.

Code

def create_historical_data(open: int,last: int) -> pd.core.frame.DataFrame:
    '''
Designiertes Jahr[open]Bestimmtes Jahr ab[last]Lesen Sie Bestandsdaten bis zu, kombinieren Sie sie und kombinieren Sie sie zu einem DataFrame[df]Rückgabe als.
    '''
    df = get_price_data_by_year(open)
    for i in range(int(open) + 1,int(last) + 1):
        df = pd.concat([df, get_price_data_by_year(i)])
    return df

Kommentar

Aktienkursdaten vom angegebenen Jahr "offen" bis zum angegebenen Jahr "zuletzt" werden der Reihe nach gelesen, und der erhaltene "Datenrahmen" wird mit "pd.concat ()" kombiniert. Schließlich wird ein "DataFrame" mit allen kombinierten Daten ausgegeben. Wenn die Datei für das angegebene Jahr nicht vorhanden ist, tritt ein Fehler auf. Bitte stellen Sie sicher, dass Sie die Daten für die angegebene Anzahl von Jahren im Voraus heruntergeladen haben, bevor Sie sie ausführen.

Daten kombinieren (Jahre angeben)

Erstellt rückwirkend ab dem Ausführungsdatum Aktienkursdaten für die angegebene Anzahl von Jahren und gibt diese als eine Daten aus. Dies wird in Datumseinheiten ausgegeben, aber wenn das Datum, das genau die angegebene Anzahl von Jahren rückwirkend ist, nicht der Geschäftstag der Börse ist, wird "DataFrame" ausgegeben, das die Aktienkursdaten vom Geschäftstag unmittelbar danach bis zur Gegenwart enthält. Getan werden. Wenn das Ausführungsdatum nicht der Geschäftstag des Austauschs ist, wird in ähnlicher Weise ein "DataFrame" ausgegeben, der die Daten bis zum vorherigen Geschäftstag enthält.

Code

import datetime as dt
from dateutil import relativedelta

def create_historical_data_by_date(years: int) -> pd.core.frame.DataFrame:
    '''
Nur die angegebene Anzahl von Jahren ab dem Ausführungsdatum[years]Erstellen Sie winzige Aktienkursdaten und einen DataFrame[df]Rückgabe als.
    '''
    this_year = int(dt.datetime.now().year)
    df = create_historical_data(this_year - years,this_year)
    open = dt.datetime.now() - relativedelta.relativedelta(years=years)
    df = df[df.index >= open]
    return df

Kommentar

Verwenden Sie zuerst "datetime", um das aktuelle Jahr abzurufen, und verwenden Sie dann "create_historical_data ()" oben, um Bestandsdaten für die angegebene Anzahl von Jahren "abzurufen". Als nächstes erhalten wir mit "relativedelta" das Datum, das genau der angegebenen Anzahl von Jahren entspricht, ab dem Datum "datetime". Da der im vorherigen Schritt erhaltene "Index" des "DataFrame" bereits in den Typ "datetime" konvertiert wurde, können Sie den "DataFrame" mithilfe des Vergleichsoperators "> =" einfach filtern. Sie können Daten für die angegebene Anzahl von Jahren abrufen. Die endgültige Ausgabe ist ein "DataFrame", der Bestandsdaten für die angegebene Anzahl von Jahren enthält.

In CSV exportieren (Speichern)

Ich konnte die Daten ausgeben, die ich im obigen Abschnitt verwenden wollte, aber um diese Daten extern zu verarbeiten, muss ich sie in einer Datei speichern. Als Beispiel stellen wir Ihnen vor, wie Sie in CSV speichern.

Code

if __name__ == "__main__":

    #Wenn Sie Aktienkursdaten vom angegebenen Jahr bis zum angegebenen Jahr speichern möchten
    df = create_historical_data(2015,2019)
    df.to_csv("2015-2019.csv")

    #Wenn Sie Bestandsdaten für die angegebene Anzahl von Jahren rückwirkend ab dem Ausführungsdatum speichern möchten
    df = create_historical_data_by_date(5)
    df.to_csv("5years_price.csv")

Kommentar

Verwenden Sie zunächst die im obigen Abschnitt erstellten Funktionen wie "create_historical_data ()" und "create_historical_data_by_date ()" und speichern Sie das erhaltene Ergebnis in der Variablen "df". Dieses df kann einfach als CSV mit to_csv () exportiert werden, was eine Funktion von pandas ist. Außerdem muss der zu diesem Zeitpunkt zu speichernde Dateiname angegeben und die in "" "enthaltene Zeichenfolge als Argument von" to_csv () "übergeben werden. Stellen Sie sicher, dass am Ende ".csv" steht. Der Zeichencode der zu diesem Zeitpunkt gespeicherten Datei lautet "UTF-8", und das Trennzeichen lautet ",". Wählen Sie beim Importieren mit Excel "Daten> Textdatei" und geben Sie den Zeichencode und das Trennzeichen an.

Code (Zusammenfassung)

Der diesmal verwendete Code wird auf [GitHub] veröffentlicht (https://github.com/shota4/jp_stock_price_data/blob/master/edit_price_data.py). Wenn Sie interessiert sind, überprüfen Sie bitte von hier.

Schließlich

Bis zum Ende Danke fürs Lesen. Wir hoffen, dass Ihre Aktienanalyse und Weihnachten bereichert werden.

Recommended Posts

Bis Sie tägliche Daten für mehrere Jahre japanischer Bestände erhalten und diese in einer einzigen CSV (Python) speichern
Bis Sie einen Schnappschuss des Amazon Elasticsearch-Dienstes erhalten und wiederherstellen
Verarbeitung von CSV-Daten in voller und halber Breite in Python
Bis Sie Daten in eine Tabelle in Python einfügen
Erstellen und testen Sie eine CI-Umgebung für mehrere Versionen von Python
Ein Python-Anfänger hat in den letzten 10 Jahren zunächst versucht, die Wetterdaten schnell und einfach zu analysieren.
Holen Sie sich den Schlüssel für die Migration von JSON-Daten auf der zweiten Ebene mit Python
Holen Sie sich ein Zeichen für Conoha mit Python
So speichern Sie die Feature-Point-Informationen des Bildes in einer Datei und verwenden sie zum Abgleichen
Ich habe in Python ein Programm erstellt, das FX-CSV-Daten liest und eine große Anzahl von Diagrammbildern erstellt
[Python] So benennen Sie Tabellendaten und geben sie mit csv aus (to_csv-Methode)
Rufen Sie Daten über die Salesforce-API (Bulk-API) in Python ab und laden Sie sie in BigQuery
Holen Sie sich mit Python den Aktienkurs eines japanischen Unternehmens und erstellen Sie eine Grafik
[Einführung in Python] So erhalten Sie den Datenindex mit der for-Anweisung
Holen Sie sich den Aufrufer einer Funktion in Python
Lassen Sie uns einen Teil des maschinellen Lernens mit Python berühren
Aufgezeichnete Umgebung für die Datenanalyse mit Python
Überlegen Sie, wann Sie mit Python3 und Scala3 in 10 Jahren gute Arbeit leisten können.
Holen Sie sich mit Python eine große Menge von Starbas Twitter-Daten und probieren Sie die Datenanalyse Teil 1 aus
Das Ergebnis der Erstellung eines Kartenalbums italienischer Jungvermählten in Python und dessen Weitergabe
Konsolidieren Sie eine große Anzahl von CSV-Dateien in Ordnern mit Python (Daten ohne Header).
Programm, das die CSV-Daten der Transaktionshistorie der SBI Securities-Aktie zusammenfasst [Python3]
Bis Sie Blender installieren und vorerst mit Python ausführen können
Bis Sie mit Python unter Windows 7 eine maschinelle Lernumgebung erstellen und ausführen
Liste der Python-Bibliotheken für Datenwissenschaftler und Dateningenieure
[Python] Berechnung der Differenz von Datum und Zeit in Monaten und Jahren
BigQuery - Wenn Sie einen Grund erhalten: responseTooLarge-Fehler in Python
Python: Ruft eine Liste der Methoden für ein Objekt ab
[Python] Erstellen eines GUI-Tools, das die CSV von Temperaturanstiegsdaten in Excel automatisch verarbeitet
Python> Eine Liste der Dateien in mehreren Verzeichnissen abrufen> Glob verwenden | Nach Änderungszeit sortieren
Rufen Sie die Excel-Liste rekursiv in einem bestimmten Ordner mit Python ab und schreiben Sie sie in Excel.
Ich suche einen einheitlichen Weg, um auf Statusänderungen von Selenium für Python-Elemente zu warten
[Python / Ruby] Mit Code verstehen Wie man Daten aus dem Internet abruft und in CSV schreibt
Holen Sie sich eine Liste der CloudWatch-Metriken und eine Entsprechungstabelle der Einheiteneinheiten mit Python boto
Python-Skript, das MLB-Spieldaten im Wert von 15 Jahren in 10 Minuten in MySQL speichert (Baseball Hack!)
Es kann ein Problem sein, Japanisch für Ordnernamen und Notizbuchnamen in Databricks zu verwenden
Python-Programm, das täglich Tweets mit bestimmten Schlüsselwörtern sammelt und in CSV speichert
Holen Sie sich die Anzahl der spezifischen Elemente in der Python-Liste
Eine einfache Möglichkeit, mehrere for-Schleifen in Python zu vermeiden
Holen Sie sich Python-Webseite, Zeichenkodierung und Anzeige
So definieren Sie mehrere Variablen in einer Python for-Anweisung
Befreien Sie sich mit Python und regulären Ausdrücken von schmutzigen Daten
So erhalten Sie eine Liste der integrierten Ausnahmen für Python
Hier sind einige Grammatiken, für die Sie möglicherweise einen Slapstick erhalten, wenn Sie Python kennen
[Python] Die Rolle des Sterns vor der Variablen. Teilen Sie den Eingabewert und weisen Sie ihn einer Variablen zu
Die Geschichte, zum ersten Mal seit 5 Jahren wieder an die Front zurückzukehren und Python Django umzugestalten