Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Minor updates #80

Merged
merged 13 commits into from
Mar 6, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/documentation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ jobs:
run: python -m pip install -r requirements-dev.txt

- name: Cache pip
uses: actions/cache@v2
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('requirements-dev.txt') }}
Expand Down
7 changes: 7 additions & 0 deletions _doc/api/datasets/data_ts.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@

teachpyx.datasets.data_ts
=========================

.. automodule:: teachpyx.datasets.data_ts
:members:
:no-undoc-members:
1 change: 1 addition & 0 deletions _doc/api/datasets/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ teachpyx.datasets


data_helper
data_ts
documentation
enedis
gpd_helper
Expand Down
76 changes: 68 additions & 8 deletions _doc/articles/2025/2025-03-01-route2025.rst
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ Séance 4 (21/2)
* prétraitements
* anomalie
* cartes
* clustering

**Cartes**

Expand All @@ -109,25 +110,32 @@ Séance 4 (21/2)
* `Réseau de neurones <https://sdpython.github.io/doc/mlstatpy/dev/c_ml/rn/rn.html>`_,
`LeNet <https://en.wikipedia.org/wiki/LeNet>`_
* `Seq2Seq <https://en.wikipedia.org/wiki/Seq2seq>`_,
`Sequence To Sequnce <https://paperswithcode.com/method/seq2seq>`_,
`Sequence To Sequence <https://paperswithcode.com/method/seq2seq>`_,
`Sequence to Sequence (seq2seq) and Attention
<https://lena-voita.github.io/nlp_course/seq2seq_and_attention.html>`_,
`Transformers <https://research.google/blog/transformer-a-novel-neural-network-architecture-for-language-understanding/>`_,
`Attention is All You Need
<https://france.devoteam.com/paroles-dexperts/attention-is-all-you-need-comprendre-le-traitement-naturel-du-langage-avec-les-modeles-transformers/>`_
<https://france.devoteam.com/paroles-dexperts/attention-is-all-you-need-comprendre-le-traitement-naturel-du-langage-avec-les-modeles-transformers/>`_,
`BLEU <https://fr.wikipedia.org/wiki/BLEU_(algorithme)>`_

**Anomalies**

* `Novelty and Outlier Detection <https://scikit-learn.org/stable/modules/outlier_detection.html>`_

**Clustering**

* `clustering <https://scikit-learn.org/stable/modules/clustering.html>`_
* Vieux notebooks sur l'utilisation de vélos à Chicago
`City Bike Views <https://github.com/sdpython/ensae_projects/blob/master/_doc/notebooks/challenges/city_bike/city_bike_views.ipynb>`_,
`City Bike Clustering <https://github.com/sdpython/ensae_projects/blob/master/_doc/notebooks/challenges/city_bike/city_bike_solution_cluster_start.ipynb>`_,

**Prétraitement**

* Dates, Catégories : `category_encoders <https://contrib.scikit-learn.org/category_encoders/>`,
`skrub <https://skrub-data.org/stable/>`_,
* Dates, Catégories : :epkg:`category_encoders`, :epkg:`skrub`,
:ref:`Prétraitement des catégories <nbl-practice-ml-pretraitement_cat>`
* Son : :epkg:`librosa`, voir :ref:`Prétraitement du son <nbl-practice-ml-pretraitement_son>`
* Image : :epkg:`scikit-image`, voir :ref:`Prétraitement d'une image <nbl-practice-ml-pretraitement_image>`
* Texte : :ref:`Prétraitement d'une image <nbl-practice-ml-pretraitement_texte>`
* Texte : :ref:`Prétraitement du texte <nbl-practice-ml-pretraitement_texte>`

Pour la suite, on souhaite comparer ces approches sur un jeu
accessible depuis le package `datasets <https://huggingface.co/docs/datasets/en/index>`_.
Expand All @@ -148,7 +156,59 @@ accessible depuis le package `datasets <https://huggingface.co/docs/datasets/en/
Séance 5 (6/3)
==============

* série temporelles
* analyses de survie
* DeepAR
**Régression, Classification linéaires**

:epkg:`statsmodels` pour obtenir le résultat de tests de nullité des coefficients

* :ref:`Régression logistique en 2D <nbl-practice-ml-winesc_color_line>`
* :ref:`Plusieurs modèles, données disjointes <nbl-practice-ml-winesc_color_linear>`

**Interprétabilité**

* `Partial Dependence <https://scikit-learn.org/stable/modules/partial_dependence.html>`_
* `Permutation Importance <https://scikit-learn.org/stable/modules/permutation_importance.html>`_
* `LIME <https://arxiv.org/abs/1602.04938>`_
* `Shapley value <https://en.wikipedia.org/wiki/Shapley_value>`_,
`SHAP <https://shap.readthedocs.io/en/latest/index.html>`_
* `Counterfactual Reasoning and Learning Systems <https://arxiv.org/abs/1209.2355>`_

**séries temporelles**

`Foundation Models for Time Series Analysis: A Tutorial and Survey <https://arxiv.org/pdf/2403.14735>`_

Le modèle de référence est :epkg:`statsmodels`

* :ref:`Single Spectrum Analysis (SSA) <nbl-practice-ml-timeseries_ssa>`
* :ref:`Décomposition d'une série temporelle <nbl-practice-ml-timeseries_seasonal>`

:epkg:`sktime` propose une API plus proche de :epkg:`scikit-learn`
et d'autres modèles comme le clusting ou la segmentation de séries temporelles.

:epkg:`prophet` fait aussi de la prédiction et contient aussi des algorithmes
de détection de changement de régime, il contient une bonne base de jours
fériés.

:epkg:`pyflux` permet d'estimer des modules `GARCH
<https://en.wikipedia.org/wiki/Autoregressive_conditional_heteroskedasticity>`_.

**Analyse de survie**

* :epkg:`scikit-survival`, :epkg:`lifelines`, analyses de survie,
`Analyse de survie <https://sdpython.github.io/doc/mlstatpy/dev/c_ml/survival_analysis.html>`_,

**Deep Learning**

* `DeepAR <https://arxiv.org/abs/1704.04110>`_
(code `Autoregressive modelling with DeepAR and DeepVAR
<https://pytorch-forecasting.readthedocs.io/en/stable/tutorials/deepar.html#>`_)
* `Time Series Forecasting with LLMs: Understanding and Enhancing Model Capabilities <https://arxiv.org/html/2402.10835v1>`_
* `Time-LLM: Time Series Forecasting by Reprogramming Large Language Models <https://arxiv.org/abs/2310.01728>`_
* temps réel

Evaluation
==========

* https://defis.data.gouv.fr/
* le projet doit inclure au moins un graphe
*Partial Dependence* ou *Permutation Importance* (voir liens ci-dessus)
* soutenance 11 avril 9h-13h
91 changes: 91 additions & 0 deletions _doc/articles/2025/2025-04-01-route2025.rst
Original file line number Diff line number Diff line change
Expand Up @@ -118,3 +118,94 @@ Excel avec un graphe automatiquement depuis Python.
* :ref:`l-example-serialization`
* :ref:`l-example-plot-groupby`
* :ref:`Manipulation de données avec pandas <nbl-c_data-nb_pandas>`

Journée 3 (3/3)
===============

**Partie 1**

* retour sur la syntaxe du langage python, boucle, test, fonctions et classes,
* exercice : :ref:`Tracer une pyramide bigarrée <nbl-practice-tds-base-pyramide_bigarree>`
* :ref:`exceptions`
* :ref:`l-regex`, :ref:`Expressions régulières <nbl-practice-py-base-exercice_regex>`
* :mod:`pickle`, fichiers pickle (voir :ref:`chap_serialization`)
* récupération des fichiers préparés pour la formation avec pandas
* utilisation de :epkg:`skrub` pour avoir un premier aperçu ou
:epkg:`pandas-profiling`, (voir aussi :epkg:`orange3`)
* première jointure

**Partie 2**

* gestion des dates
* rappel pandas: group by, jointure, inner, outer, left, right, pivot
* une fois la base complète obtenue, analyse de nouveau
* API `REST <https://en.wikipedia.org/wiki/REST>`_, exemple avec l'API de la
`Banque de France <https://webstat.banque-france.fr/fr/pages/guide-migration-api/>`_
et le module `requests <https://requests.readthedocs.io/en/latest/>`_

**Questions sur les données une fois la jointure effectuée**

* A-t-on associé tous les sinistres ?
* Calculer la durée entre la date d'un sinistre et le premier jour couvert par l'assurance.
Tracer sa distribution. Que remarque-t-on ?
* Peut-on garder tous les sinistres associés ? (il faut regarder la période couverte)
* On calcule le nombre de sinistres par individu, puis on fait la moyenne
par année. Est-ce que la proportion paraît constante ?
* On fait de même pour différentes catégories de la base ?
* Comment illustrer rapidement cela avec un graphique ?
* Comment faire des statistiques sur une année ?
Comment faire avec des assurances à cheval sur deux années ?

Journée 4 (4/3)
===============

**Partie 1**

* retour sur les graphes :epkg:`matplotlib`, :epkg:`seaborn`, :epkg:`plotly`, :epkg:`skrub`
* cartographie, :epkg:`cartopy`, :epkg:`folium`
* corrélations, pairplots
* cubes de données avec pandas, passer un indice à droite (colonnes), à gauche (index),
:ref:`Cube de données et pandas <nbl-c_data-nb_pandas_cube>`
* reprise de quelques traitement de la veille en SQL :func:`pandas.read_sql`, :meth:`pandas.DataFrame.to_sql`
* mêmes opérations avec :epkg:`SQLite`, :mod:`sqlite3`
* gestion des doublons avec :meth:`pandas.DataFrame.duplicated`
* identification des valeurs aberrantes, voir :meth:`pandas.DataFrame.quantile`
* :ref:`Tests unitaires <nbl-practice-py-base-tests_unitaires>`
* On reprend le code écrit jusqu'à présent. On veut écrire une fonction qui
effectue la jointure et extrait toutes les lignes aberrantes ou manquantes.
* Ecrire un test unitaire qui valide cette fonction.
Peut-on utiliser les données qu'on manipule depuis
le début de la séance ?

**Partie 2**

* notion d'itérateur en python
* application à :func:`pandas.read_csv` version itérateur pour manipuler des gros dataframes
* utilisation de sqlite3 (extension sqlite3 vscode)
* découpage d'une base en deux, apprentissage, respecter le temps et les identifiants
* calcul du prix d'un contrat d'assurance pour un an en fonction de
variables choisies en fonction des données connues
* Obtient-on le même prix sur les deux bases ?
* Ecrire le test unitaire validant la fonction qui calcule le prix.
* Notion de package.

Journée 5 (5/3)
===============

* introduction de :epkg:`scikit-learn`
* valeurs manquantes, remplacement simple (moyenne),
corrélations (:class:`sklearn.impute.KNNImputer`), prédictions
(:class:`sklearn.impute.IterativeImputer`),
(voir `sklearn.impute <https://scikit-learn.org/stable/api/sklearn.impute.html>`_)
* premières impressions
* exemples classique pour traiter, enrichir un jeux de données :
`skrub tutorial <https://skrub-data.org/stable/auto_examples/00_getting_started.html>`_,
voir aussi
`AggJoiner on a credit fraud dataset <https://skrub-data.org/stable/auto_examples/08_join_aggregation.html>`_
* :class:`sklearn.pipeline.Pipeline`, :class:`sklearn.compose.ColumnTransformer`,
:class:`sklearn.pipeline.FeatureUnion`
* Dates, Catégories : :epkg:`category_encoders`, :epkg:`skrub`,
:ref:`Prétraitement des catégories <nbl-practice-ml-pretraitement_cat>`
* Son : :epkg:`librosa`, voir :ref:`Prétraitement du son <nbl-practice-ml-pretraitement_son>`
* Image : :epkg:`scikit-image`, voir :ref:`Prétraitement d'une image <nbl-practice-ml-pretraitement_image>`
* Texte : :ref:`Prétraitement du texte <nbl-practice-ml-pretraitement_texte>`
1 change: 1 addition & 0 deletions _doc/c_data/dataframes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@ Dataframes

nb_dataframe
nb_pandas
nb_pandas_cube
nb_dataframe_matrix_speed

Loading