Version def

parent 3717b82e
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Exemple de notes de laboratoire"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Aujourd'hui je dois vraiment me forcer à prendre de belles notes afin de rentre mes résultats intelligible et reproductible. C'est nécessaire pour la science ! Mon fichier exemple est stocké dans le document disponible ici :"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"/home/work/module2/exo4/050715_qPCR_data_aggregated.xlsx\n"
]
}
],
"source": [
"print(\"/home/work/module2/exo4/250715_qPCR_data_aggregated.xlsx\")"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fichiers dans le dossier courant :\n",
"['exercice_python_en.org', 'exercice_fr.ipynb', 'exercice_fr.Rmd', '250715_qPCR_data_aggregated.xlsx', 'exercice_python_fr.org', 'exercice_R_en.org', 'exercice_R_fr.org', 'exercice 2 partie 4.ipynb', 'exercice_en.Rmd', 'exercice_en.ipynb', '.ipynb_checkpoints']\n"
]
}
],
"source": [
"#Visualiser les fichier dans le même répertoire que ce notebook\n",
"import os\n",
"print(\"Fichiers dans le dossier courant :\")\n",
"print(os.listdir())"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Premières lignes du fichier :\n",
" Lot Sample Name Collecte Rep Target Name Ct Ct Mean\n",
"0 1 ESC 1 1 DUXCL 33.252235 33.609188\n",
"1 1 ESC 1 2 DUXCL 34.533466 33.609188\n",
"2 1 ESC 1 3 DUXCL 33.041870 33.609188\n",
"3 1 pEF1amCherryDUXClong 1 1 DUXCL 21.982199 22.071215\n",
"4 1 pEF1amCherryDUXClong 1 2 DUXCL 22.086342 22.071215\n"
]
}
],
"source": [
"#Importer le fichier et visualiser quelques lignes\n",
"import pandas as pd\n",
"\n",
"# Nom du fichier (doit être identique à celui dans le dossier)\n",
"nom_fichier = '250715_qPCR_data_aggregated.xlsx'\n",
"\n",
"# Lire le fichier Excel\n",
"try:\n",
" df = pd.read_excel(nom_fichier)\n",
" print(\"Premières lignes du fichier :\")\n",
" print(df.head()) # Affiche les 5 premières lignes\n",
"except Exception as e:\n",
" print(f\"Erreur : {e}. Vérifie que le nom du fichier est correct et qu'il est bien dans le dossier.\")\n"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"# Commençons les stats ! Importons les packages importants\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from math import *"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Et maintenant, connaissons le nombre moyen de répétitions"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Moyenne de répétitions (colonne 'Rep') : 1.96\n"
]
}
],
"source": [
"# colonne à analyser\n",
"colonne = 'Rep'\n",
"\n",
"# Calculer la moyenne (en ignorant l'en-tête automatiquement)\n",
"moyenne = df[colonne].mean()\n",
"\n",
"print(f\"Moyenne de répétitions (colonne '{colonne}') : {moyenne:.2f}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Je veux maintenant connaître l'écart type moyen entre de toute l'expérience (on filtre par sample)"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Écart type de 'Ct' par 'Sample Name' :\n",
"Sample Name\n",
"ESC 5.096469\n",
"pEF1amCherryDUXCcourt 5.420076\n",
"pEF1amCherryDUXClong 4.103212\n",
"pEF1artTAEGFPmCherryDUXCcourt 5.001891\n",
"Name: Ct, dtype: float64\n"
]
}
],
"source": [
"# Grouper par 'Sample Name' et calculer l'écart type de 'Ct' pour chaque groupe\n",
"ecart_type_par_groupe = df.groupby('Sample Name')['Ct'].std()\n",
"\n",
"print(\"\\nÉcart type de 'Ct' par 'Sample Name' :\")\n",
"print(ecart_type_par_groupe)\n"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Écart type moyen de 'Ct' pour tous les 'Sample Name' : 4.9054\n"
]
}
],
"source": [
"# Calculer l'écart type moyen global\n",
"ecart_type_moyen = ecart_type_par_groupe.mean()\n",
"\n",
"print(f\"\\nÉcart type moyen de 'Ct' pour tous les 'Sample Name' : {ecart_type_moyen:.4f}\")\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Je vais maintenant ploter l'écart type moyen (ordonnée) en fonction du sample (abscisse) en tracant avec une barre en pointillé l'écart type moyen en droite asymptotique"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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wOlXXRWcv489Bt///sDp118P224LDz4IP/3pwOm33QbTpsHvfgfXXTdw+sKFUFoKv/1t8En08MMwbhz88pdwzz0Dpy9eHPx75ZXw0ENrTsvLg0ceCb5/73vw17+uOb2kBO67L/j+7W/Ds8+uOX3qVLj99uD7V78a7MN422wDvw5/SNV1b+D0dNQ90HUv4boHsGr7j/OPS34EwO7nzyev6sM1ptfvvDuvfeNSAOacN4/shpXB9bKvHo30urceaW2DbGb5ZlbY9x04BHgtnTGIiIiIiKxLWptYmNmWQN+fUJnAne5++drmVxOLsWVT+GlmU6E6mTqqlyKjm66XqbMpXC9HZBMLd38HmJXOdYqIiIiIDIW6eRMRERERiaMEWUREREQkjhJkEREREZE4SpBFREREROIoQRYRERERiaMEWUREREQkjhJkEREREZE4SpBFREREROIoQRYRERERiaMEWUREREQkjhJkEREREZE4SpBFREREROIoQRYRERERiaMEWUREREQkjhJkEREREZE4SpBFREREROJkJjOTme3b993dnxq+cEREREREopVUggxcFv7rwAHDFIuIiIiISOSSSpDdff/hDkREREREZCQYUhtkM3t5LeOXpCYcEREREZFoDfUhvZmJI8zMgC1TE46IiIiISLSSfUjv1vBrdtz3PtOBf6UyKBERERGRqCT7kN5/1/LdgWeAe1MWkYiIiIhIhJJ9SO8yADN7zt3/NLwhiYiIiIhEJ9kmFnsCn3L3bw4y7UfAA+7+XJJlxYAlwIfufuRQghURkU3XyaeeTmV1TdRhjApTKsq585bfRB2GyKiVbBOLi4FfrmXa4nD6UUmW9RXgDaAoyflFRGQUqKyu4bwFd0Ydxqiw4LyTow5BZFRLtheLnYBH1zLtMWDXZAoxs6nAEcCNSa5XRERERCStkr2DXARkA22DTMsCCpMs5yrgwnXNb2bzgfkA06ZNo7KyMgigqIisrCzq6+sByM3Npbi4mBUrVgCQkZHBpEmTqKuro7OzE4CysjLa2tpoaWkBYPz48cRiMVauXAlAXl4e48ePp6qqCoBYLEZFRQW1tbV0dXUBUF5eTmtrK62trQBMmDABM6OhoQGAcePGEYvFsMbaYAMyYnjhRKx5JfT2AATDHauhsz0YHlcIDtbWHCyTnYdn52ItQZnEMvGCYqy5Hnp7g2WK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bU0ND/3hfo465tP9Sd9+BxzIxJISAI781DE8//dniGVm8spLL3HQ3p8AoK2tnbKy8kHLPvSIowDYfscdaW1tobCwMGz7lUvjqlU8//dn+MzxQXve8ooK9txnH15euoTDjjxq0JieeOwxXn/tnzx4/30ANDU28c7bb5OVnc0us3djs6lTAdhx1qw1ktU+K1asoKysDIDKykruvfdeFq/nj5hDDjmEF198kT333JOysjLmzJnT3x49UV973V122YX33nuPgoICHn74YY455hjeCo9VX7vz5uZmCgsL17luERER2fSlNUF295NSXui6kqVx49Y9vbQ0qTvGyYh/OCredddcTXl5BU+98BK9vb1MmVDwUXj5+Ru8vuNPOoWFd9/J7++9h2uuv6F/fGIMZoa7c+Ln5vHd712+3nJzcnKC5TIyyM7O6R+fkZFBd3f3oEnmumJyd370s6s44OBD1pj36aee7F8XQCwjRvcgzT7y8vL6H9p4+eWXefvtt5k5cyYAq1evZubMmbz99tsDlrv44ou5+OKLATj55JPZeuutKS0tZdWqVXR3d5OZmcny5cuZMmUK8NEfNACHH3445557bv+DWQAdHR3k5uauddtFRERk9FAb5BTZetuPUbViBS8tCX6Kb25upru7m6bGRiomTSYjI4Pf3Xn7oG1/AQoKCmkJn+BMZtpJ8z7Pr669BoCPbb9D//jFf/0rDStX0tbWxsMP/oHd5+zJvvsfwIP3/57a8CnkhpUr+eC99zZoO+fsvQ/3L7yXnp4e6mprefbpp/vvmg8W0wEHH8zNv76+/+n4t996s/+J62Rst912/QnwEUccQVVVFcuWLWPZsmWMGzdu0OS4p6en/+nXV199lVdffZVDDjkEM2P//fdn4cKFANxyyy186lOfAqCqqqo/+X/hhRfo7e2lJLwTX19fT1lZGVlZWUPbWSIiIrJJ2vTbIEcgsQ3y7rvvzo9+8UtuvO0OvnX+V2lvbyM3N4/fP/wnzjjrbE476Xj+8PuF7L3fXPLXctd4YkkJe8zZk7123YmDDvkkl/3wx+ucVl5RwTYf+xiHH3X0GuV8Ys+9OOfM03jnv//luBNOZOddgwc1L7r0Mo476jB6e3vJysrixz//BdO22GLI237kp45hyfPPse/uu2IG/3f5D6mYNAlg0JjmnX4m77/3HvvP2Q33oDuX2+65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\n",
"text/plain": [
"<Figure size 720x432 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Créer le graphique\n",
"plt.figure(figsize=(10, 6))\n",
"\n",
"# Tracer les écarts types par groupe (barres ou points)\n",
"ecart_type_par_groupe.plot(kind='bar', color='skyblue', edgecolor='black', alpha=0.7)\n",
"\n",
"# Ajouter la ligne pointillée pour l'écart type moyen\n",
"plt.axhline(y=ecart_type_moyen, color='red', linestyle='--', linewidth=1.5, label=f'Écart type moyen ({ecart_type_moyen:.3f})')\n",
"\n",
"# Personnaliser le graphique\n",
"plt.title(\"Écart type de 'Ct' par 'Sample Name'\", fontsize=14)\n",
"plt.xlabel(\"Sample Name\", fontsize=12)\n",
"plt.ylabel(\"Écart type de 'Ct'\", fontsize=12)\n",
"plt.legend(fontsize=10)\n",
"plt.grid(axis='y', linestyle='--', alpha=0.4)\n",
"\n",
"# Afficher le graphique\n",
"plt.tight_layout()\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
{
"cells": [],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment