PageRenderTime 59ms CodeModel.GetById 29ms RepoModel.GetById 0ms app.codeStats 0ms

/notebooks/pandas/pd02-pandas-paris.ipynb

https://gitlab.com/gvallverdu/cours-python
Jupyter | 392 lines | 392 code | 0 blank | 0 comment | 0 complexity | 1eaeb7eb0b84374c77e7b477f6acc18d MD5 | raw file
  1. {
  2. "cells": [
  3. {
  4. "cell_type": "markdown",
  5. "metadata": {},
  6. "source": [
  7. "<div style=\"background-color:#96CDF2; padding:10px;color:#3B3C3E\">\n",
  8. "Licence <a rel=\"license\" href=\"http://creativecommons.org/licenses/by-sa/4.0/\">CC BY-SA</a>\n",
  9. "<a rel=\"license\" href=\"http://creativecommons.org/licenses/by-sa/4.0/\"><img alt=\"Licence Creative Commons\" style=\"border-width:0; float:right;\" src=\"https://i.creativecommons.org/l/by-sa/4.0/88x31.png\" /></a><br />\n",
  10. "Germain Salvato Vallverdu - <tt>germain.vallverdu@univ-pau.fr</tt> <br />\n",
  11. "<i><a href=\"http://iprem.univ-pau.fr/fr/index.html\">IPREM</a> / <a href=\"http://www.univ-pau.fr/\">Univ Pau &amp; Pays Adour</a></i>\n",
  12. "</div>"
  13. ]
  14. },
  15. {
  16. "cell_type": "markdown",
  17. "metadata": {},
  18. "source": [
  19. "## Taux de CO2, place de la Nation, Paris\n",
  20. "\n",
  21. "Dans cette partie vous allez représenter par mois ou par jour le taux de CO2, place de la nation à Paris. Les données utilisées sont téléchargeables sur le site [ParisDATA](https://opendata.paris.fr). \n",
  22. "\n",
  23. "https://opendata.paris.fr/explore/dataset/place-de-la-nation-co2/"
  24. ]
  25. },
  26. {
  27. "cell_type": "code",
  28. "execution_count": null,
  29. "metadata": {
  30. "collapsed": true
  31. },
  32. "outputs": [],
  33. "source": [
  34. "%matplotlib inline\n",
  35. "import pandas as pd\n",
  36. "import numpy as np\n",
  37. "import seaborn as sns\n",
  38. "import calendar\n",
  39. "sns.set(style=\"whitegrid\", font_scale=1.5)"
  40. ]
  41. },
  42. {
  43. "cell_type": "markdown",
  44. "metadata": {},
  45. "source": [
  46. "### Lecture du fichier\n",
  47. "\n",
  48. "<div class=\"alert alert-success\" style=\"margin-top:20px\">\n",
  49. " <b>Exercice :</b> Lire le fichier <code>place-de-la-nation-co2.csv</code> avec pandas.\n",
  50. "</div>\n",
  51. "\n",
  52. "**Aide/conseils :***\n",
  53. "\n",
  54. "* Vérifiez le séparateur\n",
  55. "* Choisir comme `index` la colonne `Timestamp`\n",
  56. "* La colonne `Timestamp` contient des dates\n",
  57. "* Les valeurs nulles `\"0.0\"` sont des valeurs manquantes. Regarder `na_values` dans la documentation."
  58. ]
  59. },
  60. {
  61. "cell_type": "code",
  62. "execution_count": null,
  63. "metadata": {
  64. "scrolled": true
  65. },
  66. "outputs": [],
  67. "source": []
  68. },
  69. {
  70. "cell_type": "markdown",
  71. "metadata": {},
  72. "source": [
  73. "### Taux de CO2 moyen par mois\n",
  74. "\n",
  75. "L'objectif de cette partie est de faire un histogramme du taux de CO2 moyen par mois.\n",
  76. "\n",
  77. "<div class=\"alert alert-success\" style=\"margin-top:20px;\">\n",
  78. "\n",
  79. "<b>Faire les opérations suivantes :</b>\n",
  80. " <ul>\n",
  81. " <li>Ajouter une colonne avec le mois</li>\n",
  82. " <li>Extraire un tableau en faisant la moyenne du taux de CO2 par mois (`groupby`).</li>\n",
  83. " <li>Représenter les données sous formes d'un histogramme.</li>\n",
  84. " </ul>\n",
  85. "</div>\n",
  86. "\n",
  87. "**Aide :**\n",
  88. "\n",
  89. "* df.index.month donne numero du mois. Essayez avec hour, day, ...\n",
  90. "* La moyenne se calcule avec `np.mean`"
  91. ]
  92. },
  93. {
  94. "cell_type": "code",
  95. "execution_count": null,
  96. "metadata": {
  97. "scrolled": true
  98. },
  99. "outputs": [],
  100. "source": []
  101. },
  102. {
  103. "cell_type": "code",
  104. "execution_count": null,
  105. "metadata": {
  106. "collapsed": true
  107. },
  108. "outputs": [],
  109. "source": []
  110. },
  111. {
  112. "cell_type": "code",
  113. "execution_count": null,
  114. "metadata": {
  115. "collapsed": true
  116. },
  117. "outputs": [],
  118. "source": []
  119. },
  120. {
  121. "cell_type": "code",
  122. "execution_count": null,
  123. "metadata": {
  124. "collapsed": true
  125. },
  126. "outputs": [],
  127. "source": []
  128. },
  129. {
  130. "cell_type": "markdown",
  131. "metadata": {},
  132. "source": [
  133. "On va afficher le nombre de mesure par mois :"
  134. ]
  135. },
  136. {
  137. "cell_type": "code",
  138. "execution_count": null,
  139. "metadata": {
  140. "scrolled": true
  141. },
  142. "outputs": [],
  143. "source": []
  144. },
  145. {
  146. "cell_type": "markdown",
  147. "metadata": {},
  148. "source": [
  149. "On voit que les données sont très hétérogènes. Il y a beaucoup plus de valeur sur les mois de Mai et Juin.\n",
  150. "\n",
  151. "Faisons maintenant la moyenne par mois."
  152. ]
  153. },
  154. {
  155. "cell_type": "code",
  156. "execution_count": null,
  157. "metadata": {},
  158. "outputs": [],
  159. "source": []
  160. },
  161. {
  162. "cell_type": "markdown",
  163. "metadata": {},
  164. "source": [
  165. "On va utiliser module calendar pour affecter comme index le nom des mois.\n",
  166. "\n",
  167. "```py\n",
  168. "In [1]: calendar.month_name[1:]\n",
  169. "```\n",
  170. "\n",
  171. " Out[1]: ['January',\n",
  172. " 'February',\n",
  173. " 'March',\n",
  174. " 'April',\n",
  175. " 'May',\n",
  176. " 'June',\n",
  177. " 'July',\n",
  178. " 'August',\n",
  179. " 'September',\n",
  180. " 'October',\n",
  181. " 'November',\n",
  182. " 'December']\n",
  183. "\n",
  184. "Il suffit de donner cette liste comme index :"
  185. ]
  186. },
  187. {
  188. "cell_type": "code",
  189. "execution_count": null,
  190. "metadata": {},
  191. "outputs": [],
  192. "source": []
  193. },
  194. {
  195. "cell_type": "markdown",
  196. "metadata": {},
  197. "source": [
  198. "##### Remarque :\n",
  199. "\n",
  200. "Pour information, on peut utiliser la fonction `apply`, en association avec le module calendar, pour ajouter une colonne non pas avec le numéro du mois mais avec son nom. L'avantage de travailler avec le numéro est que l'on peut trier les mois ou les classer de janvier à décembre.\n",
  201. "\n",
  202. "On utilise `apply` avec :\n",
  203. "\n",
  204. "* axis=1 pour parcourir les lignes\n",
  205. "* row désigne une ligne\n",
  206. "* row.name est le \"nom\" de la ligne c'est à dire l'index"
  207. ]
  208. },
  209. {
  210. "cell_type": "code",
  211. "execution_count": null,
  212. "metadata": {},
  213. "outputs": [],
  214. "source": [
  215. "df_co2[\"nom_mois\"] = df_co2.apply(lambda row: calendar.month_name[row.name.month], axis=1)\n",
  216. "df_co2.head()"
  217. ]
  218. },
  219. {
  220. "cell_type": "markdown",
  221. "metadata": {},
  222. "source": [
  223. "### Construction du graphique\n",
  224. "\n",
  225. "On construit un diagramme en barre avec le taux moyen de CO2 pour chaque mois."
  226. ]
  227. },
  228. {
  229. "cell_type": "code",
  230. "execution_count": null,
  231. "metadata": {},
  232. "outputs": [],
  233. "source": []
  234. },
  235. {
  236. "cell_type": "code",
  237. "execution_count": null,
  238. "metadata": {
  239. "collapsed": true
  240. },
  241. "outputs": [],
  242. "source": []
  243. },
  244. {
  245. "cell_type": "markdown",
  246. "metadata": {},
  247. "source": [
  248. "Il semble que le taux de CO2 soit un peu plus faible durant les mois de janvier et février. Cependant, les données étaient assez pauvres ces deux mois.\n",
  249. "\n",
  250. "### Taux de CO2 médian les jours de la semaine\n",
  251. "\n",
  252. "L'objectif de cette partie est de faire un histogramme du taux de CO2 median suivant les jours de la semaine durant le mois de Juin.\n",
  253. "\n",
  254. "<div class=\"alert alert-success\" style=\"margin-top:20px;\">\n",
  255. "\n",
  256. "<b>Faire les opérations suivantes :</b>\n",
  257. " <ul>\n",
  258. " <li>Ajouter une colonne avec le jour de la semaine : <code>weekday</code></li>\n",
  259. " <li>Extraire un tableau en faisant calculant la médianne du taux de CO2 pour chaque jour en ayant tout d'abord sélectionné le mois de juin.</li>\n",
  260. " <li>Représenter les données sous formes d'histogrammes.</li>\n",
  261. " </ul>\n",
  262. "</div>\n",
  263. "\n",
  264. "**Aide :**\n",
  265. "\n",
  266. "* Vous pouvez utiliser le module calendar pour récupérer le nom des mois ou des jours.\n",
  267. "* La médianne se calcule avec `np.median`\n"
  268. ]
  269. },
  270. {
  271. "cell_type": "code",
  272. "execution_count": null,
  273. "metadata": {},
  274. "outputs": [],
  275. "source": []
  276. },
  277. {
  278. "cell_type": "code",
  279. "execution_count": null,
  280. "metadata": {
  281. "collapsed": true
  282. },
  283. "outputs": [],
  284. "source": []
  285. },
  286. {
  287. "cell_type": "code",
  288. "execution_count": null,
  289. "metadata": {
  290. "collapsed": true
  291. },
  292. "outputs": [],
  293. "source": []
  294. },
  295. {
  296. "cell_type": "markdown",
  297. "metadata": {},
  298. "source": [
  299. "La partie la plus simple est la construction du graphique :"
  300. ]
  301. },
  302. {
  303. "cell_type": "code",
  304. "execution_count": null,
  305. "metadata": {},
  306. "outputs": [],
  307. "source": []
  308. },
  309. {
  310. "cell_type": "markdown",
  311. "metadata": {},
  312. "source": [
  313. "Le taux de CO2 semble plus important le mercredi, mais la variation est-elle significative ?"
  314. ]
  315. },
  316. {
  317. "cell_type": "markdown",
  318. "metadata": {},
  319. "source": [
  320. "## Température, place de la Nation, Paris\n",
  321. "\n",
  322. "Reprennons ce que nous avons fait précédemment mais concernant maintenant la température moyenne.\n",
  323. "\n",
  324. "https://opendata.paris.fr/explore/dataset/place-de-la-nation-temperature/\n",
  325. "\n",
  326. "### Lecture du fichier csv\n",
  327. "\n",
  328. "<div class=\"alert alert-success\" style=\"margin-top:20px\">\n",
  329. " <b>Exercice :</b> Lire le fichier <code>place-de-la-nation-temperature.csv</code> avec pandas.\n",
  330. "</div>\n"
  331. ]
  332. },
  333. {
  334. "cell_type": "code",
  335. "execution_count": null,
  336. "metadata": {
  337. "scrolled": true
  338. },
  339. "outputs": [],
  340. "source": []
  341. },
  342. {
  343. "cell_type": "markdown",
  344. "metadata": {},
  345. "source": [
  346. "### Température par mois\n",
  347. "\n",
  348. "Construire un diagramme en barre de la température moyenne par mois.\n",
  349. "\n",
  350. "<div class=\"alert alert-info\" style=\"margin-top:20px\">\n",
  351. " <b>Challenge</b> Vous pouvez le faire en une ligne si vous affichez le numéro du mois, trois avec le nom du jour.\n",
  352. "</div>\n"
  353. ]
  354. },
  355. {
  356. "cell_type": "code",
  357. "execution_count": null,
  358. "metadata": {},
  359. "outputs": [],
  360. "source": []
  361. },
  362. {
  363. "cell_type": "code",
  364. "execution_count": null,
  365. "metadata": {},
  366. "outputs": [],
  367. "source": []
  368. }
  369. ],
  370. "metadata": {
  371. "anaconda-cloud": {},
  372. "kernelspec": {
  373. "display_name": "Python 3",
  374. "language": "python",
  375. "name": "python3"
  376. },
  377. "language_info": {
  378. "codemirror_mode": {
  379. "name": "ipython",
  380. "version": 3
  381. },
  382. "file_extension": ".py",
  383. "mimetype": "text/x-python",
  384. "name": "python",
  385. "nbconvert_exporter": "python",
  386. "pygments_lexer": "ipython3",
  387. "version": "3.6.1"
  388. }
  389. },
  390. "nbformat": 4,
  391. "nbformat_minor": 1
  392. }