diff --git a/content/annexes/corrections.qmd b/content/annexes/corrections.qmd index 18da5363d..960818c6e 100644 --- a/content/annexes/corrections.qmd +++ b/content/annexes/corrections.qmd @@ -62,7 +62,7 @@ print_badges("content/manipulation/03_geopandas_TP.qmd", correction=True) ``` ::: -Webscraping +* [Exercices _webscraping_](../manipulation/04a_webscraping.qmd) ::: {.cell .markdown} ```{python} @@ -74,7 +74,9 @@ print_badges("content/manipulation/04a_webscraping_TP.qmd", correction=True) ``` ::: -Expressions régulières: + +* [Exercices expressions régulières](../manipulation/04b_regex_TP.qmd) + ::: {.cell .markdown} ```{python} @@ -86,7 +88,8 @@ print_badges("content/manipulation/04b_regex_TP.qmd", correction=True) ``` ::: -Chapitre sur les API: +* [Exercices API](../manipulation/04c_API_TP.qmd) + ::: {.cell .markdown} ```{python} @@ -100,23 +103,26 @@ print_badges("content/manipulation/04c_API_TP.qmd", correction=True) ## Partie 2: visualiser les données +* [Exercices graphiques classiques](../visualisation/matplotlib.qmd) ::: {.cell .markdown} ```{python} -#| echo: false +#| echo: true #| output: 'asis' #| include: true -#| eval: false +#| eval: true print_badges("content/visualisation/matplotlib.qmd", correction=True) ``` ::: +* [Exercices sur la cartographie](../visualisation/maps.qmd) + ::: {.cell .markdown} ```{python} #| echo: false #| output: 'asis' #| include: true -#| eval: false +#| eval: true print_badges("content/visualisation/maps.qmd", correction=True) ``` ::: @@ -124,32 +130,41 @@ print_badges("content/visualisation/maps.qmd", correction=True) ## Partie 3: modéliser +* [Exercices sur le _preprocessing_](../modelisation/0_preprocessing.qmd) + + ::: {.cell .markdown} ```{python} #| echo: false #| output: 'asis' #| include: true -#| eval: false +#| eval: true print_badges("content/modelisation/0_preprocessing.qmd", correction=True) ``` ::: +* [Exercices sur l'évaluation des modèles](../modelisation/1_modelevaluation.qmd) + + ::: {.cell .markdown} ```{python} #| echo: false #| output: 'asis' #| include: true -#| eval: false +#| eval: true print_badges("content/modelisation/1_modelevaluation.qmd", correction=True) ``` ::: +* [Exercices sur la classification](../modelisation/2_SVM.qmd) + + ::: {.cell .markdown} ```{python} #| echo: false #| output: 'asis' #| include: true -#| eval: false +#| eval: true print_badges("content/modelisation/2_SVM.qmd", correction=True) ``` ::: diff --git a/content/modelisation/0_preprocessing.qmd b/content/modelisation/0_preprocessing.qmd index 037abfa32..777c76a21 100644 --- a/content/modelisation/0_preprocessing.qmd +++ b/content/modelisation/0_preprocessing.qmd @@ -181,6 +181,7 @@ par comté x année avec en colonnes les résultats de chaque candidat dans cet Si vous ne faites pas l'exercice 1, pensez à charger les données en executant la fonction `get_data.py` : +::: {.python} ```{python} #| echo: true #| output: false @@ -194,6 +195,8 @@ open('getdata.py', 'wb').write(r.content) import getdata votes = getdata.create_votes_dataframes() ``` +::: + Ce code introduit une base nommée `votes` dans l'environnement. Il s'agit d'une base rassemblant les différentes sources. Elle a l'aspect @@ -346,6 +349,9 @@ ainsi que les relations entre les variables explicatives.

Exercice 2 : Regarder les corrélations entre les variables

``` +__Cet exercice est OPTIONNEL__ + + 1. Créer un DataFrame `df2` plus petit avec les variables `winner`, `votes_gop`, `Unemployment_rate_2019`, `Median_Household_Income_2019`, `Percent of adults with less than a high school diploma, 2015-19`, @@ -361,6 +367,7 @@ ainsi que les relations entre les variables explicatives. ```{python} #| output: false +#| echo: true # 1. Créer le data.frame df2. df2 = votes.set_index("GEOID").loc[: , ["winner", "votes_gop", @@ -371,6 +378,8 @@ df2 = votes.set_index("GEOID").loc[: , ["winner", "votes_gop", ```{python} #| output: false +#| echo: true + # 2. Matrice de corrélation graphique g1 = sns.heatmap(df2.drop("winner", axis = 1).corr(), cmap='coolwarm', annot=True, fmt=".2f") @@ -394,6 +403,7 @@ g2 Le nuage de point obtenu à l'issue de la question 3 ressemblera à : ```{python} +#| echo: true # 3. Matrice de nuages de points ax = pd.plotting.scatter_matrix(df2, figsize = (15,15)) ``` @@ -406,6 +416,7 @@ Le résultat de la question 4 devrait, quant à lui, ressembler au graphique suivant : ```{python} +#| echo: true # 4. Matrice de corrélation avec plotly import plotly import plotly.express as px diff --git a/content/modelisation/2_SVM.qmd b/content/modelisation/2_SVM.qmd index 7b5fc4e5e..b86b60e0d 100644 --- a/content/modelisation/2_SVM.qmd +++ b/content/modelisation/2_SVM.qmd @@ -57,6 +57,7 @@ Le code est disponible [sur `Github`](https://github.com/linogaliana/python-datascientist/blob/master/content/modelisation/get_data.py). +::: {.python} ```{python} #| echo: true #| output: false @@ -70,6 +71,7 @@ open('getdata.py', 'wb').write(r.content) import getdata votes = getdata.create_votes_dataframes() ``` +::: Pour ce TP, nous aurons besoin des packages suivants : @@ -207,7 +209,7 @@ créer des échantillons de test (20 % des observations) et d'estimation (80 %) 5. Refaire les questions précédentes avec des variables normalisées. Le résultat est-il différent ? -6. Changer de variables *x*. Utiliser uniquement le résultat passé du vote démocrate et le revenu (`votes_gop` et `Median_Household_Income_2019`). Regarder les résultats, notamment la matrice de confusion. +6. Changer de variables *x*. Utiliser uniquement le résultat passé du vote démocrate (année 2016) et le revenu. Les variables en question sont `share_2016_republican` et `Median_Household_Income_2019`. Regarder les résultats, notamment la matrice de confusion. 7. [OPTIONNEL] Faire une 5-fold validation croisée pour déterminer le paramètre *C* idéal. diff --git a/content/modelisation/3_regression.qmd b/content/modelisation/3_regression.qmd index 82066cc05..6da572377 100644 --- a/content/modelisation/3_regression.qmd +++ b/content/modelisation/3_regression.qmd @@ -24,6 +24,7 @@ description: | `statsmodels`, on dispose de tous les outils pour satisfaire à la fois data scientists et économistes. image: featured_regression.png +echo: false --- ::: {.cell .markdown} @@ -43,33 +44,6 @@ print_badges("content/modelisation/3_regression.qmd") ::: -Nous allons partir du même jeu de données que précédemment, -c'est-à-dire les résultats des élections US 2020 présentés dans l'[introduction -de cette partie](index.qmd) : les données de vote aux élections présidentielles américaines -croisées à des variables sociodémographiques. -Le code -est disponible [sur Github](https://github.com/linogaliana/python-datascientist/blob/master/content/modelisation/get_data.py). - - -```{python} -#| echo: true -#| message: false -#| warning: false - -#!pip install --upgrade xlrd #colab bug verson xlrd -#!pip install geopandas - -import requests - -url = 'https://raw.githubusercontent.com/linogaliana/python-datascientist/master/content/modelisation/get_data.py' -r = requests.get(url, allow_redirects=True) -open('getdata.py', 'wb').write(r.content) - -import getdata -votes = getdata.create_votes_dataframes() -``` - - Le précédent chapitre visait à proposer un premier modèle pour comprendre les comtés où le parti Républicain l'emporte. La variable d'intérêt étant bimodale (victoire ou défaite), on était dans le cadre d'un modèle de @@ -87,6 +61,7 @@ croisées à des variables sociodémographiques. Le code est disponible [sur Github](https://github.com/linogaliana/python-datascientist/blob/master/content/modelisation/get_data.py). +::: {.python} ```{python} #| include: false #| echo: true @@ -103,6 +78,22 @@ open('getdata.py', 'wb').write(r.content) import getdata votes = getdata.create_votes_dataframes() ``` +::: + +Ce chapitre va utiliser plusieurs _packages_ +de modélisation, les principaux étant `Scikit` et `Statsmodels`. +Voici une suggestion d'import pour tous ces _packages_. + +```{python} +#| echo: true +import numpy as np +from sklearn.linear_model import LinearRegression +from sklearn.model_selection import train_test_split +import sklearn.metrics +import matplotlib.pyplot as plt +import seaborn as sns +import pandas as pd +``` ## Principe général @@ -164,17 +155,6 @@ $\epsilon \sim \mathcal{N}(0,\sigma^2)$ i.i.d., l'estimateur $\beta$ obtenu est équivalent à celui du Maximum de Vraisemblance dont la théorie asymptotique nous assure l'absence de biais, la variance minimale (borne de Cramer-Rao). -```{python} -# packages utiles -import numpy as np -from sklearn.linear_model import LinearRegression -from sklearn.model_selection import train_test_split -import sklearn.metrics -import matplotlib.pyplot as plt -import seaborn as sns -import pandas as pd -``` - ::: {.cell .markdown} ```{=html}