Bien que le python soit très pratique et bon marché à apprendre, cela devient impossible dès que vous sautez les études, je vais donc l'épeler comme un mémorandum comprenant la signification de la critique.
Créez un environnement virtuel d'apprentissage.
invite de commande
python -m venv study01
.\study01\Scripts\activate
invite de commande
python -m pip install --upgrade pip
pip install matplotlib
pip install pandas
pip install numpy
pip install japanize-matplotlib
En particulier,
invite de commande
pip install japanize-matplotlib
Quant à moi, j'ai l'habitude de l'installer pour utiliser le japonais avec matplotlib.
Je pense que chaque personne a une manière différente d'écrire un programme, mais j'essaie d'écrire un programme en utilisant ce modèle.
sample.py
import logging
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import japanize_matplotlib ### [Support japonais]
#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('handler_log.log')
handler.setLevel(logging.INFO)
handler.setFormatter(fomatter)
logger.addHandler(handler)
def SampleFunc() :
try :
logger.info("Hello World")
#Gestion des exceptions
except :
logger.info("Il y a une exception", stack_info=True)
if __name__ == '__main__' :
#Appeler SampleFunc
SampleFunc()
Pour être honnête, je ne comprends pas les fonctions, la gestion des exceptions et les enregistreurs, mais je ne comprends pas ce que je n'utilise pas et j'étudie, donc j'aimerais utiliser de force ce modèle comme base pour créer des programmes. À l'avenir, je voudrais procéder de force avec la division de classe et de dossier.
2019-11-19 23:00:52,298:SampleFunc:INFO:28:
Hello World
Cette fois, l'objectif est d'utiliser numpy $ \ displaystyle \ text {average} \ qquad \ override {x} = \ frac {1} {n} \ sum_ {i = 1} ^ {n} x_ {i} $ Le but est de calculer.
De plus, l'ensemble de la source du programme sera décrit à la fin de cet article, et seuls les points seront décrits au milieu de l'article.
Puisque les fractions apparaîtront dans l'hypothèse de calcul, je ne penserai pas à la consommation de mémoire maintenant et utiliserai le type à virgule flottante double précision.
sample.py
sample_data = [40, 6, 56, 13, 91, 7, 11, 4, 88, 66]
sample_array = np.array(sample_data, dtype=np.float64)
logger.info(sample_array)
logger.info(type(sample_array))
logger.info(sample_array.dtype)
2019-11-19 23:17:46,839:make_ndarray:INFO:30:
[40. 6. 56. 13. 91. 7. 11. 4. 88. 66.]
2019-11-19 23:17:46,839:make_ndarray:INFO:31:
<class 'numpy.ndarray'>
2019-11-19 23:17:46,839:make_ndarray:INFO:32:
float64
Commençons par effectuer le calcul de manière primitive. (Je sais que vous pouvez également utiliser la somme des fonctions statistiques de base de ndarray, mais comme c'est une méthode primitive qui est utile en cas d'urgence, je l'écris à la hâte.)
sample.py
sum_data = 0.
for single_val in sample_data :
sum_data += single_val
logger.info(sum_data)
#Contrôle de fonctionnement à l'aide de la fonction de somme
logger.info(sample_array.sum())
2019-11-19 23:25:29,815:make_ndarray:INFO:35:
382.0
2019-11-19 23:25:29,815:make_ndarray:INFO:36:
382.0
Ce calcul est
sample.py
ave_data = 0.
ave_data = sum_data / len(sample_array)
logger.info(ave_data)
#Contrôle de fonctionnement à l'aide de la fonction de base de ndarray
logger.info(sample_array.mean())
2019-11-19 23:31:56,746:make_ndarray:INFO:38:
38.2
2019-11-19 23:31:56,746:make_ndarray:INFO:40:
38.2
La méthode de calcul du total et de la moyenne ayant été confirmée jusqu'au chapitre précédent, je décrirai la méthode pour illustrer cela.
sample.py
import logging
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import japanize_matplotlib ### [Support japonais]
#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('handler_log.log')
handler.setLevel(logging.INFO)
handler.setFormatter(fomatter)
logger.addHandler(handler)
def make_ndarray() :
try :
sample_data = [40, 6, 56, 13, 91, 7, 11, 4, 88, 66]
sample_array = np.array(sample_data, dtype=np.float64)
sum_data = 0.
for single_val in sample_data :
sum_data += single_val
ave_data = 0.
ave_data = sum_data / len(sample_array)
#Contrôle de fonctionnement à l'aide de la fonction de base de ndarray
#logger.info(sample_array.mean())
make_graph(sample_data)
#Gestion des exceptions
except (KeyError, ValueError) as err:
logger.exception('Error make_ndarray: %s', err)
def make_graph(sample_data) :
try :
x_axis_arr = np.linspace(1, 10, 10)
fig, ax = plt.subplots(1, 1, figsize=(6, 4))
ax.scatter(x_axis_arr, sample_data)
fig.suptitle('TEST', fontweight="bold", fontsize = 12)
plt.savefig('TEST.png')
plt.close()
#Gestion des exceptions
except (KeyError, ValueError) as err:
logger.exception('Error make_graph: %s', err)
if __name__ == '__main__' :
# make_appel ndarray
make_ndarray()
sample.py
ax.set_xlabel("Exemple de données")
ax.set_ylabel("Exemple de valeur")
fig.suptitle('TEST(Axe X/Ajout de l'étiquette de l'axe Y)', fontweight="bold", fontsize = 12)
sample.py
#Limiter la plage d'affichage du graphique
ax.set_xlim([0,11])
ax.set_ylim([0,110])
#Annoter à la position spécifiée(annotation)Mettre en
for x_data, y_data in zip(x_axis_arr, sample_data) :
# logger.info(str(x_data) + ', ' + str(y_data))
ax.annotate('(' + str(x_data) + ', ' + str(y_data) + ')', \
xy = (x_data, y_data+3), size = 8, color = "red")
sample.py
#Décrivez le graphique de la valeur moyenne
ave_data_xplot = np.arange(0, 12)
ave_data_yplot = np.full(12, ave_data)
ax.plot(ave_data_xplot, ave_data_yplot, color = "green")
#Remarque(annotation)Ajouter
#Définir les propriétés de la flèche
arrow_dict = dict(arrowstyle = "->", color = "mediumblue")
#Propriétés de la zone de texte
# fc:facecolor, ec:edgecolor
text_dict = dict(boxstyle = "round",
fc = "white", ec = "mediumblue")
ax.annotate("La valeur moyenne est" + str(ave_data), \
xy = (9, ave_data), xytext = (9.5, ave_data+5), \
size = 8, color = "red", \
bbox = text_dict, arrowprops = arrow_dict)
sample.py
#Ajout du deuxième axe
ax2 = ax.twinx()
#Calcul de la somme cumulée
sample_data_csum = np.cumsum(sample_data)
ax2.bar(x_axis_arr, sample_data_csum, color = "blue", alpha = 0.2)
#Limiter la plage d'affichage du graphique
ax2.set_xlim([0,11])
ax2.set_ylim([0,400])
ax2.set_ylabel("Somme cumulée des exemples de données")
sample.py
import logging
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import japanize_matplotlib ### [Support japonais]
#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('handler_log.log')
handler.setLevel(logging.INFO)
handler.setFormatter(fomatter)
logger.addHandler(handler)
def make_ndarray() :
try :
sample_data = [40, 6, 56, 13, 91, 7, 11, 4, 88, 66]
sample_array = np.array(sample_data, dtype=np.float64)
sum_data = 0.
for single_val in sample_data :
sum_data += single_val
ave_data = 0.
ave_data = sum_data / len(sample_array)
#Contrôle de fonctionnement à l'aide de la fonction de base de ndarray
#logger.info(sample_array.mean())
make_graph(sample_data, ave_data)
#Gestion des exceptions
except (KeyError, ValueError) as err:
logger.exception('Error make_ndarray: %s', err)
def make_graph(sample_data, ave_data) :
try :
x_axis_arr = np.linspace(1, 10, 10)
fig, ax = plt.subplots(1, 1, figsize=(6, 4))
ax.scatter(x_axis_arr, sample_data)
ax.set_xlabel("Exemple de données")
ax.set_ylabel("Exemple de valeur")
#Annoter à la position spécifiée(annotation)Mettre en
for x_data, y_data in zip(x_axis_arr, sample_data) :
# logger.info(str(x_data) + ', ' + str(y_data))
ax.annotate('(' + str(x_data) + ', ' + str(y_data) + ')', \
xy = (x_data, y_data+3), size = 8, color = "red")
fig.suptitle('TEST(Axe X/Ajout de l'étiquette de l'axe Y)', fontweight="bold", fontsize = 12)
ax.scatter(x_axis_arr, sample_data, color = "blue")
#Décrivez le graphique de la valeur moyenne
ave_data_xplot = np.arange(0, 12)
ave_data_yplot = np.full(12, ave_data)
ax.plot(ave_data_xplot, ave_data_yplot, color = "green")
#Remarque(annotation)Ajouter
#Définir les propriétés de la flèche
arrow_dict = dict(arrowstyle = "->", color = "mediumblue")
#Propriétés de la zone de texte
# fc:facecolor, ec:edgecolor
text_dict = dict(boxstyle = "round",
fc = "white", ec = "mediumblue")
ax.annotate("La valeur moyenne est" + str(ave_data), \
xy = (9, ave_data), xytext = (9.5, ave_data+5), \
size = 8, color = "red", \
bbox = text_dict, arrowprops = arrow_dict)
#Limiter la plage d'affichage du graphique
ax.set_xlim([0,11])
ax.set_ylim([0,110])
#Ajout du deuxième axe
ax2 = ax.twinx()
#Calcul de la somme cumulée
sample_data_csum = np.cumsum(sample_data)
ax2.bar(x_axis_arr, sample_data_csum, color = "blue", alpha = 0.2)
#Limiter la plage d'affichage du graphique
ax2.set_xlim([0,11])
ax2.set_ylim([0,400])
ax2.set_ylabel("Somme cumulée des exemples de données")
plt.savefig('TEST.png')
plt.close()
#Gestion des exceptions
except (KeyError, ValueError) as err:
logger.exception('Error make_graph: %s', err)
if __name__ == '__main__' :
# make_appel ndarray
make_ndarray()
La gestion des exceptions ne fonctionne pas bien. .. .. De plus, si la partie de dessin de graphe est transformée en un fichier séparé ou classée, sera-t-elle plus facile à lire? C'est peut-être le cas, alors j'aimerais l'essayer pendant mes études.
Recommended Posts