Skip to content

Commit

Permalink
Relecture KA 25/09/2023 (#412)
Browse files Browse the repository at this point in the history
* relec getting-started/index

* relec getting-started/01_installation

* relec getting-started/05_rappels_types

* relec getting-started/06_rappels_fonctions

* relec manipulation/01_numpy

* relec manipulation/02a_pandas_tutorial

---------

Co-authored-by: Lino Galiana <lino.galiana@insee.fr>
  • Loading branch information
antuki and linogaliana committed Sep 26, 2023
1 parent 338c07e commit e8d0062
Show file tree
Hide file tree
Showing 6 changed files with 67 additions and 55 deletions.
13 changes: 9 additions & 4 deletions content/getting-started/01_installation.qmd
Expand Up @@ -74,7 +74,7 @@ l'administration. Ces compétences ne sont pas
propres à `Python` et seront
utiles pour tout projet ultérieur. Un cours dédié à cette question
est proposé par Romain Avouac et moi en dernière année de l'ENSAE. Son
contenu est disponible sur https://ensae-reproductibilite.github.io/website/.
contenu est disponible sur [https://ensae-reproductibilite.github.io/website/](https://ensae-reproductibilite.github.io/website/).

Le projet final devra impérativement
être associé à un dépôt
Expand Down Expand Up @@ -202,7 +202,7 @@ lancer en local en utilisant `Anaconda`) ont émergé. Parmi celles-ci :
* __Google colaboratory__
[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](http://colab.research.google.com/github/linogaliana/python-datascientist/blob/master)
;
Github Visual Studio Editor [![githubdev](https://open.vscode.dev/badges/open-in-vscode.svg)](https://github.dev/linogaliana/python-datascientist) ;
* Github Visual Studio Editor [![githubdev](https://open.vscode.dev/badges/open-in-vscode.svg)](https://github.dev/linogaliana/python-datascientist) ;
* **__Binder__** [![Binder](https://img.shields.io/badge/Launch-Binder-E66581.svg?logo=data:image/png;base64,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)](https://mybinder.org/v2/gh/linogaliana/python-datascientist/master) ;

Il est également possible d'exécuter des codes sur les services d'intégration continue de
Expand All @@ -219,13 +219,16 @@ le griffonnage.
[^1] A cet égard, il est recommandé de consulter le cours de dernière année
de l'ENSAE déjà cité: https://ensae-reproductibilite.github.io/website/


[Kaggle](https://www.kaggle.com/notebooks) <i class="fab fa-kaggle"></i>
propose des compétitions de code mais
donne également la possibilité d'exécuter des notebooks,
comme les solutions précédentes.
Il existe une [API Kaggle](https://github.com/Kaggle/kaggle-api) pour
accéder à des données `Kaggle` hors du système `Kaggle`

<!-- KA : attention la box ci-dessous ne s'affiche pas -->

{{% box status="warning" title="Warning" icon="fa fa-exclamation-triangle" %}}
Les performances de ces solutions peuvent être variables.
Les serveurs publics mis à disposition
Expand Down Expand Up @@ -307,8 +310,8 @@ du système sur laquelle elle est éxécutée.
`Docker` <i class="fab fa-docker"></i></a> est utilisé dans
le cadre de cours afin d'assurer la reproductibilité des exemples.
Plus de détails sont disponibles dans le cours de dernière année d'ENSAE
dédié à la mise en production de projets data science
(ensae-reproductibilite.netlify.app/).
dédié à la mise en production de projets data-science
([https://ensae-reproductibilite.github.io/website/](https://ensae-reproductibilite.github.io/website/)).

Il est possible d'utiliser les images `Docker` sur lesquelles reposent
l'environnement de reproductibilité du cours. Celles-ci sont mises à
Expand Down Expand Up @@ -411,6 +414,8 @@ La création de l'environnement nécessaire à la construction automatisée
de ce site web a ainsi été divisée par 12 en utilisant `mamba` plutôt
que `conda` pour installer des packages dans un environnement.

<!-- KA : idem, la box ne s'affiche pas -->

{{% box status="note" title="Note" icon="fa fa-comment" %}}

Les [conditions d'utilisation du canal par défaut d'`Anaconda`](https://www.anaconda.com/terms-of-service) sont
Expand Down
62 changes: 25 additions & 37 deletions content/getting-started/05_rappels_types.qmd
Expand Up @@ -55,7 +55,7 @@ texte.

Si les lignes ne sont pas bien alignées, l'interpréteur ne sait plus à quel
bloc associer la ligne. Par exemple, le corps d'une fonction doit être indenté
d'un niveau ; les éléments dans une clause logique (`if`, `else`, etc.) également
d'un niveau ; les éléments dans une clause logique (`if`, `else`, etc.) également.


*Règle 2:* On commence à compter à 0, comme dans beaucoup de langages
Expand Down Expand Up @@ -85,9 +85,6 @@ Quand Python réalise des opérations, il faut lui préciser ce qu'il doit en fa
* afficher le résultat de l'opération,
* créer un objet avec le résultat de l'opération ?

Contrairement à `R`, par défaut, `Python` ne renvoie pas le résultat de la
dernière opération effectuée.

::: {.cell .markdown}
```{=html}
<div class="alert alert-info" role="alert">
Expand Down Expand Up @@ -247,12 +244,6 @@ print("Le dernier élément de ma liste est :", ma_liste[3])
print("Le dernier élément de ma liste est :", ma_liste[-1])
```

::: {.cell .markdown}
```{=html}
<div class="alert alert-success" role="alert">
<h3 class="alert-heading"><i class="fa-solid fa-pencil"></i> Exercice 1</h3>
```

Pour effectuer des boucles sur les listes, la méthode la plus lisible
est d'utiliser les `list comprehension`. Cette approche consiste
à itérer les éléments d'une liste à la volée.
Expand Down Expand Up @@ -280,10 +271,6 @@ for x in fruits:
print(newlist)
```

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

#### Les dictionnaires - ils s'écrivent entre accolades `{}`

Expand Down Expand Up @@ -353,6 +340,7 @@ mon_dictionnaire_patchwork_good = \

## Questions pratiques :

<!-- KA : Attention, les box d'exercices ne s'affichent pas ni sur les notebook jupyters téléchargés, , ni sur le site. -->

::: {.cell .markdown}
```{=html}
Expand Down Expand Up @@ -594,29 +582,29 @@ A retenir :
#| include: false
#| eval: false
# Correction
## liste des nombres de 1 à 10
liste = list(range(1, 11))
## triez et affichez la liste
liste.sort()
print(liste)
## ajoutez l’élément 11 à la liste et affichez la liste
liste.append(11)
print(liste)
## renversez et affichez la liste
liste.sort(reverse=True)
print(liste)
## affichez l’élément d'indice 7
print(liste[7])
## enlevez l’élément 9 et affichez la liste
liste.remove(9)
print(liste)
## affichez la sous-liste du 2e au 3e éléments inclus ;
print(liste[1:3])
## affichez la sous-liste du début au 2e élément inclus ;
print(liste[:2])
## affichez la sous-liste du 3e élément à la fin de la liste ;
print(liste[2:])
# Correction
## liste des nombres de 1 à 10
liste = list(range(1, 11))
## triez et affichez la liste
liste.sort()
print(liste)
## ajoutez l’élément 11 à la liste et affichez la liste
liste.append(11)
print(liste)
## renversez et affichez la liste
liste.sort(reverse=True)
print(liste)
## affichez l’élément d'indice 7
print(liste[7])
## enlevez l’élément 9 et affichez la liste
liste.remove(9)
print(liste)
## affichez la sous-liste du 2e au 3e éléments inclus ;
print(liste[1:3])
## affichez la sous-liste du début au 2e élément inclus ;
print(liste[:2])
## affichez la sous-liste du 3e élément à la fin de la liste ;
print(liste[2:])
```


Expand Down
7 changes: 6 additions & 1 deletion content/getting-started/06_rappels_fonctions.qmd
Expand Up @@ -305,7 +305,12 @@ for x in range(10):
print(squares)
```

```{python, include = FALSE, eval = FALSE}
<!-- KA : car sinon la correction s'affichait dans le notebook... -->

```{python}
#| include: false
#| eval: false
# Correction
squares = [x**2 for x in range(10)]
squares
Expand Down
8 changes: 1 addition & 7 deletions content/getting-started/index.qmd
Expand Up @@ -196,13 +196,7 @@ Ce cours introduit à quelques notions
sur le sujet, notamment les
_pipelines_ `scikit`, pour adopter
dès l'apprentissage du langage
quelques bons réflexes.
Je donne également un cours,
plus avancé,
sur ce sujet à l'ENSAE avec
Romain Avouac:
[ensae-reproductibilite.github.io/website](https://ensae-reproductibilite.github.io/website).

quelques bons réflexes ([ensae-reproductibilite.github.io/website](https://ensae-reproductibilite.github.io/website)).


## Public cible
Expand Down
23 changes: 21 additions & 2 deletions content/manipulation/01_numpy.qmd
Expand Up @@ -53,7 +53,7 @@ import numpy as np
```

Nous allons également fixer la racine du générateur aléatoire de nombres
afin d'avoir des résultats reproductibles:
afin d'avoir des résultats reproductibles :

```{python}
np.random.seed(12345)
Expand Down Expand Up @@ -152,11 +152,29 @@ Il existe aussi des méthodes pratiques pour créer des array:

```{python}
np.arange(0,10)
```

```{python}
np.arange(0,10,3)
```

```{python}
np.linspace(0, 1, 5)
```

```{python}
np.zeros(10, dtype=int)
```

```{python}
np.ones((3, 5), dtype=float)
```

```{python}
np.full((3, 5), 3.14)
```

```{python}
np.eye(3)
```

Expand Down Expand Up @@ -240,8 +258,9 @@ avec les arrays.
<h3 class="alert-heading"><i class="fa-solid fa-pencil"></i> Exercice 2</h3>
```

Prenez `x = np.arange(10)` et...

* Sélectionner les éléments 0,3,5
* Sélectionner les éléments 0,3,5 de `x`
* Sélectionner les éléments pairs
* Sélectionner tous les éléments sauf le premier
* Sélectionner les 5 premiers éléments
Expand Down
9 changes: 5 additions & 4 deletions content/manipulation/02a_pandas_tutorial.qmd
Expand Up @@ -134,7 +134,7 @@ np.random.seed(123)

Au cours de cette démonstration des principales fonctionalités de `Pandas`, et
lors du chapitre suivant,
je recommande de se référer régulièrement aux ressources suivantes:
je recommande de se référer régulièrement aux ressources suivantes :

* L'[aide officielle de `Pandas`](https://pandas.pydata.org/docs/user_guide/index.html).
Notamment, la
Expand Down Expand Up @@ -756,7 +756,8 @@ Par exemple, avec le `pandas.DataFrame` `df_example`:

```{python}
df_example = pd.DataFrame(
{'year': [2012, 2014, 2013, 2014], 'sale': [55, 40, 84, 31]})
{'month': [1, 4, 7, 10], 'year': [2012, 2014, 2013, 2014], 'sale': [55, 40, 84, 31]})
df_example = df_example.set_index('month')
df_example
```

Expand Down Expand Up @@ -809,7 +810,7 @@ d'un `DataFrame`.

Par défaut, `pandas` effectue une copie par référence. Dans ce
cas, les deux objets (la copie et l'objet copié) restent reliés. Les colonnes
crées sur l'un vont être répercutées sur l'autre. Ce comportement permet de
créées sur l'un vont être répercutées sur l'autre. Ce comportement permet de
limiter l'inflation en mémoire de `Python`. En faisant ça, le deuxième
objet prend le même espace mémoire que le premier. Le package `data.table`
en `R` adopte le même comportement, contrairement à `dplyr`.
Expand Down Expand Up @@ -1099,7 +1100,7 @@ serions dans une situation, beaucoup plus complexe, d'appariement flou[^6]).
La situation typique est l'appariement entre deux sources de données selon un identifiant
individuel. Ici, il s'agit d'un identifiant de code commune.

Il est recommandé de lire [ce guide assez complet sur la question des jointures avec `R`](https://www.book.utilitr.org/fiche_joindre_donnees.html)
Il est recommandé de lire [ce guide assez complet sur la question des jointures avec `R`](https://www.book.utilitr.org/03_fiches_thematiques/fiche_joindre_donnees)
qui donne des recommandations également utiles pour un utilisateur de `Python`.

![](https://external-preview.redd.it/yOLzCR0qSzul2WpjQorxINB0xpU3_N9twmFVsgbGJwQ.jpg?auto=webp&s=4feedc91302ba635b3028a21b98d047def5cdc2b)
Expand Down

0 comments on commit e8d0062

Please sign in to comment.