M1 Bio-informatique - TP 1 : Manipulation de tableaux, tests statistiques Jean-Baptiste Lamy / Le module Python pandas permet de manipuler des tableaux de données (appelé t ci-dessous) : Charger un fichier CSV Enregistrer un fichier CSV Dimensions du tableau Transposer le tableau Tableau Obtenir les noms des colonnes Obtenir les noms des lignes Extraire une colonne Colonnes Extraire de la colonne x à la colonne y Extraire les colonnes x, y, z... Calculer la moyenne de chaque colonne Moyenne d’une colonne Médiane d’une colonne Écart-type d’une colonne Ajouter une colonne Supprimer une colonne Appliquer un logarithme sur une colonne Extraire une ligne Lignes Cases Extraire de la ligne x à la ligne y Extraire les lignes avec une valeur x dans une colonne Calculer la moyenne de chaque ligne Obtenir la valeur d’une case Changer la valeur d’une case t = pandas.read_table("fichier.csv ", sep = ",") t.to_csv("fichier.csv ", sep = ",") t.shape t.T Transposer = échanger les lignes et les colonnes. t.axes[1] t.axes[0] t.nom_de_colonne t["nom_de_colonne "] t.icol(numéro_de_colonne ) t.iloc[ : , x : y ] => crée un nouveau tableau t.iloc[ : , (x , y , z ,...)] t.mean() t.nom_de_colonne .mean() t.nom_de_colonne .median() t.nom_de_colonne .std() t["nouveau_nom_de_colonne "] = valeurs del t["nom_de_colonne "] t["nom_de_colonne "] = numpy.log(valeurs ) t.irow("nom_de_ligne ") t.irow(numéro_de_ligne ) t[x : y ] t[tableau.nom_de_colonne == x ] t[tableau.nom_de_colonne > x ] t.T.mean() t.nom_de_colonne ["nom_de_ligne "] t.nom_de_colonne [numéro_de_ligne ] t.nom_de_colonne ["nom_de_ligne "] = nouvelle_valeur t.nom_de_colonne [numéro_de_ligne ] = nouvelle_valeur Exercice 1 : Manipulation de tableaux Afin de tester la toxicité du maı̈s OGM MON863, 3 groupes de 10 rats ont été nourri avec ce maı̈s. Le maı̈s OGM représentait 11% de la ration alimentaire dans le premier groupe, 22% dans le second, et 33% dans le troisième. Un quatrième groupe témoin de 60 rats a été nourri avec du maı̈s non-OGM. Après 90 jours, on mesure le poids du foie et des reins de chaque rat. [données simulées d’après de Vendômois JS, Roullier F, Cellier D, Séralini GE. A Comparison of the Effects of Three GM Corn Varieties on Mammalian Health. Int J Biol Sci 2009 ; 5 :706-726. http ://www.biolsci.org/v05p0706.htm] 1. Lancer l’interpréteur Python et importer les modules Numpy, Pandas, Matplotlib.Pylab et Scipy.Stats : import numpy, pandas, matplotlib.pylab as pylab, scipy.stats 2. Le fichier ”ogm.csv” (disponible sur le campus virtuel) contient le tableau de données. Charger ce tableau en Python. 3. Combien y a-t-il de lignes dans le tableau ? de colonnes ? 4. Afficher les 10 premières lignes du tableau. 5. Calculer la moyenne et l’écart type du poids du rein sur l’ensemble des rats. 1 6. Extraire dans un nouveau tableau appelée “g0” les lignes du tableau correspondant au groupe témoin (c’est-à-dire les rats nourris avec 0% d’OGM). 7. Calculer la moyenne et l’écart type du poids du rein sur le groupe témoin. 8. Refaire les deux questions précédentes avec le groupe nourri avec 33% d’OGM. 9. Combien y a-t-il de rats dans le groupe témoin ? dans le groupe à 33% ? 10. Calculer dans une nouvelle colonne appelée “rapport” le rapport poids du foie / poids du rein pour chaque rat. Exercice 2 : Graphiques Le module Python matplotlib.pylab permet de tracer des graphiques : Histogramme Courbe Nuage de points Boı̂te à moustaches Camembert Affichage pylab.hist(x) pylab.plot(x, y) pylab.plot(x, y, "ro") Dans ”ro”, r est la couleur (r : rouge, b : bleu, g : vert, y : jaune,...) et o la forme (o : petit rond, + : croix). pylab.boxplot([x, y, z,...]) pylab.pie(x.value_counts(), labels = x.value_counts().axes[0]) pylab.show() Une fois le graphique terminé, il faut exécuter cette commande pour l’afficher (plusieurs graphiques peuvent être superposés en les traçant puis en demandant l’affichage à la fin). x, y et z sont des listes de valeurs (par exemple les colonnes d’un tableau de données). 1. Tracer un camembert représentant les quantités d’OGM. 2. Tracer une courbe représentant le poids du foie pour chaque rat (poids du foie = f(rats)). 3. Tracer un histogramme du poids du foie des rats. 4. Tracer un nuage de point avec le poids du rein des rats en X et le poids du foie en Y. 5. Extraire les groupes à 11 et 22% d’OGM. 6. Tracer un nuage de point avec le poids du rein des rats en X et le poids du foie en Y, avec des couleurs différentes pour chaque groupe (0% : bleu, 11% : vert, 22% : jaune, 33% : rouge ; astuce : on superposera plusieurs graphiques). 7. Tracer des boı̂tes à moustaches représentant le poids du foie en fonction de la quantité d’OGM consommés. 8. Tracer deux courbes (sur le même graphique) représentant le poids du rein chez les rats mâles et chez les rats femelles (une courbe par sexe). Exercice 3 : Tests statistiques Le module Python scipy.stats permet d’effectuer des tests statistiques pour comparer les moyennes de deux groupes : Gros échantillons (≥30) Petits échantillons (<30) Valeurs appariées Test T de Student scipy.stats.ttest_rel(g1, g2) Test de Wilcoxon scipy.stats.wilcoxon(g1, g2) Valeurs indépendantes Test T de Student scipy.stats.ttest_ind(g1, g2) Test U de Mann–Whitney scipy.stats.mannwhitneyu(g1, g2) g1 et g2 sont les deux groupes de valeurs (par exemple des listes ou des colonnes extraites d’un tableau de données). 1. Comparer le poids moyen des reins des rats du groupe sans OGM, avec celui des rats du groupe à 33%. 2. Comparer le poids moyen du foie des rats du groupe sans OGM, avec celui des rats du groupe à 33%. 3. Le poids du foie augmente-il avec la consommation de 33% d’OGM ou diminue-t-il ? 4. Le poids moyen des reins est-il significativement différents entre les rats mâles et femelles ? 2