Skip to content

Commit

Permalink
Improve aesthetics on Github (#338)
Browse files Browse the repository at this point in the history
* like a dimaond

* Delete .Rbuildignore

* Update README.md

* pb

* Automated changes

* Automated changes

* Automated changes

* lightbulb

* 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 Dec 26, 2022
1 parent 129b001 commit a8dd720
Show file tree
Hide file tree
Showing 7 changed files with 95 additions and 73 deletions.
2 changes: 0 additions & 2 deletions .Rbuildignore

This file was deleted.

1 change: 1 addition & 0 deletions .gitattributes
Expand Up @@ -2,3 +2,4 @@
*.css linguist-documentation
*.js linguist-documentation
*.ipynb linguist-documentation
*.scss linguist-documentation
12 changes: 6 additions & 6 deletions README.md
Expand Up @@ -13,12 +13,12 @@



Ce dépôt Github stocke les fichiers sources ayant permis de construire le site
Ce dépôt `Github`
stocke les fichiers sources ayant permis de construire le site
<https://pythonds.linogaliana.fr/>.

Il s'agit de l'ensemble du cours *Python pour les data-scientists et économistes* :snake:
que je donne en
deuxième année (Master 1) de l'ENSAE.
Il s'agit de l'ensemble du cours *Python pour les data-scientists* :snake:
que je donne en deuxième année (Master 1) de l'ENSAE.

## Syllabus

Expand All @@ -34,7 +34,7 @@ _data-science_ que quelqu'un à la recherche de contenu plus avancé :
1. Traitement de données textuelles (NLP)
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_: ensae-reproductibilite.netlify.app/
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/

<details>
<summary>
Expand Down Expand Up @@ -83,7 +83,7 @@ automatiquement construite et mise à disposition depuis
</summary>

Le site est construit de manière automatique grâce à [Hugo](https://gohugo.io/)
à partir d'un environnement conteneurisée [Docker](https://hub.docker.com/repository/docker/linogaliana/python-datascientist/general)
à partir d'un environnement conteneurisé [Docker](https://hub.docker.com/repository/docker/linogaliana/python-datascientist/general)
La reproductibilité des exemples et des exercices est testée avec
Github Actions ([![build-doc Actions Status](https://github.com/linogaliana/python-datascientist/actions/workflows/prod.yml/badge.svg)](https://github.com/linogaliana/python-datascientist/actions)).

Expand Down
11 changes: 0 additions & 11 deletions build/netlify.R

This file was deleted.

10 changes: 0 additions & 10 deletions content/course/getting-started/.Rprofile

This file was deleted.

117 changes: 88 additions & 29 deletions content/course/manipulation/02a_pandas_tutorial/index.qmd
Expand Up @@ -84,7 +84,12 @@ de l'Insee disponibles sur le site web [insee.fr](https://www.insee.fr/fr/accuei
ou via des API.
:::

{{% box status="note" title="Note" icon="fa fa-comment" %}}
::: {.cell .markdown}
```{=html}
<div class="alert alert-info" role="alert">
<h3 class="alert-heading"><i class="fa-solid fa-comment"></i> Note</h3>
```

Le package `pynsee` est relativement jeune et n'est disponible que sur
[`Github`](https://github.com/InseeFrLab/Py-Insee-Data), pas sur `PyPi`.
Idéalement, on utilise les commandes suivantes,
Expand Down Expand Up @@ -128,9 +133,13 @@ vous trouble, vous pouvez vous rendre à la
[Section Annexe](#annexe) pour découvrir un bout de code
qui effectue les mêmes tâches mais avec des barres de progrès

{{% /box %}}
```{=html}
</div>
```
:::


:warning: `pandas` offre la possibilité d'importer des données
⚠️ `pandas` offre la possibilité d'importer des données
directement depuis un url. C'est l'option prise dans ce tutoriel.
Si vous préfèrez, pour des
raisons d'accès au réseau ou de performance, importer depuis un poste local,
Expand Down Expand Up @@ -208,7 +217,12 @@ se trouve sur une unique cellule.

![Concept de tidy data (emprunté à H. Wickham)](https://d33wubrfki0l68.cloudfront.net/6f1ddb544fc5c69a2478e444ab8112fb0eea23f8/91adc/images/tidy-1.png)

{{% box status="hint" title="Hint" icon="fa fa-lightbulb-o" %}}

::: {.cell .markdown}
```{=html}
<div class="alert alert-warning" role="alert">
<h3 class="alert-heading"><i class="fa-solid fa-lightbulb"></i> Hint</h3>
```

Les `DataFrames` sont assez rapides en `Python`[^2] et permettent de traiter en local de manière efficace des tables de
données comportant plusieurs millions d'observations (en fonction de la configuration de l'ordinateur)
Expand All @@ -218,7 +232,11 @@ de l'opération effectuée, le DataFrame `pandas` peut montrer certaines limites
solutions: `Dask` (dataframe aux opérations parallélisés), `SQL` (notamment `Postgres`),
`Spark` (solution _big data_). Un chapitre spécial de ce cours est consacré à `Dask`.

{{% /box %}}
```{=html}
</div>
```
:::



::: {.cell .markdown}
Expand Down Expand Up @@ -378,7 +396,7 @@ Le `DataFrame` est l'objet central de la librairie `pandas`.
Il s'agit d'une collection de `pandas.Series` (colonnes) alignées par les index.
Les types des variables peuvent différer.

Un DataFrame non-indexé a la structure suivante:
Un `DataFrame` non-indexé a la structure suivante:

```{python}
#| echo: false
Expand All @@ -391,7 +409,7 @@ df = pd.DataFrame(
df.reset_index()
```

Alors que le même dataframe indexé aura la structure suivante:
Alors que le même `DataFrame` indexé aura la structure suivante:

```{python}
#| echo: false
Expand Down Expand Up @@ -435,7 +453,12 @@ df = pd.read_csv("https://koumoul.com/s/data-fair/api/v1/datasets/igt-pouvoir-de
df
```

{{% box status="note" title="Note" icon="fa fa-comment" %}}
::: {.cell .markdown}
```{=html}
<div class="alert alert-info" role="alert">
<h3 class="alert-heading"><i class="fa-solid fa-comment"></i> Note</h3>
```


Dans un processus de production, où normalement on connait les types des variables du `DataFrame` qu'on va importer,
il convient de préciser les types avec lesquels on souhaite importer les données
Expand All @@ -448,7 +471,10 @@ Par exemple, une colonne `[00001,00002,...] ` risque d'être importée comme une
Sinon, on peut importer le csv, et modifier les types avec `astype()`.
Avec `astype`, on peut gérer les erreurs de conversion avec le paramètre `errors`.

{{% /box %}}
```{=html}
</div>
```
:::

L'affichage des DataFrames est très ergonomique. On obtiendrait le même *output*
avec `display(df)`[^3]. Les premières et dernières lignes s'affichent
Expand All @@ -468,7 +494,11 @@ taper le nom du `DataFrame`) qu'utiliser la fonction `print`. Le
qui renvoie du texte brut.
:::

{{% box status="danger" title="warning" icon="fa fa-exclamation-triangle" %}}
::: {.cell .markdown}
```{=html}
<div class="alert alert-danger" role="alert">
<i class="fa-solid fa-triangle-exclamation"></i> Warning</h3>
```

Il faut faire attention au `display` et aux
commandes qui révèlent des données (`head`, `tail`, etc.)
Expand All @@ -493,14 +523,18 @@ peuvent y être apportées.
Une solution est d'utiliser [`Quarto`](https://quarto.org/) qui permet de générer les
`.ipynb` en _output_ d'un document texte, ce qui facilite le contrôle sur les
éléments présents dans le document.
{{% /box %}}

```{=html}
</div>
```
:::



### Dimensions et structure du DataFrame

Les premières méthodes utiles permettent d'afficher quelques
attributs d'un DataFrame.
attributs d'un `DataFrame`.

```{python}
df.axes
Expand Down Expand Up @@ -705,29 +739,38 @@ forme des indices de lignes ou colonnes utilisés:
* `df.loc`: utilise les labels
* `df.iloc`: utilise les indices

{{% box status="danger" title="Warning" icon="fa fa-exclamation-triangle" %}}
::: {.cell .markdown}
```{=html}
<div class="alert alert-danger" role="alert">
<i class="fa-solid fa-triangle-exclamation"></i> Warning</h3>
```

Les bouts de code utilisant la structure `df.ix`
sont à bannir car la fonction est *deprecated* et peut
ainsi disparaître à tout moment.

{{% /box %}}
```{=html}
</div>
```
:::

`iloc` va se référer à l'indexation de 0 à *N**N* est égal à `df.shape[0]` d'un
`pandas.DataFrame`. `loc` va se référer aux valeurs de l'index
de `df`.

Par exemple, si j'ai un `pandas.DataFrame` `df`:
```
year sale
month
1 2012 55
4 2014 40
7 2013 84
10 2014 31
Par exemple, avec le `pandas.DataFrame` `df_example`:


```{python}
df_example = pd.DataFrame(
{'year': [2012, 2014, 2013, 2014], 'sale': [55, 40, 84, 31]})
df_example
```
Alors `df.loc[1, :]` donnera la première ligne de `df` (ligne où l'indice `month` est égal à 1) tandis que
`df.iloc[1, :]` donnera la deuxième ligne (puisque l'indexation en `Python` commence à 0).

- `df_example.loc[1, :]` donnera la première ligne de `df` (ligne où l'indice `month` est égal à 1) ;
- `df_example.iloc[1, :]` donnera la deuxième ligne (puisque l'indexation en `Python` commence à 0) ;
- `df_example.iloc[:, 1]` donnera la deuxième colonne, suivant le même principe.




Expand All @@ -753,7 +796,7 @@ des usages de manipulation des données

## Opérations sur les colonnes: `select`, `mutate`, `drop`

Les DataFrames pandas sont des objets *mutables* en langage `Python`,
Les `DataFrames` pandas sont des objets *mutables* en langage `Python`,
c'est-à-dire qu'il est possible de faire évoluer le `DataFrame` au grès
des opérations. L'opération la plus classique consiste à ajouter ou retirer
des variables à la table de données.
Expand All @@ -762,7 +805,12 @@ des variables à la table de données.
df_new = df.copy()
```

{{% box status="danger" title="Warning" icon="fa fa-exclamation-triangle" %}}
::: {.cell .markdown}
```{=html}
<div class="alert alert-danger" role="alert">
<i class="fa-solid fa-triangle-exclamation"></i> Warning</h3>
```

Attention au comportement de `pandas` lorsqu'on crée une duplication
d'un `DataFrame`.

Expand All @@ -781,7 +829,10 @@ utilisant la méthode `copy`, comme ci-dessus.
Attention toutefois, cela a un coût mémoire.
Avec des données volumineuses, c'est une pratique à utiliser avec précaution.

{{% /box %}}
```{=html}
</div>
```
:::



Expand Down Expand Up @@ -1136,11 +1187,15 @@ fait office de référence

# Annexe {#annexe}

## Téléchargement de `pynsee` avec barre de progrès
::: {.cell .markdown}
```{=html}
<details><summary>Téléchargement de <code>pynsee</code> avec barre de progrès 👇</summary>
```

Ce code vient du [package `pynsee`](https://github.com/InseeFrLab/Py-Insee-Data/blob/master/pynsee/download/__init__.py)...

```{python, eval = FALSE}
```{python}
#| eval: false
import warnings
import os
import requests
Expand Down Expand Up @@ -1208,3 +1263,7 @@ download_pb('https://github.com/InseeFrLab/Py-Insee-Data/archive/refs/heads/mast
unzip_pb("pynsee.zip", "pynsee")
```

```{=html}
</details>
```
:::
15 changes: 0 additions & 15 deletions python-datascientist.Rproj

This file was deleted.

0 comments on commit a8dd720

Please sign in to comment.