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