Obwohl Python sehr praktisch und billig zu erlernen ist, wird es unmöglich, sobald Sie das Lernen überspringen. Ich werde es daher als Memorandum buchstabieren, das die Bedeutung der Überprüfung enthält.
Erstellen Sie eine virtuelle Lernumgebung.
Eingabeaufforderung
python -m venv study01
.\study01\Scripts\activate
Eingabeaufforderung
python -m pip install --upgrade pip
pip install matplotlib
pip install pandas
pip install numpy
pip install japanize-matplotlib
Insbesondere,
Eingabeaufforderung
pip install japanize-matplotlib
Ich habe die Angewohnheit, es zu installieren, um Japanisch mit matplotlib zu verwenden.
Ich denke, dass jede Person eine andere Art hat, ein Programm zu schreiben, aber ich versuche, ein Programm mit dieser Vorlage zu schreiben.
sample.py
import logging
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import japanize_matplotlib ### [Japanische Unterstützung]
#Geben Sie das Protokollformat an
# %(asctime)s :Eine lesbare Darstellung der Zeit, zu der der LogRecord generiert wurde.
# %(funcName)s :Der Name der Funktion, die den Protokollierungsaufruf enthält
# %(levelname)s :Zeichenprotokollierungsstufe für Nachrichten
# %(lineno)d :Quellzeilennummer, unter der der Protokollierungsanruf ausgegeben wurde
# %(message)s : msg %Protokollnachricht als Argumente angefordert
fomatter = logging.Formatter('%(asctime)s:%(funcName)s:%(levelname)s:%(lineno)d:\n%(message)s')
#Logger-Einstellungen(INFO-Protokollstufe)
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
#Handler-Einstellungen(Ausgabedatei ändern/Einstellung der Protokollebene/Protokollformateinstellungen)
handler = logging.FileHandler('handler_log.log')
handler.setLevel(logging.INFO)
handler.setFormatter(fomatter)
logger.addHandler(handler)
def SampleFunc() :
try :
logger.info("Hello World")
#Ausnahmebehandlung
except :
logger.info("Ausnahme aufgetreten", stack_info=True)
if __name__ == '__main__' :
#Rufen Sie SampleFunc auf
SampleFunc()
Um ehrlich zu sein, verstehe ich Funktionen, Ausnahmebehandlung und Logger nicht, aber ich kann nicht verstehen, was ich nicht verwende, und ich studiere. Daher möchte ich diese Vorlage zwangsweise als Grundlage für die Erstellung von Programmen verwenden. In Zukunft möchte ich mit der Aufteilung von Klassen und Dateien zwangsweise fortfahren.
2019-11-19 23:00:52,298:SampleFunc:INFO:28:
Hello World
Dieses Mal ist das Ziel, numpy zu verwenden $ \ displaystyle \ text {durchschnitt} \ qquad \ override {x} = \ frac {1} {n} \ sum_ {i = 1} ^ {n} x_ {i} $ Das Ziel ist zu berechnen.
Außerdem wird die gesamte Quelle des Programms am Ende dieses Artikels beschrieben, und nur die Punkte werden in der Mitte des Artikels beschrieben.
Da Brüche in der Berechnungsannahme erscheinen, werde ich jetzt nicht über den Speicherverbrauch nachdenken und den Gleitkommatyp mit doppelter Genauigkeit verwenden.
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
Lassen Sie uns zunächst die Berechnung primitiv durchführen. (Ich weiß, dass Sie auch die statistische Grundfunktionssumme von ndarray verwenden können, aber da es sich um eine primitive Methode handelt, die im Notfall nützlich ist, schreibe ich sie in Eile.)
sample.py
sum_data = 0.
for single_val in sample_data :
sum_data += single_val
logger.info(sum_data)
#Funktionsprüfung mit Summenfunktion
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
Diese Berechnung ist
sample.py
ave_data = 0.
ave_data = sum_data / len(sample_array)
logger.info(ave_data)
#Funktionsprüfung mit der Grundfunktion von 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
Da die Berechnungsmethode für Gesamt und Durchschnitt bis zum vorherigen Kapitel bestätigt wurde, werde ich die Methode beschreiben, um dies zu veranschaulichen.
sample.py
import logging
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import japanize_matplotlib ### [Japanische Unterstützung]
#Geben Sie das Protokollformat an
# %(asctime)s :Eine lesbare Darstellung der Zeit, zu der der LogRecord generiert wurde.
# %(funcName)s :Der Name der Funktion, die den Protokollierungsaufruf enthält
# %(levelname)s :Zeichenprotokollierungsstufe für Nachrichten
# %(lineno)d :Quellzeilennummer, unter der der Protokollierungsanruf ausgegeben wurde
# %(message)s : msg %Protokollnachricht als Argumente angefordert
fomatter = logging.Formatter('%(asctime)s:%(funcName)s:%(levelname)s:%(lineno)d:\n%(message)s')
#Logger-Einstellungen(INFO-Protokollstufe)
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
#Handler-Einstellungen(Ausgabedatei ändern/Einstellung der Protokollebene/Protokollformateinstellungen)
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)
#Funktionsprüfung mit der Grundfunktion von ndarray
#logger.info(sample_array.mean())
make_graph(sample_data)
#Ausnahmebehandlung
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()
#Ausnahmebehandlung
except (KeyError, ValueError) as err:
logger.exception('Error make_graph: %s', err)
if __name__ == '__main__' :
# make_ndarray anrufen
make_ndarray()
sample.py
ax.set_xlabel("Beispieldaten")
ax.set_ylabel("Beispielwert")
fig.suptitle('TEST(X-Achse/Y-Achsenbeschriftung hinzugefügt)', fontweight="bold", fontsize = 12)
sample.py
#Begrenzen Sie den Bereich der Diagrammanzeige
ax.set_xlim([0,11])
ax.set_ylim([0,110])
#Kommentieren Sie an der angegebenen Position(annotation)Einstellen
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
#Beschreiben Sie das Diagramm des Durchschnittswerts
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")
#Hinweis(annotation)Hinzufügen
#Pfeileigenschaften festlegen
arrow_dict = dict(arrowstyle = "->", color = "mediumblue")
#Eigenschaften von Textfeldern
# fc:facecolor, ec:edgecolor
text_dict = dict(boxstyle = "round",
fc = "white", ec = "mediumblue")
ax.annotate("Der Durchschnittswert ist" + 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
#Hinzufügung der zweiten Achse
ax2 = ax.twinx()
#Berechnung der kumulierten Summe
sample_data_csum = np.cumsum(sample_data)
ax2.bar(x_axis_arr, sample_data_csum, color = "blue", alpha = 0.2)
#Begrenzen Sie den Bereich der Diagrammanzeige
ax2.set_xlim([0,11])
ax2.set_ylim([0,400])
ax2.set_ylabel("Kumulative Summe der Probendaten")
sample.py
import logging
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import japanize_matplotlib ### [Japanische Unterstützung]
#Geben Sie das Protokollformat an
# %(asctime)s :Eine lesbare Darstellung der Zeit, zu der der LogRecord generiert wurde.
# %(funcName)s :Der Name der Funktion, die den Protokollierungsaufruf enthält
# %(levelname)s :Zeichenprotokollierungsstufe für Nachrichten
# %(lineno)d :Quellzeilennummer, unter der der Protokollierungsanruf ausgegeben wurde
# %(message)s : msg %Protokollnachricht als Argumente angefordert
fomatter = logging.Formatter('%(asctime)s:%(funcName)s:%(levelname)s:%(lineno)d:\n%(message)s')
#Logger-Einstellungen(INFO-Protokollstufe)
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
#Handler-Einstellungen(Ausgabedatei ändern/Einstellung der Protokollebene/Protokollformateinstellungen)
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)
#Funktionsprüfung mit der Grundfunktion von ndarray
#logger.info(sample_array.mean())
make_graph(sample_data, ave_data)
#Ausnahmebehandlung
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("Beispieldaten")
ax.set_ylabel("Beispielwert")
#Kommentieren Sie an der angegebenen Position(annotation)Einstellen
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(X-Achse/Y-Achsenbeschriftung hinzugefügt)', fontweight="bold", fontsize = 12)
ax.scatter(x_axis_arr, sample_data, color = "blue")
#Beschreiben Sie das Diagramm des Durchschnittswerts
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")
#Hinweis(annotation)Hinzufügen
#Pfeileigenschaften festlegen
arrow_dict = dict(arrowstyle = "->", color = "mediumblue")
#Eigenschaften von Textfeldern
# fc:facecolor, ec:edgecolor
text_dict = dict(boxstyle = "round",
fc = "white", ec = "mediumblue")
ax.annotate("Der Durchschnittswert ist" + str(ave_data), \
xy = (9, ave_data), xytext = (9.5, ave_data+5), \
size = 8, color = "red", \
bbox = text_dict, arrowprops = arrow_dict)
#Begrenzen Sie den Bereich der Diagrammanzeige
ax.set_xlim([0,11])
ax.set_ylim([0,110])
#Hinzufügung der zweiten Achse
ax2 = ax.twinx()
#Berechnung der kumulierten Summe
sample_data_csum = np.cumsum(sample_data)
ax2.bar(x_axis_arr, sample_data_csum, color = "blue", alpha = 0.2)
#Begrenzen Sie den Bereich der Diagrammanzeige
ax2.set_xlim([0,11])
ax2.set_ylim([0,400])
ax2.set_ylabel("Kumulative Summe der Probendaten")
plt.savefig('TEST.png')
plt.close()
#Ausnahmebehandlung
except (KeyError, ValueError) as err:
logger.exception('Error make_graph: %s', err)
if __name__ == '__main__' :
# make_ndarray anrufen
make_ndarray()
Ausnahmebehandlung funktioniert nicht gut. .. .. Wenn das Diagrammzeichnungsteil in einer separaten Datei erstellt oder klassifiziert wird, ist es dann einfacher zu lesen? Es kann sein, also würde ich es gerne während des Studiums versuchen.
Recommended Posts