[PYTHON] [Analyse du cours de l'action] Apprenez les pandas avec la moyenne Nikkei (004: Changer les données lues en moyenne Nikkei)

De la suite de la dernière fois (jusqu'à la création du graphique en chandeliers)

Lors de l'analyse, j'ai pensé que des données artificielles faciles à analyser valaient mieux que de traiter des données illisibles, mais [le graphique créé la dernière fois](https: // qiita. com / waka_taka / items / ab2f3b8fc6475d1c1a51 #% E5% AE% 9F% E8% A1% 8C% E7% B5% 90% E6% 9E% 9C-2) n'est pas si réaliste, donc je me sens un peu découragé. J'ai fait.

Je pense que c'était vraiment stupide parce que j'ai créé les données moi-même et que je n'étais pas motivé.

Je voudrais donc analyser les tendances réelles de la moyenne Nikkei (du 4 janvier 2016 au 8 novembre 2019).

Pour le moment, dans cet article, je voudrais garder le programme jusqu'à la dernière fois tel quel, modifier les données lues et étudier les détails du programme.

Programmer jusqu'à la dernière fois (republier)

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

Résultat d'exécution (graphique lorsque la moyenne Nikkei est lue)

De toute évidence, le graphique est joli. (Bien qu'il soit nécessaire de corriger l'apparence du graphique lui-même ...)

Candle_Chart.png

A propos du code de la partie fonction de création de tracé

Je l'ai écrit avec désinvolture, mais je ne comprends pas bien la partie suivante, je vais donc le démonter un par un et le vérifier.

Confirm_Code.py


ohlc = zip(mdates.date2num(dframe.index), dframe['Prix ouvert'], dframe['le dernier prix'], dframe['Haute

Vérifiez les données dans les variables dframe.index et mdates.date2num

Tout d'abord, essayez de créer le code suivant en grattant les parties qui ne sont pas nécessaires pour confirmation.

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('NikkeiAverage.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 cours d'ouverture en cours de clôture en valeur numérique
dframe =  dframe.apply(lambda x: x.str.replace(',','')).astype(np.float32)

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

# dframe.Vérifiez le contenu de l'index
logger.info(dframe.index)

Résultat d'exécution

Le contenu de dframe.index stocke généralement des données d'index.

info_log


2019-11-11 23:27:00,953:<module>:INFO:46:
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)

C'est comme prévu.

Ensuite, le contenu de mdates.date2num (dframe.index) était les nombres suivants.

info_log


2019-11-11 23:31:04,163:<module>:INFO:47:
[735967. 735968. 735969. 735970. 735971. 735975. 735976. 735977. 735978.
 735981. 735982. 735983. 735984. 735985. 735988. 735989. 735990. 735991.
(Omis)
 737349. 737350. 737353. 737355. 737356. 737357. 737360. 737361. 737362.
 737363. 737364. 737368. 737369. 737370. 737371.]

c'est

  1. Conversion de «2016-01-04» en nombres 735967
  2. Conversion de "2016-01-05" en nombres 735968
  3. Conversion de "2016-01-06" en un nombre 735969 ︙
  4. Conversion de «2019-01-04» en nombres 737370
  5. Conversion de «2019-01-04» en nombres 737371 Cela signifie t-il ...

Je ne suis pas doué pour le python lié à datetime ... (je ne suis pas doué pour les E / S de fichiers, mais je ne suis pas bon pour le traitement de la date ...)

Vérifiez le contenu de l'objet ohlc

La date, le prix d'ouverture, le prix élevé, le prix bas et le prix de clôture sont probablement stockés dans un type tapple, mais je vais le vérifier au cas où. Je n'utilise pas la fonction zip lorsque je crée mon propre programme.

Code de confirmation

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

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

logger.addHandler(handler)

#Fichier CSV(SampleStock01.csv)Spécifiez le code de caractère de
dframe = pd.read_csv('NikkeiAverage.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)

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

#Confirmation du contenu d'Ohlc
for output_data in ohlc :
	logger.info(output_data)

Résultat d'exécution

J'étais satisfait pour le moment car les résultats étaient comme prévu.

info_log


2019-11-11 23:48:26,636:<module>:INFO:47:
(735967.0, 18818.580078125, 18450.98046875, 18951.119140625, 18450.98046875)
(735968.0, 18398.759765625, 18374.0, 18547.380859375, 18374.0)
(735969.0, 18410.5703125, 18191.3203125, 18469.380859375, 18191.3203125)

"réduction"

(737369.0, 23343.509765625, 23303.8203125, 23352.560546875, 23303.8203125)
(737370.0, 23283.140625, 23330.3203125, 23336.0, 23330.3203125)
(737371.0, 23550.0390625, 23391.869140625, 23591.08984375, 23391.869140625)

Rédigez un graphique en chandeliers de manière appropriée et vérifiez le fonctionnement.

J'ai lu la page d'exemple matplotlib, mais je n'ai pas tellement utilisé la fonction ** candlestick_ohlc **, donc je vais essayer de vérifier l'opération avec quelques exemples.

11 novembre 2019 23:54 ・ ・ ・ Rédaction

Recommended Posts

[Analyse du cours de l'action] Apprenez les pandas avec la moyenne Nikkei (004: Changer les données lues en moyenne Nikkei)
[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] Apprentissage des pandas avec des données fictives (003: De l'arrangement de type au graphique en chandelier)
Tracez l'indice boursier moyen Nikkei avec des pandas
Téléchargez les données de cours des actions japonaises avec Python
Essayez de convertir en données ordonnées avec les pandas
Comment lire les données de problème avec Paiza
lecture de données pandas
Essayez d'agréger les données de musique doujin avec des pandas
Lire les données csv Python avec Pandas ⇒ Graphique avec Matplotlib
[Python] Comment lire des fichiers Excel avec des pandas
Obtenez des données sur le cours de l'action avec l'API Quandl [Python]
[Introduction à minimiser] Analyse des données avec le modèle SEIR ♬
Acquisition automatique des données de cours des actions avec docker-compose
Convertir 202003 en 2020-03 avec les pandas
Pandas apprenant avec la chimioinfomatique
Comment convertir des données détenues horizontalement en données détenues verticalement avec des pandas
Note de lecture: Introduction à l'analyse de données avec Python
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
Comment extraire des données qui ne manquent pas de valeur nan avec des pandas
[Python] Comment gérer l'erreur de lecture pandas read_html
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
Comment extraire des données qui ne manquent pas de valeur nan avec des pandas
Ingéniosité pour gérer les données avec Pandas de manière à économiser la mémoire
20200329_Introduction à l'analyse de données avec Python 2nd Edition Personal Summary
Comment lire un fichier Excel (.xlsx) avec Pandas [Python]
Obtenez des informations sur les actions japonaises de Yahoo Finance avec Pandas
Lire csv avec des pandas python
Apprenez de nouvelles données avec PaintsChainer
[Python] Changer de type avec les pandas
Prévision du cours de l'action avec tensorflow
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
Lire des données json avec python
[Analyse du cours de l'action] Apprentissage des pandas moyens Nikkei (005: Regroupement par année / année-confirmation des informations statistiques)
Le cours de l'action a chuté avec "nouvelle Corona"? J'ai essayé d'obtenir le cours moyen de l'action Nikkei par grattage Web
Introduction à l'analyse de données avec Python P32-P43 [ch02 3.US Baby Names 1880-2010]
Introduction à l'analyse de données par Python P17-P26 [ch02 1.usa.gov données de bit.ly]
Les ingénieurs de données apprennent DevOps en vue de MLOps. ① Prise en main
Liens vers des personnes qui commencent tout juste l'analyse de données avec python
[Pandas] J'ai essayé d'analyser les données de ventes avec Python [Pour les débutants]
Déplacer les données vers LDAP avec python Change / Delete (Writer et Reader)
Comment lire les données de la sous-région e-Stat
Comment gérer les données déséquilibrées
Traçage de données polyvalent avec pandas + matplotlib
Comment augmenter les données avec PyTorch
Analyse pratique avec Pandas + notebook Jupyter
Je veux faire ○○ avec les Pandas
Analyse de données à partir de python (visualisation de données 1)
Analyse de données à partir de python (visualisation de données 2)
J'ai essayé l'analyse de données IRMf avec python (Introduction au décodage des informations cérébrales)