Skip to content

Commit

Permalink
Listing pour la première partie (#369)
Browse files Browse the repository at this point in the history
* Premiers chapitres

* Update index.qmd

* Update index.qmd

* Update index.qmd

* numeric_onky

* Automated changes

* Automated changes

* eval true

* Automated changes

* Automated changes

* add figure

* Automated changes

* Automated changes

* webscraping

* dev

* Automated changes

* Automated changes

* description

* images

* Automated changes

* Automated changes

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
  • Loading branch information
linogaliana and github-actions[bot] committed Jul 7, 2023
1 parent 2dbf853 commit ef28fef
Show file tree
Hide file tree
Showing 7 changed files with 49 additions and 29 deletions.
6 changes: 3 additions & 3 deletions content/course/manipulation/01_numpy/index.qmd
Expand Up @@ -12,10 +12,10 @@ categories:
- Manipulation
slug: "numpy"
type: book
summary: |
`numpy` constitue la brique de base de l'écosystème de la _data-science_ en
description: |
`Numpy` constitue la brique de base de l'écosystème de la _data-science_ en
`Python`. Toutes les librairies de manipulation de données, de modélisation
et de visualisation reposent, de manière plus ou moins directe, sur `numpy`.
et de visualisation reposent, de manière plus ou moins directe, sur `Numpy`.
Il est donc indispensable de revoir quelques notions sur ce package avant
d'aller plus loin.
image: featured.png
Expand Down
6 changes: 3 additions & 3 deletions content/course/manipulation/02a_pandas_tutorial/index.qmd
@@ -1,5 +1,5 @@
---
title: "Introduction à pandas"
title: "Introduction à Pandas"
date: 2020-07-28T13:00:00Z
draft: false
weight: 20
Expand All @@ -14,8 +14,8 @@ categories:
- Manipulation
slug: pandas
type: book
summary: |
`pandas` est l'élément central de l'écosystème `Python` pour la _data-science_.
description: |
`Pandas` est l'élément central de l'écosystème `Python` pour la _data-science_.
Le succès récent de `Python` dans l'analyse de données tient beaucoup à `pandas` qui a permis d'importer la
logique `SQL` dans le langage `Python`. `pandas` embarque énormément de
fonctionalités qui permettent d'avoir des _pipelines_ efficaces pour
Expand Down
37 changes: 25 additions & 12 deletions content/course/manipulation/02b_pandas_TP/index.qmd
Expand Up @@ -14,14 +14,13 @@ categories:
- Exercice
slug: pandasTP
type: book
summary: |
description: |
Après avoir présenté la logique de `pandas` dans le chapitre précédent,
ce chapitre vise à illustrer les fonctionalités du _package_
à partir de données d'émissions de gaz à effet de serre
de l'[`Ademe`](https://data.ademe.fr/).
echo: true
output: false
eval: false
image: featured.png
---

Expand Down Expand Up @@ -376,7 +375,7 @@ df_city['dep'] = df_city.index.str[:2]
```{python}
#| echo: false
# Question 3
df_log = df.groupby('dep').sum().apply(np.log)
df_log = df.groupby('dep').sum(numeric_only = True).apply(np.log)
print(df_log.head())
df_log.sample(5).plot(kind = "bar")
```
Expand All @@ -385,8 +384,8 @@ df_log.sample(5).plot(kind = "bar")
#| echo: false
# Question 4
## Emissions totales par département (df)
df_emissions = df.reset_index().set_index(['INSEE commune','dep']).sum(axis = 1).groupby('dep').sum()
#df.reset_index().groupby('dep').sum().sum(axis = 1).head() #version simplifiee ?
df_emissions = df.reset_index().set_index(['INSEE commune','dep']).sum(axis = 1, numeric_only = True).groupby('dep').sum(numeric_only = True)
#df.reset_index().groupby('dep').sum(numeric_only = True).sum(axis = 1, numeric_only = True).head() #version simplifiee ?
gros_emetteurs = df_emissions.sort_values(ascending = False).head(10)
petits_emetteurs = df_emissions.sort_values().head(5)
Expand Down Expand Up @@ -435,8 +434,8 @@ df_copy2 = df_copy2.reset_index()
#| echo: false
#| eval: false
# Question 3
%timeit df_copy.drop('Commune', axis = 1).groupby('dep').sum()
%timeit df_copy2.drop('Commune', axis = 1).groupby('dep').sum()
%timeit df_copy.drop('Commune', axis = 1).groupby('dep').sum(numeric_only = True)
%timeit df_copy2.drop('Commune', axis = 1).groupby('dep').sum(numeric_only = True)
# Le temps d'exécution est plus lent sur la base sans index par département.
```

Expand Down Expand Up @@ -481,6 +480,7 @@ En règle générale, avec `Python` comme avec `R`, les formats *long* sont souv

```{python}
#| echo: false
#| label: question1
# Question 1
df_wide = df.copy()
Expand All @@ -489,6 +489,7 @@ df_wide[['Commune','dep', "Agriculture", "Tertiaire"]].head()

```{python}
#| echo: false
#| label: question2
# Question 2
df_wide.reset_index().melt(id_vars = ['INSEE commune','Commune','dep'],
Expand All @@ -497,22 +498,24 @@ df_wide.reset_index().melt(id_vars = ['INSEE commune','Commune','dep'],

```{python}
#| echo: false
#| label: question3
# Question 3
(df_wide.reset_index()
.melt(id_vars = ['INSEE commune','Commune','dep'],
var_name = "secteur", value_name = "emissions")
.groupby('secteur').sum().plot(kind = "barh")
.groupby('secteur').sum(numeric_only = True).plot(kind = "barh")
)
```

```{python}
#| echo: false
#| label: question4
# Question 4
(df_wide.reset_index().melt(id_vars = ['INSEE commune','Commune','dep'],
var_name = "secteur", value_name = "emissions")
.groupby(['secteur','dep']).sum().reset_index().sort_values(['dep','emissions'], ascending = False).groupby('dep').head(1)
.groupby(['secteur','dep']).sum(numeric_only=True).reset_index().sort_values(['dep','emissions'], ascending = False).groupby('dep').head(1)
)
```

Expand Down Expand Up @@ -552,7 +555,7 @@ df_wide = df.copy()
df_long_agg = (df_wide.reset_index()
.melt(id_vars = ['INSEE commune','Commune','dep'],
var_name = "secteur", value_name = "emissions").groupby(["dep", "secteur"]).sum()
var_name = "secteur", value_name = "emissions").groupby(["dep", "secteur"]).sum(numeric_only = True)
)
df_long_agg.head()
Expand Down Expand Up @@ -615,7 +618,7 @@ On utilise de manière indifférente les termes *merge* ou *join*. Le deuxième
#| echo: false
# Question 1
df['emissions'] = df.sum(axis = 1)
df['emissions'] = df.sum(axis = 1, numeric_only = True)
```

```{python}
Expand All @@ -641,14 +644,24 @@ np.log(df_merged['empreinte']).plot.hist()
df_merged['empreinte'].describe()
```


```{python}
#| echo: false
# Question 4
df_merged.corr()['empreinte'].nlargest(10)
df_merged.corr(numeric_only=True)['empreinte'].nlargest(10)
# Les variables en lien avec le transport.
```

```{python}
#| output: false
#| echo: false
np.log(df_merged['empreinte']).plot.hist()
plt.savefig("featured.png")
```



# Exercices bonus

Les plus rapides d'entre vous sont invités à aller un peu plus loin en s'entraînant avec des exercices bonus qui proviennent du [site de Xavier Dupré](http://www.xavierdupre.fr/app/ensae_teaching_cs/helpsphinx3). 3 notebooks en lien avec `numpy` et `pandas` vous y sont proposés :
Expand Down
4 changes: 2 additions & 2 deletions content/course/manipulation/03_geopandas_TP/index.qmd
Expand Up @@ -14,15 +14,14 @@ categories:
- Manipulation
- Exercice
type: book
summary: |
description: |
Ce chapitre illustre les fonctionalités de `GeoPandas` à partir des
décomptes de vélo fournis par la ville de Paris
en [opendata](https://opendata.paris.fr/explore/dataset/comptage-velo-donnees-compteurs/map/?disjunctive.id_compteur&disjunctive.nom_compteur&disjunctive.id&disjunctive.name&basemap=jawg.dark&location=12,48.85855,2.33754).
Il prolonge
le chapitre précédent avec des données un petit peu plus complexes
à manipuler.
echo: false
eval: false
image: featured.png
---

Expand Down Expand Up @@ -776,6 +775,7 @@ dans Paris intra-muros


```{python}
#| label: exercice-optionnel-3
url = "https://data.iledefrance-mobilites.fr/explore/dataset/traces-du-reseau-ferre-idf/download/?format=geojson&timezone=Europe/Berlin&lang=fr"
# sometimes, geopandas files to import directly from
# url so proceeding in two times
Expand Down
17 changes: 12 additions & 5 deletions content/course/manipulation/04a_webscraping_TP/index.qmd
Expand Up @@ -13,12 +13,12 @@ categories:
- Exercice
- Manipulation
type: book
summary: |
description: |
`Python` permet de facilement récupérer une page web pour en extraire des
données à restructurer. Le webscraping, que les Canadiens nomment
_"moissonnage du web"_, est une manière de plus en plus utilisée de
récupérer une grande masse d'information en temps réel.
eval: false
eval: true
image: featured.jpg
---

Expand Down Expand Up @@ -1264,7 +1264,11 @@ chrome_options.add_argument('--disable-dev-shm-usage')
Puis on lance le navigateur:

```{python}
browser = webdriver.Chrome(executable_path=path_to_web_driver,
#| output: false
from selenium.webdriver.chrome.service import Service
service = Service(executable_path=path_to_web_driver)
browser = webdriver.Chrome(service=service,
options=chrome_options)
```

Expand All @@ -1275,6 +1279,7 @@ on voit que la barre de recherche est un élement du code appelé `q` (comme _qu
On va ainsi demander à `selenium` de chercher cet élément:

```{python}
#| output: false
browser.get('https://www.bing.com/news')
search = browser.find_element("name", "q")
Expand Down Expand Up @@ -1334,6 +1339,7 @@ Enfin, pour mettre fin à notre session, on demande
à `Python` de quitter le navigateur

```{python}
#| output: false
browser.quit()
```

Expand Down Expand Up @@ -1361,12 +1367,13 @@ il permet juste de voir ce qu'on peut faire avec `Selenium`
```{python}
#| eval: false
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.keys import Keys
# on ouvre la page internet du jeu 2048
service = Service(executable_path=path_to_web_driver)
browser = webdriver.Chrome(executable_path=path_to_web_driver,
options=chrome_options)
browser = webdriver.Chrome(service=service)
browser.get('https://play2048.co//')
# Ce qu'on va faire : une boucle qui répète inlassablement la même chose : haut / droite / bas / gauche
Expand Down
4 changes: 2 additions & 2 deletions content/course/manipulation/04b_regex_TP/index.qmd
Expand Up @@ -13,12 +13,12 @@ tags:
categories:
- Tutoriel
type: book
summary: |
description: |
Les expressions régulières fournissent un cadre très pratique pour manipuler
de manière flexible des données textuelles. Elles sont très utiles
notamment pour les tâches de traitement naturel du langage (__NLP__)
ou le nettoyage de données textuelles.
image: featured.png
image: https://d2h1bfu6zrdxog.cloudfront.net/wp-content/uploads/2022/04/img_625491e9ce092.png
---

::: {.cell .markdown}
Expand Down
4 changes: 2 additions & 2 deletions content/course/manipulation/04c_API_TP/index.qmd
Expand Up @@ -14,14 +14,14 @@ tags:
categories:
- Exercice
- Manipulation
summary: |
description: |
Les __API__ (_Application Programming Interface_) sont un mode d'accès aux
données en expansion. Grâce aux API, l'automatisation de scripts
est facilitée puisqu'il n'est plus nécessaire de stocker un fichier,
et gérer ses différentes versions, mais uniquement de requêter une base
et laisser au producteur de données le soin de gérer les mises à jour de
la base.
image: featured.png
image: map_buffer.png
---

::: {.cell .markdown}
Expand Down

0 comments on commit ef28fef

Please sign in to comment.