Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente | |||
| tc_info:2020_cm_ana [2021/01/19 13:29] – edauce | tc_info:2020_cm_ana [2021/01/19 13:29] (Version actuelle) – edauce | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | ==== Analyse des données==== | ||
| + | |||
| + | 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, | ||
| + | |||
| + | * ** Analyse des données ** | ||
| + | * faire ressortir des corrélations (exemple : type d' | ||
| + | * pour des enquêtes de consommation, | ||
| + | |||
| + | Le but est de dégager | ||
| + | * des **tendances** (covariables) | ||
| + | * des **modes** de la distribution (présence de plusieurs maxima) | ||
| + | à partir d’un **grand** ensemble de données (chiffre d’affaires, | ||
| + | * définir des **indicateurs** pertinents | ||
| + | * faciliter la prise de décision. | ||
| + | |||
| + | Exemples de grandes masses de données : | ||
| + | * Masses de données (pullulantes) : tickets de caisse, clics web, appels tel, operations bancaires, remboursements no URSSAF, trajets SNCF… | ||
| + | * Données importantes : fichiers de clients, données biométriques, | ||
| + | * Données géographiquement localisées (gestion d’un “territoire”) : appels tel, centres de production, consommation eau-électricité-gaz, | ||
| + | |||
| + | Sites de données : | ||
| + | * {{https:// | ||
| + | * {{https:// | ||
| + | * {{https:// | ||
| + | * {{https:// | ||
| + | * {{https:// | ||
| + | * {{https:// | ||
| + | |||
| + | <note tip> | ||
| + | ** Principales méthodes d' | ||
| + | |||
| + | * **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, | ||
| + | |||
| + | * **ESTIMATION ET DECISION** : Méthodes visant à estimer la “valeur” associée à un jeu de données (pour l’aide à la décision) | ||
| + | |||
| + | </ | ||
| + | |||
| + | ===== 2. L' | ||
| + | |||
| + | <note tip> **Rappel** | ||
| + | |||
| + | On distingue classiquement deux grandes catégories de données : | ||
| + | |||
| + | * données **quantitatives**: | ||
| + | * numérique entier ou réel, discrètes ou continues, bornées ou non. ex: poids, taille, âge, taux d’alcoolémie, | ||
| + | * temporel : date, heure | ||
| + | * numéraire | ||
| + | * etc... | ||
| + | * données **qualitatives**: | ||
| + | * de type vrai/faux (données booléennes). ex: marié/non marié, majeur/non majeur | ||
| + | * de type appartenance à une classe. ex: célibataire/ | ||
| + | * de type texte (autrement dit “chaîne de caractères”). ex: nom, prénom, ville,... | ||
| + | </ | ||
| + | |||
| + | Les données qualitatives: | ||
| + | * définissent l' | ||
| + | * permettent de définir des **classes** au sein d'un ensemble de données | ||
| + | |||
| + | === Organisation des données sous forme de tableaux bidimensionnels === | ||
| + | |||
| + | ** Schémas de données ** | ||
| + | |||
| + | * Un enregistrement est un jeu de valeurs organisé sous forme de **tuple** | ||
| + | * A un tuple on associe | ||
| + | {{https:// | ||
| + | |||
| + | * Définir un **schéma** consiste à définir : | ||
| + | * une liste d' | ||
| + | * A chaque **attribut** correspond : | ||
| + | * un // | ||
| + | * un //domaine// de valeurs (type/ | ||
| + | |||
| + | ** 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$. | ||
| + | |||
| + | {{https:// | ||
| + | |||
| + | |||
| + | ==== L' | ||
| + | |||
| + | * D’un point de vue informatique, | ||
| + | * Pour une gestion efficace des données, il est nécessaire de pouvoir identifier chaque enregistrement de façon unique. | ||
| + | |||
| + | === Indexation simple === | ||
| + | |||
| + | <note important> | ||
| + | * L' | ||
| + | * On parle également de //clé// du jeu de données: | ||
| + | * On peut représenter l' | ||
| + | * Si $d$ est le jeu de valeurs | ||
| + | * $id(d)$ désigne l' | ||
| + | </ | ||
| + | <note tip> | ||
| + | * L' | ||
| + | * repose sur un principe simple d' | ||
| + | * consistant à attribuer une étiquette différente à chaque enregistrement. | ||
| + | * Cette étiquette peut être | ||
| + | * une suite de caractères arbitraires, | ||
| + | * un entier, | ||
| + | * ou un descripteur explicite. | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | ** Exemples d' | ||
| + | * numéro INE (étudiants) | ||
| + | * numéro URSSAF (sécurité sociale) | ||
| + | * numéro d' | ||
| + | * numéro de compte en banque | ||
| + | * code barre | ||
| + | * etc. | ||
| + | </ | ||
| + | |||
| + | La recherche par index repose sur une **fonction d' | ||
| + | $$\text{ref} : \text{id} \rightarrow d = \text{ref}(\text{id}) $$ | ||
| + | où $d$ est l'" | ||
| + | |||
| + | ** Exemples d' | ||
| + | |||
| + | * Table des matières (en-têtes de chapitres) --> num de page | ||
| + | * nom de variable --> valeur | ||
| + | * chemin d' | ||
| + | * URL --> adresse IP (L' | ||
| + | * code d' | ||
| + | |||
| + | <note tip> | ||
| + | L' | ||
| + | * Soit $D$ un tableau de $n$ lignes | ||
| + | * le numéro $i < n$ peut être vu à la fois l' | ||
| + | |||
| + | {{https:// | ||
| + | </ | ||
| + | |||
| + | **Mise en oeuvre :** | ||
| + | <note important> | ||
| + | **Définition** | ||
| + | |||
| + | On appelle index la structure de données qui implémente la fonction d' | ||
| + | </ | ||
| + | * Listes : | ||
| + | * La lecture de l' | ||
| + | $$I = ((\text{id}_1, | ||
| + | * Dictionnaires : | ||
| + | $$ I = \{\text{id}_1: | ||
| + | * La structure de dictionnaire permet une recherche en $O(1)$. | ||
| + | |||
| + | === Index de partitionnement === | ||
| + | |||
| + | Un index de partitionnement: | ||
| + | * est constitué d'un ensemble fini de classes $\mathcal{K}$ | ||
| + | * à chaque classe sont associées plusieurs références de la table de données $\mathcal{D}$ | ||
| + | * autrement dit : | ||
| + | $$ \forall \text{c} \in \mathcal{K}, | ||
| + | $$ \forall d \in \mathcal{D}, | ||
| + | * On dit que les données sont organisées en //classes// : chaque donnée appartient à une classe unique $c$ | ||
| + | * L' | ||
| + | |||
| + | Implémentations: | ||
| + | <note > | ||
| + | * Dictionnaire de listes : | ||
| + | $$ I = \{c_1: | ||
| + | * à chaque classe est associée une //liste// de références | ||
| + | </ | ||
| + | < | ||
| + | * Index " | ||
| + | * Soit $\mathcal{D}$ un ensemble de $n$ enregistrements | ||
| + | * Soit $\mathcal{K}$ un index qui partitionne $\mathcal{D}$ | ||
| + | * avec $m = |\mathcal{K}|$ : taille de l' | ||
| + | * un entier j dans {1,...,n} est attribué à chaque enregistrement | ||
| + | * un entier i dans {1,...,m} est attribué à chaque classe | ||
| + | * L' | ||
| + | $$ M[i,j] = 0 \Leftrightarrow d_j \notin D_i $$ | ||
| + | $$ M[i,j] = 1 \Leftrightarrow d_j \in D_i $$ | ||
| + | </ | ||
| + | |||
| + | {{https:// | ||
| + | ==== Agrégation ==== | ||
| + | |||
| + | L' | ||
| + | |||
| + | <note important> | ||
| + | Il est supposé que le partitionnement s' | ||
| + | |||
| + | Si A est l' | ||
| + | * A est un attribut " | ||
| + | * Le domaine de valeurs de A $\text{dom}(A)$ est fini | ||
| + | * $\text{dom}(A)$ définit un index de partitionnement | ||
| + | </ | ||
| + | |||
| + | Une fois la partition effectuée, il est courant d' | ||
| + | |||
| + | Les mesures sont réalisées à l'aide d' | ||
| + | * comptage, somme, moyenne, ecart-type, max, min, ... | ||
| + | * ('' | ||
| + | |||
| + | **cas d’utilisation** : | ||
| + | * Quels sont les catégories de films/ | ||
| + | * A quelles heures de la journée la messagerie est-elle la plus sollicitée? | ||
| + | * Comment se répartissent géographiquement les utilisateurs de la messagerie? | ||
| + | |||
| + | === SQL === | ||
| + | En SQL, l' | ||
| + | * partitionne les données à partir des valeurs de l' | ||
| + | * il est possible de partitionner les données selon les valeurs de plusieurs attributs | ||
| + | |||
| + | 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..:// | ||
| + | <code sql> | ||
| + | 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// | ||
| + | <code sql> | ||
| + | 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' | ||
| + | <code sql> | ||
| + | SELECT mois, count(num_vente) | ||
| + | FROM Vente | ||
| + | GROUP BY mois | ||
| + | HAVING sum(montant) >= 10000 | ||
| + | </ | ||
| + | |||
| + | //Tester les disparités salariales entre hommes et femmes// | ||
| + | <code sql> | ||
| + | SELECT sexe, avg( salaire ) | ||
| + | FROM Employé | ||
| + | GROUP BY sexe | ||
| + | </ | ||
| + | |||
| + | //Tester les disparités salariales selon le niveau d’éducation// | ||
| + | <code sql> | ||
| + | SELECT niveau_educatif, | ||
| + | FROM Employé | ||
| + | GROUP BY niveau_éducatif | ||
| + | </ | ||
| + | |||
| + | |||
| + | === Pandas | ||
| + | L' | ||
| + | <code python> | ||
| + | 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) : '' | ||
| + | |||
| + | On utilise: | ||
| + | * '' | ||
| + | |||
| + | <code python> | ||
| + | with open(' | ||
| + | data = pandas.read_csv(f) | ||
| + | print(data) | ||
| + | </ | ||
| + | avec '' | ||
| + | |||
| + | Pandas offre la possibilité d' | ||
| + | |||
| + | Le partitionnement repose sur des valeurs d' | ||
| + | a de valeurs différentes pour l' | ||
| + | |||
| + | Par exemple si on prend le type de produit: | ||
| + | <code python> | ||
| + | partition_selon_produit = data.groupby(' | ||
| + | </ | ||
| + | ici l' | ||
| + | |||
| + | Pour visualiser les partitions: | ||
| + | <code python> | ||
| + | print(partition_selon_produit.groups) | ||
| + | </ | ||
| + | |||
| + | On peut ensuite effectuer des mesures et calculs par groupes. | ||
| + | Par exemple : | ||
| + | <code python> | ||
| + | nb_ventes_par_produit = partition_selon_produit.size() | ||
| + | </ | ||
| + | l' | ||
| + | <code python> | ||
| + | print(nb_ventes_par_produit.index) | ||
| + | </ | ||
| + | On peut bien sûr l' | ||
| + | <code python> | ||
| + | print(nb_ventes_par_produit) | ||
| + | </ | ||
| + | |||
| + | Les fonctions sum(), mean(), max(), min() etc... s' | ||
| + | |||
| + | Exemple : le chiffre d' | ||
| + | <code python> | ||
| + | CA_par_produit = partition_selon_produit.MONTANT.sum() | ||
| + | </ | ||
| + | |||
| + | Enfin on peut également effectuer une sélection sur les valeurs calculées (l' | ||
| + | |||
| + | Exemples: | ||
| + | * les produits générant un chiffre d' | ||
| + | <code python> | ||
| + | print(CA_par_produit[CA_par_produit > 1000000]) | ||
| + | </ | ||
| + | * le produit générant le plus haut chiffre d' | ||
| + | <code python> | ||
| + | print(CA_par_produit[CA_par_produit == max(CA_par_produit)]) | ||
| + | </ | ||
| + | |||
| + | Les groupes peuvent être définis sur des critères multiples : | ||
| + | <code python> | ||
| + | partition_pays_ville = data.groupby([' | ||
| + | </ | ||
| + | |||
| + | === Affichage et figures === | ||
| + | |||
| + | <code python> | ||
| + | |||
| + | plt.figure() | ||
| + | nb_ventes_par_produit.plot(kind = " | ||
| + | |||
| + | plt.figure() | ||
| + | nb_ventes_par_produit.plot(kind = " | ||
| + | </ | ||
| + | |||
| + | Pour aller plus loin : | ||
| + | * {{http:// | ||
| + | * {{http:// | ||
| + | * | ||
| + | |||
| + | |||
| + | ==== Tables pivot ==== | ||
| + | |||
| + | * Notion de fait élémentaire (//fact//): transaction ou opération localisée dans le temps et dans l’espace | ||
| + | * | ||
| + | Remarque : Les transactions marchandes sont un cas classique (acte d’achat bien répertorié et enregistrés, | ||
| + | |||
| + | Exemples de “fait”: | ||
| + | * Achat/Vente | ||
| + | * Opération bancaire (débit/ | ||
| + | * Consultation (site web) | ||
| + | * Souscription à un contrat d’assurance | ||
| + | * Appel téléphonique | ||
| + | * Inscription | ||
| + | |||
| + | 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** : | ||
| + | * distinction entre **Dimension** et **Mesure**. | ||
| + | * Notion de dimension : qui? quoi? où? quand? Comment? : associe des **coordonnées** à l’événement (géographiques, | ||
| + | * Notion de **mesure(s)** associées à l’événement (exemple : montant de la vente) | ||
| + | * distributions, | ||
| + | * les événements sont associés par paquets sur des intervalles réguliers ou selon des catégories discretes. | ||
| + | * Fonctions d’aggrégation : réalise la mesure sur les groupe : somme, comptage, moyenne, min, max, etc... | ||
| + | * histogramme : nb d’événements observés par secteur sur un maillage régulier de l’espace des coordonnées. Par extension mesure sur ce maillage par une fonction d’aggrégation. | ||
| + | |||
| + | <note tip> **principe :** | ||
| + | * les mesures portent sur des données de type // | ||
| + | * les classes reposent sur des données de //type qualitatif// | ||
| + | </ | ||
| + | |||
| + | Les tables pivot permettent d' | ||
| + | |||
| + | L' | ||
| + | <code python> | ||
| + | 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) : '' | ||
| + | |||
| + | On utilise: | ||
| + | * '' | ||
| + | |||
| + | <code python> | ||
| + | with open(' | ||
| + | data = pandas.read_csv(f) | ||
| + | print(data) | ||
| + | </ | ||
| + | avec '' | ||
| + | |||
| + | exemple : on représente les ventes selon (1) la dimension géographique et (2) la dimension temporelle | ||
| + | |||
| + | <code python> | ||
| + | T = pandas.pivot_table(data, | ||
| + | print(T) | ||
| + | </ | ||
| + | |||
| + | Evolution des ventes au cours de l' | ||
| + | <code python> | ||
| + | selection = data[data.PAYS == " | ||
| + | T2 = pandas.pivot_table(selection, | ||
| + | print(T2) | ||
| + | |||
| + | T2.plot(kind=' | ||
| + | plt.show() | ||
| + | </ | ||
| + | |||
| + | === 7.2.2 Modèle en étoile === | ||
| + | |||
| + | Ici les données sont organisées autour de plusieurs dimensions. L' | ||
| + | * à positionner les données sur des axes (temporels, géographiques, | ||
| + | * ou à les organiser de manière hiérarchique en classes (et sous-classes) selon la valeur d'un ou plusieurs attributs. | ||
| + | |||
| + | Exemple de hiérarchie: | ||
| + | * pays > région > département | ||
| + | |||
| + | == Dimensions == | ||
| + | * (qui?) Quels sont les magasins les plus rentables? doit-on ouvrir / fermer des magasins? | ||
| + | * (Où?) répartition des appels/ | ||
| + | * (qui?) Quelle est la liste des clients à contacter? | ||
| + | * (quand?) De quelle quantité doit-on approvisionner quels magasins en fonction de la période de l’année? | ||
| + | |||
| + | ** Problèmes : ** | ||
| + | * définir les bons intervalles temporels?? créneaux horaires? | ||
| + | * définir des secteurs géographiques? | ||
| + | |||
| + | |||
| + | |||
| + | == Modèle en étoile== | ||
| + | * un fait est une association située au centre du schéma. Les attributs de l’association sont les mesures effectuées | ||
| + | * une dimension est une relation participant au fait. Les dimensions sont donc décrites par des attributs (ex : attributs année, trimestre, mois, jour, heure, minute, seconde, | ||
| + | * pour chaque dimension, on décrit une hiérarchie sur les différents attributs de la dimension en définissant un ordre, du particulier au général. | ||
| + | |||
| + | {{public: | ||
| + | |||
| + | ==Exemples :== | ||
| + | * sur la dimension temporelle : mois ⊂ trimestre ⊂ année | ||
| + | * sur la dimension promotion : nom ⊂ catégorie ⊂ média ⊂ type de média | ||
| + | etc... | ||
| + | |||
| + | |||
| + | ==Exemples== | ||
| + | * {{https:// | ||
| + | |||
| + | * {{http:// | ||
| + | |||
| + | * {{http:// | ||
| + | |||
| + | |||
| + | |||
| + | ===Cubes de données=== | ||
| + | |||
| + | 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. | ||
| + | |||
| + | * Les dimensions peuvent correspondre à des valeurs discrètes (catégories : type de produit, catégorie de client,...) ou continues (valeurs temporelles ou géographiques, | ||
| + | * Chaque fait est décrit comme un point de l’espace vectoriel. Il est positionné dans une cellule du cube. A ce point sont associées une ou plusieur mesures. | ||
| + | * Le cube est un ensemble de cellules (voir figure), chaque cellule correspondant à un intervalle (sur les axes continus) ou une valeur (sur les axes discrets). | ||
| + | |||
| + | |||
| + | 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/ | ||
| + | |||
| + | Les hiérarchies sur les différentes dimensions permettent de définir le “niveau de résolution” sur les différentes dimensions. | ||
| + | * On peut ainsi s’intéresser à l’évolution d’une certaine grandeur au cours du temps année par année, trimestre par trimestre ou mois par mois selon le niveau de résolution choisi. | ||
| + | *-> Hiérarchie : description arborescente d’intervalles et de sous-intervalles sur une dimension. Implemente differentes granularités sur la dimension considérée. | ||
| + | |||
| + | {{public: | ||
| + | |||
| + | La structure de cube de données est adaptée pour la réalisation d’histogramme multidimensionnels, | ||
| + | * Histogramme et aggrégation | ||
| + | * (vue quantitative) comptage/ | ||
| + | * (vue qualitative) comptage d’événements par catégorie | ||
| + | * (vue intermediaire) comptage d’événements par catégories hiérarchisées | ||
| + | |||
| + | |||
| + | === 7.2.2 Mise en oeuvre === | ||
| + | |||
| + | |||
| + | === XMLA / MDX === | ||
| + | |||
| + | ==== 7.3 Méthodes avancées ==== | ||
| + | |||
| + | **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, | ||
| + | |||
| + | **ESTIMATION ET DECISION** : Méthodes visant à estimer la “valeur” associée à un jeu de données (pour l’aide à la décision) | ||