[PYTHON] [Analyse du cours de l'action] Apprentissage des pandas avec des données fictives (003: De l'arrangement de type au graphique en chandelier)

À partir de la suite de la dernière fois (sortie journal)

J'ai créé une fonction de sortie de journal, je voudrais donc continuer à étudier les pandas.

Index et sortie de colonnes spécifiques

Jusqu'à la dernière fois

import pandas as pd

J'importais uniquement, mais j'ai importé Series, DataFrame et numpy. En passant, en tant que pratique des pandas, j'ajouterai un processus pour sortir l'index et l'enchevêtrement spécifique.

Success_case01.py


import pandas as pd
import logging
#[Analyse du cours de l'action] Apprentissage des pandas avec des données fictives(003)Ajouter plus
from pandas import Series, DataFrame
import numpy as np

#Spécifiez le format du journal
# %(asctime)s :Une représentation lisible par l'homme de l'heure à laquelle le LogRecord a été généré.
# %(funcName)s :Le nom de la fonction qui contient l'appel de journalisation
# %(levelname)s :Niveau de journalisation des caractères pour les messages
# %(lineno)d :Numéro de la ligne source sur laquelle l'appel de journalisation a été émis
# %(message)s : msg %Message de journal demandé en tant qu'args
fomatter = logging.Formatter('%(asctime)s:%(funcName)s:%(levelname)s:%(lineno)d:\n%(message)s')

#Paramètres de l'enregistreur(Niveau de journalisation INFO)
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

#Paramètres du gestionnaire(Modifier le fichier de sortie/Réglage du niveau de journal/Paramètres de format de journal)
handler = logging.FileHandler('info_log.log')
handler.setLevel(logging.INFO)
handler.setFormatter(fomatter)

logger.addHandler(handler)

#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')

#Changer pour utiliser l'enregistreur
logger.info(dframe)
#Index de sortie
logger.info(dframe.columns)
#Sortie uniquement des prix d'ouverture et de fermeture
logger.info(dframe[['Prix ouvert','le dernier prix']])

Résultat de sortie de dframe.columns

Les contenus suivants sont enregistrés en tant que valeurs d'index.

info_log.log


2019-11-11 20:04:13,275:<module>:INFO:33:
Index(['Date', 'Prix ouvert', 'Prix élevé', 'Bas prix', 'le dernier prix'], dtype='object')

Résultat de sortie de dframe.columns

J'ai pu extraire uniquement les données de cours d'ouverture et de clôture sans aucun problème.

info_log.log


2019-11-11 20:04:13,290:<module>:INFO:35:
Prix d'ouverture Prix de clôture
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]

Convertir la colonne de date en type et index de date

Les points ne sont que les deux lignes suivantes.

Point_Code.py


#Convertir en type de date
dframe['Date'] = pd.to_datetime(dframe['Date'])
#Spécifiez une colonne de date comme index
dframe = dframe.set_index('Date')

Juste au cas où, tout le code, y compris les informations de débogage, est le suivant. (Les articles de blog sont utiles car vous ne pouvez pas faire de telles descriptions redondantes dans un livre de référence papier.)

Success_case02.py


import pandas as pd
import logging
#[Analyse du cours de l'action] Apprentissage des pandas avec des données fictives(003)Ajouter plus
from pandas import Series, DataFrame
import numpy as np

#Spécifiez le format du journal
# %(asctime)s :Une représentation lisible par l'homme de l'heure à laquelle le LogRecord a été généré.
# %(funcName)s :Le nom de la fonction qui contient l'appel de journalisation
# %(levelname)s :Niveau de journalisation des caractères pour les messages
# %(lineno)d :Numéro de la ligne source sur laquelle l'appel de journalisation a été émis
# %(message)s : msg %Message de journal demandé en tant qu'args
fomatter = logging.Formatter('%(asctime)s:%(funcName)s:%(levelname)s:%(lineno)d:\n%(message)s')

#Paramètres de l'enregistreur(Niveau de journalisation INFO)
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

#Paramètres du gestionnaire(Modifier le fichier de sortie/Réglage du niveau de journal/Paramètres de format de journal)
handler = logging.FileHandler('info_log.log')
handler.setLevel(logging.INFO)
handler.setFormatter(fomatter)

logger.addHandler(handler)

#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')

#Convertir en type de date
dframe['Date'] = pd.to_datetime(dframe['Date'])
#Spécifiez une colonne de date comme index
dframe = dframe.set_index('Date')

#Changer pour utiliser l'enregistreur
logger.info(dframe)
#Index de sortie
logger.info(dframe.columns)
#Sortie uniquement des prix d'ouverture et de fermeture
logger.info(dframe[['Prix ouvert','le dernier prix']])
#Vérification de l'index
logger.info(dframe.index)
#Confirmation de type
logger.info(dframe.dtypes)

Résultat d'exécution

Les informations d'index s'affichent comme suit.

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='Date', length=942, freq=None)

De plus, étant donné que les autres prix d'ouverture, prix élevé, prix bas et prix de clôture sont stockés dans le type d'objet comme indiqué ci-dessous, le calcul numérique ne peut pas être effectué, ils seront donc convertis en type float32 dans la section suivante.

info_log.log


2019-11-11 20:38:35,216:<module>:INFO:44:
Objet de prix ouvert
Objet hors de prix
Objet à bas prix
Objet de prix de clôture
dtype: object

Informations de référence (index avant la conversion de type)

J'ai oublié de le mentionner, mais l'index avant ** pd.to_datetime (dframe ['date']) ** est affiché comme suit.

info_log.log


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

Conversion numérique de chaînes de caractères avec des virgules

Point_Code.py


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

Je ne publierai pas le code complet cette fois car il est trop redondant.

Résultat d'exécution

Puisqu'il est devenu un type numérique comme indiqué ci-dessous, il sera possible de le calculer et de le représenter graphiquement à l'avenir.

info_log.log


2019-11-11 20:53:35,326:<module>:INFO:46:
Prix d'ouverture flottant32
Flotteur haut32
Flotteur à bas prix32
Cours de clôture float32
dtype: object

Informations de référence

Si ici

fail_Code01.py


dframe =  dframe.astype(np.float64)

Si vous essayez de le faire facilement, une erreur de valeur sera crachée au prix d'ouverture au début.

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

Cette fois, il n'y a pas eu de problème car ce sont les données que j'ai préparées moi-même, mais lors de l'analyse de données inconnues, il est possible qu'une chaîne de caractères telle que "abcde" soit incluse au lieu d'un nombre avec une virgule, alors faites la gestion des erreurs C'est un point auquel il est facile de devenir accro si vous ne le faites pas.

Dans un tel endroit, je voudrais générer un journal sympa avec ** logger.exception () ** etc., mais à partir du 11 novembre 2019, je n'ai pas les compétences à ce point, je vais donc le laisser comme tâche future.

Représentation graphique des informations boursières (graphique en bougies)

Préparation préalable

Installation de packages pour créer des graphiques en chandeliers

invite de commande


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

Changements de code

Point_Code.py


(Omis)

import matplotlib.dates as mdates
from mpl_finance import candlestick_ohlc

(Omis)

#Création de données pour le traçage
ohlc = zip(mdates.date2num(dframe.index), dframe['Prix ouvert'], dframe['le dernier prix'], dframe['Prix élevé'], dframe['le dernier prix'])
logger.info(ohlc)

#Créer un campus
fig = plt.figure()

#Formater l'axe X
ax = plt.subplot()
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y/%m/%d'))

#Dessinez un graphique en chandeliers
candlestick_ohlc(ax, ohlc, width=0.7, colorup='g', colordown='r')

#Enregistrer l'image
plt.savefig('Candle_Chart.png')

Résultat d'exécution

Candle_Chart.png

J'ai fait un graphique en chandeliers, mais les données que j'ai préparées étaient si terribles que je n'avais pas envie d'aller de l'avant. .. ..

Dès le prochain article, j'aimerais organiser le code, utiliser les fonctions de panda et améliorer le graphe tout en préparant un peu de meilleures données.

Tout le code au moment de cet article

Study_Code.py


import pandas as pd
import logging
#[Analyse du cours de l'action] Apprentissage des pandas avec des données fictives(003)Ajouter plus
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

#Spécifiez le format du journal
# %(asctime)s :Une représentation lisible par l'homme de l'heure à laquelle le LogRecord a été généré.
# %(funcName)s :Le nom de la fonction qui contient l'appel de journalisation
# %(levelname)s :Niveau de journalisation des caractères pour les messages
# %(lineno)d :Numéro de la ligne source sur laquelle l'appel de journalisation a été émis
# %(message)s : msg %Message de journal demandé en tant qu'args
fomatter = logging.Formatter('%(asctime)s:%(funcName)s:%(levelname)s:%(lineno)d:\n%(message)s')

#Paramètres de l'enregistreur(Niveau de journalisation INFO)
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

#Paramètres du gestionnaire(Modifier le fichier de sortie/Réglage du niveau de journal/Paramètres de format de journal)
handler = logging.FileHandler('info_log.log')
handler.setLevel(logging.INFO)
handler.setFormatter(fomatter)

logger.addHandler(handler)

#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')

#Convertir en type de date
dframe['Date'] = pd.to_datetime(dframe['Date'])
#Spécifiez une colonne de date comme index
dframe = dframe.set_index('Date')

#Convertir le prix d'ouverture en prix de clôture en valeur numérique
dframe =  dframe.apply(lambda x: x.str.replace(',','')).astype(np.float32)

#Changer pour utiliser l'enregistreur
logger.info(dframe)
#Index de sortie
logger.info(dframe.columns)
#Sortie uniquement des prix d'ouverture et de fermeture
logger.info(dframe[['Prix ouvert','le dernier prix']])
#Vérification de l'index
logger.info(dframe.index)
#Confirmation de type
logger.info(dframe.dtypes)


#Création de données pour le traçage
ohlc = zip(mdates.date2num(dframe.index), dframe['Prix ouvert'], dframe['le dernier prix'], dframe['Prix élevé'], dframe['le dernier prix'])
logger.info(ohlc)

#Créer un campus
fig = plt.figure()

#Formater l'axe X
ax = plt.subplot()
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y/%m/%d'))

#Dessinez un graphique en chandeliers
candlestick_ohlc(ax, ohlc, width=0.7, colorup='g', colordown='r')

#Enregistrer l'image
plt.savefig('Candle_Chart.png')

finalement

Encore une fois, les données que j'ai préparées étaient un peu trop terribles, donc à partir de la prochaine fois, j'aimerais préparer d'autres données et écrire un article.

Recommended Posts

[Analyse du cours de l'action] Apprentissage des pandas avec des données fictives (003: De l'arrangement de type au graphique en chandelier)
[Analyse du cours de l'action] pandas apprenant avec des données fictives (002: sortie log)
[Analyse du cours de l'action] pandas apprenant avec des données fictives (001: préparation de l'environnement à la lecture de fichiers)
[Analyse du cours de l'action] Apprenez les pandas avec la moyenne Nikkei (004: Changer les données lues en moyenne Nikkei)
Téléchargez les données de cours des actions japonaises avec Python
Analyse de données à partir de python (pré-traitement des données-apprentissage automatique)
Obtenez des données sur le cours de l'action avec l'API Quandl [Python]
Acquisition automatique des données de cours des actions avec docker-compose
Prévision du cours de l'action à l'aide du Deep Learning [acquisition de données]
Analyse de données avec python 2
Construction d'un environnement d'analyse de données avec Python (notebook IPython + Pandas)
Il y a un manque de données lors de l'acquisition de données sur le cours des actions avec Pandas-datareader
Visualisation des données avec les pandas
Manipulation des données avec les Pandas!
Mélangez les données avec les pandas
Analyse de données avec Python
Obtenez des informations sur les actions japonaises de Yahoo Finance avec Pandas
Prévision du cours de l'action avec tensorflow
Notes d'apprentissage sur l'analyse des données Python
Obtenez des stocks avec Python
Conseils d'acquisition de données de cours de bourse
Analyse de données à l'aide de pandas python
Conseils de traitement des données avec Pandas
[Analyse du cours de l'action] Apprentissage des pandas moyens Nikkei (005: Regroupement par année / année-confirmation des informations statistiques)
Traçage de données polyvalent avec pandas + matplotlib
Analyse pratique avec Pandas + notebook Jupyter
Analyse de données à partir de python (visualisation de données 1)
Analyse de données à partir de python (visualisation de données 2)