Python lernen mit ChemTHEATER 05-1

Teil 5 Darstellung der ChemTHEATER-Daten auf einer Karte (Teil 1)

Kap.0 Gesamtdurchfluss

In Teil 5 wird die gemessene Konzentration chemischer Substanzen unter Verwendung der ChemTHEATER-Daten auf einer Karte aufgezeichnet. Es ist sozusagen ein einfaches GIS.
Im ersten Teil wollen wir eine Animation erstellen, indem wir die Datenverarbeitung mit dem Plotten auf der Karte und im zweiten Teil die Ausgabebilddaten verbinden.

img05.png

Laden der Chap.1-Bibliothek

Wenn Sie Cartopy nicht installiert haben, installieren Sie es im Voraus.

conda install -c conda-forge cartopy

Laden Sie dann die folgende Bibliothek.

%matplotlib inline
import os
import numpy as np
import pandas as pd
import itertools
import matplotlib.pyplot as plt
from cartopy import crs as ccrs

Zunächst importieren wir zunächst die für die Verarbeitung erforderlichen Bibliotheken.
Die erste Zeile ist wie üblich ein Befehl zum Anzeigen der Ausgabe von matplotlib.
In Teil 5 werden die folgenden Bibliotheken verwendet. (Siehe zweite und nachfolgende Zeilen)
Beide sind bereits in Anaconda3 (Windows 64-Bit-Version) installiert.
Dieses Mal werden wir die Karte mit einer Kartonkopie in der Grafik von matplotlib anzeigen.

Bibliothek Übersicht Verwendungszweck dieses Mal Offizielle URL
os Standardbibliothek Verzeichnismanipulation https://docs.python.org/ja/3/library/os.html
NumPy Numerische Berechnungsbibliothek Wird zur numerischen Berechnung in der statistischen Verarbeitung verwendet https://www.numpy.org
itertools Iterator generieren 1
Standardbibliothek
Wird verwendet, um die Schleifenverarbeitung zu optimieren https://docs.python.org/ja/3/library/itertools.html
pandas Datenanalysebibliothek Wird zur Datenverarbeitung und Formatierung verwendet https://pandas.pydata.org
Matplotlib Grafikzeichnungsbibliothek Wird zur Datenvisualisierung verwendet https://matplotlib.org
cartopy Kartenzeichnungsbibliothek Wird zur Visualisierung von Kartendaten verwendet https://scitools.org.uk/cartopy/docs/latest

Lesen von Kap.2 Daten

Nachdem die Bibliothek fertig ist, laden Sie die Daten. Da wir dieses Mal Daten von Meeressäugern verwenden werden, suchen Sie in der Probensuche von ChemTHEATER nach dem Probentyp als "Biotisch - Säugetiere - Meeressäuger". Klicken Sie in den Suchergebnissen auf "Proben exportieren" und "Messdaten exportieren", um die Probenlisten- bzw. Messwertlistendateien herunterzuladen. Speichern Sie die Datei in einem beliebigen Verzeichnis und lesen Sie sie wie folgt aus Ihrem Notizbuch.

data_file = "measureddata_20191002074038.tsv"    #Ändern Sie die in die Variable eingegebene Zeichenfolge in den tsv-Dateinamen Ihrer Messdaten
data = pd.read_csv(data_file, delimiter="\t")
data = data.drop(["ProjectID", "ScientificName", "RegisterDate", "UpdateDate"], axis=1)    #Entfernen Sie doppelte Spalten, wenn Sie später mit Samples verbinden
data
MeasuredID SampleID ChemicalID ChemicalName ExperimentID MeasuredValue AlternativeData Unit Remarks
0 1026 SAA000173 CH0000034 PCB4+PCB10 EXA000001 0.010 <1.00E-2 ng/g lipid NaN
1 1027 SAA000173 CH0000035 PCB8 EXA000001 0.010 <1.00E-2 ng/g lipid NaN
2 1028 SAA000173 CH0000037 PCB19 EXA000001 0.010 <1.00E-2 ng/g lipid NaN
3 1029 SAA000173 CH0000038 PCB22 EXA000001 0.010 <1.00E-2 ng/g lipid NaN
4 1030 SAA000173 CH0000039 PCB28 EXA000001 32.000 NaN ng/g lipid NaN
... ... ... ... ... ... ... ... ... ...
7098 27705 SAA002002 CH0000094 PCB208 EXA000001 77.249 NaN ng/g lipid NaN
7099 27706 SAA002002 CH0000088 PCB194 EXA000001 512.160 NaN ng/g lipid NaN
7100 27707 SAA002002 CH0000092 PCB205 EXA000001 3.000 <3.00E+0 ng/g lipid NaN
7101 27708 SAA002002 CH0000093 PCB206 EXA000001 81.947 NaN ng/g lipid NaN
7102 27709 SAA002002 CH0000095 PCB209 EXA000001 127.064 NaN ng/g lipid NaN

7103 rows × 9 columns

sample_file = "samples_20191002074035.tsv"    #Ändern Sie die in die Variable eingegebene Zeichenfolge in den tsv-Dateinamen Ihrer Beispiele
sample = pd.read_csv(sample_file, delimiter="\t")
sample
ProjectID SampleID SampleType TaxonomyID UniqCodeType UniqCode SampleName ScientificName ...
0 PRA000003 SAA000173 ST004 34892 es-BANK EW00884 M32582 Neophocaena phocaenoides ...
1 PRA000003 SAA000174 ST004 34892 es-BANK EW00888 M32588 Neophocaena phocaenoides ...
2 PRA000003 SAA000175 ST004 34892 es-BANK EW00932 M32580 Neophocaena phocaenoides ...
3 PRA000003 SAA000176 ST004 34892 es-BANK EW00929 M33556 Neophocaena phocaenoides ...
4 PRA000003 SAA000177 ST004 34892 es-BANK EW00934 M32548 Neophocaena phocaenoides ...
... ... ... ... ... ... ... ... ... ...
197 PRA000036 SAA002159 ST004 103596 es-BANK EW04779 060301-1 Peponocephala electra ...
198 PRA000036 SAA002160 ST004 103596 es-BANK EW00115 M32625 Peponocephala electra ...
199 PRA000036 SAA002161 ST004 103596 es-BANK EW00122 M32633 Peponocephala electra ...
200 PRA000036 SAA002162 ST004 103596 es-BANK EW00116 M32626 Peponocephala electra ...
201 PRA000036 SAA002163 ST004 103596 es-BANK EW00117 M32627 Peponocephala electra ...

202 rows × 66 columns

Kapitel 3 Datenaufbereitung

Bereiten Sie sich darauf vor, den in Kapitel 2 gelesenen DataFrame auf der Karte zeichnen zu können. Kombinieren Sie zunächst Messdaten und Proben und löschen Sie die Spalte N / A.

df = pd.merge(data, sample, on="SampleID")

df = df.dropna(how='all', axis=1)
df
MeasuredID SampleID ChemicalID ChemicalName ExperimentID MeasuredValue AlternativeData Unit ...
0 1026 SAA000173 CH0000034 PCB4+PCB10 EXA000001 0.010 <1.00E-2 ng/g lipid ...
1 1027 SAA000173 CH0000035 PCB8 EXA000001 0.010 <1.00E-2 ng/g lipid ...
2 1028 SAA000173 CH0000037 PCB19 EXA000001 0.010 <1.00E-2 ng/g lipid ...
3 1029 SAA000173 CH0000038 PCB22 EXA000001 0.010 <1.00E-2 ng/g lipid ...
4 1030 SAA000173 CH0000039 PCB28 EXA000001 32.000 NaN ng/g lipid ...
... ... ... ... ... ... ... ... ... ...
7098 27705 SAA002002 CH0000094 PCB208 EXA000001 77.249 NaN ng/g lipid ...
7099 27706 SAA002002 CH0000088 PCB194 EXA000001 512.160 NaN ng/g lipid ...
7100 27707 SAA002002 CH0000092 PCB205 EXA000001 3.000 <3.00E+0 ng/g lipid ...
7101 27708 SAA002002 CH0000093 PCB206 EXA000001 81.947 NaN ng/g lipid ...
7102 27709 SAA002002 CH0000095 PCB209 EXA000001 127.064 NaN ng/g lipid ...

7103 rows × 39 columns

Extrahieren Sie als Nächstes die erforderlichen Daten. Dieses Mal werden wir Daten zu vier Arten chemischer Substanzen (ΣPCBs, ΣDDTs, ΣCHLs, ΣHCHs) mit der Einheit [ng / g Lipid] verarbeiten.

data_lipid = df[df["Unit"] == "ng/g lipid"]
data_lipid = data_lipid[(data_lipid["ChemicalName"] == "ΣPCBs") | (data_lipid["ChemicalName"] == "ΣDDTs") |
                        (data_lipid["ChemicalName"] == "ΣCHLs") | (data_lipid["ChemicalName"] == "ΣHCHs")]

Damit ist die Extraktion der erforderlichen Daten abgeschlossen. Zur Bestätigung erhalten Sie eine Liste der in diesem Datensatz enthaltenen Arten und chemischen Namen.

lipid_species = data_lipid["ScientificName"].unique()
lipid_chemicals = data_lipid["ChemicalName"].unique()

lipid_species, lipid_chemicals
(array(['Peponocephala electra', 'Neophocaena phocaenoides',
        'Sousa chinensis', 'Stenella coeruleoalba'], dtype=object),
 array(['ΣPCBs', 'ΣDDTs', 'ΣCHLs', 'ΣHCHs'], dtype=object))

Auch hier wird DataFrame / data_lipid im CSV-Format ausgegeben, damit im zweiten Teil dieselben Daten verwendet werden können. Die CSV-Ausgabe verwendet die to_csv-Methode von Pandas.

data_lipid.to_csv("data.csv")

Kap.4 Plot auf Karte

Abschnitt 4-1 Basisdiagramm

Als nächstes werden wir auf der Karte zeichnen, was der Hauptteil dieser Zeit ist. Lassen Sie uns zunächst sorgfältig prüfen, wie eine Karte erstellt wird.
Da der Graph dieses Mal auf der Karte ausgegeben wird, wird die Karte zuerst ausgegeben. In Python können Sie mit cartopy eine Karte auf matplotlib ausgeben.

ax = plt.axes(projection=ccrs.PlateCarree())
ax.coastlines()
plt.show()

output_05_01.png

Überprüfen Sie als Nächstes den Greifer, der der Karte überlagert ist. Dieses Mal werden die Punkte im zweidimensionalen Raum von Breite und Länge als Messpunkte aufgezeichnet, sodass die Daten als Streukarte gezeichnet werden.
Sortieren Sie vor dem Zeichnen die Daten für jede in data_lipid enthaltene Art.

df_0 = data_lipid[(data_lipid["ChemicalName"] == "ΣPCBs") & (data_lipid["ScientificName"] == lipid_species[0])]    #Kazuhagondous ΣPCBs
df_1 = data_lipid[(data_lipid["ChemicalName"] == "ΣPCBs") & (data_lipid["ScientificName"] == lipid_species[1])]    #Sunameris ΣPCBs
df_2 = data_lipid[(data_lipid["ChemicalName"] == "ΣPCBs") & (data_lipid["ScientificName"] == lipid_species[2])]    #Sinaus Iro Dolphin ΣPCBs
df_3 = data_lipid[(data_lipid["ChemicalName"] == "ΣPCBs") & (data_lipid["ScientificName"] == lipid_species[3])]    #Suji Dolphin ΣPCBs

Wenn die Daten weiter unterteilt sind, versuchen Sie, sie in einem Streudiagramm aufzuwecken. Die Diagrammzeichnung von matplotlib kann darüber gelegt werden, sodass Sie Bilder einzeln hinzufügen können.

fig = plt.figure()
ax = plt.axes()

#CollectionLongitudeFrom,Extrahieren Sie Längen- und Breitengradinformationen aus CollectionLatitudeFrom
ax.scatter(x = np.array(df_0["CollectionLongitudeFrom"]), y = np.array(df_0["CollectionLatitudeFrom"]), c = "red", alpha=0.5)
ax.scatter(x = np.array(df_1["CollectionLongitudeFrom"]), y = np.array(df_1["CollectionLatitudeFrom"]), c = "blue", alpha=0.5)
ax.scatter(x = np.array(df_2["CollectionLongitudeFrom"]), y = np.array(df_2["CollectionLatitudeFrom"]), c = "yellow", alpha=0.5)
ax.scatter(x = np.array(df_3["CollectionLongitudeFrom"]), y = np.array(df_3["CollectionLatitudeFrom"]), c = "green", alpha=0.5)
plt.show()

output_05_02.png

Abschnitt 4-2 Streudiagramm + zylindrische Projektion mit normalem Abstand

Nachdem wir die Basisfigur gezeichnet haben, zeichnen wir sie, indem wir sie überlagern.

img09.png

fig = plt.figure()
ax = plt.axes(projection=ccrs.PlateCarree())
ax.coastlines()
ax.scatter(x = np.array(df_0["CollectionLongitudeFrom"]), y = np.array(df_0["CollectionLatitudeFrom"]), c = "red", alpha=0.5)
ax.scatter(x = np.array(df_1["CollectionLongitudeFrom"]), y = np.array(df_1["CollectionLatitudeFrom"]), c = "blue", alpha=0.5)
ax.scatter(x = np.array(df_2["CollectionLongitudeFrom"]), y = np.array(df_2["CollectionLatitudeFrom"]), c = "yellow", alpha=0.5)
ax.scatter(x = np.array(df_3["CollectionLongitudeFrom"]), y = np.array(df_3["CollectionLatitudeFrom"]), c = "green", alpha=0.5)
plt.show()

output_05_03.png

Abschnitt 4-3 Verbesserung von Abschnitt 4-2

Ich konnte vorerst mit Abschnitt 4-2 ausgeben. Im aktuellen Status wird der Bereich der Karte jedoch automatisch festgelegt. Dies wird nur automatisch verarbeitet, sodass der gesamte Bereich, in dem die Daten vorhanden sind, automatisch verarbeitet wird, sodass sich der Bereich abhängig von den zu verarbeitenden Daten ändert. Hier ist die Karte in einem geeigneten Bereich fixiert.

Mit den Methoden set_xlim und set_ylim von matplotlib kann der Bereich der X-Achsenrichtung und der Y-Achsenrichtung des zu zeichnenden Graphen bestimmt werden.

img10.png

fig = plt.figure()
ax = plt.axes(projection=ccrs.PlateCarree())
ax.coastlines()
ax.scatter(x = np.array(df_0["CollectionLongitudeFrom"]), y = np.array(df_0["CollectionLatitudeFrom"]), c = "red", alpha=0.5)
ax.scatter(x = np.array(df_1["CollectionLongitudeFrom"]), y = np.array(df_1["CollectionLatitudeFrom"]), c = "blue", alpha=0.5)
ax.scatter(x = np.array(df_2["CollectionLongitudeFrom"]), y = np.array(df_2["CollectionLatitudeFrom"]), c = "yellow", alpha=0.5)
ax.scatter(x = np.array(df_3["CollectionLongitudeFrom"]), y = np.array(df_3["CollectionLatitudeFrom"]), c = "green", alpha=0.5)
ax.set_xlim(90,180)    #Bereich in X-Achsenrichtung (Längsrichtung) zum Zeichnen
ax.set_ylim(15, 60)    #Bereich in Richtung der Y-Achse (Breitengrad) zum Zeichnen
ax.set_title("ΣPCBs")
plt.show()

output_05_04.png

Kap.5 Ausgabe in einem Blatt

Wie Sie in

Kapitel 3 sehen können, enthält dieser DataFrame Daten von 4 Arten chemischer Substanzen. Geben Sie sie also in Form von 4 davon in einem Blatt aus. </ p>

Wie in Kapitel 4 sortieren wir zunächst die Daten für jede chemische Substanz. Da es jedoch insgesamt 16 Kombinationen gibt (jeweils 4 Arten von biologischen und chemischen Substanzen), werden wir sie hier auflisten. Insgesamt erfolgt dies beim Zeichnen nacheinander. Zu diesem Zeitpunkt ist es erforderlich, jede Kombination zu generieren (z. B. ΣPCBs von Snameri). Verwenden Sie daher die Funktion von Pythons Iterator 1 , um direkt zu produzieren. Wir werden nach 2 fragen. Mit anderen Worten wird das direkte Produkt aus der Liste der chemischen Substanzen (lipid_chemicals) und der Liste der Artennamen (lipid_species) erhalten, und alle 16 Kombinationsmuster werden abgeleitet.

df_list = []
for k1, k2 in itertools.product(lipid_chemicals, lipid_species):
    df_list.append(data_lipid[(data_lipid["ChemicalName"] == k1) & (data_lipid["ScientificName"] == k2)])    #Extrahieren Sie Daten für jede Kombination

img11.png

ax = [0]*4
fig = plt.figure(figsize=(16, 9))
for i in range(4): 
    ax[i] = fig.add_subplot(2, 2, i+1, projection=ccrs.PlateCarree())    #Bereich zum Zeichnen des Diagramms hinzugefügt
    ax[i].coastlines()
    ax[i].scatter(x = np.array(df_list[4*i+0]["CollectionLongitudeFrom"]), y = np.array(df_list[4*i+0]["CollectionLatitudeFrom"]),
                  c = "red", alpha=0.5)    #Kazuhagondou
    ax[i].scatter(x = np.array(df_list[4*i+1]["CollectionLongitudeFrom"]), y = np.array(df_list[4*i+1]["CollectionLatitudeFrom"]), 
                  c = "blue", alpha=0.5)    #Snameri
    ax[i].scatter(x = np.array(df_list[4*i+2]["CollectionLongitudeFrom"]), y = np.array(df_list[4*i+2]["CollectionLatitudeFrom"]), 
                  c = "yellow", alpha=0.5)    #Sinaus Iro Dolphin
    ax[i].scatter(x = np.array(df_list[4*i+3]["CollectionLongitudeFrom"]), y = np.array(df_list[4*i+3]["CollectionLatitudeFrom"]), 
                  c = "green", alpha=0.5)    #Suji-Delphin
    ax[i].set_xlim(90,180)
    ax[i].set_ylim(15, 60)
    ax[i].set_title(lipid_chemicals[i])
plt.show()

output_05_05.png

Dies spiegelt nur die Messpunkte wider. Zeichnen Sie daher auch die gemessenen Werte auf der Karte. Lassen Sie es uns im Radius jedes Sprühpunkts reflektieren. Sie müssen lediglich die Daten in der Spalte MeasuredValue dem Parameter s der Streumethode zuweisen, mit der das Streudiagramm gezeichnet wird.

fig = plt.figure(figsize=(16, 9))
for i in range(4): 
    ax[i] = fig.add_subplot(2, 2, i+1, projection=ccrs.PlateCarree())
    ax[i].coastlines()
    ax[i].scatter(x = np.array(df_list[4*i+0]["CollectionLongitudeFrom"]), y = np.array(df_list[4*i+0]["CollectionLatitudeFrom"]), s=np.array(df_list[4*i+0]["MeasuredValue"]), c = "red", alpha=0.5)
    ax[i].scatter(x = np.array(df_list[4*i+1]["CollectionLongitudeFrom"]), y = np.array(df_list[4*i+1]["CollectionLatitudeFrom"]), s=np.array(df_list[4*i+1]["MeasuredValue"]), c = "blue", alpha=0.5)
    ax[i].scatter(x = np.array(df_list[4*i+2]["CollectionLongitudeFrom"]), y = np.array(df_list[4*i+2]["CollectionLatitudeFrom"]), s=np.array(df_list[4*i+2]["MeasuredValue"]), c = "yellow", alpha=0.5)
    ax[i].scatter(x = np.array(df_list[4*i+3]["CollectionLongitudeFrom"]), y = np.array(df_list[4*i+3]["CollectionLatitudeFrom"]), s=np.array(df_list[4*i+3]["MeasuredValue"]), c = "green", alpha=0.5)
    ax[i].set_xlim(90,180)
    ax[i].set_ylim(15, 60)
    plt.title(lipid_chemicals[i])
plt.show()

output_05_06.png

Wenn der Wert von MeasuredValue durch den Radius des Streupunkts ersetzt wird, wird der Kreis des Diagramms von ΣDDTs groß und alle überlappen sich. Passen Sie ihn daher so an, dass der Radius klein ist. Hier wird die Größe einheitlich auf 1/10 eingestellt.

fig = plt.figure(figsize=(16, 9))
rate = [10,10,10,10]    #Variable Anzeigeskala
for i in range(4): 
    ax[i] = fig.add_subplot(2, 2, i+1, projection=ccrs.PlateCarree())
    ax[i].coastlines()
    ax[i].scatter(x = np.array(df_list[4*i+0]["CollectionLongitudeFrom"]), y = np.array(df_list[4*i+0]["CollectionLatitudeFrom"]), s=np.array(df_list[4*i+0]["MeasuredValue"])/rate[i], c = "red", alpha=0.3)
    ax[i].scatter(x = np.array(df_list[4*i+1]["CollectionLongitudeFrom"]), y = np.array(df_list[4*i+1]["CollectionLatitudeFrom"]), s=np.array(df_list[4*i+1]["MeasuredValue"])/rate[i], c = "blue", alpha=0.3)
    ax[i].scatter(x = np.array(df_list[4*i+2]["CollectionLongitudeFrom"]), y = np.array(df_list[4*i+2]["CollectionLatitudeFrom"]), s=np.array(df_list[4*i+2]["MeasuredValue"])/rate[i], c = "yellow", alpha=0.3)
    ax[i].scatter(x = np.array(df_list[4*i+3]["CollectionLongitudeFrom"]), y = np.array(df_list[4*i+3]["CollectionLatitudeFrom"]), s=np.array(df_list[4*i+3]["MeasuredValue"])/rate[i], c = "green", alpha=0.3)
    ax[i].set_xlim(90,180)
    ax[i].set_ylim(15, 60)
    plt.title(lipid_chemicals[i])
plt.show()

output_05_07.png

Jetzt können Sie die Messergebnisse auf der Karte darstellen. Da jedoch alle Daten überlappend angezeigt werden, ist es sehr schwierig zu sehen, und in dieser Abbildung sind Änderungen im Zeitverlauf nicht zu sehen. Im zweiten Teil werden wir animieren, diese Probleme zu lösen.

Fußnote

1 Ein Iterator ist ein Mechanismus, der wiederholt auf das nächste Element mit einem Typ zugreift, der Daten wie eine Liste sammelt.

2 Das direkte Produkt besteht darin, eine neue Menge zu erstellen, indem aus jeder Menge ein Element extrahiert und eine Menge erstellt wird, wie in der folgenden Abbildung gezeigt. Auch mit dem kartesischen Produkt.

img12.png

Recommended Posts

Python lernen mit ChemTHEATER 05-1
Python lernen mit ChemTHEATER 02
Python lernen mit ChemTHEATER 01
"Objektorientiert" mit Python gelernt
Lerne Python mit ChemTHEATER
Verbessertes Lernen ab Python
Maschinelles Lernen mit Python! Vorbereitung
Python lernen
Beginnend mit maschinellem Python-Lernen
Iterative Verarbeitung von Python durch Chemoinfomatik gelernt
Maschinelles Lernen mit Python (1) Gesamtklassifizierung
Eingabe / Ausgabe mit Python (Python-Lernnotiz ⑤)
Perceptron-Lernexperiment mit Python
"Scraping & maschinelles Lernen mit Python" Lernnotiz
FizzBuzz in Python3
Scraping mit Python
[Python] Lernnotiz 1
Python-Lernnotizen
Statistik mit Python
Scraping mit Python
Python mit Go
Python-Lernausgabe
Twilio mit Python
In Python integrieren
Spielen Sie mit 2016-Python
AES256 mit Python
Python-Lernseite
Getestet mit Python
Python-Lerntag 4
Python beginnt mit ()
mit Syntax (Python)
Python Deep Learning
Python-Lernen (Ergänzung)
Deep Learning × Python
Bingo mit Python
Zundokokiyoshi mit Python
Python-Lernnotizen
Excel mit Python
Mikrocomputer mit Python
Mit Python besetzen
[Beispiel für eine Python-Verbesserung] Python mit Codecademy lernen
Verstärken Sie Bilder für maschinelles Lernen mit Python
Maschinelles Lernen mit Python (2) Einfache Regressionsanalyse
[Shakyo] Begegnung mit Python zum maschinellen Lernen
Datenanalyse beginnend mit Python (Datenvorverarbeitung - maschinelles Lernen)
[Python] Probieren Sie mit Keras-RL ganz einfach erweitertes Lernen (DQN) aus
Aufbau einer KI / maschinellen Lernumgebung mit Python
Serielle Kommunikation mit Python
Zip, entpacken mit Python
Primzahlbeurteilung mit Python
Python mit Eclipse + PyDev.
Socket-Kommunikation mit Python
Datenanalyse mit Python 2
[Python] Einfache Einführung in das maschinelle Lernen mit Python (SVM)
Scraping in Python (Vorbereitung)
Python-Klasse (Python-Lernnotiz ⑦)
Versuchen Sie es mit Python.
Sequentielle Suche mit Python
Maschinelles Lernen beginnend mit Python Personal Memorandum Part2
Python-Modul (Python-Lernnotiz ④)
Führen Sie Python mit VBA aus