You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: notebooks/pandas-tps/covid/.teacher/README-covid-corrige-nb.md
+23-31Lines changed: 23 additions & 31 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,8 +10,8 @@ kernelspec:
10
10
name: python3
11
11
language_info:
12
12
name: python
13
-
nbconvert_exporter: python
14
13
pygments_lexer: ipython3
14
+
nbconvert_exporter: python
15
15
nbhosting:
16
16
title: "TP sur les donn\xE9es coronavirus"
17
17
---
@@ -192,14 +192,17 @@ le fichier <https://pomber.github.io/covid19/timeseries.json> contient un objet
192
192
### avec `pd.read_json`
193
193
194
194
````{admonition} →
195
-
on ne va pas faire comme ça ici, mais sachez que c'est la méthode la plus rapide (à écrire):
195
+
la méthode qui semble la plus rapide (à écrire) consiste à faire simplement:
196
196
197
197
```python
198
198
data = pd.read_json(json_url)
199
199
```
200
200
201
-
par contre ça peut être franchement long, surtout si votre **connexion réseau** n'est pas au top
202
-
c'est pourquoi on va voir aussi une autre méthode - que vous pouvez sauter si vous êtes pressés de voir le traitement des données *per se*
201
+
par contre, ça ne plante pas, mais ça crée une dataframe franchement gloubi-goulba !
202
+
en plus ça peut être franchement long, surtout si votre **connexion réseau** n'est pas au top
203
+
c'est pourquoi:
204
+
- on va pour commencer voir une technique - que vous pouvez sauter si vous êtes pressés de voir le traitement des données *per se* - pour "cacher" le fichier localement sur notre disque dur
205
+
- et ensuite on va vous inviter à écrire votre propre code pour mettre ces données sous une forme plus propice à notre objectif
203
206
````
204
207
205
208
+++ {"tags": ["framed_cell"]}
@@ -344,7 +347,6 @@ by_country
344
347
````
345
348
346
349
```{code-cell} ipython3
347
-
348
350
# le code
349
351
350
352
if by_country is not None:
@@ -621,19 +623,14 @@ global_df.loc[0]
621
623
ce qui s'est passé c'est que :
622
624
chacune de nos dataframe par pays a été construite à partir d'un index **séquentiel**
623
625
i.e. un `RangeIndex` qui commence à chaque fois à 0
624
-
et lors du `concat` on a conservé ces valeurs
625
-
ce qui crée une multitude de lignes indexées par 0 (un par pays)
626
-
627
-
c'est un trait de `pandas`
628
-
contrairement aux dictionnaires Python - où une clé est forcément unique
629
-
il est possible de **dupliquer plusieurs entrées dans les index**
630
-
ligne ou colonne - d'une dataframe
631
-
632
-
même si ça n'est en général pas souhaitable
633
-
c'est souvent commode de pouvoir le faire
634
-
pendant la phase de construction / mise au point de la dataframe
635
-
quitte à adopter par la suite un index plus approprié
636
-
(comme on va le faire bientôt)
626
+
et lors du `concat` on a conservé ces valeurs, ce qui crée une multitude de lignes indexées par 0 (un par pays)
627
+
628
+
c'est un trait de `pandas`: contrairement aux dictionnaires Python - où une clé est forcément unique
629
+
il est possible de **dupliquer plusieurs entrées dans les index** ligne ou colonne - d'une dataframe
630
+
631
+
même si ça n'est en général **pas souhaitable**, c'est souvent **commode** de pouvoir le faire
632
+
pendant la phase de construction / mise au point de la dataframe - (comme c'est le cas maintenant)
633
+
quitte à adopter **par la suite un index plus approprié** (comme on va le faire bientôt)
637
634
````
638
635
639
636
+++
@@ -826,7 +823,8 @@ global_df.dtypes
826
823
827
824
````{admonition} exo
828
825
1. nous avons vu la notion de *MultiIndex*
829
-
quel serait d'aprés vous un bon choix pour indexer la dataframe globale ?
826
+
quel serait d'aprés vous un bon choix pour indexer la dataframe globale ?
827
+
(réponse attendue sous forme simplement textuelle à ce stade, on va écrire le code dans la question suivante)
830
828
````
831
829
832
830
```{code-cell} ipython3
@@ -847,11 +845,8 @@ global_df.dtypes
847
845
+++ {"tags": ["framed_cell"]}
848
846
849
847
````{admonition} exo
850
-
2. voyez-vous un moyen d'utiliser `pivot_table()` pour construire une nouvelle
851
-
dataframe qui contienne essentiellement les mêmes informations
852
-
mais avec un multi-index qui soit pertinent dans le contexte
853
-
**variante** on peut aussi utiliser `set_index()`
854
-
pour aboutir au même résultat
848
+
2. voyez-vous un moyen d'utiliser `pivot_table()` pour construire une dataframe qui contienne les mêmes informations, mais avec le multi-index qu'on a décidé à la question précédente ?
849
+
**variante** on peut aussi utiliser `set_index()` pour aboutir au même résultat
855
850
856
851
rangez votre résultat dans une variable `clean_df`
857
852
````
@@ -888,7 +883,7 @@ clean_df
888
883
889
884
+++ {"tags": ["framed_cell"]}
890
885
891
-
###accéder via un *MultiIndex*
886
+
## accéder via un *MultiIndex*
892
887
893
888
````{admonition} exo
894
889
1. extrayez de la dataframe la série des 3 mesures
Copy file name to clipboardExpand all lines: notebooks/pandas-tps/covid/README-covid-nb.md
+21-28Lines changed: 21 additions & 28 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,8 +10,8 @@ kernelspec:
10
10
name: python3
11
11
language_info:
12
12
name: python
13
-
nbconvert_exporter: python
14
13
pygments_lexer: ipython3
14
+
nbconvert_exporter: python
15
15
nbhosting:
16
16
title: "TP sur les donn\xE9es coronavirus"
17
17
---
@@ -192,14 +192,17 @@ le fichier <https://pomber.github.io/covid19/timeseries.json> contient un objet
192
192
### avec `pd.read_json`
193
193
194
194
````{admonition} →
195
-
on ne va pas faire comme ça ici, mais sachez que c'est la méthode la plus rapide (à écrire):
195
+
la méthode qui semble la plus rapide (à écrire) consiste à faire simplement:
196
196
197
197
```python
198
198
data = pd.read_json(json_url)
199
199
```
200
200
201
-
par contre ça peut être franchement long, surtout si votre **connexion réseau** n'est pas au top
202
-
c'est pourquoi on va voir aussi une autre méthode - que vous pouvez sauter si vous êtes pressés de voir le traitement des données *per se*
201
+
par contre, ça ne plante pas, mais ça crée une dataframe franchement gloubi-goulba !
202
+
en plus ça peut être franchement long, surtout si votre **connexion réseau** n'est pas au top
203
+
c'est pourquoi:
204
+
- on va pour commencer voir une technique - que vous pouvez sauter si vous êtes pressés de voir le traitement des données *per se* - pour "cacher" le fichier localement sur notre disque dur
205
+
- et ensuite on va vous inviter à écrire votre propre code pour mettre ces données sous une forme plus propice à notre objectif
203
206
````
204
207
205
208
+++ {"tags": ["framed_cell"]}
@@ -522,19 +525,14 @@ global_df.loc[0]
522
525
ce qui s'est passé c'est que :
523
526
chacune de nos dataframe par pays a été construite à partir d'un index **séquentiel**
524
527
i.e. un `RangeIndex` qui commence à chaque fois à 0
525
-
et lors du `concat` on a conservé ces valeurs
526
-
ce qui crée une multitude de lignes indexées par 0 (un par pays)
528
+
et lors du `concat` on a conservé ces valeurs, ce qui crée une multitude de lignes indexées par 0 (un par pays)
527
529
528
-
c'est un trait de `pandas`
529
-
contrairement aux dictionnaires Python - où une clé est forcément unique
530
-
il est possible de **dupliquer plusieurs entrées dans les index**
531
-
ligne ou colonne - d'une dataframe
530
+
c'est un trait de `pandas`: contrairement aux dictionnaires Python - où une clé est forcément unique
531
+
il est possible de **dupliquer plusieurs entrées dans les index** ligne ou colonne - d'une dataframe
532
532
533
-
même si ça n'est en général pas souhaitable
534
-
c'est souvent commode de pouvoir le faire
535
-
pendant la phase de construction / mise au point de la dataframe
536
-
quitte à adopter par la suite un index plus approprié
537
-
(comme on va le faire bientôt)
533
+
même si ça n'est en général **pas souhaitable**, c'est souvent **commode** de pouvoir le faire
534
+
pendant la phase de construction / mise au point de la dataframe - (comme c'est le cas maintenant)
535
+
quitte à adopter **par la suite un index plus approprié** (comme on va le faire bientôt)
538
536
````
539
537
540
538
+++
@@ -691,7 +689,8 @@ reprenons à partir de la dataframe globale
691
689
692
690
````{admonition} exo
693
691
1. nous avons vu la notion de *MultiIndex*
694
-
quel serait d'aprés vous un bon choix pour indexer la dataframe globale ?
692
+
quel serait d'aprés vous un bon choix pour indexer la dataframe globale ?
693
+
(réponse attendue sous forme simplement textuelle à ce stade, on va écrire le code dans la question suivante)
695
694
````
696
695
697
696
```{code-cell} ipython3
@@ -701,11 +700,8 @@ reprenons à partir de la dataframe globale
701
700
+++ {"tags": ["framed_cell"]}
702
701
703
702
````{admonition} exo
704
-
2. voyez-vous un moyen d'utiliser `pivot_table()` pour construire une nouvelle
705
-
dataframe qui contienne essentiellement les mêmes informations
706
-
mais avec un multi-index qui soit pertinent dans le contexte
707
-
**variante** on peut aussi utiliser `set_index()`
708
-
pour aboutir au même résultat
703
+
2. voyez-vous un moyen d'utiliser `pivot_table()` pour construire une dataframe qui contienne les mêmes informations, mais avec le multi-index qu'on a décidé à la question précédente ?
704
+
**variante** on peut aussi utiliser `set_index()` pour aboutir au même résultat
709
705
710
706
rangez votre résultat dans une variable `clean_df`
711
707
````
@@ -716,7 +712,7 @@ rangez votre résultat dans une variable `clean_df`
716
712
717
713
+++ {"tags": ["framed_cell"]}
718
714
719
-
###accéder via un *MultiIndex*
715
+
## accéder via un *MultiIndex*
720
716
721
717
````{admonition} exo
722
718
1. extrayez de la dataframe la série des 3 mesures
@@ -755,14 +751,12 @@ rangez votre résultat dans une variable `clean_df`
755
751
756
752
````{admonition} →
757
753
pour illustrer la puissance de pandas, et la pertinence de notre choix d'index
758
-
voyons comment utiliser du **slicing** (*très très avancé*)
759
-
pour extraire cette fois les données relatives à
754
+
voyons comment utiliser du **slicing** (*assez avancé*) pour extraire cette fois les données relatives à
760
755
761
756
* deux pays au hasard - disons `France` et `Italy`
762
757
* à la période 1er Juillet - 15 Août 2021 inclus
763
758
764
-
pour ça on va tirer profit de la structure de l'index
765
-
et aussi de la puissance du type `datetime64`
759
+
pour ça on va tirer profit de la structure de l'index, et aussi de la puissance du type `datetime64`
766
760
767
761
on va fabriquer :
768
762
@@ -771,8 +765,7 @@ on va fabriquer :
771
765
qui en temps normal pourrait s'écrire `'july 2021' : '15 august 2021'`
772
766
(bornes inclusives puisque `.loc[]`)
773
767
774
-
* un slice sur les colonnes
775
-
mais au fait on les veut toutes, on peut utiliser `:`
768
+
* un slice sur les colonnes; mais au fait on les veut toutes, on peut utiliser `:`
0 commit comments