« Python pour le calcul scientifique/Statistiques » : différence entre les versions

Contenu supprimé Contenu ajouté
explicitation de l'espace de nom
Ligne 10 :
 
Rappel : la classe des matrices ''(ndarray)'' dispose de méthodes permettant de calculer des statistiques sur les éléments des matrices :
* <code>.min()</code> : minimum des valeurs ;
* <code>.max()</code> : maximum des valeurs ;
* <code>.ptp()</code> : écart amplitude « max – min » ''({{lang|en|peak to peak}})'' ;
* <code>.mean()</code> : moyenne ;
* <code>.std()</code> : écart type ''({{lang|en|standard deviation}})''.
 
== Statistiques descriptives ==
 
NumPy fournit la fonction <code>np.quantile()</code> qui détermine les quantiles avec la syntaxe :
<source lang="python">
np.quantile(M, q)
Ligne 26 :
np.quantile(M, [0, 0.25, 0.5, 0.75, 1])
</source>
Si un des éléments de la matrice est un NaN, le résultat est un NaN. Pour éviter cela, on peut utiliser la fonction <code>np.nanquantile()</code> qui ignore les NaN.
 
Les fonctions <code>np.percentile()</code> et <code>np.nanpercentile()</code> donnent les centiles ; on indique alors le centile que l'on veut sous la forme d'un nombre entier entre 0 et 100.
 
Nous disposons également des fonctions suivantes :
* <code>np.amin()</code>, <code>np.nanmin()</code> : minimum ;
* <code>np.amax()</code>, <code>np.nanmax()</code> : maximum ;
* <code>np.ptp()</code> : amplitude.
 
Notons que pour toutes les fonctions, il est possible d'indiquer l'axe selon lequel on effectue le calcul. Par exemple,
Ligne 52 :
 
NumPy fournit les indicateurs de tendance centrale suivants :
* <code>np.mean()</code> et <code>np.nanmean()</code> : moyenne ;
* <code>np.average()</code> et <code>np.nanaverage()</code> : moyenne pondérée ; la syntaxe est <code>np.average(M, axe, poids)</code> ou bien <code>np.average(M, weights = poids)</code> (voir ci-après) ;
* <code>np.median()</code> et <code>np.nanmedian()</code> : médiane.
En terme de performances, la fonction <code>np.mean()</code> est équivalente à la méthode <code>M.mean()</code> et à la fonction <code>np.average()</code> sans poids (ce qui équivaut donc à la moyenne). En revanche, la fonction <code>np.nanmean()</code> est plus lente, de même que la fonction <code>np.average()</code> lorsque l'on utilise des poids (même s'ils sont tous égaux à 1).
 
Ligne 64 :
 
NumPy fournit également les indicateurs de dispersion suivants :
* <code>np.std()</code>, <code>np.nanstd()</code> : écart type ''({{lang|en|standard deviation}})'' ;
* <code>np.var()</code>, <code>np.np.nanvar()</code> : variance.
 
== Fréquence, histogramme ==
 
On peut générer une matrice aléatoire avec les fonctions <code>np.random.rand()</code>, qui utilise une loi uniforme sur [0 ; 1], et <code>np.random.randn()</code> qui utilise une loi normale centrée réduite.
 
Lorsque l'on dispose d'une série de données aléatoires, qu'elles aient été mesurées ou bien générées par une fonction aléatoire, on peut ensuite les mettre dans des classes ''({{lang|en|bins}})''. Les classes sont définies par un vecteur (ou une liste, un n-uplet) <code>[c1, c2,c3, …, cn]</code>. La classe 0 désigne les valeurs inférieures à ''c''<sub>1</sub> ; la classe 1 désigne les valeurs ''c''<sub>1</sub> ≤ ''x'' &lt; ''c''<sub>2</sub> ; la classe ''n'' (<code>n == len(classes)</code>) désigne les valeurs supérieures à ''c<sub>n</sub>''.
 
La fonction <code>np.digitize()</code> indique dans quelle classe se trouve un nombre. Si on lui donne une matrice (ou un vecteur, une liste, un n-uplet), il renvoie une matrice de même dimension, <code>np.digitize(M, classes)[i, j]</code> étant la classe de l'élément <code>M[i, j]</code>. Par exemple :
 
<source lang="python">
Ligne 87 :
[[Fichier:Histogramme loi normale 50 ech numpy pyplot.png|vignette|Histogramme tracé avec Python/Numpy/Matplotlib.]]
 
La fonction <code>np.histogram()</code> détermine ''n'' classes de même taille et renvoie deux vecteurs : la première contient le nombre d'éléments dans chaque classe et la seconde décrit les classes (c'est-à-dire les bornes des classes).
 
Pour tracer l'histogramme, nous disposons de la fonction <code>matplotlib.pyplotplt.hist()</code> :
<source lang="python">
M = np.random.randn(50)
Ligne 96 :
</source>
 
La fonction <code>np.bincount()</code> travaille sur les listes de nombre entiers. Elle renvoie un n-uplet, <code>np.bincount(M)[i]</code> est le nombre de fois que le nombre ''i'' revient dans la matrice M — rappel, le premier élément du n-uplet <code>np.bincount(M)</code> a l'indice 0 donc correspond au nombre de fois que le nombre 0 apparaît dans la matrice M.
 
== Notes et références ==