[PYTHON] [Aktienkursanalyse] Pandas mit fiktiven Daten lernen (003: Von der Typanordnung zum Candlestick-Chart)

Aus der Fortsetzung des letzten Males (Protokollausgabe)

Ich habe eine Protokollausgabefunktion erstellt, daher möchte ich weiterhin Pandas studieren.

Index und Ausgabe bestimmter Spalten

Bis zum letzten Mal

import pandas as pd

Ich habe nur importiert, aber ich habe Serien, DataFrame und Numpy importiert. Übrigens werde ich als Praxis von Pandas einen Prozess hinzufügen, um den Index und die spezifische Verschränkung auszugeben.

Success_case01.py


import pandas as pd
import logging
#[Aktienkursanalyse] Pandas mit fiktiven Daten lernen(003)Fügen Sie mehr hinzu
from pandas import Series, DataFrame
import numpy as np

#Geben Sie das Protokollformat an
# %(asctime)s :Eine lesbare Darstellung der Zeit, zu der der LogRecord generiert wurde.
# %(funcName)s :Der Name der Funktion, die den Protokollierungsaufruf enthält
# %(levelname)s :Zeichenprotokollierungsstufe für Nachrichten
# %(lineno)d :Quellzeilennummer, unter der der Protokollierungsanruf ausgegeben wurde
# %(message)s : msg %Protokollnachricht als Argumente angefordert
fomatter = logging.Formatter('%(asctime)s:%(funcName)s:%(levelname)s:%(lineno)d:\n%(message)s')

#Logger-Einstellungen(INFO-Protokollstufe)
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

#Handler-Einstellungen(Ausgabedatei ändern/Einstellung der Protokollebene/Protokollformateinstellungen)
handler = logging.FileHandler('info_log.log')
handler.setLevel(logging.INFO)
handler.setFormatter(fomatter)

logger.addHandler(handler)

#CSV-Datei(SampleStock01.csv)Geben Sie den Zeichencode von an
dframe = pd.read_csv('SampleStock01_t1.csv', encoding='SJIS', \
	header=1, sep='\t')

#Ändern Sie, um Logger zu verwenden
logger.info(dframe)
#Ausgabeindex
logger.info(dframe.columns)
#Ausgabe nur offene und geschlossene Preise
logger.info(dframe[['Offener Preis','Schlusskurs']])

Ausgabeergebnis von dframe.columns

Die folgenden Inhalte werden als Indexwerte aufgezeichnet.

info_log.log


2019-11-11 20:04:13,275:<module>:INFO:33:
Index(['Datum', 'Offener Preis', 'Hoher Preis', 'Niedriger Preis', 'Schlusskurs'], dtype='object')

Ausgabeergebnis von dframe.columns

Ich konnte problemlos nur die Eröffnungs- und Schlusskursdaten extrahieren.

info_log.log


2019-11-11 20:04:13,290:<module>:INFO:35:
Offener Preis Schlusskurs
0     9,934  10,000
1    10,062  10,015
2     9,961  10,007
3     9,946   9,968
4     9,812   9,932
..      ...     ...
937  13,956  14,928
938  13,893  14,968
939  14,003  15,047
940  14,180  15,041
941  14,076  15,041

[942 rows x 2 columns]

Konvertieren Sie die Datumsspalte in Datumstyp und Index

Die Punkte sind nur die folgenden zwei Linien.

Point_Code.py


#In Datumstyp konvertieren
dframe['Datum'] = pd.to_datetime(dframe['Datum'])
#Geben Sie eine Datumsspalte als Index an
dframe = dframe.set_index('Datum')

Für alle Fälle lautet der gesamte Code einschließlich der Debug-Informationen wie folgt. (Blog-Artikel sind nützlich, da Sie solche redundanten Beschreibungen nicht in einem Papier-Nachschlagewerk erstellen können.)

Success_case02.py


import pandas as pd
import logging
#[Aktienkursanalyse] Pandas mit fiktiven Daten lernen(003)Fügen Sie mehr hinzu
from pandas import Series, DataFrame
import numpy as np

#Geben Sie das Protokollformat an
# %(asctime)s :Eine lesbare Darstellung der Zeit, zu der der LogRecord generiert wurde.
# %(funcName)s :Der Name der Funktion, die den Protokollierungsaufruf enthält
# %(levelname)s :Zeichenprotokollierungsstufe für Nachrichten
# %(lineno)d :Quellzeilennummer, unter der der Protokollierungsanruf ausgegeben wurde
# %(message)s : msg %Protokollnachricht als Argumente angefordert
fomatter = logging.Formatter('%(asctime)s:%(funcName)s:%(levelname)s:%(lineno)d:\n%(message)s')

#Logger-Einstellungen(INFO-Protokollstufe)
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

#Handler-Einstellungen(Ausgabedatei ändern/Einstellung der Protokollebene/Protokollformateinstellungen)
handler = logging.FileHandler('info_log.log')
handler.setLevel(logging.INFO)
handler.setFormatter(fomatter)

logger.addHandler(handler)

#CSV-Datei(SampleStock01.csv)Geben Sie den Zeichencode von an
dframe = pd.read_csv('SampleStock01_t1.csv', encoding='SJIS', \
	header=1, sep='\t')

#In Datumstyp konvertieren
dframe['Datum'] = pd.to_datetime(dframe['Datum'])
#Geben Sie eine Datumsspalte als Index an
dframe = dframe.set_index('Datum')

#Ändern Sie, um Logger zu verwenden
logger.info(dframe)
#Ausgabeindex
logger.info(dframe.columns)
#Ausgabe nur offene und geschlossene Preise
logger.info(dframe[['Offener Preis','Schlusskurs']])
#Überprüfen des Index
logger.info(dframe.index)
#Typbestätigung
logger.info(dframe.dtypes)

Ausführungsergebnis

Die Indexinformationen werden wie folgt angezeigt.

info_log.log


2019-11-11 20:31:44,825:<module>:INFO:44:
DatetimeIndex(['2016-01-04', '2016-01-05', '2016-01-06', '2016-01-07',
               '2016-01-08', '2016-01-12', '2016-01-13', '2016-01-14',
               '2016-01-15', '2016-01-18',
               ...
               '2019-10-25', '2019-10-28', '2019-10-29', '2019-10-30',
               '2019-10-31', '2019-11-01', '2019-11-05', '2019-11-06',
               '2019-11-07', '2019-11-08'],
              dtype='datetime64[ns]', name='Datum', length=942, freq=None)

Da andere offene Preise, hohe Preise, niedrige Preise und Schlusskurse wie unten gezeigt im Objekttyp gespeichert sind, kann keine numerische Berechnung durchgeführt werden, sodass sie im nächsten Abschnitt in den Typ float32 konvertiert werden.

info_log.log


2019-11-11 20:38:35,216:<module>:INFO:44:
Preisobjekt öffnen
Überteuertes Objekt
Niedrigpreisobjekt
Schlusspreisobjekt
dtype: object

Referenzinformationen (Index vor Typkonvertierung)

Ich habe vergessen, es zu erwähnen, aber der Index vor ** pd.to_datetime (dframe ['date']) ** wird wie folgt angezeigt.

info_log.log


2019-11-11 20:36:22,326:<module>:INFO:37:
RangeIndex(start=0, stop=942, step=1)

Numerische Konvertierung von Zeichenketten mit Kommas

Point_Code.py


dframe =  dframe.apply(lambda x: x.str.replace(',','')).astype(np.float64)

Ich werde diesmal nicht den vollständigen Code veröffentlichen, da dieser zu redundant ist.

Ausführungsergebnis

Da es sich wie unten gezeigt um einen numerischen Typ handelt, wird es in Zukunft möglich sein, ihn zu berechnen und grafisch darzustellen.

info_log.log


2019-11-11 20:53:35,326:<module>:INFO:46:
Offener Preis float32
Hoher float32
Niedriger Preis float32
Schlusskurs float32
dtype: object

Referenzinformationen

Wenn hier

fail_Code01.py


dframe =  dframe.astype(np.float64)

Wenn Sie es einfach versuchen, wird zu Beginn ein Eröffnungsfehler zum Eröffnungspreis ausgespuckt.

ValueError: could not convert string to float: '9,934'

Diesmal gab es kein Problem, da es sich um die Daten handelte, die ich selbst vorbereitet habe. Bei der Analyse unbekannter Daten besteht jedoch die Möglichkeit, dass anstelle einer Zahl mit Komma eine Zeichenfolge wie "abcde" eingefügt wird. Dies gilt auch für die Fehlerbehandlung Es ist ein Punkt, auf den man sich leicht einlassen kann, wenn man es nicht tut.

An einem solchen Ort möchte ich ein cooles Protokoll mit ** logger.exception () ** usw. ausgeben, aber ab dem 11. November 2019 habe ich nicht die Fähigkeiten in diesem Umfang, so dass ich es als zukünftige Aufgabe belassen werde.

Bestandsinformationen grafisch darstellen (Kerzendiagramm)

Vorbereitungen

Paketinstallation zur Erstellung von Candlestick-Diagrammen

Eingabeaufforderung


pip install https://github.com/matplotlib/mpl_finance/archive/master.zip

Codeänderungen

Point_Code.py


(Weggelassen)

import matplotlib.dates as mdates
from mpl_finance import candlestick_ohlc

(Weggelassen)

#Daten zum Plotten erstellen
ohlc = zip(mdates.date2num(dframe.index), dframe['Offener Preis'], dframe['Schlusskurs'], dframe['Hoher Preis'], dframe['Schlusskurs'])
logger.info(ohlc)

#Einen Campus erstellen
fig = plt.figure()

#Formatieren Sie die X-Achse
ax = plt.subplot()
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y/%m/%d'))

#Zeichnen Sie ein Candlestick-Diagramm
candlestick_ohlc(ax, ohlc, width=0.7, colorup='g', colordown='r')

#Bild speichern
plt.savefig('Candle_Chart.png')

Ausführungsergebnis

Candle_Chart.png

Ich habe ein Candlestick-Diagramm erstellt, aber die Daten, die ich vorbereitet habe, waren so schrecklich, dass ich keine Lust mehr hatte, weiterzumachen. .. ..

Ab dem nächsten Artikel möchte ich den Code organisieren, die Funktionen von Panda nutzen und das Diagramm verbessern, während ich ein wenig bessere Daten vorbereite.

Vollständiger Code zum Zeitpunkt dieses Artikels

Study_Code.py


import pandas as pd
import logging
#[Aktienkursanalyse] Pandas mit fiktiven Daten lernen(003)Fügen Sie mehr hinzu
from pandas import Series, DataFrame
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from mpl_finance import candlestick_ohlc

#Geben Sie das Protokollformat an
# %(asctime)s :Eine lesbare Darstellung der Zeit, zu der der LogRecord generiert wurde.
# %(funcName)s :Der Name der Funktion, die den Protokollierungsaufruf enthält
# %(levelname)s :Zeichenprotokollierungsstufe für Nachrichten
# %(lineno)d :Quellzeilennummer, unter der der Protokollierungsanruf ausgegeben wurde
# %(message)s : msg %Protokollnachricht als Argumente angefordert
fomatter = logging.Formatter('%(asctime)s:%(funcName)s:%(levelname)s:%(lineno)d:\n%(message)s')

#Logger-Einstellungen(INFO-Protokollstufe)
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

#Handler-Einstellungen(Ausgabedatei ändern/Einstellung der Protokollebene/Protokollformateinstellungen)
handler = logging.FileHandler('info_log.log')
handler.setLevel(logging.INFO)
handler.setFormatter(fomatter)

logger.addHandler(handler)

#CSV-Datei(SampleStock01.csv)Geben Sie den Zeichencode von an
dframe = pd.read_csv('SampleStock01_t1.csv', encoding='SJIS', \
	header=1, sep='\t')

#In Datumstyp konvertieren
dframe['Datum'] = pd.to_datetime(dframe['Datum'])
#Geben Sie eine Datumsspalte als Index an
dframe = dframe.set_index('Datum')

#Wandeln Sie den Eröffnungskurs in den Schlusskurs in einen numerischen Wert um
dframe =  dframe.apply(lambda x: x.str.replace(',','')).astype(np.float32)

#Ändern Sie, um Logger zu verwenden
logger.info(dframe)
#Ausgabeindex
logger.info(dframe.columns)
#Ausgabe nur offene und geschlossene Preise
logger.info(dframe[['Offener Preis','Schlusskurs']])
#Überprüfen des Index
logger.info(dframe.index)
#Typbestätigung
logger.info(dframe.dtypes)


#Daten zum Plotten erstellen
ohlc = zip(mdates.date2num(dframe.index), dframe['Offener Preis'], dframe['Schlusskurs'], dframe['Hoher Preis'], dframe['Schlusskurs'])
logger.info(ohlc)

#Einen Campus erstellen
fig = plt.figure()

#Formatieren Sie die X-Achse
ax = plt.subplot()
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y/%m/%d'))

#Zeichnen Sie ein Candlestick-Diagramm
candlestick_ohlc(ax, ohlc, width=0.7, colorup='g', colordown='r')

#Bild speichern
plt.savefig('Candle_Chart.png')

Schließlich

Auch hier waren die Daten, die ich vorbereitet habe, etwas zu schrecklich, daher möchte ich ab dem nächsten Mal andere Daten vorbereiten und einen Artikel schreiben.

Recommended Posts

[Aktienkursanalyse] Pandas mit fiktiven Daten lernen (003: Von der Typanordnung zum Candlestick-Chart)
[Aktienkursanalyse] Pandas lernen mit fiktiven Daten (002: Protokollausgabe)
[Aktienkursanalyse] Pandas lernen mit fiktiven Daten (001: Vorbereitung der Umgebung auf das Lesen von Dateien)
[Aktienkursanalyse] Lernen Sie Pandas mit Nikkei-Durchschnitt (004: Ändern Sie die gelesenen Daten in Nikkei-Durchschnitt)
Laden Sie japanische Aktienkursdaten mit Python herunter
Datenanalyse beginnend mit Python (Datenvorverarbeitung - maschinelles Lernen)
Holen Sie sich Aktienkursdaten mit Quandl API [Python]
Automatische Erfassung von Aktienkursdaten mit Docker-Compose
Aktienkursprognose mit Deep Learning [Datenerfassung]
Datenanalyse mit Python 2
Aufbau einer Datenanalyseumgebung mit Python (IPython Notebook + Pandas)
Bei der Erfassung von Aktienkursdaten mit Pandas-datareader fehlen Daten
Datenvisualisierung mit Pandas
Datenmanipulation mit Pandas!
Daten mit Pandas mischen
Datenanalyse mit Python
Holen Sie sich japanische Aktieninformationen von Yahoo Finance mit Pandas
Aktienkursprognose mit Tensorflow
Lernnotizen zur Python-Datenanalyse
Holen Sie sich Lager mit Python
Tipps zur Erfassung von Aktienkursdaten
Datenanalyse mit Python-Pandas
Datenverarbeitungstipps mit Pandas
[Aktienkursanalyse] Nikkei durchschnittliches Pandas-Lernen (005: Gruppierung nach Jahr / Jahr - Bestätigung statistischer Informationen)
Vielseitige Datenerfassung mit Pandas + Matplotlib
Bequeme Analyse mit Pandas + Jupyter Notebook
Datenanalyse beginnend mit Python (Datenvisualisierung 1)
Datenanalyse beginnend mit Python (Datenvisualisierung 2)