4 Verschiedene Algorithmen wie sup> sind ebenfalls implementiert. p>
Bibliothek th>
| Übersicht th>
| Verwendungszweck dieses Mal th>
| Offizielle URL th>
|
NumPy |
Numerische Berechnungsbibliothek td>
| Wird für die numerische Berechnung in der statistischen Verarbeitung verwendet td>
| https://www.numpy.org |
pandas |
Datenanalysebibliothek td>
| Wird zum Lesen und Formatieren von Daten verwendet td>
| https://pandas.pydata.org |
Matplotlib |
Grafikzeichnungsbibliothek td>
| Wird zur Datenvisualisierung verwendet td>
| https://matplotlib.org |
scikit-learn |
Bibliothek für maschinelles Lernen td>
| Wird zum Implementieren der Hauptkomponentenanalyse (PCA) td> 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 i>), Suji Dolphin ( Stenella coeruleoalba i>) und Kazuhagondou ( Pemonocephala electra i>). 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. p>
-
Wählen Sie "Probensuche" aus der Menüleiste von Chem THEATER.
-
Wählen Sie unter "Probentyp" die Option "Biotisch - Säugetiere - Meeressäuger".
-
Klicken Sie auf die Schaltfläche "Suchen", um eine Liste der Proben auszugeben, die die Bedingungen erfüllen.
-
"Proben exportieren" gibt die Probeninformationen aus und "Messdaten exportieren" gibt die Messwerte der chemischen Zielsubstanz als tabulatorgetrennte Textdatei aus.
-
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. p>
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. p>
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. .. p>
#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. p>
```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. p>
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 sup>. p>
pd.plotting.scatter_matrix(
frame=df["MeasuredValue"],
c=list(df["MeasuredValue"].iloc[:, 0]),
alpha=0.5)
plt.show()
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 sup> für jede Variable und legen Sie die Länge aller Achsen in 5 Dimensionen fest. Vereinheitlichen. p>
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. p>
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. p>
Die Berechnung von Eigenvektoren in Python ist in components_ implementiert, die in der PCA von scikit-learn enthalten sind. p>
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. p>
In Python kann der Beitragssatz mithilfe der erklärten_Varianz_ berechnet werden, die in der PCA von scicit-learn enthalten ist. p>
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. p>
In Python kann der Beitragssatz mithilfe von EXPLAIN_Varianance_Ratio_ berechnet werden, das in der PCA von Scicit-Learn enthalten ist. p>
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. p>
Hier wird der kumulative Gesamtwert mit der Cumsum-Funktion von numpy berechnet. p>
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()
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. p>
```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()
```
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. p>
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()
Fußnote
1 sup> 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. p>
2 sup> Eine Variable, die durch Kombinieren mehrerer Variablen erstellt wurde. Bei der Hauptkomponentenanalyse ist jede Hauptkomponente eine synthetische Variable. p>
3 sup> 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. p>
4 sup> 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. p>
5 sup> 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. p>
6 sup> In Python beginnen Zahlen mit "0". p>
7 sup> Der Vorgang des Subtrahierens des Durchschnittswerts vom gemessenen Wert und des Dividierens durch die Standardabweichung. p>