teaching:progappchim:pandas

Pandas

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.

De nombreuses grandeurs mesurées suivent une loi de distribution normale pour leur probabilité : cf. Loi normale

Voir aussi les documents de statistique élémentaire (niveau licence, France) sur le site 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 :
  • 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$.

Programme basé sur Exploring Relationships in Body Dimensions.

Extensions :

  • Tester et utiliser en mode "Jupyter"
  • 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)
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()

Suggestions pour ajouter une régression linéaire

FIXME

  • librairie scipy, fonction stats.linregress

Codes (à combiner…)

import pandas as pd
from scipy import stats

Références :

Ce site web utilise des cookies. En utilisant le site Web, vous acceptez le stockage de cookies sur votre ordinateur. Vous reconnaissez également que vous avez lu et compris notre politique de confidentialité. Si vous n'êtes pas d'accord, quittez le site.En savoir plus
  • teaching/progappchim/pandas.txt
  • Dernière modification : 2022/11/15 10:08
  • de villersd