[PYTHON] Pandas apprenant avec la chimioinfomatique

introduction

Suite à NumPy appris de la chimioinfomatique, "Pandas" est l'une des bibliothèques représentatives de Python avec le thème de la lipidomique (analyse complète des lipides). Je vais vous expliquer. Nous expliquerons principalement des exemples pratiques de chimioinfomatique, donc si vous souhaitez vérifier les bases, veuillez lire l'article suivant avant de lire cet article.

Un chercheur de la société pharmaceutique a résumé Pandas

Création de séries et de DataFrame

Pandas facilite les calculs de table.

Pour utiliser la bibliothèque, chargez-la d'abord avec ʻimport`. Par convention, il est souvent abrégé en «pd».

Pandas gère deux types de structures de données, «Series» et «DataFrame».

Les séries sont des données unidimensionnelles et ont une structure de données similaire à une liste ou un dictionnaire.

import pandas as pd


index_fatty_acids = ['FA 16:0', 'FA 16:1', 'FA 18:0', 'FA 18:1', 'FA 18:2', 'FA 18:3', 'FA 18:4', 'FA 20:0', 'FA 20:3', 'FA 20:4', 'FA 20:5']

numbers_carbon = pd.Series([16, 16, 18, 18, 18, 18, 18, 20, 20, 20, 20], index=index_fatty_acids)
numbers_unsaturation = pd.Series([0, 1, 0, 1, 2, 3, 4, 0, 3, 4, 5], index=index_fatty_acids)

print(numbers_carbon)
print(numbers_unsaturation)

Dans l'exemple ci-dessus, vous pouvez considérer ʻindex_fatty_acids comme quelque chose comme le nom des données. Vous pouvez également créer une série basée sur le dictionnaire comme indiqué ci-dessous. ʻIndex_fatty_acids est la clé du dictionnaire. Cependant, ce sera un code long, il est donc préférable de spécifier la liste avec ʻindex = `.

import pandas as pd


numbers_carbon = pd.Series({
    'FA 16:0': 16,
    'FA 16:1': 16,
    'FA 18:0': 18,
    'FA 18:1': 18,
    'FA 18:2': 18,
    'FA 18:3': 18,
    'FA 18:4': 18,
    'FA 20:0': 20,
    'FA 20:3': 20,
    'FA 20:4': 20,
    'FA 20:5': 20
})

print(numbers_carbon)

D'autre part, DataFrame est une donnée bidimensionnelle créée en combinant Series.

import pandas as pd


index_fatty_acids = ['FA 16:0', 'FA 16:1', 'FA 18:0', 'FA 18:1', 'FA 18:2', 'FA 18:3', 'FA 18:4', 'FA 20:0', 'FA 20:3', 'FA 20:4', 'FA 20:5']

numbers_carbon = pd.Series([16, 16, 18, 18, 18, 18, 18, 20, 20, 20, 20], index=index_fatty_acids)
numbers_unsaturation = pd.Series([0, 1, 0, 1, 2, 3, 4, 0, 3, 4, 5], index=index_fatty_acids)

df_fatty_acids = pd.DataFrame({'Cn': numbers_carbon, 'Un': numbers_unsaturation})

print(df_fatty_acids)

Dans l'exemple ci-dessus, la clé du dictionnaire dans pd.DataFrame est le nom de colonne de la table. D'un autre côté, «index» spécifié lors de la création de la série devient le nom de la ligne. A propos, «df» dans «df_fatty_acids» est une abréviation pour «data frame».

Référence des données

Pour faire référence aux noms de ligne et de colonne du DataFrame, utilisez respectivement «index» et «colonnes».

import pandas as pd


index_fatty_acids = ['FA 16:0', 'FA 16:1', 'FA 18:0', 'FA 18:1', 'FA 18:2', 'FA 18:3', 'FA 18:4', 'FA 20:0', 'FA 20:3', 'FA 20:4', 'FA 20:5']

numbers_carbon = pd.Series([16, 16, 18, 18, 18, 18, 18, 20, 20, 20, 20], index=index_fatty_acids)
numbers_unsaturation = pd.Series([0, 1, 0, 1, 2, 3, 4, 0, 3, 4, 5], index=index_fatty_acids)

df_fatty_acids = pd.DataFrame({'Cn': numbers_carbon, 'Un': numbers_unsaturation})

print(df_fatty_acids.index) #Nom de la ligne
print(df_fatty_acids.columns) #Nom de colonne

Pour accéder à un élément spécifique d'un DataFrame, écrivez:

import pandas as pd


index_fatty_acids = ['FA 16:0', 'FA 16:1', 'FA 18:0', 'FA 18:1', 'FA 18:2', 'FA 18:3', 'FA 18:4', 'FA 20:0', 'FA 20:3', 'FA 20:4', 'FA 20:5']

numbers_carbon = pd.Series([16, 16, 18, 18, 18, 18, 18, 20, 20, 20, 20], index=index_fatty_acids)
numbers_unsaturation = pd.Series([0, 1, 0, 1, 2, 3, 4, 0, 3, 4, 5], index=index_fatty_acids)

df_fatty_acids = pd.DataFrame({'Cn': numbers_carbon, 'Un': numbers_unsaturation})

print(df_fatty_acids['Cn']) #Spécifiez le nom de la colonne
print(df_fatty_acids.Cn) #Spécifiez le nom de la colonne

print(df_fatty_acids['Cn'][0]) #Spécifiez le nom de la colonne et spécifiez le numéro de ligne

print(df_fatty_acids[2:5]) #Spécifiez le numéro de ligne (numéro d'index) avec une tranche
print(df_fatty_acids[5:]) #Extraire les données après le numéro de ligne spécifié
print(df_fatty_acids[:5]) #Extraire les données jusqu'au numéro de ligne spécifié
print(df_fatty_acids[-5:]) #Numéro de ligne compté à l'arrière
print(df_fatty_acids[2:5]['Cn']) #Spécifiez le numéro de ligne et le nom de la colonne

print(df_fatty_acids.loc['FA 16:0', 'Cn']) #Spécifiez le nom de la ligne et le nom de la colonne
print(df_fatty_acids.loc['FA 16:0']) #Spécifiez le nom de la ligne
print(df_fatty_acids.loc[:, 'Cn']) #Spécifiez le nom de la colonne

print(df_fatty_acids.iloc[0, 0]) #Spécifiez le numéro de ligne et le numéro de colonne
print(df_fatty_acids.iloc[0]) #Spécifiez le numéro de ligne
print(df_fatty_acids.iloc[:, 0]) #Spécifiez le numéro de colonne
print(df_fatty_acids.iloc[-1, -1]) #Élément dans la dernière colonne de la dernière ligne

S'il est préférable de spécifier le nom de ligne ou de colonne ou le numéro de ligne ou le numéro de colonne est au cas par cas, il est donc préférable de choisir celui qui est facile à faire à chaque fois.

Vous pouvez également extraire des données qui remplissent les conditions spécifiées.

import pandas as pd


index_fatty_acids = ['FA 16:0', 'FA 16:1', 'FA 18:0', 'FA 18:1', 'FA 18:2', 'FA 18:3', 'FA 18:4', 'FA 20:0', 'FA 20:3', 'FA 20:4', 'FA 20:5']

numbers_carbon = pd.Series([16, 16, 18, 18, 18, 18, 18, 20, 20, 20, 20], index=index_fatty_acids)
numbers_unsaturation = pd.Series([0, 1, 0, 1, 2, 3, 4, 0, 3, 4, 5], index=index_fatty_acids)

df_fatty_acids = pd.DataFrame({'Cn': numbers_carbon, 'Un': numbers_unsaturation})

print(df_fatty_acids[df_fatty_acids['Cn'] >= 18]) #DataFrame a extrait les lignes qui remplissent les conditions
print(df_fatty_acids[df_fatty_acids['Cn'] >= 18]['Cn']) #Extraire les lignes qui remplissent les conditions en spécifiant les noms de colonne dans DataFrame
print(df_fatty_acids[df_fatty_acids['Cn'] >= 18].iloc[:, 0]) #Extraire les lignes qui remplissent les conditions en spécifiant le numéro de colonne dans le DataFrame

print(df_fatty_acids[(df_fatty_acids['Cn'] >= 18) & (df_fatty_acids['Un'] >= 2)]) #Spécifiez plusieurs conditions (et)
print(df_fatty_acids[(df_fatty_acids['Cn'] >= 18) | (df_fatty_acids['Un'] >= 1)]) #Spécifiez plusieurs conditions (ou)

Lorsque vous spécifiez plusieurs conditions, les parenthèses () sont obligatoires pour chaque condition. N'oublie pas.

Ajouter des données

Vous pouvez spécifier une colonne spécifique avec DataFrame name ['column name'], mais si vous spécifiez un nom de colonne qui n'est pas dans le DataFrame, une nouvelle colonne sera créée. Vous pouvez également calculer facilement en fonction des données d'une autre colonne.

import pandas as pd


index_fatty_acids = ['FA 16:0', 'FA 16:1', 'FA 18:0', 'FA 18:1', 'FA 18:2', 'FA 18:3', 'FA 18:4', 'FA 20:0', 'FA 20:3', 'FA 20:4', 'FA 20:5']

numbers_carbon = pd.Series([16, 16, 18, 18, 18, 18, 18, 20, 20, 20, 20], index=index_fatty_acids)
numbers_unsaturation = pd.Series([0, 1, 0, 1, 2, 3, 4, 0, 3, 4, 5], index=index_fatty_acids)

df_fatty_acids = pd.DataFrame({'Cn': numbers_carbon, 'Un': numbers_unsaturation})

df_fatty_acids['C'] = df_fatty_acids['Cn']
df_fatty_acids['H'] = df_fatty_acids['Cn'] * 2 - df_fatty_acids['Un'] * 2
df_fatty_acids['O'] = 2

print(df_fatty_acids)

Dans l'exemple ci-dessus, le nombre d'atomes de carbone «C» et le nombre d'atomes d'hydrogène «H» de chaque espèce moléculaire d'acide gras sont calculés sur la base des valeurs des colonnes «Cn» et «Un». Si vous sortez df_fatty_acids, vous pouvez voir que de nouvelles colonnes C, H et ʻO` ont été ajoutées.

Calcul arithmétique

Ensuite, envisagez de trouver la masse exacte de chaque espèce moléculaire d'acide gras.

import pandas as pd


index_fatty_acids = ['FA 16:0', 'FA 16:1', 'FA 18:0', 'FA 18:1', 'FA 18:2', 'FA 18:3', 'FA 18:4', 'FA 20:0', 'FA 20:3', 'FA 20:4', 'FA 20:5']

numbers_carbon = pd.Series([16, 16, 18, 18, 18, 18, 18, 20, 20, 20, 20], index=index_fatty_acids)
numbers_unsaturation = pd.Series([0, 1, 0, 1, 2, 3, 4, 0, 3, 4, 5], index=index_fatty_acids)

df_fatty_acids = pd.DataFrame({'Cn': numbers_carbon, 'Un': numbers_unsaturation})

df_fatty_acids['C'] = df_fatty_acids['Cn']
df_fatty_acids['H'] = df_fatty_acids['Cn'] * 2 - df_fatty_acids['Un'] * 2
df_fatty_acids['O'] = 2

df_fatty_acids['Exact mass'] = pd.Series([0] * len(index_fatty_acids), index=index_fatty_acids) #Mettez 0 dans toutes les lignes pour le moment

exact_masses = pd.Series({'C': 12, 'H': 1.00783, 'O': 15.99491})

for atom in exact_masses.index:
    df_fatty_acids['Exact mass'] += exact_masses[atom] * df_fatty_acids[atom] #Calculer la masse de précision

print(df_fatty_acids)

Dans l'exemple ci-dessus, la masse précise de la molécule d'acide gras est calculée en ajoutant la masse de précision de chaque atome multipliée par le nombre d'atomes.

Concaténation de chaînes

Ensuite, trouvons la formule de composition.

import pandas as pd


index_fatty_acids = ['FA 16:0', 'FA 16:1', 'FA 18:0', 'FA 18:1', 'FA 18:2', 'FA 18:3', 'FA 18:4', 'FA 20:0', 'FA 20:3', 'FA 20:4', 'FA 20:5']

numbers_carbon = pd.Series([16, 16, 18, 18, 18, 18, 18, 20, 20, 20, 20], index=index_fatty_acids)
numbers_unsaturation = pd.Series([0, 1, 0, 1, 2, 3, 4, 0, 3, 4, 5], index=index_fatty_acids)

df_fatty_acids = pd.DataFrame({'Cn': numbers_carbon, 'Un': numbers_unsaturation})

df_fatty_acids['C'] = df_fatty_acids['Cn']
df_fatty_acids['H'] = df_fatty_acids['Cn'] * 2 - df_fatty_acids['Un'] * 2
df_fatty_acids['O'] = 2

df_fatty_acids['Molecular formula'] = pd.Series([''] * len(index_fatty_acids), index=index_fatty_acids) #Pour le moment, mettez des caractères vides sur toutes les lignes

exact_masses = pd.Series({'C': 12, 'H': 1.00783, 'O': 15.99491})

for atom in exact_masses.index:
    df_fatty_acids['Molecular formula'] += atom + df_fatty_acids[atom].astype(str) #Ecrire la formule de composition
    
print(df_fatty_acids)

Vous pouvez combiner le symbole de l'élément et le nombre d'atomes sous forme de chaîne de caractères, mais comme les données contenues dans «C», «H», «O» sont une valeur numérique, il est nécessaire de les convertir en chaîne de caractères avant de les combiner. Il y a. Par conséquent, dans l'exemple ci-dessus, en tant que ʻas type (str) `, les valeurs numériques sont converties en chaînes de caractères puis combinées.

Sortie vers un fichier externe

Ensuite, envisagez de sortir les données complètes sous forme de fichier externe.

import pandas as pd


index_fatty_acids = ['FA 16:0', 'FA 16:1', 'FA 18:0', 'FA 18:1', 'FA 18:2', 'FA 18:3', 'FA 18:4', 'FA 20:0', 'FA 20:3', 'FA 20:4', 'FA 20:5']

numbers_carbon = pd.Series([16, 16, 18, 18, 18, 18, 18, 20, 20, 20, 20], index=index_fatty_acids)
numbers_unsaturation = pd.Series([0, 1, 0, 1, 2, 3, 4, 0, 3, 4, 5], index=index_fatty_acids)

df_fatty_acids = pd.DataFrame({'Cn': numbers_carbon, 'Un': numbers_unsaturation})

df_fatty_acids['C'] = df_fatty_acids['Cn']
df_fatty_acids['H'] = df_fatty_acids['Cn'] * 2 - df_fatty_acids['Un'] * 2
df_fatty_acids['O'] = 2

df_fatty_acids['Exact mass'] = 0

exact_masses = pd.Series({'C': 12, 'H': 1.00783, 'O': 15.99491})

df_fatty_acids['Exact mass'] = exact_masses * df_fatty_acids #Masse de précision

for atom in exact_masses.index:
    df_fatty_acids['Molecular formula'] += atom + df_fatty_acids[atom].astype(str) #Formule de composition

df_fatty_acids.to_csv('fatty_acids.csv') #Sortie sous forme de fichier CSV
df_fatty_acids.to_csv('fatty_acids.txt', sep='\t') #Sortie sous forme de fichier texte délimité par des tabulations
df_fatty_acids.to_excel('fatty_acids.xlsx', sheet_name='fatty_acids') #Sortie sous forme de fichier Excel

Lire des fichiers externes

Inversement, pour lire un fichier externe, procédez comme suit:

import pandas as pd


df_csv = pd.read_csv('fatty_acids.csv', index_col=0) #Lire le fichier CSV
df_text = pd.read_csv('fatty_acids.txt', sep='\t', index_col=0) #Lire le fichier texte délimité par des tabulations
df_excel = pd.read_excel('fatty_acids.xlsx', index_col=0) #Lire le fichier Excel

print(df_csv)
print(df_text)
print(df_excel)

Pour lire uniquement les premières ou dernières lignes d'un DataFrame:

import pandas as pd


df_csv = pd.read_csv('fatty_acids.csv', index_col=0) #Lire le fichier CSV
df_text = pd.read_csv('fatty_acids.txt', sep='\t', index_col=0) #Lire le fichier texte délimité par des tabulations
df_excel = pd.read_excel('fatty_acids.xlsx', index_col=0) #Lire le fichier Excel

print(df_csv.head()) #Afficher les 5 premières lignes
print(df_csv.head(3)) #Afficher les 3 premières lignes
print(df_csv.tail()) #Afficher les 5 dernières lignes

«head» extrait les données du premier nombre de lignes spécifié et «tail» extrait les données du dernier nombre de lignes spécifié. Si vous ne spécifiez pas le nombre de lignes, 5 lignes sont affichées par défaut. La même chose est vraie pour «df_text» et «df_excel».

Comme mentionné ci-dessus, si vous lisez le fichier externe en tant que DataFrame et savez comment les données sont stockées, vous pouvez extraire des lignes et des colonnes spécifiques, ajouter de nouvelles colonnes et calculer, et vous avez terminé. Le flux de base de l'analyse des données consiste à produire un tableau.

Résumé

Ici, j'ai expliqué les pandas, en me concentrant sur les connaissances pratiques pouvant être utilisées en chimioinfomatique. Revoyons à nouveau les principaux points.

--Pandas peut gérer deux types de structures de données, Series et DataFrame.

Ensuite, Matplotlib est expliqué dans l'article suivant.

Apprendre Matplotlib avec Chemo Informatics

Documents de référence / liens

Quel est le langage de programmation Python? Peut-il être utilisé pour l'IA et l'apprentissage automatique?

Recommended Posts

Pandas apprenant avec la chimioinfomatique
Apprenez avec Chemo Informatics Matplotlib
Apprenez avec Chemo Informatics NumPy
Visualisez rapidement avec les pandas
Apprenez Python avec ChemTHEATER
Traitement des ensembles de données avec des pandas (1)
Échantillonnage bootstrap avec Pandas
Convertir 202003 en 2020-03 avec les pandas
Traitement des ensembles de données avec des pandas (2)
Fusionner les ensembles de données avec les pandas
Apprenez Zundokokiyoshi en utilisant LSTM
Apprentissage Scikit-Learn avec la chimioinfomatique
Visualisation des données avec les pandas
Manipulation des données avec les Pandas!
Mélangez les données avec les pandas
DCGAN avec TF Learn
Apprenez Pendulum-v0 avec DDPG
Charger json imbriqué avec des pandas
Apprenez librosa avec un tutoriel 1
Apprenez les orbites elliptiques avec Chainer
Apprenez de nouvelles données avec PaintsChainer
[Python] Changer de type avec les pandas
Standardisez par groupe avec les pandas
Traitement itératif Python appris avec ChemoInfomatics
Empêchez les omissions avec l'impression de pandas
Conseils de traitement des données avec Pandas
Extraire la valeur maximale avec les pandas.
Apprendre avec Causal ML Package Meta-Learner
[Analyse du cours de l'action] Apprenez les pandas avec la moyenne Nikkei (004: Changer les données lues en moyenne Nikkei)
[TensorFlow 2] Apprendre RNN avec perte CTC
Apprenons Deep SEA avec Selene
Pandas
Traçage de données polyvalent avec pandas + matplotlib
[Python] Joindre deux tables avec des pandas
Apprendre la catégorisation de documents avec la CLI spaCy
Créez dynamiquement de nouvelles trames de données avec des pandas
Extraire plusieurs colonnes spécifiques avec des pandas
1. Statistiques apprises avec Python 1-1. Statistiques de base (Pandas)
Analyse pratique avec Pandas + notebook Jupyter
Dessinez un graphique avec des pandas + XlsxWriter
Manipuler des chaînes avec un groupe pandas par
Bulk Insert Pandas DataFrame avec psycopg2
Je veux faire ○○ avec les Pandas
Créez une tranche d'âge avec les pandas
Grands Pandas Apprenons beaucoup
[Python] Formater quand to_csv avec des pandas
Génération de fonctionnalités avec pandas group par
Gère divers formats de date avec des pandas
J'obtiens une erreur avec les pandas d'importation.
Premiers pas avec python3 # 1 Apprenez les connaissances de base
Tracez l'indice boursier moyen Nikkei avec des pandas
Apprenez à coloriser les images monochromes avec Chainer
Conseils pour tracer plusieurs lignes avec des pandas
Apprendre Python! Comparaison avec Java (fonction de base)
Essayez de convertir en données ordonnées avec les pandas
Dessinez une étiquette d'axe hiérarchique avec matplotlib + pandas