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.
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')
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
Daten für 2016
2017 Daten
Daten für 2018
Daten für 2019 Und jedes Jahr wieder
Januar 2016 Daten
Daten für Februar 2016
Daten für März 2016 ︙
Daten für Oktober 2019
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.
Überprüfen Sie zunächst die Jahresinformationen des Index mit dem folgenden Quellcode.
Conf_Code.py
logger.info(dframe.index.year)
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])
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)]
Conf_Code.py
for Conf_DF in dframe.groupby([dframe.index.year]) :
logger.info(Conf_DF)
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 **
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 ...
Conf_Code.py
for Conf_DF in dframe.groupby([dframe.index.year, dframe.index.month]) :
logger.info(Conf_DF)
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 ...
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)
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,
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