Python lernen mit ChemTHEATER 03

Teil 3 Hauptkomponentenanalyse

Kap.0 Gesamtdurchfluss

In Teil 3 wird die Hauptkomponentenanalyse durchgeführt. Die Hauptkomponentenanalyse ist eine Kombination aus vielen erklärenden Variablen 1 und weniger Indikatoren und synthetischen Variablen 2 . Es wird durch ein> dargestellt. Mit anderen Worten, durch statistische Zusammenfassung der Daten ist es möglich, die Tendenz und Atmosphäre der gesamten mehrdimensionalen Daten zu erfassen, die intuitiv schwer zu verstehen sind. Zum Beispiel gibt es zwei Variablen, Größe und Gewicht, als Indikatoren für die Körperform, und diese werden zu einem variablen BMI kombiniert.

Bei ChemTHEATER-Daten werden häufig die Konzentrationen mehrerer chemischer Substanzen für eine Probe gemessen. Mit anderen Worten, es gibt mehrere erklärende Variablen für jede Stichprobe. Dieses Mal möchten wir uns einen Überblick über die Daten verschaffen, indem wir die Hauptkomponenten analysieren, um die Informationen jeder erklärenden Variablen nicht so weit wie möglich zu beschädigen.

img03.png

Laden der Chap.1-Bibliothek

%matplotlib inline
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
import matplotlib.ticker as ticker
import sklearn
from sklearn.decomposition import PCA

Laden Sie zuerst die erforderliche Bibliothek. Die erste Zeile ist wie üblich ein magischer Befehl, der das von matplotlib gezeichnete Diagramm im Jupyter-Notizbuch anzeigt.
Als nächstes sind die zweite und die folgenden Zeilen die erforderlichen Bibliotheken. Diese Bibliotheken sind in Anaconda installiert.
Scikit-Learn, das diesmal für die Hauptkomponentenanalyse verwendet wird, ist eine Open-Source-Bibliothek für maschinelles Lernen
3 und wird in andere Kategorien eingeteilt # sup4> 4 und Regression 4 , Clustering 4 Verschiedene Algorithmen wie sind ebenfalls implementiert.

Bibliothek Übersicht Verwendungszweck dieses Mal Offizielle URL
NumPy Numerische Berechnungsbibliothek Wird für die numerische Berechnung in der statistischen Verarbeitung verwendet https://www.numpy.org
pandas Datenanalysebibliothek Wird zum Lesen und Formatieren von Daten verwendet https://pandas.pydata.org
Matplotlib Grafikzeichnungsbibliothek Wird zur Datenvisualisierung verwendet https://matplotlib.org
scikit-learn Bibliothek für maschinelles Lernen Wird zum Implementieren der Hauptkomponentenanalyse (PCA) verwendet https://scikit-learn.org

Lesen von Kap.2 Daten

Nachdem die erforderlichen Bibliotheken in Kapitel 1 geladen wurden, bereiten Sie die Daten vor, die dieses Mal verarbeitet werden sollen. Bei den diesmal verarbeiteten Daten handelt es sich um drei Typen: Snameri ( Neophocaena phocaenoides ), Suji Dolphin ( Stenella coeruleoalba ) und Kazuhagondou ( Pemonocephala electra ). Laden Sie in beiden Fällen Messdaten und Proben von der Probensuche von ChemTHEATER herunter und laden Sie sie auf die gleiche Weise wie Teil 1 und Teil 2.

  1. Wählen Sie "Probensuche" aus der Menüleiste von Chem THEATER.

  2. Wählen Sie unter "Probentyp" die Option "Biotisch - Säugetiere - Meeressäuger".

  3. Klicken Sie auf die Schaltfläche "Suchen", um eine Liste der Proben auszugeben, die die Bedingungen erfüllen.

  4. "Proben exportieren" gibt die Probeninformationen aus und "Messdaten exportieren" gibt die Messwerte der chemischen Zielsubstanz als tabulatorgetrennte Textdatei aus.

  5. Wiederholen Sie diesen Vorgang für die beiden anderen Typen.

Kombinieren Sie nach dem erfolgreichen Lesen jeder der drei Dateien die drei gemessenen Dateien und Proben, damit sie für die spätere Verarbeitung verwendet werden können. Zu diesem Zeitpunkt ist es bequem, die Pandas-Concat-Funktion zu verwenden. Wenn der Parameter ignore_index auf True gesetzt ist, werden die Spaltennummern des zu kombinierenden Pandas DataFrame 5 </ sup> neu nummeriert. </ p>

data_file1 = "measureddata_20191004033314.tsv"    #Ändern Sie die in die Variable eingegebene Zeichenfolge in den tsv-Dateinamen Ihrer Messdaten
data_file2 = "measureddata_20191004033325.tsv"    #Ändern Sie die in die Variable eingegebene Zeichenfolge in den tsv-Dateinamen Ihrer Messdaten
data_file3 = "measureddata_20191004033338.tsv"    #Ändern Sie die in die Variable eingegebene Zeichenfolge in den tsv-Dateinamen Ihrer Messdaten

data1 = pd.read_csv(data_file1, delimiter="\t")
data2 = pd.read_csv(data_file2, delimiter="\t")
data3 = pd.read_csv(data_file3, delimiter="\t")

data = pd.concat([data1, data2, data3], ignore_index=True)    #Kombiniere es mit der Pandas Concat Funktion
data
MeasuredID ProjectID SampleID ScientificName ChemicalID ChemicalName ExperimentID MeasuredValue AlternativeData ...
0 80 PRA000002 SAA000087 Neophocaena phocaenoides CH0000154 TBT EXA000001 170.0000 NaN ...
1 81 PRA000002 SAA000087 Neophocaena phocaenoides CH0000155 DBT EXA000001 220.3591 NaN ...
2 82 PRA000002 SAA000087 Neophocaena phocaenoides CH0000156 MBT EXA000001 44.5445 NaN ...
3 83 PRA000002 SAA000087 Neophocaena phocaenoides CH0000157 ΣBTs EXA000001 434.9036 NaN ...
4 84 PRA000002 SAA000087 Neophocaena phocaenoides CH0000158 TPT EXA000001 12.9220 NaN ...
... ... ... ... ... ... ... ... ... ... ...
9774 24272 PRA000036 SAA002163 Peponocephala electra CH0000151 cis-nonachlor EXA000001 170.0000 NaN ...
9775 24056 PRA000036 SAA002163 Peponocephala electra CH0000152 ΣCHLs EXA000001 1100.0000 NaN ...
9776 24376 PRA000036 SAA002163 Peponocephala electra CH0000153 HCB EXA000001 120.0000 NaN ...
9777 24646 PRA000036 SAA002163 Peponocephala electra CH0000533 TCPMe EXA000001 6.1000 NaN ...
9778 24700 PRA000036 SAA002163 Peponocephala electra CH0000534 TCPMOH EXA000001 16.0000 NaN ...

9779 rows × 13 columns

sample_file1 = "samples_20191004033311.tsv"    #Ändern Sie die in die Variable eingegebene Zeichenfolge in den tsv-Dateinamen Ihrer Beispiele
sample_file2 = "samples_20191004033323.tsv"    #Ändern Sie die in die Variable eingegebene Zeichenfolge in den tsv-Dateinamen Ihrer Beispiele
sample_file3 = "samples_20191004033334.tsv"    #Ändern Sie die in die Variable eingegebene Zeichenfolge in den tsv-Dateinamen Ihrer Beispiele

sample1 = pd.read_csv(sample_file1, delimiter="\t")    
sample2 = pd.read_csv(sample_file2, delimiter="\t")
sample3 = pd.read_csv(sample_file3, delimiter="\t")

sample = pd.concat([sample1, sample2, sample3], ignore_index=True)    #Kombiniere es mit der Pandas Concat Funktion
sample
ProjectID SampleID SampleType TaxonomyID UniqCodeType UniqCode SampleName ScientificName CommonName CollectionYear ...
0 PRA000002 SAA000087 ST004 34892 es-BANK EW00884 NaN Neophocaena phocaenoides Finless porpoises 1996 ...
1 PRA000002 SAA000088 ST004 34892 es-BANK EW00812 NaN Neophocaena phocaenoides Finless porpoises 1999 ...
2 PRA000002 SAA000089 ST004 34892 es-BANK EW00873 NaN Neophocaena phocaenoides Finless porpoises 1995 ...
3 PRA000002 SAA000090 ST004 34892 es-BANK EW04787 NaN Neophocaena phocaenoides Finless porpoises 2000 ...
4 PRA000002 SAA000091 ST004 34892 es-BANK EW00867 NaN Neophocaena phocaenoides Finless porpoises 1998 ...
... ... ... ... ... ... ... ... ... ... ... ...
312 PRA000036 SAA002159 ST004 103596 es-BANK EW04779 060301-1 Peponocephala electra Melon-headed whale 2006 ...
313 PRA000036 SAA002160 ST004 103596 es-BANK EW00115 M32625 Peponocephala electra Melon-headed whale 2001 ...
314 PRA000036 SAA002161 ST004 103596 es-BANK EW00122 M32633 Peponocephala electra Melon-headed whale 2001 ...
315 PRA000036 SAA002162 ST004 103596 es-BANK EW00116 M32626 Peponocephala electra Melon-headed whale 2001 ...
316 PRA000036 SAA002163 ST004 103596 es-BANK EW00117 M32627 Peponocephala electra Melon-headed whale 2001 ...

317 rows × 66 columns

Kapitel 3 Datenaufbereitung

Nach dem Lesen der Daten besteht der nächste Schritt darin, die Daten so vorzubereiten, dass sie analysiert werden können. Extrahieren Sie zunächst die diesmal zu verwendenden Daten aus den gemessenen Daten.
Dieses Mal werden wir 5 Arten chemischer Substanzen (ΣPCBs, ΣDDTs, ΣPBDEs, ΣCHLs, ΣHCHs) für 3 Arten von Sunameri, Suji Dolphin und Kazuhagondou verwenden.

Extrahieren Sie zuerst die Daten, deren Einheit [ng / g Lipid] ist. Dies liegt daran, dass, wie in Teil 1 erwähnt, Daten mit unterschiedlichen Einheiten nicht einfach verglichen werden können.
Extrahieren Sie als Nächstes die Daten, deren chemischer Stoffname einer der oben genannten fünf Typen ist, und nummerieren Sie die Zeilen mit der Methode reset_index neu.

data_lipid = data[(data["Unit"] == "ng/g lipid")]
data_lipid = data_lipid[(data_lipid["ChemicalName"] == "ΣPCBs") | (data_lipid["ChemicalName"] == "ΣDDTs") |
                        (data_lipid["ChemicalName"] == "ΣPBDEs") |  (data_lipid["ChemicalName"] == "ΣCHLs") |
                        (data_lipid["ChemicalName"] == "ΣHCHs")]
data_lipid = data_lipid.reset_index(drop=True)
data_lipid[data_lipid["SampleID"] == "SAA001941"]    #Datenliste mit Proben-ID SAA001941
MeasuredID ProjectID SampleID ScientificName ChemicalID ChemicalName ExperimentID MeasuredValue AlternativeData ...
115 25112 PRA000030 SAA001941 Neophocaena phocaenoides CH0000033 ΣDDTs EXA000001 9400.0 NaN ...
116 25098 PRA000030 SAA001941 Neophocaena phocaenoides CH0000096 ΣPCBs EXA000001 1100.0 NaN ...
117 25140 PRA000030 SAA001941 Neophocaena phocaenoides CH0000146 ΣHCHs EXA000001 41.0 NaN ...
118 25126 PRA000030 SAA001941 Neophocaena phocaenoides CH0000152 ΣCHLs EXA000001 290.0 NaN ...

Nachdem die Datenextraktion der gemessenen Daten abgeschlossen ist, besteht der nächste Schritt darin, den Datenrahmen von Proben und gemessenen Daten zu integrieren.
In Teil 1 und Teil 2 wurden den gemessenen Daten jeder chemischen Substanz Probeninformationen (wissenschaftlicher Name, Sammelstelle usw.) hinzugefügt. Diesmal wird jedoch jeder Probe der gemessene Wert der chemischen Substanz gegeben. Achten Sie daher darauf, dass sich die Verarbeitung von der vorherigen unterscheidet. ..

img08.png

#Erstellen Sie einen DataFrame mit nur SampleID und wissenschaftlichem Namen
df = sample[["SampleID", "ScientificName"]]
for chem in ["ΣCHLs", "ΣDDTs", "ΣHCHs", "ΣPBDEs", "ΣPCBs"]: #Schleifenverarbeitung nach chemischem Stoffnamen
    #Erstellen Sie einen DataFrame nur für die Chemikalien in der Chemikalienliste
    data_lipid_chem = data_lipid[data_lipid["ChemicalName"] == chem]
    #Spaltenname, wobei nur die SampleID und der gemessene Wert übrig bleiben"MeasuredValue"In chemischen Stoffnamen geändert
    data_lipid_chem = data_lipid_chem[["SampleID", "MeasuredValue"]].rename(columns={"MeasuredValue": chem})
    data_lipid_chem = data_lipid_chem.drop_duplicates(subset='SampleID')
    #Df mit SampleID(ID+Wissenschaftlicher Name)Und Daten_lipid_chem(ID+gemessener Wert)Verschmelzen
    df = pd.merge(df, data_lipid_chem, on="SampleID")
df = df.dropna(how="any") #Entfernen Sie Reihen, die NaN enthalten
df = df.drop("SampleID", axis=1)
df
ScientificName ΣCHLs ΣDDTs ΣHCHs ΣPBDEs ΣPCBs
0 Neophocaena phocaenoides 770.0 68000.0 1100.0 170.0 5700.0
1 Neophocaena phocaenoides 1200.0 140000.0 3500.0 120.0 6500.0
2 Neophocaena phocaenoides 1000.0 140000.0 5500.0 86.0 5500.0
3 Neophocaena phocaenoides 950.0 130000.0 6600.0 100.0 5800.0
4 Neophocaena phocaenoides 1400.0 280000.0 6100.0 140.0 11000.0
... ... ... ... ... ... ...
89 Peponocephala electra 3000.0 15000.0 170.0 260.0 12000.0
90 Peponocephala electra 5100.0 23000.0 380.0 490.0 19000.0
91 Peponocephala electra 5700.0 33000.0 240.0 300.0 25000.0
92 Peponocephala electra 2800.0 12000.0 220.0 230.0 9300.0
93 Peponocephala electra 5700.0 27000.0 240.0 180.0 21000.0

94 rows × 6 columns

Wie oben gezeigt

, wird der wissenschaftliche Name im aktuellen Status im DataFrame gespeichert. Da der Artname in Zukunft zur Visualisierung verwendet wird, wird der Einfachheit halber eine Variable erstellt, die den wissenschaftlichen Namen darstellt. Erstellen Sie zunächst ein Wörterbuch, das jeden wissenschaftlichen Namen mit einem Wert verknüpft (Sunameri: 0, Suji Dolphin: 1, Kazuhagondou: 2). </ p>

species = df["ScientificName"].unique().tolist()    #Geben Sie eine Liste der wissenschaftlichen Namen in df aus
class_dic = {}
for i in range(len(species)):
    class_dic[species[i]] = i
class_dic
{'Neophocaena phocaenoides': 0,
 'Stenella coeruleoalba': 1,
 'Peponocephala electra': 2}

Fügen Sie als Nächstes die Klassenspalte zu df hinzu und geben Sie den Wert ein, der dem wissenschaftlichen Namen jeder Zeile in der Klassenspalte entspricht. ```python df["Class"] = 0 for irow in range(len(df)): df.at[irow, "Class"] = class_dic[df.at[irow, "ScientificName"]] df = df.loc[:, ["Class", "ScientificName", "ΣPCBs", "ΣDDTs", "ΣPBDEs", "ΣCHLs", "ΣHCHs"]] df ```

Class ScientificName ΣPCBs ΣDDTs ΣPBDEs ΣCHLs ΣHCHs
0 0 Neophocaena phocaenoides 5700.0 68000.0 170.0 770.0 1100.0
1 0 Neophocaena phocaenoides 6500.0 140000.0 120.0 1200.0 3500.0
2 0 Neophocaena phocaenoides 5500.0 140000.0 86.0 1000.0 5500.0
3 0 Neophocaena phocaenoides 5800.0 130000.0 100.0 950.0 6600.0
4 0 Neophocaena phocaenoides 11000.0 280000.0 140.0 1400.0 6100.0
... ... ... ... ... ... ... ...
89 2 Peponocephala electra 12000.0 15000.0 260.0 3000.0 170.0
90 2 Peponocephala electra 19000.0 23000.0 490.0 5100.0 380.0
91 2 Peponocephala electra 25000.0 33000.0 300.0 5700.0 240.0
92 2 Peponocephala electra 9300.0 12000.0 230.0 2800.0 220.0
93 2 Peponocephala electra 21000.0 27000.0 180.0 5700.0 240.0

94 rows × 7 columns

Da es einfacher war, die Pivot-Tabelle zu verwenden, ändern Sie die data_lipid und unten wie folgt.

df = pd.pivot_table(data_lipid, index=['ScientificName', 'SampleID'], columns='ChemicalName', values=['MeasuredValue'])
df = df.dropna(how="any") #Entfernen Sie Reihen, die NaN enthalten
df
MeasuredValue
ChemicalName ΣCHLs ΣDDTs ΣHCHs ΣPBDEs ΣPCBs
ScientificName SampleID
Neophocaena phocaenoides SAA001903 770.0 68000.0 1100.0 170.0 5700.0
SAA001904 1200.0 140000.0 3500.0 120.0 6500.0
SAA001905 1000.0 140000.0 5500.0 86.0 5500.0
SAA001906 950.0 130000.0 6600.0 100.0 5800.0
SAA001907 1400.0 280000.0 6100.0 140.0 11000.0
... ... ... ... ... ... ...
Stenella coeruleoalba SAA001984 730.0 3500.0 40.0 84.0 3200.0
SAA001985 7300.0 44000.0 300.0 530.0 26000.0
SAA001986 12000.0 88000.0 490.0 850.0 42000.0
SAA001987 9100.0 56000.0 380.0 650.0 32000.0
SAA001988 11000.0 67000.0 520.0 610.0 36000.0

94 rows × 5 columns

Ab diesem Zeitpunkt erfolgt die Analyse anhand des Datenrahmens der Pivot-Tabelle.

Kapitel 4 Visualisierung der Datenübersicht

Nachdem die Datenvorbereitung abgeschlossen ist, visualisieren und überprüfen wir vorerst die gesamten Daten. Die diesmal verarbeiteten Daten sind 5 Dimensionen (es gibt 5 erklärende Variablen). Da Menschen den 5-dimensionalen Raum nicht erfassen können, ist es unmöglich, die Verteilung aller 5-dimensionalen Daten so zu visualisieren, wie sie sind. Hier wird $ {} _ 5 C_2 = 10 $ Verteilungskarte erzeugt.

Es ist praktisch, die Funktion pandas.plotting.scatter_matrix () von pandas zu verwenden, um das Streudiagramm mehrerer Variablen zu visualisieren. Geben Sie in der Funktion dispers_matrix () den Bereich an, der mit dem Parameter frame visualisiert werden soll. Dieses Mal stehen alle Zeilen und Spalten von df nach 6 .

pd.plotting.scatter_matrix(
    frame=df["MeasuredValue"],
    c=list(df["MeasuredValue"].iloc[:, 0]),
    alpha=0.5)
plt.show()

output_03_01.png

Kapitel 5 Hauptkomponentenanalyse

In

Kapitel 4 wurde eine Verteilungskarte von $ {} _ 5 C_2 = 10 $ als Übersicht über die gesamten Daten generiert. Damit kann jedoch nur die Verteilung der Daten für jede Kombination zweier Arten chemischer Substanzen bestätigt werden. Mit anderen Worten, es ist nicht möglich, einen Überblick über die gesamten 5-dimensionalen Daten zu erhalten. Daher werden 5D-Daten durch Hauptkomponentenanalyse zusammengefasst und visualisiert. </ p>

Da die Länge jeder Achse unterschiedlich ist, standardisieren Sie zunächst 7 für jede Variable und legen Sie die Länge aller Achsen in 5 Dimensionen fest. Vereinheitlichen.

dfs = df.apply(lambda x: (x-x.mean())/x.std(), axis=0)
dfs
MeasuredValue
ChemicalName ΣCHLs ΣDDTs ΣHCHs ΣPBDEs ΣPCBs
ScientificName SampleID
Neophocaena phocaenoides SAA001903 -0.743053 0.320011 0.179064 -0.308268 -0.768856
SAA001904 -0.588580 1.574027 1.297534 -0.528241 -0.693375
SAA001905 -0.660428 1.574027 2.229592 -0.677822 -0.787727
SAA001906 -0.678390 1.399859 2.742224 -0.616230 -0.759421
SAA001907 -0.516732 4.012392 2.509209 -0.440252 -0.268792
... ... ... ... ... ... ...
Stenella coeruleoalba SAA001984 -0.757422 -0.803378 -0.314927 -0.686621 -1.004736
SAA001985 1.602782 -0.097994 -0.193759 1.275535 1.146484
SAA001986 3.291208 0.668349 -0.105213 2.683360 2.656112
SAA001987 2.249413 0.111009 -0.156477 1.803469 1.712595
SAA001988 2.931969 0.302594 -0.091233 1.627491 2.090001

94 rows × 5 columns

Alternativ können Sie den Standard Scaler zur Standardisierung verwenden.

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(df)
scaler.transform(df)
dfs = pd.DataFrame(scaler.transform(df), columns=df.columns)
dfs
MeasuredValue
ChemicalName ΣCHLs ΣDDTs ΣHCHs ΣPBDEs ΣPCBs
0 -0.747037 0.321727 0.180024 -0.309921 -0.772979
1 -0.591736 1.582467 1.304491 -0.531073 -0.697093
2 -0.663969 1.582467 2.241547 -0.681457 -0.791950
3 -0.682027 1.407365 2.756927 -0.619534 -0.763493
4 -0.519503 4.033907 2.522663 -0.442612 -0.270233
... ... ... ... ... ...
89 -0.761484 -0.807686 -0.316615 -0.690303 -1.010123
90 1.611376 -0.098520 -0.194798 1.282374 1.152631
91 3.308856 0.671933 -0.105778 2.697748 2.670354
92 2.261475 0.111604 -0.157316 1.813139 1.721777
93 2.947690 0.304217 -0.091722 1.636218 2.101208

94 rows × 5 columns

Führen Sie nach der Standardisierung eine Hauptkomponentenanalyse durch. Hier wird das Ergebnis von Standard Scaler verwendet.
Sklearn.decomposition.PCA () von Scikit-learn wird für die Hauptkomponentenanalyse verwendet.
Bei der Hauptkomponentenanalyse wird zunächst eine synthetische Variable (erste Hauptkomponente) erstellt, um eine Achse in der Richtung zu zeichnen, in der die Variation in der Verteilung der Daten maximiert wird, und dann wird die zweite Hauptkomponente verwendet, um die in der zusammengesetzten Variablen verlorenen Daten zu ergänzen. Erstellen Sie die dritte Hauptkomponente und synthetische Variablen. Wenn danach die Daten in den Bereich übertragen werden, der auf jeder Hauptkomponente zentriert ist, wird der Rest nur interpretiert.

pca = PCA()
feature = pca.fit(dfs)    #Hauptkomponentenanalyse
feature = pca.transform(dfs)   #Übertragen Sie Daten in den Hauptkomponentenbereich

pd.DataFrame(feature, columns=["PC{}".format(x + 1) for x in range(len(dfs.columns))])
PC1 PC2 PC3 PC4 PC5
0 -0.931614 0.574985 0.348535 -0.188477 -0.178934
1 -0.525203 2.177125 0.038871 -0.242288 -0.498098
2 -0.700197 2.892482 -0.248495 0.251040 -0.282242
3 -0.720222 3.155379 -0.366880 0.634978 -0.017083
4 0.554487 4.585518 0.039662 -0.952484 -0.965309
... ... ... ... ... ...
89 -1.607963 -0.471519 0.077579 0.103413 -0.068820
90 2.190969 -0.704970 0.009171 0.563020 0.053168
91 4.974287 -0.699630 0.023300 0.765578 0.013150
92 3.218248 -0.753396 -0.005256 0.688830 0.065009
93 3.804695 -0.750210 -0.513720 0.727646 -0.224109

94 rows × 5 columns

Lassen Sie uns auch den Eigenvektor finden. Der Eigenvektor entspricht der "Kraft zum Neigen der Achse", die beim Übertragen der Originaldaten auf den Achsenraum der Hauptkomponente angewendet wird.

Die Berechnung von Eigenvektoren in Python ist in components_ implementiert, die in der PCA von scikit-learn enthalten sind.

pd.DataFrame(pca.components_, columns=df.columns[2:], index=["PC{}".format(x + 1) for x in range(len(dfs.columns))])
MeasuredValue
ChemicalName ΣCHLs ΣDDTs ΣHCHs ΣPBDEs ΣPCBs
PC1 0.572482 0.307088 -0.005288 0.488078 0.582848
PC2 -0.212874 0.641425 0.730929 -0.048824 -0.081347
PC3 -0.328297 0.180897 -0.249982 0.782267 -0.430192
PC4 0.427788 -0.529630 0.566847 0.279604 -0.370130
PC5 -0.579799 -0.425488 0.286195 0.263203 0.575856

Nachdem wir den Eigenvektor kennen, finden wir die Eigenwerte jeder Hauptkomponente. Der Eigenwert ist ein dem Eigenvektor zugeordneter Koeffizient und ein Index, der die Größe jeder Hauptkomponentenachse angibt.

In Python kann der Beitragssatz mithilfe der erklärten_Varianz_ berechnet werden, die in der PCA von scicit-learn enthalten ist.

pd.DataFrame(pca.explained_variance_, index=["PC{}".format(x + 1) for x in range(len(dfs.columns))])
0
PC1 2.301828
PC2 1.526633
PC3 0.681585
PC4 0.450884
PC5 0.092834

Ermitteln Sie als Nächstes den Beitragssatz. Der Beitragssatz ist ein Index, der angibt, wie viele Informationen jede Hauptkomponentenachse in den Daten erklärt. Mit anderen Worten, die Hauptkomponente mit einem Beitragssatz von 60% kann 60% der Gesamtdaten erklären, und 40% gehen verloren.

In Python kann der Beitragssatz mithilfe von EXPLAIN_Varianance_Ratio_ berechnet werden, das in der PCA von Scicit-Learn enthalten ist.

pd.DataFrame(pca.explained_variance_ratio_, index=["PC{}".format(x + 1) for x in range(len(dfs.columns))])
0
PC1 0.455468
PC2 0.302078
PC3 0.134867
PC4 0.089218
PC5 0.018369

Hier wird auch der kumulierte Beitragssatz berechnet. Der Grund, warum der kumulierte Beitragssatz erforderlich ist, besteht darin, zu sehen, "wie viel Prozent der Daten verloren gehen". Mit anderen Worten, wenn Sie sich die Hauptkomponenten ansehen, deren kumulierter Beitragssatz über einem bestimmten Niveau liegt, können Sie die Anzahl der Dimensionen reduzieren und sich einen Überblick über die gesamten Daten verschaffen.

Hier wird der kumulative Gesamtwert mit der Cumsum-Funktion von numpy berechnet.

plt.plot([0] + list( np.cumsum(pca.explained_variance_ratio_)), "-o")
plt.xlabel("Number of principal components")
plt.ylabel("Cumulative contribution rate")
plt.grid()
plt.show()

output_03_02.png

In Bezug auf jede generierte Hauptkomponentenachse bin ich mir nicht sicher, was dies bedeutet. Durch Visualisierung des Beitrags jeder Variablen in der Hauptkomponente kann jedoch die Bedeutung jeder Hauptkomponente gesehen werden. Hier ist der Beitrag jeder Variablen in der ersten Hauptkomponente und der zweiten Hauptkomponente in einem Streudiagramm aufgetragen. ```python plt.figure() for x, y, name in zip(pca.components_[0], pca.components_[1], df["MeasuredValue"].columns[:]): plt.text(x, y, name) plt.scatter(pca.components_[0], pca.components_[1], alpha=0.8) plt.grid() plt.xlabel("PC1") plt.ylabel("PC2") plt.show() ```

output_03_03.png

Visualisieren Sie abschließend das Ergebnis der Hauptkomponentenanalyse. Im Allgemeinen werden die Hauptkomponenten mit einem eindeutigen Wert von 1 oder mehr oder einem kumulierten Beitragssatz von 80% oder mehr übernommen, und die Verteilung wird durch die Kombination der angenommenen Hauptkomponenten geprüft. In diesem Fall wird davon ausgegangen, dass bis zur zweiten Hauptkomponente das Diagramm übernommen und visualisiert wird. Verwenden Sie wie bei einem allgemeinen Streudiagramm die Streufunktion von matplotlib und geben Sie für jeden der Parameter X und Y die erste Hauptkomponente (0. Spalte des Merkmals) und die 2. Hauptkomponente (1. Spalte des Merkmals) an.

plt.figure()
plt.scatter(x=feature[:, 0], y=feature[:, 1], alpha=0.8, c=list(df.iloc[:, 0])) #Beschreiben Sie die Farbcodierung des Diagramms in c
plt.grid()
plt.xlabel("PC1")
plt.ylabel("PC2")
plt.show()

output_33_0.png

Fußnote

1 Eine erklärende Variable ist eine Variable, die die Zielvariable erklärt, die das gewünschte Ergebnis ist. Mit anderen Worten, für die Zielvariable, die das Ergebnis angibt, ist die Variable, die es verursacht, die erklärende Variable. Auch eine unabhängige Variable.

2 Eine Variable, die durch Kombinieren mehrerer Variablen erstellt wurde. Bei der Hauptkomponentenanalyse ist jede Hauptkomponente eine synthetische Variable.

3 Software oder Bibliotheken, deren Quellcode, bei dem es sich um die Entwurfszeichnung eines Programms handelt, der breiten Öffentlichkeit zugänglich gemacht wird. Jeder kann es kostenlos nutzen, solange es innerhalb des von der Lizenz zugelassenen Bereichs liegt. Da es von jedem entwickelt werden kann, ist es aus Sicht des Benutzers einfach, Aktualisierungen vorzunehmen und Fehler zu beheben, die von einer kleinen Anzahl von Personen nicht bemerkt werden.
Python, Jupyter Notebook und Anaconda sind Open Source-Software.

4 Beide Methoden werden beim maschinellen Lernen verwendet. Die Klassifizierung ist eine Bildklassifizierung, und die Regression wird für zukünftige Prognosen wie Aktienkurse verwendet. Clustering wird verwendet, um ähnliche Daten basierend auf Datentrends zu gruppieren.

5 Ein Datentyp, der Tabellendaten in Pandas speichert. Bearbeiten Sie Daten, indem Sie Zellen, Zeilen und Spalten so angeben, als würden Sie eine Datei im CSV- oder TSV-Format mit Excel lesen.

6 In Python beginnen Zahlen mit "0".

7 Der Vorgang des Subtrahierens des Durchschnittswerts vom gemessenen Wert und des Dividierens durch die Standardabweichung.

Recommended Posts