Course Content
Module 1 : Fondamentaux de la Science des Données
Ce module introductif établit les fondements conceptuels de la science des données. Il définit la discipline dans son contexte historique et interdisciplinaire, présente les rôles professionnels clés et leur collaboration, puis introduit la méthodologie structurée d'un projet de données. L'objectif est de construire une compréhension solide du domaine avant d'aborder les aspects techniques dans les modules suivants.
0/3
Module 2 : Typologie et Collecte des Données
Ce module explore la matière première de la discipline : les données. Vous apprendrez à identifier les différents types de données et à comprendre les méthodes de collecte, qu'elles soient internes ou externes.
0/3
Module 3 : Préparation et Nettoyage des Données
Une étape cruciale et souvent chronophage. Ce module vous enseignera les techniques indispensables pour nettoyer et préparer vos données, une condition sine qua non à toute analyse fiable.
0/3
Module 4 : Analyse Exploratoire des Données (EDA)
Le cœur de l'analyse. Ce module vous apprendra à "dialoguer" avec vos données à travers les statistiques descriptives pour en extraire les premières informations et formuler des hypothèses.
0/3
Module 5 : Visualisation des Données
Savoir communiquer ses résultats est aussi important que l'analyse elle-même. Ce module vous initiera aux principes de la visualisation de données et à la création de graphiques clairs et informatifs avec des outils comme Matplotlib.
0/3
Introduction à la Science des Données

La collecte de données constitue la première étape concrète de tout projet d’analyse. Cette phase détermine largement la qualité et la pertinence des insights qui pourront être extraits. Cette leçon présente les méthodes modernes de collecte, en mettant l’accent sur les techniques automatisées qui révolutionnent l’accès à l’information.

Panorama des méthodes de collecte

Méthodes traditionnelles : Les fondamentaux

Les enquêtes et questionnaires :

Collecte directe auprès des répondants via formulaires structurés. Permettent d’obtenir des données qualitatives et quantitatives spécifiques aux besoins de l’étude.

Avantages :

  • Contrôle total sur les questions posées
  • Données directement exploitables
  • Possibilité de cibler précisément la population

Limites :

  • Biais de réponse et de sélection
  • Coût élevé pour de grands échantillons
  • Données figées dans le temps

Les entretiens et observations :

Collecte qualitative approfondie permettant de comprendre les motivations et comportements.

Applications :

  • Études de marché exploratoires
  • Recherche en sciences sociales
  • Validation d’hypothèses métier

Méthodes automatisées : La révolution numérique

Le Web Scraping : Extraction automatisée du web

Le web scraping consiste à extraire automatiquement des informations structurées à partir de pages web. Cette technique ouvre l’accès à une quantité immense de données publiques.

Principe de fonctionnement :

  • Analyse de la structure HTML de la page cible
  • Identification des éléments à extraire (balises, classes CSS)
  • Automatisation de l’extraction via des scripts
  • Traitement et stockage des données récupérées

Technologies Python essentielles :

Requests : Librairie pour effectuer des requêtes HTTP

import requests

# Récupérer le contenu d'une page
response = requests.get('https://example.com/data')
html_content = response.text

# Vérifier le statut de la réponse
if response.status_code == 200:
    print("Récupération réussie")
else:
    print(f"Erreur: {response.status_code}")

BeautifulSoup : Parser HTML pour extraire les données

from bs4 import BeautifulSoup
import requests

# Récupérer et parser une page
url = "https://quotes.toscrape.com/"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

# Extraire toutes les citations
quotes = []
for quote in soup.find_all('div', class_='quote'):
    text = quote.find('span', class_='text').text
    author = quote.find('small', class_='author').text
    quotes.append({
        'text': text,
        'author': author
    })
print(f"Nombre de citations extraites: {len(quotes)}")

Selenium : Pour les sites avec contenu JavaScript dynamique

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

# Initialiser le navigateur
driver = webdriver.Chrome()
driver.get('https://dynamic-content-site.com')

# Attendre le chargement du contenu dynamique
time.sleep(3)

# Extraire les données après chargement JavaScript
elements = driver.find_elements(By.CLASS_NAME, 'dynamic-content')
data = [element.text for element in elements]
driver.quit()

Cas d’usage pratiques :

Veille concurrentielle :

  • Prix des produits concurrents
  • Nouvelles offres et promotions
  • Avis clients sur les plateformes

Recherche et développement :

  • Publications scientifiques récentes
  • Brevets et innovations sectorielles
  • Tendances technologiques

Marketing digital :

  • Mentions de marque sur le web
  • Influenceurs et leaders d’opinion
  • Contenu viral et engagement

Les APIs : L’accès standardisé aux données

Les APIs (Application Programming Interfaces) constituent la méthode privilégiée pour accéder à des données de manière structurée et légale. Elles offrent un accès direct aux systèmes de données des organisations.

Avantages des APIs :

  • Accès légal et éthique aux données
  • Format standardisé (généralement JSON)
  • Documentation officielle disponible
  • Limites de débit clairement définies
  • Données en temps réel ou quasi-réel

Types d’APIs courantes :

APIs REST : Standard web le plus répandu

import requests
import json

# Exemple: API GitHub pour récupérer les repositories d'un utilisateur
url = "https://api.github.com/users/octocat/repos"
headers = {
    'Accept': 'application/vnd.github.v3+json',
    'User-Agent': 'MonApp/1.0'
}
response = requests.get(url, headers=headers)
repos = response.json()

# Traiter les données récupérées
for repo in repos[:5]:  # Premiers 5 repositories
    print(f"Nom: {repo['name']}")
    print(f"Description: {repo['description']}")
    print(f"Stars: {repo['stargazers_count']}")
    print("---")

APIs avec authentification : Accès sécurisé aux données privées

import requests

# Exemple: API Twitter avec token d'authentification
headers = {
    'Authorization': 'Bearer VOTRE_TOKEN_ICI',
    'Content-Type': 'application/json'
}
url = "https://api.twitter.com/2/tweets/search/recent"
params = {
    'query': 'science des données',
    'max_results': 10
}
response = requests.get(url, headers=headers, params=params)
tweets = response.json()

# Analyser les tweets récupérés
for tweet in tweets.get('data', []):
    print(f"Tweet: {tweet['text'][:100]}...")
    print(f"ID: {tweet['id']}")

Sources d’APIs publiques remarquables :

APIs gouvernementales :

APIs business :

APIs sociales :

  • Twitter API : Tweets et tendances
  • YouTube API : Statistiques de vidéos
  • LinkedIn API : Données professionnelles

Techniques avancées de collecte

Gestion de la pagination

Beaucoup d’APIs limitent le nombre de résultats par requête, nécessitant une approche par pagination :

import requests
import time

def collect_all_data(base_url, params, max_pages=10):
    all_data = []
    page = 1

    while page <= max_pages:
        params['page'] = page
        response = requests.get(base_url, params=params)

        if response.status_code != 200:
            break

        data = response.json()
        if not data.get('results'):  # Plus de données disponibles
            break

        all_data.extend(data['results'])
        page += 1
        time.sleep(1)  # Respect des limites de débit

    return all_data

Gestion des erreurs et retry

import requests
import time
from requests.exceptions import RequestException

def robust_request(url, max_retries=3, delay=1):
    for attempt in range(max_retries):
        try:
            response = requests.get(url, timeout=10)
            response.raise_for_status()  # Lève une exception si statut d'erreur
            return response

        except RequestException as e:
            print(f"Tentative {attempt + 1} échouée: {e}")
            if attempt < max_retries - 1:
                time.sleep(delay * (2 ** attempt))  # Backoff exponentiel
            else:
                raise

Respect de l’éthique et de la légalité

Fichier robots.txt :

Toujours vérifier les permissions avant de scraper :

import requests

def check_robots_txt(domain):
    robots_url = f"{domain}/robots.txt"
    try:
        response = requests.get(robots_url)
        print("Contenu de robots.txt:")
        print(response.text)
    except:
        print("robots.txt non accessible")

# Exemple d'utilisation
check_robots_txt("https://example.com")

Bonnes pratiques éthiques :

  • Respecter robots.txt et les conditions de service
  • Limiter la fréquence des requêtes (éviter la surcharge serveur)
  • Identifier son bot avec un User-Agent approprié
  • Ne pas collecter de données personnelles sensibles
  • Respecter le droit d’auteur et la propriété intellectuelle

Stockage et organisation des données collectées

Structure de stockage recommandée

data_collection_project/
├── raw_data/
│   ├── 2024-03-15_quotes_scraped.json
│   ├── 2024-03-15_weather_api.json
│   └── logs/
├── processed_data/
│   ├── cleaned_quotes.csv
│   └── weather_analysis.csv
├── scripts/
│   ├── scraper_quotes.py
│   ├── api_weather.py
│   └── utils.py
└── documentation/
    ├── api_documentation.md
    └── scraping_notes.md

Sauvegarde et versioning

import json
import pandas as pd
from datetime import datetime

def save_collected_data(data, filename_prefix):
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")

    # Sauvegarde JSON brute
    json_filename = f"raw_data/{timestamp}_{filename_prefix}.json"
    with open(json_filename, 'w', encoding='utf-8') as f:
        json.dump(data, f, ensure_ascii=False, indent=2)

    # Conversion en DataFrame et sauvegarde CSV
    df = pd.DataFrame(data)
    csv_filename = f"processed_data/{timestamp}_{filename_prefix}.csv"
    df.to_csv(csv_filename, index=False, encoding='utf-8')

    print(f"Données sauvegardées: {len(data)} entrées")
    print(f"Fichiers créés: {json_filename}, {csv_filename}")

Points clés à retenir

  • Le web scraping ouvre l’accès à des données massives mais nécessite vigilance éthique
  • Les APIs offrent un accès structuré et légal aux données
  • La gestion d’erreurs et la robustesse sont essentielles pour la collecte automatisée
  • L’organisation et le versioning des données facilitent les analyses ultérieures
  • L’éthique doit guider toute démarche de collecte automatisée

Références

  • Jotform – Méthodes de collecte de données
  • Jedha – Collecte de données : méthodes et outils
  • ScrapingBee – Python Web Scraping: Full Tutorial
  • GeeksforGeeks – Implementing Web Scraping with BeautifulSoup