Apprendre Python avec ChemTHEATER 03

Partie 3 Analyse en composantes principales

Chap.0 Débit global

Dans la partie 3, l'analyse des composants principaux est effectuée. L'analyse en composantes principales est une combinaison de nombreuses variables explicatives 1 et de moins d'indicateurs et de variables synthétiques 2 . Il est représenté par un> . En d'autres termes, en résumant statistiquement les données, il est possible de saisir la tendance et l'atmosphère de l'ensemble des données multidimensionnelles qui sont difficiles à comprendre intuitivement. Par exemple, il existe deux variables, la taille et le poids, comme indicateurs de la forme du corps, et celles-ci sont combinées en un IMC à une variable.

Dans le cas des données ChemTHEATER, les concentrations de plusieurs substances chimiques sont souvent mesurées pour un échantillon. En d'autres termes, il existe plusieurs variables explicatives pour chaque échantillon. Cette fois, nous cherchons à avoir une vue d'ensemble des données en analysant les principales composantes afin de ne pas endommager au maximum l'information de chaque variable explicative.

img03.png

Chargement de la bibliothèque Chap.1

%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

Commencez par charger la bibliothèque requise. La première ligne est, comme d'habitude, une commande magique qui affiche le graphique dessiné par matplotlib dans le Jupyter Notebook.
Ensuite, la deuxième ligne et les suivantes sont les bibliothèques requises. Ces bibliothèques sont installées dans Anaconda.
Scikit-learn utilisée cette fois pour l'analyse des composants principaux est une bibliothèque d'apprentissage automatique
3 open source, classée dans d'autres catégories 4 et régression 4 , regroupement 4 Divers algorithmes tels que sont également mis en œuvre.

Bibliothèque Présentation But de l'utilisation cette fois URL officielle
NumPy Bibliothèque de calculs numériques Utilisé pour le calcul numérique dans le traitement statistique https://www.numpy.org
pandas Bibliothèque d'analyse des données Utilisé pour la lecture et le formatage des données https://pandas.pydata.org
Matplotlib Bibliothèque de dessins graphiques Utilisé pour la visualisation des données https://matplotlib.org
scikit-learn Bibliothèque d'apprentissage automatique Utilisé pour implémenter l'analyse en composants principaux (ACP) https://scikit-learn.org

Lecture des données Chap.2

Maintenant que les bibliothèques nécessaires ont été chargées au Chap.1, préparez les données à traiter cette fois. Les données traitées cette fois-ci sont de trois types: Snameri ( Neophocaena phocaenoides ), Suji Dolphin ( Stenella coeruleoalba ) et Kazuhagondou ( Peponocephala electra ). Dans les deux cas, téléchargez les données mesurées et les échantillons à partir de la recherche d'échantillons de ChemTHEATER et chargez-les de la même manière que les parties 1 et 2.

  1. Sélectionnez "Sample Search" dans la barre de menu de Chem THEATRE.
  2. Sélectionnez «Biotiques - Mammifères - Mammifères marins» dans «Type d'échantillon».
  3. Sélectionnez "Neophocaena phocaenoides" dans "Nom scientifique".
  4. Cliquez sur le bouton "Rechercher" pour afficher une liste d'échantillons qui remplissent les conditions.
  5. "Exporter les échantillons" sort les informations sur l'échantillon et "Exporter les données mesurées" sort les valeurs mesurées de la substance chimique cible sous forme de fichier texte délimité par des tabulations.
  6. Répétez pour les deux autres types.

Après avoir lu chacun des trois fichiers avec succès, combinez les trois fichiers de données mesurées et d'échantillons afin qu'ils puissent être utilisés dans un traitement ultérieur. À ce stade, il est pratique d'utiliser la fonction Pandas concat. Si le paramètre ignore_index est défini sur True, les numéros de colonne du Pandas DataFrame 5 </ sup> à combiner seront renumérotés. </ p>

data_file1 = "measureddata_20191004033314.tsv"    #Remplacez la chaîne de caractères saisie dans la variable par le nom de fichier tsv de vos données mesurées
data_file2 = "measureddata_20191004033325.tsv"    #Remplacez la chaîne de caractères saisie dans la variable par le nom de fichier tsv de vos données mesurées
data_file3 = "measureddata_20191004033338.tsv"    #Remplacez la chaîne de caractères saisie dans la variable par le nom de fichier tsv de vos données mesurées

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)    #Combinez avec la fonction concat de Pandas
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"    #Remplacez la chaîne de caractères entrée dans la variable par le nom de fichier tsv de vos échantillons
sample_file2 = "samples_20191004033323.tsv"    #Remplacez la chaîne de caractères entrée dans la variable par le nom de fichier tsv de vos échantillons
sample_file3 = "samples_20191004033334.tsv"    #Remplacez la chaîne de caractères entrée dans la variable par le nom de fichier tsv de vos échantillons

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)    #Combinez avec la fonction concat de Pandas
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

Chap.3 Préparation des données

Après avoir lu les données, l'étape suivante consiste à préparer les données pour qu'elles puissent être analysées. Commencez par extraire les données à utiliser cette fois à partir des données mesurées.
Cette fois, nous utiliserons 5 types de substances chimiques (ΣPCBs, ΣDDTs, ΣPBDEs, ΣCHLs, ΣHCHs) pour 3 types de Sunameri, Suji Dolphin et Kazuhagondou.

Tout d'abord, extrayez les données dont l'unité est [ng / g lipide]. En effet, comme mentionné dans la partie 1, les données avec des unités différentes ne peuvent pas être simplement comparées.
Ensuite, extrayez les données dont le nom de la substance chimique est l'un des cinq types ci-dessus et utilisez la méthode reset_index pour renuméroter les lignes.

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"]    #Liste de données avec ID d'échantillon 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 ...

Une fois l'extraction des données mesurées terminée, l'étape suivante consiste à intégrer la base de données des échantillons et des données mesurées.
Dans les parties 1 et 2, des informations sur l'échantillon (nom scientifique, site de collecte, etc.) ont été ajoutées aux données mesurées de chaque substance chimique, mais cette fois, la valeur mesurée de la substance chimique est donnée à chaque échantillon, alors faites attention à ce que le traitement soit différent d'avant. ..

img08.png

#Créer un DataFrame avec uniquement SampleID et un nom scientifique
df = sample[["SampleID", "ScientificName"]]
for chem in ["ΣCHLs", "ΣDDTs", "ΣHCHs", "ΣPBDEs", "ΣPCBs"]: #Traitement en boucle par nom de substance chimique
    #Créez un DataFrame pour uniquement les produits chimiques de la liste chimique
    data_lipid_chem = data_lipid[data_lipid["ChemicalName"] == chem]
    #Nom de la colonne, ne laissant que le SampleID et la valeur mesurée"MeasuredValue"Changement du nom de la substance chimique
    data_lipid_chem = data_lipid_chem[["SampleID", "MeasuredValue"]].rename(columns={"MeasuredValue": chem})
    data_lipid_chem = data_lipid_chem.drop_duplicates(subset='SampleID')
    #Df avec SampleID(ID+Nom scientifique)Et données_lipid_chem(ID+la valeur de mesure)Fusionner
    df = pd.merge(df, data_lipid_chem, on="SampleID")
df = df.dropna(how="any") #Supprimer les lignes contenant NaN
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

Comme indiqué ci-dessus

, le nom scientifique est stocké dans le DataFrame tel qu'il est dans l'état actuel. Puisque le nom de l'espèce sera utilisé pour la visualisation à l'avenir, une variable représentant le nom scientifique sera préparée pour des raisons de commodité. Tout d'abord, créez un dictionnaire qui associe chaque nom scientifique à une valeur (Sunameri: 0, Suji Dolphin: 1, Kazuhagondou: 2). </ p>

species = df["ScientificName"].unique().tolist()    #Sortie d'une liste de noms scientifiques dans df
class_dic = {}
for i in range(len(species)):
    class_dic[species[i]] = i
class_dic
{'Neophocaena phocaenoides': 0,
 'Stenella coeruleoalba': 1,
 'Peponocephala electra': 2}

Ensuite, ajoutez la colonne Classe à df et saisissez la valeur correspondant au nom scientifique de chaque ligne dans la colonne Classe. ```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

Comme il était plus facile d'utiliser le tableau croisé dynamique, modifiez le data_lipid et le dessous comme suit.

df = pd.pivot_table(data_lipid, index=['ScientificName', 'SampleID'], columns='ChemicalName', values=['MeasuredValue'])
df = df.dropna(how="any") #Supprimer les lignes contenant NaN
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

À partir de ce moment, l'analyse est effectuée à l'aide du bloc de données du tableau croisé dynamique.

Chap.4 Visualisation de l'aperçu des données

Maintenant que la préparation des données est terminée, visualisons et vérifions toutes les données pour le moment. Les données manipulées cette fois sont de 5 dimensions (il y a 5 variables explicatives). Puisque les humains ne peuvent pas saisir l'espace à cinq dimensions, il est impossible de visualiser la distribution de toutes les données à cinq dimensions telles qu'elles sont. Ici, la carte de distribution $ {} _ 5 C_2 = 10 $ est générée.

Il est pratique d'utiliser la fonction pandas.plotting.scatter_matrix () de pandas pour visualiser le diagramme de dispersion de plusieurs variables. Dans la fonction scatter_matrix (), spécifiez la plage à visualiser avec le paramètre frame. Cette fois, toutes les lignes et colonnes de df sont toutes après 6 .

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

output_03_01.png

Chap.5 Analyse en composantes principales

Dans

Chap.4, une carte de distribution de $ {} _ 5 C_2 = 10 $ a été générée comme un aperçu de l'ensemble des données. Cependant, avec cela, seule la distribution des données pour chaque combinaison de deux types de substances chimiques peut être confirmée. En d'autres termes, il n'est pas possible d'obtenir une vue d'ensemble de l'ensemble des données à 5 dimensions. Par conséquent, les données 5D sont résumées et visualisées par l'analyse des composants principaux. </ p>

Premièrement, étant donné que la longueur de chaque axe est différente telle qu'elle est, standardisez 7 pour chaque variable et définissez la longueur de tous les axes en 5 dimensions. Unifier.

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

Vous pouvez également utiliser le Scaler standard pour la normalisation.

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

Après la normalisation, effectuez une analyse des composants principaux. Ici, le résultat de Standard Scaler est utilisé.
Sklearn.decomposition.PCA () de Scikit-learn est utilisé pour l'analyse des composants principaux.
Dans l'analyse en composantes principales, tout d'abord, une variable synthétique (première composante principale) est créée afin de dessiner un axe dans la direction dans laquelle la variation de la distribution des données est maximisée, puis la deuxième composante principale est utilisée pour compléter les données perdues dans la variable composite. Créez le troisième composant principal et les variables synthétiques. Après cela, si les données sont transférées dans l'espace centré sur chaque composant principal, le reste n'est qu'interprété.

pca = PCA()
feature = pca.fit(dfs)    #Analyse des composants principaux
feature = pca.transform(dfs)   #Transférer les données vers l'espace des composants principaux

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

Trouvons également le vecteur propre. Le vecteur propre est comme la "force d'inclinaison de l'axe" appliquée lors du transfert des données d'origine vers l'espace de l'axe du composant principal.

Le calcul des vecteurs propres en Python est implémenté dans les composants_ inclus dans l'ACP de scikit-learn.

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

Maintenant que nous connaissons le vecteur propre, nous allons trouver les valeurs propres de chaque composant principal. La valeur propre est un coefficient associé au vecteur propre et est un indice indiquant la taille de chaque axe de composante principale.

En Python, le taux de cotisation peut être calculé à l'aide de la variable_expliquée_ incluse dans l'ACP de scicit-learn.

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

Ensuite, trouvez le taux de cotisation. Le taux de cotisation est un indice indiquant la quantité d'informations que chaque axe de composante principale explique dans les données. En d'autres termes, la composante principale avec un taux de cotisation de 60% peut expliquer 60% du total des données et en perdre 40%.

En Python, le taux de cotisation peut être calculé à l'aide de la valeur expliquée_variance_ratio_ incluse dans l'ACP de scicit-learn.

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

Ici, le taux de cotisation cumulé est également calculé. La raison pour laquelle le taux de cotisation cumulatif est nécessaire est de voir «quel pourcentage des données est perdu». En d'autres termes, si vous examinez les principaux composants qui ont un taux de cotisation cumulé supérieur à un certain niveau, vous pouvez réduire le nombre de dimensions et obtenir une vue d'ensemble de l'ensemble des données.

Ici, la valeur totale cumulée est calculée à l'aide de la fonction cumsum de numpy.

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

En ce qui concerne chaque axe de composant principal généré, je ne suis pas sûr de ce que cela signifie tel quel. Cependant, en visualisant la contribution de chaque variable dans la composante principale, la signification de chaque composante principale peut être vue. Ici, la contribution de chaque variable dans la première composante principale et la deuxième composante principale est tracée sur un diagramme de dispersion. ```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

Enfin, visualisez le résultat de l'analyse des composants principaux. En général, les principaux éléments ayant une valeur unique de 1 ou plus ou un taux de cotisation cumulé de 80% ou plus sont adoptés et la répartition est examinée par la combinaison des composants principaux adoptés. Dans ce cas, on suppose que jusqu'au deuxième composant principal est adopté et visualisé dans le graphique. Comme avec un diagramme de dispersion général, vous pouvez utiliser la fonction scatter de matplotlib et spécifier le premier composant principal (0ème colonne d'entité) et le deuxième composant principal (1ère colonne d'entité) pour chacun des paramètres X et Y.

plt.figure()
plt.scatter(x=feature[:, 0], y=feature[:, 1], alpha=0.8, c=list(df.iloc[:, 0])) #Décrire le codage couleur du tracé en c
plt.grid()
plt.xlabel("PC1")
plt.ylabel("PC2")
plt.show()

output_33_0.png

note de bas de page

1 Une variable explicative est une variable qui explique la variable objective qui est le résultat souhaité. En d'autres termes, pour la variable objective qui indique le résultat, la variable qui le cause est la variable explicative. Également une variable indépendante.

2 Une variable créée en combinant plusieurs variables. Dans l'analyse en composantes principales, chaque composante principale est une variable synthétique.

3 Logiciels ou bibliothèques dont le code source, qui est le dessin de conception d'un programme, est largement divulgué au grand public. Tout le monde peut l'utiliser gratuitement tant qu'il se situe dans la plage autorisée par la licence. De plus, comme tout le monde peut le développer, il est facile de le mettre à jour du point de vue de l'utilisateur et de corriger les bogues qui ne sont pas remarqués par un petit nombre de personnes.
Python, Jupyter Notebook et Anaconda sont tous des logiciels open source.

4 Les deux sont des méthodes utilisées dans l'apprentissage automatique. La classification est la classification d'images et la régression est utilisée pour les prévisions futures telles que les cours des actions. Le clustering est utilisé pour regrouper des données similaires en fonction des tendances des données.

5 Un type de données qui stocke des données tabulaires dans Pandas. Manipulez les données en spécifiant des cellules, des lignes et des colonnes comme si vous lisiez un fichier au format CSV ou TSV avec Excel.

6 En python, les nombres commencent par "0".

7 L'opération consistant à soustraire la valeur moyenne de la valeur mesurée et à la diviser par l'écart type.

Recommended Posts