L’analyse des données a pour but de recomposer l’information contenue dans les données recueillies afin d’en fournir une vue plus synthétique, ou d’extraire des informations qui n’apparaissent pas de façon explicite dans la série de mesures initiale.
* Analyse des données
Le but est de dégager :
à partir d’un grand ensemble de données (chiffre d’affaires, nb de ventes, masse salariale, …) évoluant dans le temps et dans l’espace, afin de
Exemples de grandes masses de données :
Sites de données :
On distingue classiquement deux grandes catégories de données :
Les données qualitatives:
Schémas de données
Tableau de données
Un tableau de données est une liste (finie et ordonnée) de tuples, chaque tuple obéissant à un même schéma $R$.
La recherche par index repose sur une fonction d'adressage ref qui à tout identifiant id associe la référence de la donnée correspondante: $$\text{ref} : \text{id} \rightarrow d = \text{ref}(\text{id}) $$ où $d$ est l'"adresse" du jeu de données.
Exemples d'adressages:
Mise en oeuvre :
On appelle index la structure de données qui implémente la fonction d'adressage
$$I = ((\text{id}_1, d_1), (\text{id}_2, d_2), ..., (\text{id}_n, d_n))$$ telle que $\text{id}_1 < \text{id}_2 < ... < \text{id}_N$, de telle sorte que la recherche s'effectue en O(log n) (recherche dichotomique).
$$ I = \{\text{id}_1:d_1, \text{id}_2:d_2, ..., \text{id}_n:d_n\}$$
Un index de partitionnement:
$$ \forall \text{c} \in \mathcal{K}, \text{c} \rightarrow D_c = \{d_1, d_2, ...\} \subset \mathcal{D}$$ $$ \forall d \in \mathcal{D}, \exists! \text{c} \text{ t.q. } d \rightarrow \text{c}$$
Implémentations:
$$ I = \{c_1:(d_{11}, d_{12}, ...), c_2:(d_{21}, d_{22}, ...), ... \}$$
$$ M[i,j] = 0 \Leftrightarrow d_j \notin D_i $$ $$ M[i,j] = 1 \Leftrightarrow d_j \in D_i $$
L'agrégation consiste à partitionner les données en classes selon la valeur d'un attribut.
Si A est l'attribut considéré:
Une fois la partition effectuée, il est courant d'effectuer des mesures sur chaque partition obtenue
Les mesures sont réalisées à l'aide d'opérateur d’agrégation :
count
, sum
, mean
, avg
, max
, min
…)cas d’utilisation :
En SQL, l'opérateur d'agrégation est GROUP BY
:
Exemples de requêtes faisant appel aux fonctions d’agrégation :
Nombre d’élèves par groupe de TD / par prépa d’origine etc..:
SELECT groupe_TD , COUNT(num_eleve) FROM Eleve GROUP BY groupe_TD
Donner les chiffres des ventes du magasin pour chaque mois de l’année
SELECT mois, SUM(montant) FROM Vente GROUP BY mois
Donner le nombre de ventes d’un montant > à 1000 euros pour les mois dont le chiffre d'affaires est supérieur à 10000 euros
SELECT mois, COUNT(num_vente) FROM Vente GROUP BY mois HAVING SUM(montant) >= 10000
Tester les disparités salariales entre hommes et femmes
SELECT sexe, avg( salaire ) FROM Employé GROUP BY sexe
Tester les disparités salariales selon le niveau d’éducation
SELECT niveau_educatif, avg( salaire ) FROM Employé GROUP BY niveau_éducatif
L'utilisation de données structurées dans un programme Python nécessite de faire appel à des librairies spécialisées. Nous regardons ici la librairie pandas
qui sert à la mise en forme et à l'analyse des données.
import numpy as np import matplotlib.pyplot as plt import pandas
Considérons des informations stockées dans un fichier au format ‘csv’ (comma separated values) : ventes_new.csv
On utilise:
pandas.read_csv
. Voir dataframes pandas. Pandas permet également de lire les données au format xls
et xlsx
(Excel). with open('ventes_new.csv') as f: data = pandas.read_csv(f) print(data)
avec data
une structure de données de type DataFrame
.
Pandas offre la possibilité d'organiser et analyser les données par classe.
Le partitionnement repose sur des valeurs d'attributs (il y a autant de groupes qu'il y a de valeurs différentes pour l'attribut considéré)
Par exemple si on prend le type de produit:
partition_selon_produit = data.groupby('TYPE_PRODUIT')
ici l'objet partition_selon_produit
est une partition du tableau de données selon la valeur de TYPE_PRODUIT
.
Pour visualiser les partitions:
print(partition_selon_produit.groups)
On peut ensuite effectuer des mesures et calculs par groupes. Par exemple :
nb_ventes_par_produit = partition_selon_produit.size()
l'objet nb_ventes_par_produit
est une série indexée par les valeurs d'attributs (ici 'Bateaux', 'Avions' etc…)
print(nb_ventes_par_produit.index)
On peut bien sûr l'afficher :
print(nb_ventes_par_produit)
Les fonctions sum(), mean(), max(), min() etc… s'appliquent sur des mesures, ici MONTANT
ou QUANTITE
.
Exemple : le chiffre d'affaires par produit (somme des montants) :
CA_par_produit = partition_selon_produit.MONTANT.sum()
Enfin on peut également effectuer une sélection sur les valeurs calculées (l'équivalent du HAVING
en SQL).
Exemples:
print(CA_par_produit[CA_par_produit > 1000000])
print(CA_par_produit[CA_par_produit == max(CA_par_produit)])
Les groupes peuvent être définis sur des critères multiples :
partition_pays_ville = data.groupby(['PAYS', 'VILLE'])
plt.figure() nb_ventes_par_produit.plot(kind = "bar", figsize = (5,3)) plt.figure() nb_ventes_par_produit.plot(kind = "pie", figsize = (5,3))
Pour aller plus loin :
Remarque : Les transactions marchandes sont un cas classique (acte d’achat bien répertorié et enregistrés, livres de comptes, …)
Exemples de “fait”:
Tous ces faits peuvent être localisés. Des mesures peuvent être effectuées sur ces faits (montant d’une vente, durée d’un appel, montant d’une opération bancaire, …)
Points clés :
Les tables pivot permettent d'analyser des faits selon deux dimensions organisées sur les deux axes d'un tableau.
L'utilisation de données structurées dans un programme Python nécessite de faire appel à des librairies spécialisées. Nous regardons ici la librairie pandas
qui sert à la mise en forme et à l'analyse des données.
import numpy as np import matplotlib.pyplot as plt import pandas
Considérons des informations stockées dans un fichier au format ‘csv’ (comma separated values) : ventes_new.csv
On utilise:
pandas.read_csv
. Voir dataframes pandas. Pandas permet également de lire les données au format xls
et xlsx
(Excel). with open('ventes_new.csv') as f: data = pandas.read_csv(f) print(data)
avec data
une structure de données de type DataFrame
.
exemple : on représente les ventes selon (1) la dimension géographique et (2) la dimension temporelle
T = pandas.pivot_table(data, values = 'MONTANT', index = ['PAYS'], columns = ['ANNEE'], aggfunc=np.sum) print(T)
Evolution des ventes au cours de l'année pour la France seulement:
selection = data[data.PAYS == "France"] T2 = pandas.pivot_table(selection, values = 'MONTANT', index = ['ANNEE'], columns = ['VILLE'], aggfunc=np.sum) print(T2) T2.plot(kind='bar', subplots = 'True') plt.show()
Ici les données sont organisées autour de plusieurs dimensions. L'agrégation consiste:
Exemple de hiérarchie:
Problèmes :
etc…
Un cube de données est une structure de données organisée sur le principe des espaces vectoriels. Différents axes sont définis, chaque axe étant associé à une dimension particulière.
Un élément essentiel du modèle de données est la définition de hiérarchies sur les dimensions du cube. Chaque dimension se divise en intervalles et sous-intervalles (pour le continu/ quantitatif) ou en catégories et sous-catégories (pour le discret/qualitatif)
Les hiérarchies sur les différentes dimensions permettent de définir le “niveau de résolution” sur les différentes dimensions.
La structure de cube de données est adaptée pour la réalisation d’histogramme multidimensionnels, selon les axes choisis et le niveau de résolution choisi, à l’aide de fonctions d’aggrégation.
REPRESENTATION DES DONNEES : Représenter des jeux de valeurs de grande taille de façon plus synthétique (algorithmes de réduction de dimension)
REGROUPEMENT (“CLUSTERING”) : Définir des regroupements (ou des classements simples ou hiérarchiques) entre jeux de valeurs
COMPLETION : Méthodes de classification automatique (ou d’interpolation) visant à deviner soit la classe, soit certaines valeurs non mesurées, à partir d’un jeu de valeurs et d’une base d’exemples complets. Il existe des méthodes paramétriques ou non paramétriques.
ESTIMATION ET DECISION : Méthodes visant à estimer la “valeur” associée à un jeu de données (pour l’aide à la décision)