2 - Collecter & formatter les données

Collecter les données

(Data retrieval ou data collecting en anglais)

Pour commencer, il faut aller chercher les données là où elles sont.

  1. Dans le meilleur des cas, on a déjà toutes les données qu’on veut en format structuré.
  2. Deuxième possibilité, les données sont stockées dans un data lake, dans un format non structuré — auquel cas il va falloir les formatter.
  3. On peut éventuellement aller chercher des données dans des datasets publics. Par exemple:

  4. Dernière possibilité, extraire les données sur le web.
    On appelle ce procédé du web scraping, et il consiste à
    1. parcourir les pages web avec un crawler, aussi couramment appelé spider — un bot qui se charge d’explorer les différents liens et récupérer le contenu des pages
    2. extraire le contenu des pages avec un scraper, un bot qui se charge d’extraire les données dans le HTML.

    Packages Python: BeautifulSoup, LXML, MechanicalSoup, Requests, Scrapy, Selenium, Urllib
    Exemple BeautifulSoup


Formatter les données

Formatter les données (data wrangling ou data munging en anglais) consiste à transformer les données brutes en format structuré, exploitable pour l’analyse des données.

Pour être exploitables, les données doivent être

  1. structurées: organisées en lignes et colonnes (cas et caractéristiques)

  2. uniformes: les valeurs numériques des différentes sources doivent utiliser la même unité (ex: kilo vs pound), et les valeurs catégoriques doivent utiliser le même format (ex: H/F vs actor/actress).

  3. exhaustives: toutes les valeurs souhaitées sont representées et, idéalement, équilibrées (on a pas des données sur-représentées par rapport aux autres).

  4. uniques: il n’y a pas de cas dupliqués. Typiquement, des doublons surviennent lorsqu’on combine différents datasets ou qu’on scrape le web. Il est important de comprendre l’origine des doublons car ils peuvent parfois être légitimes. Exemple: si, lors du transfert de la base de données, les données ont été anonymisées (on n’a plus de nom, ID, etc).

  5. précises: il n’y a pas de valeurs en dehors de l’intervalle autorisé.
    Exemple: âge > 200

  6. temporelles: toute variable créée ou mise à jour après la variable prédite est exclue — pour éviter une fuite de la valeur prédite (target leakage)

    Exemple: on dispose des caractéristiques take_antibiotic et got_pneumonia. L’analyse des données montre une forte corrélation entre ces deux colonnes. Sauf que take_antibiotic est une valeur souvent mise à jour: les patients qui avaient une pneumonie ont reçus des antibiotiques — les patients n’ont pas eu une pneumonie parce qu’ils prenaient des antibiotiques. Si take_antibiotic est mise à jour après got_pneumonia, il faut l’exclure.

  7. pertinentes: les caractéristiques collectées répondent-elles au besoin pour lequel elles ont été collectées?
    Exemple: faut-il prendre en compte l’ethnicité / le sexe pour déterminer la solvabilité des clients d’une banque?


Générer des caractéristiques

Selon le besoin, on peut éventuellement générer des caractéristiques (feature engineering ou feature extraction en anglais). Ça implique généralement