Aller au contenu
Apprendre.
  • M1 · toutes les matières15 matières : Préparation de données, API & sécurité, CI/CD, Docker, Merise, Dataviz, KNIME, ML appliqué : projet LoL, SQL & UML, SQL avancé, Machine Learning, Git, IA frugale & responsable, Qualité des données, MathématiquesAnnée
  • M2 · toutes les matières4 matières : Deep Learning, AI Act, Comex & Fundraising, Gouvernance & DataMeshAnnée
  • Deep LearningM2 · 4 modules · Réseaux de neurones, CNN, texte, modèles génératifs.Matière
  • Préparation de donnéesM1 · 3 modules · Nettoyer, transformer et fusionner des données avec Python.Matière
  • API & sécuritéM1 · 2 modules · Consommer, concevoir et sécuriser des API.Matière
  • CI/CDM1 · 1 module · Intégration et livraison continues.Matière
  • DockerM1 · 3 modules · Conteneurs, images, volumes, réseaux, Compose.Matière
  • MeriseM1 · 2 modules · Modéliser une base : MCD, MLD, MPD.Matière
  • DatavizM1 · 2 modules · Visualiser pour comprendre et décider.Matière
  • KNIMEM1 · 1 module · Explorer et nettoyer des données en workflow.Matière
  • ML appliqué : projet LoLM1 · 2 modules · Du besoin métier au POC de vision par ordinateur.Matière
  • SQL & UMLM1 · 3 modules · Modèles UML et requêtes SQL.Matière
  • SQL avancéM1 · 3 modules · Jointures, fenêtres, CTE, optimisation.Matière
  • Machine LearningM1 · 3 modules · Régression, classification, segmentation, projet.Matière

↑↓ naviguer↵ ouvre le résultat en surbrillanceesc fermer

Partie 2 · Comparer

Classement et analyse cross-sectionnelle

Jusqu'ici nous avons raisonné dans le temps, actif par actif. Une autre forme d'analyse est essentielle : comparer plusieurs actifs à une même date, sélectionner les meilleurs, produire un classement instantané. On ne regarde plus seulement le passé d'un actif, mais sa position relative parmi les autres.

Trois fonctions de classement : ROW_NUMBER() attribue un rang strict, RANK() gère les ex æquo avec trous, DENSE_RANK() les gère sans trous. Selon l'objectif, on ne veut pas toujours traiter les ex æquo de la même façon.

ValeurROW_NUMBERRANKDENSE_RANK
10111
10211
8332
7443

Vérifie que tu as compris

Dans le tableau, la valeur 8 reçoit 3 avec RANK mais 2 avec DENSE_RANK. Pourquoi ?

À toi de coder

ROW_NUMBER, RANK, DENSE_RANK avec ex æquo

Trois fonctions de classement, trois façons de traiter les ex æquo : ROW_NUMBER donne un rang strict, RANK gère les ex æquo avec des trous, DENSE_RANK sans trous. Table notes(nom, val) déjà remplie avec les valeurs 10, 10, 8, 7 (comme dans le tableau du cours).

Renvoie nom, val, rn, rk, dr, trié par val DESC, nom. ROW_NUMBER départage avec nom ; RANK et DENSE_RANK ne classent que sur val DESC.

Ctrl/⌘+Entrée

Rang des actifs à chaque date

ROW_NUMBER() OVER (PARTITION BY date ORDER BY close DESC)

Pour chaque date, on classe les actifs du plus grand prix au plus petit et on attribue un numéro de ligne. Pour sélectionner les 5 premiers :

SELECT * FROM (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY date ORDER BY close DESC) AS rank_
    FROM prices
) t
WHERE rank_ <= 5

On obtient une sélection top-k par date. (Hors cours : le résultat d'une window function ne peut pas être filtré dans le WHERE de la même requête, d'où la sous-requête ou une CTE.)

Ce classement peut servir à sélectionner les actifs les plus chers, les plus performants ou les plus liquides, construire une stratégie « top performers », ordonner un univers d'investissement à chaque date, comparer des signaux standardisés entre plusieurs actifs.

À toi de coder

Top 2 des actifs à chaque date

Classement cross-sectionnel : à chaque date on classe les actifs du plus grand prix au plus petit. On ne peut pas filtrer directement sur le résultat d'une window function dans le WHERE de la même requête : on la place dans une sous-requête.

Renvoie date, ticker, rang pour les 2 meilleurs actifs de chaque date, trié par date, rang.

Ctrl/⌘+Entrée

Vérifie que tu as compris

Pourquoi PARTITION BY date (et non ticker) dans le classement des actifs ?