La réputation de R n’est plus à faire. C’est un language incontournable surtout pour la visualisation de données. Mais il lui arrive d’être un petit peu lent. Particulièrement lors du traitement de gros ensembles de données. Si vous n’avez pas besoin de générer de graphes sensationels ou que vous n’avez pas le temps d’attendre, il existe une alternative en python pour rapidement manipuler des données.
Le module pandas (Python Data Analysis Library) offre un moyen d’aisément manipuler des données directement en python.
J’ai récemment eu à travailler avec un imposant fichier d’expressions géniques (21024 genes x 3081 échantillons) provenant de l’atlas TCGA (The Cancer Genome Atlas).
Une transformation log10 (1000* RPKM +1) avait été appliquée aux RPKM de mon fichier et je voulais retrouver les valeurs de RPKM non transformées (brutes). Comme j’étais pressée, j’ai décidé d’utiliser pandas au lieu de R.
Pandas définit deux structures de données principales : Serie et Dataframe. La Serie se compare aux vecteurs de R tandis que le Dataframe se compare (aucune surprise ici!) aux dataframes. Le module a plusieurs fonctions pour indexer et manipuler les structures de données en plus de fournir des fonctions pour nous simplifier la vie. On peut, par exemple, créer un dataframe directement à partir d’un dictionnaire.
J’ai énuméré quelques fonctions de base implémentées dans pandas et leur équivalent en R :
pandas | R | Description |
---|---|---|
df.head() |
head(df) |
Afficher les premières lignes |
df.tail() |
tail(df) |
Afficher les dernières lignes |
df.describe() |
summary(df) |
Afficher quelques statistiques |
df.shape() |
dim(df) |
Obtenir les dimensions |
df |
df[df$col=='valueForRow',] |
Extraire une rangée donnée |
df.ix[0:2,1] |
df[0:2,1] |
Obtenir un sous-ensemble des données |
df.index |
rownames(df) |
Obtenir le nom des rangées |
df.columns |
colnames(df) |
Obtenir le nom des colonnes |
Pour mon problème de RPKM transformés, voici ce que j'ai fait:
import pandas as pd
df = pd.read_csv('TCGA.txt', sep='\t', dtype='object', header=0)
raw = (10**df[range(1,len(df.columns))].astype('float64')-1)/1000
raw_col = raw.columns
raw['Gene'] = df['Gene']
raw = raw[['Gene'] + list(raw_col)]
raw.to_csv('TCGA.raw.txt', sep='\t')
Sur mon ordinateur, 22.6 secondes ont été nécessaires pour lire les données, 14.6 secondes pour la transformation et 45.1 secondes pour l'écriture du fichier résultant.
Plus d'informations sont disponibles dans la documentation de pandas . Amusez-vous bien !!
Laisser un commentaire