diff --git a/README.md b/README.md
index 2c0296262..f140221b8 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# Python pour data-scientists et économistes :snake:
+# Python pour la data science
[![build-doc Actions Status](https://github.com/linogaliana/python-datascientist/actions/workflows/prod.yml/badge.svg)](https://github.com/linogaliana/python-datascientist/actions)
[![Onyxia](https://img.shields.io/badge/SSPcloud-Tester%20via%20SSP--cloud-informational&color=yellow?logo=Python)](https://datalab.sspcloud.fr/launcher/ide/jupyter-python?autoLaunch=true&onyxia.friendlyName=%C2%ABpython-datascientist%C2%BB)
[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](http://colab.research.google.com/github/linogaliana/python-datascientist/blob/pandas_intro/static/notebooks/numpy.ipynb)
@@ -13,28 +13,35 @@
-Ce dépôt `Github`
+Ce dépôt `Github`
stocke les fichiers sources ayant permis de construire le site
.
-Il s'agit de l'ensemble du cours *Python pour les data-scientists* :snake:
+Il s'agit de l'ensemble du cours *Python pour la data science*
que je donne en deuxième année (Master 1) de l'ENSAE.
## Syllabus
-Le syllabus est disponible [là](https://www.ensae.fr/courses/python-pour-le-data-scientist-pour-leconomiste/).
+Le syllabus est disponible [sur le site de l'ENSAE](https://www.ensae.fr/courses/1425-python-pour-le-data-scientist).
Globalement, il propose un contenu très complet pouvant autant
satisfaire des débutants en
-_data-science_ que quelqu'un à la recherche de contenu plus avancé :
+_data science_ que des personnes à la recherche de contenu plus avancé :
-1. Manipulation de données avec `Python`: manipulation de données standards (`pandas`), données géographiques (`geopandas`), récupération de données (webscraping, API)...
-1. Visualisation de données avec `Python`: visualisations classiques (`matplotlib`, `seaborn`), cartographie, visualisations réactives (`plotly`, `folium`)
-1. Modélisation: _machine learning_ (`scikit`), économétrie
-1. Traitement de données textuelles (NLP)
-1. Introduction à la _data-science_ moderne: _cloud computing_, ElasticSearch, intégration continue...
+1. __Manipulation de données__ : manipulation de données standards (`Pandas`), données géographiques (`Geopandas`), récupération de données (webscraping, API)...
+1. __Visualisation de données__ : visualisations classiques (`Matplotlib`, `Seaborn`), cartographie, visualisations réactives (`Plotly`, `Folium`)
+1. __Modélisation__: _machine learning_ (`Scikit`), économétrie
+1. __Traitement de données textuelles__ (NLP): découverte de la tokenisation avec `NLTK` et `SpaCy`, modélisation...
+1. **Introduction à la _data science_ moderne**: _cloud computing_, `ElasticSearch`, intégration continue...
-Un bon complément du contenu du site web est le cours que nous donnons avec Romain Avouac ([@avouacr](https://github.com/avouacr)) en dernière année de l'ENSAE plus tourné mise en production de projets _data-science_: https://ensae-reproductibilite.netlify.app/
+L'ensemble du contenu de ce site s'appuie sur des données
+ouvertes, qu'il s'agisse de données françaises (principalement
+issues de la plateforme
+centralisatrice [`data.gouv`](https://www.data.gouv.fr) ou du site
+_web_ de l'[Insee](https://www.insee.fr)) ou de données
+américaines.
+
+Un bon complément du contenu du site web est le cours que nous donnons avec Romain Avouac ([@avouacr](https://github.com/avouacr)) en dernière année de l'ENSAE plus tourné autour de la mise en production de projets _data-science_: https://ensae-reproductibilite.netlify.app/
@@ -57,12 +64,7 @@ notebooks `Jupyter` dans la configuration qui vous sied le mieux.
-L'ensemble du contenu de ce site s'appuie sur des données
-ouvertes, qu'il s'agisse de données françaises (principalement
-issues de la plateforme
-centralisatrice [`data.gouv`](https://www.data.gouv.fr) ou du site
-_web_ de l'[Insee](https://www.insee.fr)) ou de données
-américaines.
+
diff --git a/content/course/NLP/02_exoclean/index.qmd b/content/course/NLP/02_exoclean/index.qmd
index 2c5e46b12..c7c3361c5 100644
--- a/content/course/NLP/02_exoclean/index.qmd
+++ b/content/course/NLP/02_exoclean/index.qmd
@@ -841,7 +841,7 @@ tfs = tfidf.fit_transform(train['Text'])
```{python}
#| echo: true
-feature_names = tfidf.get_feature_names()
+feature_names = tfidf.get_feature_names_out()
corpus_index = [n for n in list(tfidf.vocabulary_.keys())]
import pandas as pd
df = pd.DataFrame(tfs.todense(), columns=feature_names)
diff --git a/content/course/NLP/03_lda/index.qmd b/content/course/NLP/03_lda/index.qmd
index 9c474a377..96f6049df 100644
--- a/content/course/NLP/03_lda/index.qmd
+++ b/content/course/NLP/03_lda/index.qmd
@@ -13,12 +13,13 @@ tags:
categories:
- Tutoriel
summary: |
- Le modèle [Latent Dirichlet Allocation (LDA)](https://fr.wikipedia.org/wiki/Allocation_de_Dirichlet_latente)
+ La [Latent Dirichlet Allocation (LDA)](https://fr.wikipedia.org/wiki/Allocation_de_Dirichlet_latente)
est un modèle probabiliste génératif qui permet
de décrire des collections de documents de texte ou d’autres types de données discrètes.
La `LDA` fait
partie d’une catégorie de modèles appelés _"topic models"_, qui cherchent à découvrir des structures
- thématiques cachées dans des vastes archives de documents.
+ thématiques cachées dans des vastes archives de documents. Le principe est de décomposer un
+ document comme une collection de thèmes qui se distinguent par des choix de mots différents.
---
::: {.cell .markdown}
@@ -45,15 +46,14 @@ On va ainsi continuer notre exploration de la littérature anglophones :
* HP Lovecraft (HPL) ;
* Mary Wollstonecraft Shelley (MWS).
-Les données sont disponibles ici : [spooky.csv](https://github.com/GU4243-ADS/spring2018-project1-ginnyqg/blob/master/data/spooky.csv) et peuvent être requétées via l'url
+Les données sont disponibles dans la base de
+données [spooky.csv](https://github.com/GU4243-ADS/spring2018-project1-ginnyqg/blob/master/data/spooky.csv) et peuvent être
+importées par `Python` en utilisant directement l'url
.
Le but va être dans un premier temps de regarder dans le détail les termes les plus fréquents utilisés par les auteurs, et les représenter graphiquement.
-
-
-
Ce notebook est librement inspiré de :
* https://www.kaggle.com/enerrio/scary-nlp-with-spacy-and-keras
@@ -61,7 +61,7 @@ Ce notebook est librement inspiré de :
* https://www.kaggle.com/meiyizi/spooky-nlp-and-topic-modelling-tutorial/notebook
La LDA est une technique d'estimation bayésienne.
-Le [poly d'Alberto Brietti](http://alberto.bietti.me/files/rapport-lda.pdf)
+Le [cours d'Alberto Brietti](http://alberto.bietti.me/files/rapport-lda.pdf)
sur le sujet constitue une très bonne ressource pour comprendre
les fondements de cette technique.
@@ -71,13 +71,17 @@ les fondements de cette technique.
Cette page évoquera les principales librairies pour faire du NLP, notamment :
* [WordCloud](https://github.com/amueller/word_cloud)
-* [nltk](https://www.nltk.org/)
-* [spacy](https://spacy.io/)
+* [NLTK](https://www.nltk.org/)
+* [SpaCy](https://spacy.io/)
* [Keras](https://keras.io/)
* [TensorFlow](https://www.tensorflow.org/)
-{{% box status="warning" title="Warning" icon="fa fa-exclamation-triangle" %}}
+::: {.cell .markdown}
+```{=html}
+
+
Hint
+```
Comme dans la [partie précédente](#nlpexo), il faut télécharger quelques
éléments pour que `NTLK` puisse fonctionner correctement. Pour cela, faire:
@@ -88,7 +92,11 @@ nltk.download('punkt')
nltk.download('genesis')
nltk.download('omw-1.4')
~~~
-{{% /box %}}
+
+```{=html}
+
+```
+:::
La liste des modules à importer est assez longue, la voici:
@@ -180,10 +188,9 @@ train_clean.head(2)
Le modèle __Latent Dirichlet Allocation (LDA)__ est un modèle probabiliste génératif qui permet
de décrire des collections de documents de texte ou d’autres types de données discrètes. LDA fait
-partie d’une catégorie de modèles appelés _“topic models”_, qui cherchent à découvrir des structures
+partie d’une catégorie de modèles appelés _"topic models"_, qui cherchent à découvrir des structures
thématiques cachées dans des vastes archives de documents.
-
Ceci permet d’obtenir des méthodes
efficaces pour le traitement et l’organisation des documents de ces archives: organisation automatique
des documents par sujet, recherche, compréhension et analyse du texte, ou même résumer des
@@ -257,13 +264,14 @@ corpus = train_clean[train_clean["Author"] == "EAP"]
Il existe plusieurs manières d'entraîner une LDA.
-Nous allons utiliser `scikit` ici avec la méthode `LatentDirichletAllocation`.
+Nous allons utiliser `Scikit` ici avec la méthode `LatentDirichletAllocation`.
Comme expliqué dans la partie [modélisation](#modelisation) :
1. On initialise le modèle ;
2. On le met à jour avec la méthode `fit`.
```{python}
+#| output: false
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.decomposition import LatentDirichletAllocation
@@ -290,7 +298,7 @@ résultats :
```{python}
# Helper function
def print_topics(model, count_vectorizer, n_top_words):
- words = count_vectorizer.get_feature_names()
+ words = count_vectorizer.get_feature_names_out()
for topic_idx, topic in enumerate(model.components_):
print("\nTopic #%d:" % topic_idx)
print(" ".join([words[i]
@@ -305,7 +313,7 @@ La représentation sous forme de liste de mots n'est pas la plus pratique...
On peut essayer de se représenter un *wordcloud* de chaque sujet pour mieux voir si cette piste est pertinente :
```{python, results = "hide"}
-tf_feature_names = count_vectorizer.get_feature_names()
+tf_feature_names = count_vectorizer.get_feature_names_out()
def wordcloud_lda(lda, tf_feature_names):
@@ -339,7 +347,11 @@ Le module `pyLDAvis` offre quelques visualisations bien pratiques lorsqu'on
désire représenter de manière synthétique les résultats d'une LDA et observer la distribution sujet x mots.
-{{% box status="hint" title="Hint" icon="fa fa-lightbulb" %}}
+::: {.cell .markdown}
+```{=html}
+
+
Hint
+```
Dans un *notebook* faire :
~~~python
@@ -349,15 +361,19 @@ pyLDAvis.enable_notebook()
~~~
Pour les utilisateurs de Windows, il est nécessaire d'ajouter l'argument
-`n_jobs = 1`. Sinon, `python` tente d'entraîner le modèle avec de la
-parallélisation. Le problème est que les processus sont des FORKs, ce que
-Windows ne supporte pas. Sur un système unix, on peut se passer de cet
+`n_jobs = 1`. Sinon, `Python` tente d'entraîner le modèle avec de la
+parallélisation. Le problème est que les processus sont des `FORKs`, ce que
+Windows ne supporte pas. Sur un système `Unix` (Linux, Mac OS), on peut se passer de cet
argument.
-{{% /box %}}
+```{=html}
+
+```
+:::
```{python}
#| output: hide
+#| eval: false
#!pip install pyLDAvis #à faire en haut du notebook sur colab
import pyLDAvis
@@ -368,20 +384,15 @@ vis_data = pyLDAvis.sklearn.prepare(lda, count_data, count_vectorizer, n_jobs =
pyLDAvis.display(vis_data)
```
-
-{{< rawhtml >}}
-
-
```{python}
#| echo: false
#| output: asis
+#| eval: false
print(
pyLDAvis.prepared_data_to_html(vis_data)
)
```
-{{< /rawhtml >}}
-
* Chaque **bulle** représente un sujet. Plus la bulle est grande, plus il y a de documents qui traitent de ce sujet.