[PYTHON] [Analyse du cours de l'action] pandas apprenant avec des données fictives (001: préparation de l'environnement à la lecture de fichiers)

En premier

Je veux traiter les actions comme un sujet d'apprentissage, mais je ne suis pas sûr de pouvoir l'analyser avec des données brutes. Par conséquent, je voudrais créer des données artificielles et les exécuter avec python. Je voudrais poursuivre dans le but d'apprendre le programme python.

À propos des données à traiter

Nous traitons les dates de négociation du 4 janvier 2016 au 8 novembre 2019. De plus, ces données sont

période Tendance
2016 Tendance à la baisse
2017 Neutre
2018 Tendance croissante
2019 Tendance croissante(force)

C'est une marque fictive dont le cours de clôture change avec.

Je souhaite télécharger les données (fichier texte) que j'ai traitées, mais je me demande si Qiita ne peut télécharger que des images ...

Il s'agit d'un fichier csv de 944 lignes contenant les informations suivantes.

SampleStock01.csv


Entreprise fictive 01
Date,Prix ouvert,Prix élevé,Bas prix,le dernier prix
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
(Omission)

Préparation préalable

J'étudie simplement, donc je partirai d'un environnement propre. L'environnement d'apprentissage est

invite de commande


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

Après la mise à jour de pip, avec matplotlib et pandas

invite de commande


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

Vérifier les packages installés

invite de commande


pip list

Résultat d'exécution

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

Lire le fichier

Exemple de panne 01

Tout d'abord, essayez de lire avec pd.read_csv () sans penser à rien.

fail_case01.py


import pandas as pd

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

Résultat d'exécution

Comme prévu, une erreur est renvoyée.

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

La chose qui trébuche quand il s'agit de python est la partie d'E / S de fichier ... La réflexion est interrompue ici à chaque fois.

Exemple de panne 02

Cependant, l'exemple de panne 01 est une catégorie d'attente, et ici il s'agit simplement de spécifier le codage.

fail_case02.py


import pandas as pd

#Fichier CSV(SampleStock01.csv)Spécifiez le code de caractère de
dframe = pd.read_csv('SampleStock01.csv', encoding="SJIS")

Résultat d'exécution

Oui. je savais Cela échoue également ici.

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

Étant donné que la première ligne du fichier CSV est définie sur le nom de la marque, vous devez lire à partir de la deuxième ligne.

Exemple de panne 03

C'est juste une question d'ignorer la première ligne et de lire à partir de la deuxième ligne.

fail_case03.py


import pandas as pd

#Fichier CSV(SampleStock01.csv)Spécifiez le code de caractère de
dframe = pd.read_csv('SampleStock01.csv', encoding="SJIS", header=1)

print(dframe)

Résultat d'exécution

Date d'ouverture prix prix haut prix bas prix de clôture 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]

J'ai pu le lire correctement dans la trame de données! J'en étais content.

CSV delimiter "," et digit delimiter "," sont mélangés </ font> </ strong> et ne peuvent pas être lus correctement dans le dataframe.

Fichier CSV que je voulais lire

SampleStock01.csv


Entreprise fictive 01
Date,Prix ouvert,Prix élevé,Bas prix,le dernier prix
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
(Omission)

Pour être honnête, je pense qu'il n'y a pas d'autre choix que de modifier le fichier lu pour cela, j'ai donc modifié le délimiteur CSV de "," à "caractère de tabulation". Cependant, que dois-je faire si je rencontre ce type d'événement lors de l'analyse des journaux d'activité? ?? Si quelqu'un connaît un bon moyen, faites-le moi savoir.

Quoi qu'il en soit, modifiez le CSV pour qu'il soit lu comme suit.

SampleStock01_t1.csv


Entreprise fictive 01
Date d'ouverture prix prix haut prix bas prix de clôture
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 
(Omission)

Succès

J'ai essayé d'être honnête pour la quatrième fois en ajoutant un processus pour spécifier que le délimiteur est un caractère de tabulation dans le code jusqu'à présent.

Success_case.py


import pandas as pd

#Fichier CSV(SampleStock01.csv)Spécifiez le code de caractère de
import pandas as pd

#Fichier CSV(SampleStock01.csv)Spécifiez le code de caractère de
dframe = pd.read_csv('SampleStock01_t1.csv', encoding='SJIS', \
	header=1, sep='\t')

print(dframe)

Résultat d'exécution

Date d'ouverture prix prix haut prix bas prix de clôture 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]

Bien qu'il existe de nombreux problèmes tels que la spécification d'index et le type de colonne, read_csv a finalement été terminé. Pour les ouvrages de référence, c'est quelques lignes de travail, mais ...

finalement

Les E / S de fichiers sont le plus grand défi lorsqu'il s'agit de dataframes, mais d'autres personnes y iront-elles facilement? Non limité à dataframe, python dans son ensemble, non, les E / S de fichiers sont un démon pour moi depuis l'ère du langage C.

Une fois chargé, c'est facile car c'est un problème avec le programme. (

Recommended Posts