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. Open In Colab githubdev

-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} + +``` +::: 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} + +``` +::: ```{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.