{"id":346,"date":"2014-04-17T11:40:43","date_gmt":"2014-04-17T15:40:43","guid":{"rendered":"http:\/\/www.bioinfo.iric.ca\/?p=346"},"modified":"2017-04-29T17:24:31","modified_gmt":"2017-04-29T21:24:31","slug":"python-et-pandas","status":"publish","type":"post","link":"https:\/\/bioinfo.iric.ca\/fr\/python-et-pandas\/","title":{"rendered":"python et pandas"},"content":{"rendered":"<p>La r\u00e9putation de R n&rsquo;est plus \u00e0 faire.  C&rsquo;est un language incontournable surtout pour la visualisation de donn\u00e9es.  Mais il lui arrive d&rsquo;\u00eatre un petit peu lent.  Particuli\u00e8rement lors du traitement de gros ensembles de donn\u00e9es.  Si vous n&rsquo;avez pas besoin de g\u00e9n\u00e9rer de graphes sensationels ou que vous n&rsquo;avez pas le temps d&rsquo;attendre, il existe une alternative en python pour rapidement manipuler des donn\u00e9es.<\/p>\n<p>Le module <a href=\"http:\/\/pandas.pydata.org\/\" target=\"_blank\"> pandas<\/a> (<em>Python Data Analysis Library<\/em>) offre un moyen d&rsquo;ais\u00e9ment manipuler des donn\u00e9es directement en python.<\/p>\n<p>J&rsquo;ai r\u00e9cemment eu \u00e0 travailler avec un imposant fichier d&rsquo;expressions g\u00e9niques (21024 genes x 3081 \u00e9chantillons) provenant de l&rsquo;atlas <a href='http:\/\/cancergenome.nih.gov' target='_blank'>TCGA (The Cancer Genome Atlas)<\/a>.<br \/>\nUne transformation log10 (1000* RPKM +1) avait \u00e9t\u00e9 appliqu\u00e9e aux RPKM de mon fichier et je voulais retrouver les valeurs de RPKM non transform\u00e9es (brutes).  Comme j&rsquo;\u00e9tais press\u00e9e, j&rsquo;ai d\u00e9cid\u00e9 d&rsquo;utiliser pandas au lieu de R.  <\/p>\n<p>Pandas d\u00e9finit deux structures de donn\u00e9es principales :  <em>Serie<\/em> et <em>Dataframe<\/em>.  La <em>Serie<\/em> se compare aux vecteurs de R tandis que le <em>Dataframe<\/em> se compare (aucune surprise ici!) aux dataframes. Le module a plusieurs fonctions pour indexer et manipuler les structures de donn\u00e9es en plus de fournir des fonctions pour nous simplifier la vie.  On peut, par exemple, cr\u00e9er un <em>dataframe<\/em> directement \u00e0 partir d&rsquo;un dictionnaire.<\/p>\n<p>J&rsquo;ai \u00e9num\u00e9r\u00e9 quelques fonctions de base impl\u00e9ment\u00e9es dans pandas et leur \u00e9quivalent en R : <\/p>\n<div style='font-size:12px'>\n<table style='text-align:left;' >\n<thead>\n<tr>\n<th> pandas<\/th>\n<th> R<\/th>\n<th> Description <\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code> df.head() <\/code><\/td>\n<td><code> head(df) <\/code><\/td>\n<td> Afficher les premi\u00e8res lignes <\/td>\n<\/tr>\n<tr>\n<td><code> df.tail() <\/code><\/td>\n<td><code> tail(df) <\/code><\/td>\n<td> Afficher les derni\u00e8res lignes <\/td>\n<\/tr>\n<tr>\n<td><code> df.describe() <\/code><\/td>\n<td><code> summary(df) <\/code><\/td>\n<td> Afficher quelques statistiques <\/td>\n<\/tr>\n<tr>\n<td><code> df.shape() <\/code><\/td>\n<td><code> dim(df) <\/code><\/td>\n<td> Obtenir les dimensions <\/td>\n<\/tr>\n<tr>\n<td><code> df<div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-1 hundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-overflow:visible;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-0 fusion_builder_column_1_1 1_1 fusion-one-full fusion-column-first fusion-column-last fusion-column-no-min-height\" style=\"--awb-bg-size:cover;--awb-margin-bottom:0px;\"><div class=\"fusion-column-wrapper fusion-flex-column-wrapper-legacy\">[df['col']=='valueForRow'] <\/td>\n<td><code> df[df$col=='valueForRow',]<\/code> <\/td>\n<td> Extraire une rang\u00e9e donn\u00e9e <\/td>\n<\/tr>\n<tr>\n<td><code> df.ix[0:2,1] <\/td>\n<td><code> df[0:2,1] <\/code><\/td>\n<td> Obtenir un sous-ensemble des donn\u00e9es <\/td>\n<\/tr>\n<tr>\n<td><code> df.index <\/td>\n<td><code> rownames(df) <\/code><\/td>\n<td> Obtenir le nom des rang\u00e9es <\/td>\n<\/tr>\n<tr>\n<td><code> df.columns <\/td>\n<td><code> colnames(df) <\/code><\/td>\n<td> Obtenir le nom des colonnes <\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p><div><\/div>\n<p>Pour mon probl\u00e8me de RPKM transform\u00e9s, voici ce que j'ai fait: <\/p>\n<div class=\"python\">\n<pre><code>\r\nimport pandas as pd  \r\n\r\ndf = pd.read_csv('TCGA.txt', sep='\\t', dtype='object', header=0)\r\n\r\nraw = (10**df[range(1,len(df.columns))].astype('float64')-1)\/1000\r\n\r\nraw_col = raw.columns\r\nraw['Gene'] = df['Gene']\r\nraw = raw[['Gene'] + list(raw_col)]\r\n\r\nraw.to_csv('TCGA.raw.txt', sep='\\t')\r\n\r\n<\/code><\/pre>\n<\/div>\n<p>Sur mon ordinateur, 22.6 secondes ont \u00e9t\u00e9 n\u00e9cessaires pour lire les donn\u00e9es, 14.6 secondes pour la transformation et 45.1 secondes pour l'\u00e9criture du fichier r\u00e9sultant.<\/p>\n<p>Plus d'informations sont disponibles dans la <a href='http:\/\/pandas.pydata.org\/pandas-docs\/stable\/' target='_blank'> documentation de pandas <\/a>.  Amusez-vous bien !! <div class=\"fusion-clearfix\"><\/div><\/div><\/div><\/div><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>La r\u00e9putation de R n&rsquo;est plus \u00e0 faire. C&rsquo;est un language incontournable surtout pour la visualisation de donn\u00e9es. Mais il lui arrive d&rsquo;\u00eatre un petit peu lent. Particuli\u00e8rement lors du traitement de gros ensembles de donn\u00e9es. Si vous n&rsquo;avez pas besoin de g\u00e9n\u00e9rer de graphes sensationels ou que vous n&rsquo;avez pas le temps d&rsquo;attendre, il existe une alternative en python pour rapidement manipuler des donn\u00e9es. Le module pandas (Python Data Analysis Library) offre un moyen d&rsquo;ais\u00e9ment manipuler des donn\u00e9es directement <a href=\"https:\/\/bioinfo.iric.ca\/fr\/python-et-pandas\/\"> [&#8230;]<\/a><\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[69,26],"tags":[15,14],"class_list":["post-346","post","type-post","status-publish","format-standard","hentry","category-analyse-de-donnees","category-langage-python","tag-dataframe","tag-pandas"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/posts\/346","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/comments?post=346"}],"version-history":[{"count":8,"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/posts\/346\/revisions"}],"predecessor-version":[{"id":2758,"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/posts\/346\/revisions\/2758"}],"wp:attachment":[{"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/media?parent=346"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/categories?post=346"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/tags?post=346"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}