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) | ||