J'ai créé une fonction de sortie de journal, je voudrais donc continuer à étudier les pandas.
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']])
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')
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]
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)
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
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)
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.
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
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.
Installation de packages pour créer des graphiques en chandeliers
invite de commande
pip install https://github.com/matplotlib/mpl_finance/archive/master.zip
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')
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.
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')
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