Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révisionLes deux révisions suivantes |
teaching:progappchim:pandas [2019/03/06 13:47] – villersd | teaching:progappchim:pandas [2022/03/26 01:51] – villersd |
---|
====== Pandas ====== | ====== Pandas ====== |
Module pour l'analyse de données, pouvant se substituer à l'utilisation d'un tableur. | Module pour l'analyse de données, pouvant se substituer à l'utilisation d'un tableur. Une différence fondamentale de la librairie pandas avec NumPy, c'est que les tableaux NumPy (NumPy arrays) ont le même type (dtype) pour le tableau entier, tandis que les tableaux pandas (pandas DataFrames) sont caractérisés par un type unique (dtype) par colonne. |
| |
===== Installation ===== | ===== Installation ===== |
===== Documentation ===== | ===== Documentation ===== |
* [[http://pandas.pydata.org/pandas-docs/stable/index.html|Documentation officielle]] | * [[http://pandas.pydata.org/pandas-docs/stable/index.html|Documentation officielle]] |
| * [[http://pandas.pydata.org/pandas-docs/stable/10min.html|10 minutes to pandas]] |
| * [[http://pandas.pydata.org/pandas-docs/version/0.20/cookbook.html|cookbook]] |
| * [[http://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html|Visualisation]] |
| * [[https://www.datacamp.com/community/blog/python-pandas-cheat-sheet|Pandas Cheat Sheet for Data Science in Python]] |
| |
| ===== Applications, exemples ===== |
| |
| ==== Préambule : variable aléatoire et distributions ==== |
| |
| De nombreuses grandeurs mesurées suivent une loi de distribution normale pour leur probabilité : //cf.// [[wp>fr:Loi_normale|Loi normale]] |
| |
| Voir aussi les documents de statistique élémentaire (niveau licence, France) sur le site [[http://wikistat.fr/|wikistat.fr]] |
| |
| * **Variable aléatoire** : une variable aléatoire $X$ est définie sur l'espace des observables (espace des événements possibles). À chaque valeur possible $x$ correspond une probabilité $P(x)$ que $X$ soit égale à $x$ |
| * Variable aléatoire discrète : si $x_1, x_2, x_3, ...$ constitue l'ensemble discret des valeurs possibles de $X$, les $P(x_i)$ forment la **distribution de probabilité** de la variable aléatoire $X$ |
| * Variable aléatoire continue : si $x$ peut varier continûment, $P(x)$ est la densité de probabilité que la variable prenne une valeur comprise entre $x$ et $x+dx$. L'unité de $P(x)$ est donc en inverse de celle de l'espace des $x$ et seul $P(x) dx$ a la dimension d'une probabilité (nombre) : $P(x) dx = P(x \le X < x+dx)$ |
| * Positivité : |
| * $P(x_i) \ge 0$ pour tout $x_i$ (variable aléatoire discrète) |
| * $P(x) \ge 0$ pour tout $x$ (variable aléatoire continue) |
| * Normalisation : |
| * $\sum_{x_i} P(x_i) =1$ (variable aléatoire discrète) |
| * $\int_{\Omega} P(x) dx = 1$ (variable aléatoire continue) |
| * Toute l'information sur une expérience est contenue dans la distribution $P(x)$} |
| * Une description **équivalente** est donnée par l'ensemble de toutes les grandeurs caractéristiques appelées {\bf moments de la distribution} : |
| * $<X^n> = \sum_i x_i^n P(x_i)$ (variable aléatoire discrète, avec n fini) |
| * $<X^n> = \int_{\Omega} x^n P(x) dx$ (variable aléatoire continue, avec n infini) |
| * Une description **simplifiée** est obtenue en ne tenant compte que de quelques plus petites valeurs de n : |
| * Premier moment: moyenne $<X>$ (ou [[http://fr.wikipedia.org/wiki/Esp%C3%A9rance_math%C3%A9matique|espérance mathématique]]) |
| * Second moment: largeur de la distribution ([[http://fr.wikipedia.org/wiki/Variance_%28statistiques_et_probabilit%C3%A9s%29|variance]] $\sigma^2$) |
| * Troisième moment : asymétrie ([[http://fr.wikipedia.org/wiki/Skewness|skewness]]) |
| * Quatrième moment : aplatissement ([[http://fr.wikipedia.org/wiki/Kurtosis|kurtosis]]) |
| * ... |
| * Les deux premiers moments |
| * **Valeur moyenne ou espérance** |
| * $<X> = \sum_i x_i \ P(x_i)$ ou $<X> = \int_{{\Omega}} x \ P(x) dx$ avec ${\Omega}$ le volume de l'espace des phases/observables |
| * **Variance** |
| * La variance $Var(X)$ ou $\sigma^2$ caractérise la largeur de la distribution (ou l'écart à la moyenne) : $\sigma^2 = <(X - <X>)^2> = <X^2> - <X>^2$. La racine carrée est l'écart type, $\sigma$. |
| |
| ==== Statistiques sur les dimensions des humains (body dimensions) ==== |
| |
| Programme basé sur [[http://jse.amstat.org/v11n2/datasets.heinz.html|Exploring Relationships in Body Dimensions]]. |
| |
| Extensions : |
| * Tester et utiliser en mode [[jupyter|"Jupyter"]] |
| * si vous n'y arrivez pas, vous pouvez utiliser ce fichier : {{:teaching:progappchim:body_dimensions_01.ipynb}} |
| * créer des régressions |
| * autres représentations |
| * différentiation suivant le genre, l'âge |
| * utiliser d'autres fonctions, comme nsmallest() et nlargest(), value_counts() (se baser sur la documentation officielle) |
| * ... |
| |
| <code python jse-dataset-body-dimensions-read-10.py> |
| #!/usr/bin/env python3 |
| # -*- coding: utf-8 -*- |
| """ |
| Created on Tue Mar 5 04:13:51 2019 |
| Statistics on Body dimensions : |
| http://jse.amstat.org/v11n2/datasets.heinz.html |
| |
| without requests lib, using pandas.read_csv |
| |
| @author: Didier Villers |
| """ |
| import matplotlib.pyplot as plt |
| import numpy as np |
| import pandas as pd |
| |
| # using this VARIABLE DESCRIPTIONS with PEP 8 Python style : |
| names = [ |
| 'Biacromial diameter', |
| 'Biiliac diameter', |
| 'Bitrochanteric diameter', |
| 'Chest depth', |
| 'Chest diameter', |
| 'Elbow diameter', |
| 'Wrist diameter', |
| 'Knee diameter', |
| 'Ankle diameter', |
| 'Shoulder girth', |
| 'Chest girth', |
| 'Waist girth', |
| 'Navel girth', |
| 'Hip girth', |
| 'Thigh girth', |
| 'Bicep girth', |
| 'Forearm girth', |
| 'Knee girth', |
| 'Calf maximum girth', |
| 'Ankle minimum girth', |
| 'Wrist minimum girth', |
| 'Age', |
| 'Weight', |
| 'Height', |
| 'Gender', |
| ] |
| # using Pandas column names without white spaces |
| names = [name.replace(' ', '_') for name in names] |
| print(names) |
| |
| namesfr = [ |
| 'Largeur des épaules', |
| 'Largeur des hanches', |
| 'Largeur entre têtes de fémur', |
| 'Epaisseur du thorax', |
| 'Largeur du thorax', |
| 'Largeur du coude', |
| 'Largeur du poignet', |
| 'Largeur du genou', |
| 'Largeur de la cheville', |
| 'Tour d’épaules', |
| 'Tour de poitrine', |
| 'Tour de taille', |
| 'Tour au niveau du nombril', |
| 'Tour de hanches', |
| 'Tour de cuisse', |
| 'Tour du biceps', |
| 'Tour de l’avant-bras', |
| 'Tour de genou', |
| 'Plus grande circonférence du mollet', |
| 'Plus petite circonférence de la cheville', |
| 'Plus petite circonférence du poignet', |
| 'Âge', |
| 'Poids', |
| 'Taille', |
| 'Genre', |
| ] |
| |
| dict_names_fr = dict(zip(names, namesfr)) |
| print(dict_names_fr) |
| |
| file_url = "http://linus.umons.ac.be/body.dat.txt" # file copy |
| #file_url = "http://jse.amstat.org/datasets/body.dat.txt" |
| # using read_csv |
| # https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html |
| # https://www.datacamp.com/community/tutorials/pandas-read-csv |
| |
| df = pd.read_csv(file_url, header=None, names=names, delimiter=' | ', engine='python', index_col=False) |
| # |
| print(df) |
| |
| # pandas misc |
| # https://stackoverflow.com/questions/15315452/selecting-with-complex-criteria-from-pandas-dataframe |
| # |
| print(df.columns) |
| print(df.Age) |
| print(df.dtypes) |
| print(df.describe()) |
| print(df[df.Gender == 1].describe()) |
| print(df[df.Age == 20].describe()) |
| print(df.sort_values(by = 'Height')) |
| |
| print(df.query('Age > 25 and Age < 30')) |
| print(df.query('25 < Age < 30')) |
| |
| plt.figure() |
| ax = df[df.Gender == 1].plot.scatter(x='Height', y='Weight', color='Red', label='Male'); |
| df[df.Gender == 0].plot.scatter(x='Height', y='Weight', color='Green', label='Female', ax=ax); |
| |
| plt.figure() |
| df.Height.plot.hist() |
| |
| plt.figure() |
| df.Weight.plot.hist() |
| |
| plt.show() |
| </code> |
| |
| === Suggestions pour ajouter une régression linéaire === |
| FIXME |
| * librairie scipy, fonction stats.linregress |
| |
| Codes (à combiner...) |
| |
| <code python> |
| import pandas as pd |
| from scipy import stats |
| </code> |
| |
| Références : |
| * [[https://www.delftstack.com/api/scipy/scipy-scipy.stats.linregress-method/|SciPy scipy.stats.linregress Method]] |
| * [[https://medium.com/analytics-vidhya/linear-regression-in-python-from-scratch-with-scipy-statsmodels-sklearn-da8e373cc89b|Linear Regression in python from scratch with scipy, statsmodels, sklearn]] |
| * [[https://towardsdatascience.com/adding-regression-lines-to-pandas-plots-with-scipy-2e23fd524adb|Adding Regression Lines to Pandas Plots with SciPy]] (yc Jupyter notebook sur GitHub) |
| * cf. [[matplotlib_simple]] |
| |
| ===== Interface utilisateur graphique ===== |
| * [[https://github.com/adamerose/pandasgui|PandasGUI]] |
| * [[https://towardsdatascience.com/pandasgui-analyzing-pandas-dataframes-with-a-graphical-user-interface-36f5c1357b1d|PandasGUI: Analyzing Pandas dataframes with a Graphical User Interface - Accessing Pandas Dataframes with a simple click of the mouse]] Parul Pandey, Medium, 24/10/2020 |
| * [[https://github.com/tkrabel/bamboolib|bamboolib]] (closed source - non libre) |
| |
===== Références ===== | ===== Références ===== |
* [[http://pandas.pydata.org/pandas-docs/stable/10min.html|10 minutes to pandas]] | |
* [[https://www.tutorialspoint.com/python_pandas/index.htm]] | * [[https://www.tutorialspoint.com/python_pandas/index.htm]] |
| * [[https://towardsdatascience.com/top-4-repositories-on-github-to-learn-pandas-1008cb769f77|Top 4 Repositories on GitHub to Learn Pandas - Some of the most popular repositories to brush up on Pandas for beginners and experts alike]] Byron Dolon, Medium, Jul 21, 2020 |
| * [[https://github.com/guipsamora/pandas_exercises|GitHub - guipsamora/pandas_exercises: Practice your pandas skills!]] |
| * [[https://github.com/justmarkham/pandas-videos|GitHub - justmarkham/pandas-videos: Jupyter notebook and datasets from the pandas Q&A video series]] |
| * [[https://github.com/ajcr/100-pandas-puzzles|GitHub - ajcr/100-pandas-puzzles: 100 data puzzles for pandas, ranging from short and simple to super tricky (60% complete)]] |
| * [[https://github.com/justmarkham/pycon-2019-tutorial|GitHub - justmarkham/pycon-2019-tutorial: Data Science Best Practices with pandas]] |
* [[https://medium.com/@devopslearning/introduction-to-pandas-for-data-analysis-c14bb9b1c21b]] (limité) | * [[https://medium.com/@devopslearning/introduction-to-pandas-for-data-analysis-c14bb9b1c21b]] (limité) |
* [[http://www.firstpythonnotebook.org/index.html|First Python Notebook. A step-by-step guide to analyzing data with Python and the Jupyter Notebook]] (The course will teach you how to use pandas to read, filter, join, group, aggregate and rank structured data. You will also learn how to record, remix and republish your analysis using the Jupyter Notebook) → commencer au chapitre 3 "Import pandas into a Jupyter Notebook" | * [[http://www.firstpythonnotebook.org/index.html|First Python Notebook. A step-by-step guide to analyzing data with Python and the Jupyter Notebook]] (The course will teach you how to use pandas to read, filter, join, group, aggregate and rank structured data. You will also learn how to record, remix and republish your analysis using the Jupyter Notebook) → commencer au chapitre 3 "Import pandas into a Jupyter Notebook" |
* [[https://mubaris.com/2017-09-25/python-data-analysis-with-pandas|Python Data Analysis with pandas]] | * [[https://mubaris.com/2017-09-25/python-data-analysis-with-pandas|Python Data Analysis with pandas]] |
* [[https://www.edureka.co/blog/python-pandas-tutorial/|Python Pandas Tutorial : Learn Pandas for Data Analysis]] | * [[https://www.edureka.co/blog/python-pandas-tutorial/|Python Pandas Tutorial : Learn Pandas for Data Analysis]] |
| * [[https://medium.com/dunder-data/minimally-sufficient-pandas-a8e67f2a2428|Minimally Sufficient Pandas]] |
| * //cf.// aussi [[https://github.com/tdpetrou/Master-Data-Analysis-with-Python|Master Data Analysis with Python]] et les données disponibles comme exemples |
* [[https://towardsdatascience.com/python-for-data-science-8-concepts-you-may-have-forgotten-i-did-825966908393|Python for Data Science: 8 Concepts You May Have Forgotten]] | * [[https://towardsdatascience.com/python-for-data-science-8-concepts-you-may-have-forgotten-i-did-825966908393|Python for Data Science: 8 Concepts You May Have Forgotten]] |
* [[https://towardsdatascience.com/23-great-pandas-codes-for-data-scientists-cca5ed9d8a38|23 great Pandas codes for Data Scientists]] | * [[https://towardsdatascience.com/23-great-pandas-codes-for-data-scientists-cca5ed9d8a38|23 great Pandas codes for Data Scientists]] |
* fonction merge : [[https://towardsdatascience.com/why-and-how-to-use-merge-with-pandas-in-python-548600f7e738]] | * fonction merge : [[https://towardsdatascience.com/why-and-how-to-use-merge-with-pandas-in-python-548600f7e738]] |
| * [[https://medium.com/@msalmon00/helpful-python-code-snippets-for-data-exploration-in-pandas-b7c5aed5ecb9|Helpful Python Code Snippets for Data Exploration in Pandas]] |
| * [[https://medium.com/dunder-data/selecting-subsets-of-data-in-pandas-6fcd0170be9c|Selecting Subsets of Data in Pandas: Part 1]] |
| * [[https://github.com/fonnesbeck/statistical-analysis-python-tutorial|Statistical Data Analysis in Python]] |
| * [[http://cmdlinetips.com/2018/03/how-to-make-boxplots-in-python-with-pandas-and-seaborn/|How to Make Boxplots in Python with Pandas and Seaborn?]] (and Gapminder dataset) |
| * [[https://www.geeksforgeeks.org/box-plot-visualization-with-pandas-and-seaborn/|Box plot visualization with Pandas and Seaborn]] |
| * [[https://towardsdatascience.com/complete-guide-to-data-visualization-with-python-2dd74df12b5e|Complete Guide to Data Visualization with Python]] (avec différentes librairies : matplotlib, Seaborn, bokeh, Altair, Folium avec des cartes,...) |
| * [[https://towardsdatascience.com/introducing-bamboolib-a-gui-for-pandas-4f6c091089e3|Introducing Bamboolib — a GUI for Pandas]] (utilisation gratuite ou payante via une activation nécessaire dans jupyter) |
| * [[https://bamboolib.8080labs.com/]] |
| * [[https://github.com/tkrabel/bamboolib]] |
| * [[https://towardsdatascience.com/violin-plot-its-time-to-ditch-the-box-plots-785629b0ff3a|Violin Plot — It’s Time to Ditch the Box Plots]] |
| * [[https://towardsdatascience.com/reshape-pandas-dataframe-with-melt-in-python-tutorial-and-visualization-29ec1450bb02|Reshape pandas dataframe with melt in Python — tutorial and visualization]] |
| * [[https://pandas.pydata.org/docs/reference/api/pandas.melt.html|pandas.melt]] (documentation) |
| * groupby : |
| * [[https://towardsdatascience.com/learn-how-to-master-groupby-function-in-python-now-4620dd463224|Learn how to master groupby function in Python now | by WY Fok | Towards Data Science]] |
| * [[https://towardsdatascience.com/less-known-pandas-groupby-applications-in-python-72fb304a1973|Less known Pandas groupby applications in Python | by WY Fok | Aug, 2020 | Towards Data Science]] |
| * remplacer Excel (ou calc de libreoffice) |
| * [[https://towardsdatascience.com/how-to-ditch-excel-a-primer-to-python-c4a9c192e993|Ditch Excel! — A Primer to Python - Pandas one-liners for popular excel stuff]], Medium 01/09/2020 |
| * [[https://towardsdatascience.com/how-not-to-write-pandas-code-2cbda8b3816c|How NOT to write pandas code]] |
| * [[https://towardsdatascience.com/40-examples-to-master-pandas-c69d058f434e|40 Examples to Master Pandas - A comprehensive practical guide]] |
| * [[https://towardsdatascience.com/pandas-fundamentals-for-beginners-that-will-help-you-code-like-a-pro-2ff5e34fee09|Pandas fundamentals every data scientist needs to know - To boost your performance and code like a pro]] Mısra Turp, Medium, 07/01/2021 |
| * [[https://python.plainenglish.io/add-some-style-to-your-pandas-dataframe-ae3ed4ac7804|Add Some Style to your Pandas DataFrame - Putting Some Pizzaz into your Data]] Curt Beck; Medium, Oct 11, 2020 |
| * [[https://towardsdatascience.com/spreadsheets-to-python-its-time-to-make-the-switch-ef49cf9463d5|Spreadsheets to Python: it's time]] Clive Siviour, Towards Data Science, Medium 03/09/2021 |
| * [[https://towardsdatascience.com/efficiently-iterating-over-rows-in-a-pandas-dataframe-7dd5f9992c01|Efficiently iterating over rows in a Pandas DataFrame - Never use iterrows and itertuples again]] Maxime Labonne, Towards Data Science (Medium), 21/03/2022 → l'approche pythonique "list comprehension" fait gagner un facteur énorme par rapport aux codes utilisant les boucles (certaines techniques sont carrément désastreuses), alors que ce n'est pas le cas avec des langages compilés comme C ou Fortran. Pandas étant construit au dessus de NumPy, il n'est pas étonnant que ses performances peuvent être dépassés par celles de Numpy dans certains cas (x1900 plutôt que x1500 dans cet article par rapport à la plus mauvaise solution). |
| |
| |
| ==== Datasets ==== |
| * [[https://archive.ics.uci.edu/ml/datasets/Adult|Adult Data Set]] Predict whether income exceeds $50K/yr based on census data. Also known as "Census Income" dataset |
| * [[https://archive.ics.uci.edu/ml/datasets.php]] |
| * [[https://towardsdatascience.com/7-examples-to-master-line-plots-with-python-seaborn-42d8aaa383a9|7 Examples to Master Line Plots With Python Seaborn - Practical data visualization guide]] Soner Yıldırım, 12/09/2021 → Seaborn + Pandas + librairie [[https://pandas-datareader.readthedocs.io/en/latest/|pandas datareader]] donnant accès à de nombreuses données (bourses, OECD, Eurostat,...) |
| |
| |
* [[http://blog.yhat.com/posts/visualize-nba-pipelines.html]] | * [[http://blog.yhat.com/posts/visualize-nba-pipelines.html]] |
* [[https://tomaugspurger.github.io/]] | * [[https://tomaugspurger.github.io/]] |
| * régressions linéaires : |
| * [[http://www.xavierdupre.fr/app/ensae_teaching_cs/helpsphinx/notebooks/td2a_eco_regressions_lineaires.html]] |
| * [[https://towardsdatascience.com/effectively-visualize-data-across-time-to-tell-better-stories-2a2c276e031e|Effectively visualize data across time to tell better stories]] (Pandas & Plotly) |
| * [[https://medium.com/analytics-vidhya/statistical-analysis-in-python-using-pandas-27c6a4209de2|Statistical Analysis in Python using Pandas]] Tanvi Penumudy, Medium, dec 31, 2020 |
| * [[https://towardsdatascience.com/an-ultimate-cheat-sheet-for-data-visualization-in-pandas-f7bc239c9937|An Ultimate Cheat Sheet for Data Visualization in Pandas - All the Basic Types of Visualization That Is Available in Pandas and Some Advanced Visualization That Are Extremely Useful and Time Savers]] Rashida Nasrin Sucky, Medium, 15/02/2021 (dataset, jupyter) |
| |
| |
| |