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['col']=='valueForRow']
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 !!