Mis a jour le 2025-04-14, 12:10

Statistiques avec numpy

Minimum et maximum :
  • avec a = numpy.array([[1, 2, 3], [4, 5, 6]]) :
    
    array([[1, 2, 3],
           [4, 5, 6]])
        
  • numpy.amin(a) ou numpy.min(a) ou aussi a.min() : renvoie la valeur minimum de l'array (sur toute l'array si à plusieurs dimensions).
  • numpy.amin(a, 0) : la ligne des minima par colonne, donc renvoie array([1, 2, 3]).
  • numpy.amin(a, 1) : la ligne des minima par ligne, donc renvoie array([1, 4]).
  • numpy.amax : pareil pour le maximum.
  • nanmin et nanmax : pareil en ignorant les valeurs non définies.
Valeurs statistiques de base :
  • a.mean() : renvoie la moyenne sur toute l'array.
  • numpy.mean(a, 0) : la ligne des moyennes, c'est à dire array([ 2.5, 3.5, 4.5]).
  • numpy.median(a, 0) : la ligne des médiane, c'est à dire aussi ici array([ 2.5, 3.5, 4.5]) (cas particulier).
  • numpy.std(a, 0) : la ligne des déviations standard par colonne au sens mathématique, c'est à dire divisé par racine de n, ici array([ 1.5, 1.5, 1.5]).
  • numpy.std(a, 0, ddof = 1) : la ligne des déviations standard par colonne au sens statistique, c'est à dire divisé par racine de n - 1 (ddof : degrés of freedom), ici array([ 2.12132034, 2.12132034, 2.12132034]).
  • numpy.var(a, 0) : la lignes des variances par colonne, donc ici : array([ 1.5, 1.5, 1.5]).
  • numpy.percentile(a, 10) : valeur du premier décile.
  • numpy.quantile(numpy.array([0, 4, 5, 3, 4, 2, 5]), 0.5) : la médiane.
  • numpy.quantile(numpy.array([0, 4, 5, 3, 4, 2, 5]), [0.25, 0.5, 0.75]) : les limites des quartiles.
calcul de statistiques en ignorant les NaN :
  • numpy.nanmean(ar) : la moyenne (attention, ar.nanmean() ne marche pas !
  • numpy.nanvar(ar): variance.
  • numpy.nanstd(ar): écart-type.
scipy.misc.comb(10, 5) : le coefficient binomial (nombre de combinaisons de 5 objets parmi 10) C(10, 5).
Calcul des quantiles :
  • Avoir la valeur correspondant à un percentile donné : scipy.stats.scoreatpercentile([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 90) : calcule la valeur correspondant au 90ème percentile de la liste des données (avec interpolation). Cela donne ici 9.099999999 (avec 50, on a en fait la médiane).
  • réciproquement, on peut calculer le percentile correspondant à une valeur donnée : scipy.stats.percentileofscore([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 9.099999999) : donne 90.0 (90ème percentile).
Calcul d'un histogramme :
  • a = [2, 4, 5, 1, 4, 2, 9, 3, 4, 5]; (nbrs, intervals) = numpy.histogram(a) : renvoie le nombre d'éléments dans chaque intervalle, et les limites des intervalles. intervals a un élément de plus que nbr, et par défaut, le nombre de bins est de 10 entre min(a) et max(a). Donc ici, nbrs = [1 2 1 3 0 2 0 0 0 1] et intervals = [1., 1.8, 2.6, 3.4, 4.2, 5., 5.8, 6.6, 7.4, 8.2, 9.]
  • (nbrs, intervals) = numpy.histogram(a, bins = 5, range = (0, 10)) : on impose le nombre de bins et les limites extrèmes dans lesquelles les intervalles sont déterminés. Si des éléments sont en dehors, ils sont ignorés.
  • (density, intervals) = numpy.histogram(a, bins = 5, range = (0, 10), density = True) : normalise les valeurs de telle sorte que l'intégrale soit 1, c'est à dire la somme des valeurs pondérée par la largeur de l'intervalle. Ici sum(density) * (10 - 0) / 5 vaut 1.
  • (nbrs, intervals) = numpy.histogram(a, bins = [0, 1, 4, 10]) : on peut donner aussi explicitement les limites des intervalles. Les intervalles sont ouverts à droite. Ici, renvoie nbrs = [0, 4, 6]
Coefficient de corrélation de Pearson :
  • on peut utiliser mat = numpy.corrcoef([2, 4, 6, 2, 9], [3, 5, 9, 4, 7]) : renvoie une matrice 2 x 2 symétrique avec tous les coefficients, en l'occurence 1 sur la diagonale, et la valeur recherchée ailleurs. mat[0][1] vaut 0.77685086. C'est la valeur avec la normalisation par n - 1 par défaut.
  • on peut aussi donner une matrice en input pour avoir la matrice des coefficients de corrélations des lignes 2 à 2 : mat = numpy.array([[6, 4, 3], [7, 9, 1], [2, 5, 8]]); numpy.corrcoef(mat) donne :
    array([[ 1.        ,  0.57655666, -0.98198051],
           [ 0.57655666,  1.        , -0.72057669],
           [-0.98198051, -0.72057669,  1.        ]])
        
  • attention donc, numpy.corrcoef procéde par défaut par ligne, chaque ligne représentant une variable !
  • pour que chaque colonne soit une variable, faire numpy.corrcoef(mat, rowvar = 0).
  • autre solution avec scipy : scipy.stats.pearsonr.

Copyright python-simple.com
programmer en python, tutoriel python, graphes en python, Aymeric Duclert