[PYTHON] [Aktienkursanalyse] Nikkei durchschnittliches Pandas-Lernen (005: Gruppierung nach Jahr / Jahr - Bestätigung statistischer Informationen)

Von der Fortsetzung des letzten Males (bis zum Candlestick-Chart (Pseudonym))

Das letzte Mal habe ich darüber nachgedacht, das Candlestick-Diagramm zu ändern und zu bearbeiten, aber ich wollte vorher die Funktionen von groupby zusammenfassen, deshalb werde ich diesen Artikel zuerst schreiben.

Bis zum letzten Mal programmieren (neu posten)

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('NikkeiAverage.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')

Gruppe nach Jahr / Jahr

Das Programm hat bis zum letzten Mal Daten für 4 Jahre von 2016 bis 2019 gleichzeitig verarbeitet, diesmal jedoch, da der Index als Datumsart erstellt wurde

  1. Daten für 2016

  2. 2017 Daten

  3. Daten für 2018

  4. Daten für 2019 Und jedes Jahr wieder

  5. Januar 2016 Daten

  6. Daten für Februar 2016

  7. Daten für März 2016 ︙

  8. Daten für Oktober 2019

  9. Daten für November 2019

Ich werde versuchen, nach Jahr und Monat zu gruppieren.

Da der Artikel etwas verwirrend ist, möchte ich außerdem nur die Punkte aus diesem Artikel und das gesamte Programm im letzten Kapitel beschreiben.

Extrahieren Sie die Informationen zu Jahr / Jahr / Monat des Bestätigungsindex

Überprüfen Sie zunächst die Jahresinformationen des Index mit dem folgenden Quellcode.

Conf_Code.py


logger.info(dframe.index.year)

Ausführungsergebnis

info_log


2019-11-12 21:40:26,133:<module>:INFO:42:
Int64Index([2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016,
            ...
            2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019],
           dtype='int64', name='Datum', length=942)

Als nächstes überprüfen wir die Datumsinformationen des Index.

Conf_Code.py


logger.info([dframe.index.year, dframe.index.month])

Ausführungsergebnis

info_log


2019-11-12 22:12:26,052:<module>:INFO:42:
[Int64Index([2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016,
            ...
            2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019],
           dtype='int64', name='Datum', length=942), Int64Index([ 1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
            ...
            10, 10, 10, 10, 10, 11, 11, 11, 11, 11],
           dtype='int64', name='Datum', length=942)]

Gruppierung nach Jahr

Conf_Code.py


for Conf_DF in dframe.groupby([dframe.index.year]) :
	logger.info(Conf_DF)

Ausführungsergebnis

info_log


2019-11-12 21:49:34,031:<module>:INFO:44:
(2016,Offener Preis Hoher Preis Niedriger Preis Schlusspreis
Datum
2016-01-04  18818.580078  18951.119141  18394.429688  18450.980469
2016-01-05  18398.759766  18547.380859  18327.519531  18374.000000
2016-01-06  18410.570312  18469.380859  18064.300781  18191.320312
2016-01-07  18139.769531  18172.039062  17767.339844  17767.339844
2016-01-08  17562.230469  17975.310547  17509.640625  17697.960938
...                  ...           ...           ...           ...
2016-12-26  19394.410156  19432.480469  19385.939453  19396.640625
2016-12-27  19353.429688  19478.580078  19352.060547  19403.060547
2016-12-28  19392.109375  19442.130859  19364.730469  19401.720703
2016-12-29  19301.039062  19301.039062  19092.220703  19145.140625
2016-12-30  18997.679688  19176.810547  18991.589844  19114.369141

[245 rows x 4 columns])
2019-11-12 21:49:34,051:<module>:INFO:44:
(2017,Offener Preis Hoher Preis Niedriger Preis Schlusspreis
Datum
2017-01-04  19298.679688  19594.160156  19277.929688  19594.160156
2017-01-05  19602.099609  19615.400391  19473.279297  19520.689453
2017-01-06  19393.550781  19472.369141  19354.439453  19454.330078
2017-01-10  19414.830078  19484.900391  19255.349609  19301.439453
2017-01-11  19358.640625  19402.169922  19325.460938  19364.669922
...                  ...           ...           ...           ...
2017-12-25  22909.410156  22948.830078  22870.189453  22939.179688
2017-12-26  22922.949219  22950.150391  22877.630859  22892.689453
2017-12-27  22854.390625  22936.160156  22854.390625  22911.210938
2017-12-28  22912.050781  22954.449219  22736.429688  22783.980469
2017-12-29  22831.490234  22881.210938  22753.199219  22764.939453

[247 rows x 4 columns])
2019-11-12 21:49:34,069:<module>:INFO:44:
(2018,Offener Preis Hoher Preis Niedriger Preis Schlusspreis
Datum
2018-01-04  23073.730469  23506.330078  23065.199219  23506.330078
2018-01-05  23643.000000  23730.470703  23520.519531  23714.529297
2018-01-09  23948.970703  23952.609375  23789.029297  23849.990234
2018-01-10  23832.810547  23864.759766  23755.449219  23788.199219
2018-01-11  23656.390625  23734.970703  23601.839844  23710.429688
...                  ...           ...           ...           ...
2018-12-21  20310.500000  20334.730469  20006.669922  20166.189453
2018-12-25  19785.429688  19785.429688  19117.960938  19155.740234
2018-12-26  19302.589844  19530.349609  18948.580078  19327.060547
2018-12-27  19706.189453  20211.570312  19701.759766  20077.619141
2018-12-28  19957.880859  20084.380859  19900.039062  20014.769531

[245 rows x 4 columns])
2019-11-12 21:49:34,088:<module>:INFO:44:
(2019,Offener Preis Hoher Preis Niedriger Preis Schlusspreis
Datum
2019-01-04  19655.130859  19692.580078  19241.369141  19561.960938
2019-01-07  19944.609375  20266.220703  19920.800781  20038.970703
2019-01-08  20224.669922  20347.919922  20106.359375  20204.039062
2019-01-09  20366.300781  20494.349609  20331.199219  20427.060547
2019-01-10  20270.880859  20345.919922  20101.929688  20163.800781
...                  ...           ...           ...           ...
2019-11-01  22730.490234  22852.720703  22705.599609  22850.769531
2019-11-05  23118.789062  23328.519531  23090.939453  23251.990234
2019-11-06  23343.509766  23352.560547  23246.570312  23303.820312
2019-11-07  23283.140625  23336.000000  23253.320312  23330.320312
2019-11-08  23550.039062  23591.089844  23313.410156  23391.869141

[205 rows x 4 columns])

Wenn Sie nach ** dframe.groupby ([dframe.index.year]) gruppieren **

  1. 2016 ist [245 Zeilen x 4 Spalten]
  2. 2017 ist [247 Zeilen x 4 Spalten]
  3. 2018 ist [245 Zeilen x 4 Spalten]
  4. 2019 ist [205 Zeilen x 4 Spalten]

Ich konnte die Daten normal extrahieren.

Vor dem Gruppieren waren es [942 Zeilen x 4 Spalten], sodass Sie die Änderungen sehen können. Ich bin nur ein bisschen besorgt Die Daten der Lesequelle sind 2019/11/8 23,550.04 23,591.09 23,313.41 23,391.87 Der im Datenrahmen gespeicherte Wert ist 2019-11-08 23550.039062 23591.089844 23313.410156 23391.869141 Es war (alle anderen Tage), also wahrscheinlich

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

Es scheint, dass ** die zweite und die untere Stelle nach dem Dezimalpunkt nicht korrekt konvertiert werden </ font> **, wenn sie mit konvertiert werden.

Ehrlich gesagt, seit dem 12. November 2019 muss ich mir keine Gedanken mehr über Zahlen nach dem Dezimalpunkt in der Aktienanalyse machen, daher werde ich dies ignorieren, aber wenn ich wissenschaftliche Berechnungen durchführe, habe ich das Gefühl, unter dem Rundungsfehlerproblem zu leiden ...

Gruppierung nach Jahr

Conf_Code.py


for Conf_DF in dframe.groupby([dframe.index.year, dframe.index.month]) :
	logger.info(Conf_DF)

Ausführungsergebnis

info_log


(Unterlassung)
2019-11-12 22:05:00,120:<module>:INFO:45:
((2019, 11),Offener Preis Hoher Preis Niedriger Preis Schlusspreis
Datum
2019-11-01  22730.490234  22852.720703  22705.599609  22850.769531
2019-11-05  23118.789062  23328.519531  23090.939453  23251.990234
2019-11-06  23343.509766  23352.560547  23246.570312  23303.820312
2019-11-07  23283.140625  23336.000000  23253.320312  23330.320312
2019-11-08  23550.039062  23591.089844  23313.410156  23391.869141)

Es gibt immer noch Müll an zweiter Stelle nach dem Dezimalpunkt, aber ...

Überprüfen Sie die monatlichen Statistiken

Da wir im vorherigen Kapitel jeden Monat teilen konnten, überprüfen wir die statistischen Informationen für jeden Monat.

Conf_Code.py


def Output_Describe(temp_DF) :
	logger.info(temp_DF.index)
	logger.info(temp_DF.describe())

dframe.groupby([dframe.index.year, dframe.index.month]).apply(Output_Describe)

Ausführungsergebnis

info_log


(Unterlassung)
2019-11-12 22:25:51,012:Output_Describe:INFO:43:
DatetimeIndex(['2019-10-01', '2019-10-02', '2019-10-03', '2019-10-04',
               '2019-10-07', '2019-10-08', '2019-10-09', '2019-10-10',
               '2019-10-11', '2019-10-15', '2019-10-16', '2019-10-17',
               '2019-10-18', '2019-10-21', '2019-10-23', '2019-10-24',
               '2019-10-25', '2019-10-28', '2019-10-29', '2019-10-30',
               '2019-10-31'],
              dtype='datetime64[ns]', name='Datum', freq=None)
2019-11-12 22:25:51,043:Output_Describe:INFO:44:
Offener Preis Hoher Preis Niedriger Preis Schlusspreis
count     21.000000     21.000000     21.000000     21.000000
mean   22173.896484  22250.916016  22117.458984  22197.476562
std      610.297974    598.321411    619.635559    591.679626
min    21316.179688  21410.199219  21276.009766  21341.740234
25%    21494.480469  21629.240234  21483.179688  21587.779297
50%    22451.150391  22522.390625  22424.919922  22451.859375
75%    22725.439453  22780.990234  22704.330078  22750.599609
max    22953.169922  23008.429688  22935.349609  22974.130859
(Unterlassung)

Wenn Sie die Schlusspreisspalte anhand der Daten vom Oktober 2019 überprüfen,

  • Die Anzahl der Daten beträgt 21 Tage
  • Der Durchschnittspreis des Nikkei-Durchschnitts im Oktober 2019 (verwirrend) beträgt 22197,476562 Yen zum Schlusskurs. --Distribution ist 591.679626
  • Der günstigste Preis (0% Punkt) ist 21341.740234 Yen
  • Der Preis von 25% -Punkten in der Preisspanne von Oktober 2019 beträgt 21587,779297 Yen
  • Der Preis von 25% -Punkten in der Preisspanne von Oktober 2019 beträgt 22451,859375 Yen
  • Der Preis von 25% -Punkten in der Preisspanne von Oktober 2019 beträgt 22750,599609 Yen
  • Der höchste Preis (100% Punkt) ist 22974.130859 Yen

Kann bestätigt werden.

Ich schreibe (Es tut mir leid für die halbfertigen Artikel. Ich werde es bis zum Ende zusammenfassen, aber wenn ich es nicht schreibe, wenn ich mich daran erinnere, werde ich es bald vergessen, also ...)

Was bedeutet Dispersion? Was passiert, wenn dies in einem Diagramm dargestellt wird? Welcher Tag war der billigste im Oktober 2019? Ich möchte es in den folgenden Kapiteln beschreiben.

Recommended Posts

[Aktienkursanalyse] Nikkei durchschnittliches Pandas-Lernen (005: Gruppierung nach Jahr / Jahr - Bestätigung statistischer Informationen)
Zeichnen Sie den Nikkei Average Stock Index mit Pandas
[Aktienkursanalyse] Pandas lernen mit fiktiven Daten (002: Protokollausgabe)
Aktienkurs mit "neuer Corona" gesunken? Ich habe versucht, den durchschnittlichen Aktienkurs von Nikkei durch Web-Scraping zu ermitteln
[Aktienkursanalyse] Lernen Sie Pandas mit Nikkei-Durchschnitt (004: Ändern Sie die gelesenen Daten in Nikkei-Durchschnitt)
[Aktienkursanalyse] Pandas lernen mit fiktiven Daten (001: Vorbereitung der Umgebung auf das Lesen von Dateien)
[Aktienkursanalyse] Pandas mit fiktiven Daten lernen (003: Von der Typanordnung zum Candlestick-Chart)
Vergleichen Sie die nächtliche Rendite und die tagsüber stattfindende Rendite des durchschnittlichen Aktienkurses von Nikkei mit Python
Pandas des Anfängers, vom Anfänger, für den Anfänger [Python]