[PYTHON] [Aktienkursanalyse] Pandas lernen mit fiktiven Daten (001: Vorbereitung der Umgebung auf das Lesen von Dateien)

Zunaechst

Ich möchte Aktien als Lernfach behandeln, bin aber nicht sicher, ob ich sie mit Rohdaten analysieren kann. Daher möchte ich einige künstliche Daten erstellen und mit Python ausführen. Ich möchte mit dem Zweck fortfahren, das Python-Programm zu lernen.

Über die zu verarbeitenden Daten

Wir bearbeiten Handelstermine vom 4. Januar 2016 bis zum 8. November 2019. Darüber hinaus sind diese Daten

Zeitraum Trend
2016 Abnehmender Trend
2017 Neutral
2018 Zunehmende Tendenz
2019 Zunehmende Tendenz(Stärke)

Es ist eine fiktive Marke, deren Schlusskurs sich mit ändert.

Ich möchte die Daten (Textdatei) hochladen, die ich verarbeitet habe, aber ich frage mich, ob Qiita nur Bilder hochladen kann ...

Dies ist eine 944-Zeilen-CSV-Datei, die die folgenden Informationen enthält.

SampleStock01.csv


Fiktive Firma 01
Datum,Offener Preis,Hoher Preis,Niedriger Preis,Schlusskurs
2016/1/4,9,934,10,055,9,933,10,000
2016/1/5,10,062,10,092,9,942,10,015
2016/1/6,9,961,10,041,9,928,10,007
2016/1/7,9,946,10,060,9,889,9,968
2016/1/8,9,812,9,952,9,730,9,932
2016/1/12,9,912,9,966,9,907,9,940
2016/1/13,9,681,9,964,9,607,9,928
2016/1/14,9,748,9,864,9,686,9,858
(Unterlassung)

Vorbereitungen

Ich lerne gerade, also gehe ich von einer sauberen Umgebung aus. Die Lernumgebung ist

Eingabeaufforderung


python -m venv stock
.\stock\Scripts\Activate

Nach dem Upgrade von Pip mit Matplotlib und Pandas

Eingabeaufforderung


python -m pip install --upgrade pip
pip install matplotlib
pip install pandas
pip install Seaborn

Überprüfen Sie die installierten Pakete

Eingabeaufforderung


pip list

Ausführungsergebnis

Package Version --------------- ------- cycler 0.10.0 kiwisolver 1.1.0 matplotlib 3.1.1 numpy 1.17.4 pandas 0.25.3 pip 19.3.1 pyparsing 2.4.5 python-dateutil 2.8.1 pytz 2019.3 scipy 1.3.2 seaborn 0.9.0 setuptools 40.8.0 six 1.13.0

Datei lesen

Fehlerbeispiel 01

Versuchen Sie zunächst, mit pd.read_csv () zu lesen, ohne an etwas zu denken.

fail_case01.py


import pandas as pd

dframe = pd.read_csv('SampleStock01.csv')

Ausführungsergebnis

Wie erwartet wird ein Fehler zurückgegeben.

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x89 in position 0: invalid start byte

Das, was beim Umgang mit Python stolpert, ist der Datei-E / A-Teil ... Das Denken wird hier jedes Mal unterbrochen.

Fehlerbeispiel 02

Das Fehlerbeispiel 01 ist jedoch eine Erwartungskategorie, und hier muss nur die Codierung angegeben werden.

fail_case02.py


import pandas as pd

#CSV-Datei(SampleStock01.csv)Geben Sie den Zeichencode von an
dframe = pd.read_csv('SampleStock01.csv', encoding="SJIS")

Ausführungsergebnis

Ja. ich wusste Auch hier scheitert es.

pandas.errors.ParserError: Error tokenizing data. C error: Expected 5 fields in line 3, saw 9

Da die erste Zeile der CSV-Datei auf den Markennamen gesetzt ist, müssen Sie aus der zweiten Zeile lesen.

Fehlerbeispiel 03

Dies ist nur eine Frage des Ignorierens der ersten Zeile und des Lesens aus der zweiten Zeile.

fail_case03.py


import pandas as pd

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

print(dframe)

Ausführungsergebnis

Datum Eröffnungspreis hoher Preis niedriger Preis Schlusskurs 2016/1/4 9 934 10 55 9 933 10 0 2016/1/5 10 62 10 92 9 942 10 15 2016/1/6 9 961 10 41 9 928 10 7 2016/1/7 9 946 10 60 9 889 9 968 2016/1/8 9 812 9 952 9 730 9 932 ... ... .. ... .. ... 2019/11/1 13 956 15 59 13 940 14 928 2019/11/5 13 893 15 54 13 820 14 968 2019/11/6 14 3 15 155 13 919 15 47 2019/11/7 14 180 15 54 14 57 15 41 2019/11/8 14 76 15 52 13 939 15 41

[942 rows x 5 columns]

Ich konnte es richtig in den Datenrahmen einlesen! Ich war damit zufrieden.

CSV-Trennzeichen "," und Zifferntrennzeichen "," sind gemischt </ font> </ strong> und können nicht korrekt in den Datenrahmen eingelesen werden.

CSV-Datei wollte ich lesen

SampleStock01.csv


Fiktive Firma 01
Datum,Offener Preis,Hoher Preis,Niedriger Preis,Schlusskurs
2016/1/4,9,934,10,055,9,933,10,000
2016/1/5,10,062,10,092,9,942,10,015
2016/1/6,9,961,10,041,9,928,10,007
2016/1/7,9,946,10,060,9,889,9,968
2016/1/8,9,812,9,952,9,730,9,932
2016/1/12,9,912,9,966,9,907,9,940
2016/1/13,9,681,9,964,9,607,9,928
2016/1/14,9,748,9,864,9,686,9,858
(Unterlassung)

Um ehrlich zu sein, denke ich, dass es keine andere Wahl gibt, als die gelesene Datei dafür zu ändern. Deshalb habe ich das CSV-Trennzeichen von "," in "Tabulatorzeichen" geändert. Was kann ich jedoch tun, wenn ich bei der Analyse von Geschäftsprotokollen auf ein solches Ereignis stoße? ?? Wenn jemand einen guten Weg kennt, lass es mich wissen.

Ändern Sie die zu lesende CSV wie folgt.

SampleStock01_t1.csv


Fiktive Firma 01
Datum Eröffnungspreis hoher Preis niedriger Preis Schlusskurs
2016/1/4	9,934 	10,055 	9,933 	10,000 
2016/1/5	10,062 	10,092 	9,942 	10,015 
2016/1/6	9,961 	10,041 	9,928 	10,007 
2016/1/7	9,946 	10,060 	9,889 	9,968 
2016/1/8	9,812 	9,952 	9,730 	9,932 
2016/1/12	9,912 	9,966 	9,907 	9,940 
2016/1/13	9,681 	9,964 	9,607 	9,928 
2016/1/14	9,748 	9,864 	9,686 	9,858 
(Unterlassung)

Erfolgsgeschichte

Ich habe zum vierten Mal versucht, ehrlich zu sein, indem ich einen Prozess hinzugefügt habe, um anzugeben, dass das Trennzeichen ein Tabulatorzeichen im Code ist.

Success_case.py


import pandas as pd

#CSV-Datei(SampleStock01.csv)Geben Sie den Zeichencode von an
import pandas as pd

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

print(dframe)

Ausführungsergebnis

Datum Eröffnungspreis hoher Preis niedriger Preis Schlusskurs 0 2016/1/4 9,934 10,055 9,933 10,000 1 2016/1/5 10,062 10,092 9,942 10,015 2 2016/1/6 9,961 10,041 9,928 10,007 3 2016/1/7 9,946 10,060 9,889 9,968 4 2016/1/8 9,812 9,952 9,730 9,932 .. ... ... ... ... ... 937 2019/11/1 13,956 15,059 13,940 14,928 938 2019/11/5 13,893 15,054 13,820 14,968 939 2019/11/6 14,003 15,155 13,919 15,047 940 2019/11/7 14,180 15,054 14,057 15,041 941 2019/11/8 14,076 15,052 13,939 15,041

[942 rows x 5 columns]

Obwohl es viele Probleme wie Indexspezifikation und Spaltentyp gibt, wurde read_csv endgültig abgeschlossen. Für Nachschlagewerke sind es ein paar Arbeitsbereiche, aber ...

Schließlich

Datei-E / A ist die größte Herausforderung beim Umgang mit Datenrahmen, aber werden andere Leute leicht gehen? Nicht auf Datenrahmen beschränkt, Python als Ganzes, nein, Datei-E / A ist seit der Ära der C-Sprache ein Dämon für mich.

Sobald es geladen ist, ist es einfach, weil es ein Problem mit dem Programm ist. ((

Recommended Posts