Skip to content

Commit

Permalink
Action to check URL still exist (#399)
Browse files Browse the repository at this point in the history
* Check url action

* check force pass false

* poly jussieu

* URL checker

* ressources

* URL check

* fix CI

* indent

* urlcheck

* remove cache

* pandas install

* workflow dispatch
  • Loading branch information
linogaliana committed Aug 28, 2023
1 parent 9ef300c commit 9a4e226
Show file tree
Hide file tree
Showing 23 changed files with 91 additions and 56 deletions.
21 changes: 21 additions & 0 deletions .github/workflows/checks.yaml
@@ -0,0 +1,21 @@
name: Check URLs

on: workflow_dispatch


jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: '3.11'
- run: pip install pandas urlchecker
- name: Test with pytest
run: |
python build/checkurl.py
- uses: actions/upload-artifact@v3
with:
name: URLChecker
path: diagnostic.csv
16 changes: 16 additions & 0 deletions build/checkurl.py
@@ -0,0 +1,16 @@
from urlchecker.core.check import UrlChecker
import os
import pandas as pd

path = os.getcwd()

checker = UrlChecker(
path=path + "/content",
file_types=[".qmd", ".py", ".md"],
print_all=False
)

checker.run()

df = pd.DataFrame(checker.results['failed'], columns = ["failed"])
df.to_csv("diagnostic.csv")
2 changes: 1 addition & 1 deletion content/NLP/04_word2vec.qmd
Expand Up @@ -471,7 +471,7 @@ qui permet de tenir compte des fréquences *relatives* des mots.
Ainsi, pour un mot donné, on va multiplier la fréquence d'apparition du mot dans le document (calculé comme dans la méthode précédente) par un terme qui pénalise une fréquence élevée du mot dans le corpus. L'image ci-dessous, empruntée à Chris Albon, illustre cette mesure:

![](https://chrisalbon.com/images/machine_learning_flashcards/TF-IDF_print.png)
*Source: [https://chrisalbon](https://chrisalbon.com/code/machine_learning/preprocessing_text/tf-idf/)*
*Source: [Chris Albon](https://chrisalbon.com/code/machine_learning/preprocessing_text/tf-idf/)*

La vectorisation `TF-IDF` permet donc de limiter l'influence des *stop-words*
et donc de donner plus de poids aux mots les plus salients d'un document.
Expand Down
12 changes: 5 additions & 7 deletions content/getting-started/01_installation.qmd
Expand Up @@ -73,7 +73,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.netlify.app/.
contenu est disponible sur https://ensae-reproductibilite.github.io/website/.

Le projet final devra impérativement
être associé à un dépôt
Expand Down Expand Up @@ -108,16 +108,14 @@ qui permet d'installer une distribution minimale de `Python` ainsi qu'éventuell
un environnement plus complet :

* Sous **_Windows_**, il suffit de télécharger l'exécutable puis
l'exécuter (cf. [la doc officielle](https://docs.anaconda.com/anaconda/install/windows/)
ou [ce site](https://mrmint.fr/installer-environnement-python-machine-learning-anaconda)).
* Sous **_Mac_**, se reporter à la [doc officielle](https://docs.anaconda.com/anaconda/install/mac-os/)
l'exécuter (cf. [la doc officielle](https://docs.anaconda.com/anaconda/install/windows/) ;
* Sous **_Mac_**, se reporter à la [doc officielle](https://docs.anaconda.com/anaconda/install/mac-os/) ;
* Sous **_Linux_**, suivre les instructions de la [doc officielle](https://docs.anaconda.com/anaconda/install/linux/) selon sa distribution

Passer par `Anaconda` permet:

* d'installer `Python` ;
* d'installer par défaut une multitude de _packages_ utiles
([liste ici](https://docs.anaconda.com/anaconda/packages/py3.6_win-64/)) ;
* d'installer par défaut une multitude de _packages_ utiles ;
* de pouvoir utiliser un gestionnaire de package nommé `conda`.

`Anaconda` permet de créer des environnements isolés et facilite l'installation
Expand Down Expand Up @@ -218,7 +216,7 @@ déploiement de visualisations automatiques[^2]) mais n'est pas très pratique p
le griffonnage.

[^2] A cet égard, il est recommandé de consulter le cours de dernière année
de l'ENSAE déjà cité: https://ensae-reproductibilite.netlify.app/
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
Expand Down
2 changes: 1 addition & 1 deletion content/getting-started/03_data_analysis.qmd
Expand Up @@ -131,7 +131,7 @@ systématiquement utiliser ces plateformes pour la mise à disposition de
code. Cependant, il ne s'agit que d'une petite partie des gains à
l'utiliser.
Le cours que je donne avec Romain Avouac en troisième année d'ENSAE
(https://ensae-reproductibilite.netlify.app/) évoque
(https://ensae-reproductibilite.github.io/website/) évoque
l'un des principaux gains à utiliser ces plateformes, à savoir
la possibilité de mettre à disposition automatiquement différents livrables
pour valoriser son travail auprès de différents publics.
Expand Down
2 changes: 1 addition & 1 deletion content/getting-started/04_python_practice.qmd
Expand Up @@ -87,7 +87,7 @@ dans l'écosystème Python. Les deux normes les plus connues sont
la norme PEP8 (code) et la norme PEP257 (documentation).

La plupart de ces recommandations ne sont pas propres à `Python`, on les retrouve aussi dans `R`
(cf. [ici](https://linogaliana.gitlab.io/documentationR/comment-nommer-les-objets-dans-r.html)).
(cf. [ici](https://www.book.utilitr.org/02_bonnes_pratiques/02-structure-code)).
On retrouve de nombreux conseils dans [cet ouvrage](https://docs.python-guide.org/writing/style/) qu'il est
recommandé de suivre. La suite se concentrera sur des éléments complémentaires.

Expand Down
2 changes: 1 addition & 1 deletion content/getting-started/index.qmd
Expand Up @@ -200,7 +200,7 @@ Je donne également un cours,
plus avancé,
sur ce sujet à l'ENSAE avec
Romain Avouac:
https://ensae-reproductibilite.netlify.app/.
https://ensae-reproductibilite.github.io/website/.



Expand Down
25 changes: 12 additions & 13 deletions content/git/exogit.qmd
Expand Up @@ -36,12 +36,12 @@ print_badges("content/git/exogit.qmd")

Les exercices suivants sont inspirés d'un cours de Git que j'ai construit
à l'Insee et dont les ressources sont disponibles
[ici](https://linogaliana.gitlab.io/collaboratif/git.html). L'idée
du cadavre exquis, qui m'a été inspirée par
[ici](https://inseefrlab.github.io/formation-bonnes-pratiques-git-R/). L'idée
du cadavre exquis, qui m'a été soufflée par
[Romain Lesur](https://github.com/RLesur) est inspirée de
[cette ressource](https://github.com/corent01/03-Swartz/blob/master/Parcours/01-La-prairie/git/exercice-git-cadavre-exquis.md) et de [celle-ci](https://github.com/simplonco/cadavre-request).

Cette partie part du principe que les concepts généraux de Git sont
Cette partie part du principe que les concepts généraux de `Git` sont
maîtrisés et qu'un environnement de travail fonctionnel avec `Git` est
disponible. Un exemple de tel environnement est le`JupyterLab` du
`SSPCloud` où une extension
Expand All @@ -51,14 +51,12 @@ disponible. Un exemple de tel environnement est le`JupyterLab` du


Outre le [chapitre précédent](#introgit), il existe de
nombreuses ressources sur internet sur le sujet. Parmi-celles auquel
j'ai contribué, vous pourrez trouver un
[cours de `Git` orienté gestion de projet](https://linogaliana.gitlab.io/collaboratif/git.html),
une version plus
légère à partir de [_slides_](https://formation.pages.lab.sspcloud.fr/git/20220929-formation-git-dese/#/title-slide)
nombreuses ressources sur internet sur le sujet,
notamment une série de ressources construites
pour l'Insee [sur ce site](https://inseefrlab.github.io/formation-bonnes-pratiques-git-R/)
et des ressources de la documentation collaborative sur `R` qu'est `utilitR`
([des éléments sur la configuration](https://www.book.utilitr.org/git-config.html)
et [pratique sur RStudio](https://www.book.utilitr.org/git.html)). Toutes
([des éléments sur la configuration](https://www.book.utilitr.org/03_fiches_thematiques/fiche_configurer_git)
et [pratique sur RStudio](https://www.book.utilitr.org/03_fiches_thematiques/fiche_git_utilisation)). Toutes
les ressources ne sont donc pas du `Python` car `Git` est un outil tranversal
qui doit servir quelque soit le langage de prédilection.

Expand Down Expand Up @@ -176,7 +174,7 @@ Plus précisément, il existe deux modalités pour faire connaître son identit
* une authentification HTTPS (décrite ici) : l’authentification se fait avec un login et un mot de passe (qu’il faut renseigner à chaque interaction avec le dépôt), ou avec un token (méthode à privilégier).
* une authentification SSH : l’authentification se fait par une clé cryptée disponible sur le poste de travail et que GitHub ou GitLab connaît. Une fois configurée, cette méthode ne nécessite plus de faire connaître son identité : l’empreinte digitale que constitue la clé suffit à reconnaître un utilisateur.

La [documentation collaborative `utilitR`](https://www.book.utilitr.org/git-config.html#interaction-avec-un-d%C3%A9p%C3%B4t-distant-principe) présente les raisons pour lesquelles il convient de favoriser
La [documentation collaborative `utilitR`](https://www.book.utilitr.org/03_fiches_thematiques/fiche_configurer_git.html#interaction-avec-un-d%C3%A9p%C3%B4t-distant-principe) présente les raisons pour lesquelles il convient de favoriser
la méthode HTTPS sur la méthode SSH.

Depuis août 2021, `Github` n'autorise plus l'authentification par mot de passe
Expand Down Expand Up @@ -434,7 +432,7 @@ git add .gitignore
~~~

Pour se remémorer ce que signifie `git add`, vous pouvez vous rendre
sur [mon cours dédié à Git](https://linogaliana.gitlab.io/collaboratif/git.html#le-b.a-ba).
sur [ce cours dédié à `Git`](https://inseefrlab.github.io/formation-bonnes-pratiques-git-R/).

:three: Observer le changement de statut du fichier `.gitignore`. Il est
désormais dans la partie `Staged`
Expand Down Expand Up @@ -932,7 +930,8 @@ Il correspond à cette forme caractéristique d'arbre:
3. Lorsque les modifications aboutissent, elles sont intégrées à `master` ;
la branche en question disparaît:

![](https://linogaliana.gitlab.io/collaboratif/pics/03_git/flow4_discuss.png)
![](https://inseefrlab.github.io/formation-bonnes-pratiques-git-R/slides/img/ghflow.png)


Il existe des *workflows* plus complexes, notamment le `Git Flow` que j'utilise
pour développer ce cours. [Ce tutoriel](https://www.atlassian.com/fr/git/tutorials/comparing-workflows/gitflow-workflow), très bien fait,
Expand Down
9 changes: 4 additions & 5 deletions content/git/index.qmd
Expand Up @@ -21,14 +21,13 @@ categories:
Cette partie du site présente un élément qui n'est pas propre à
`Python` mais qui est néanmoins indispensable : la pratique de `Git`.

Une grande partie du contenu de la partie provient du cours
[Travail collaboratif avec `R`](https://linogaliana.gitlab.io/collaboratif/git.html)
ou d'un [cours dédié fait avec Romain Avouac](https://formation.pages.lab.sspcloud.fr/git/20220929-formation-git-dese/#/title-slide).
Une grande partie du contenu de la partie provient
d'un [cours dédié fait avec Romain Avouac](https://inseefrlab.github.io/formation-bonnes-pratiques-git-R/slides/img/ghflow.png).

Le chapitre [de présentation de `Git`](/introgit) propose
Le chapitre [de présentation de `Git`](introgit.qmd) propose
une introduction visant à présenter l'intérêt d'utiliser
cet outil. Une mise en pratique est proposée
avec [un cadavre exquis](/exogit).
avec [un cadavre exquis](exogit.qmd).


# Utilisation de `Git` avec `Python`
Expand Down
4 changes: 2 additions & 2 deletions content/manipulation/02a_pandas_tutorial.qmd
Expand Up @@ -1099,10 +1099,10 @@ 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/jointures.html)
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)
qui donne des recommandations également utiles pour un utilisateur de `Python`.

![](https://pics.me.me/thumb_left-join-right-join-inner-join-full-outer-join-imgflip-com-66845242.png)
![](https://external-preview.redd.it/yOLzCR0qSzul2WpjQorxINB0xpU3_N9twmFVsgbGJwQ.jpg?auto=webp&s=4feedc91302ba635b3028a21b98d047def5cdc2b)

On utilise de manière indifférente les termes *merge* ou *join*.
Le deuxième terme provient de la syntaxe SQL.
Expand Down
2 changes: 1 addition & 1 deletion content/manipulation/02b_pandas_TP.qmd
Expand Up @@ -588,7 +588,7 @@ df_wide_agg.rank(axis = 1).median().nlargest(10)

Une information que l'on cherche à obtenir s'obtient de moins en moins à partir d'une unique base de données. Il devient commun de devoir combiner des données issues de sources différentes. Nous allons ici nous focaliser sur le cas le plus favorable qui est la situation où une information permet d'apparier de manière exacte deux bases de données (autrement nous serions dans une situation, beaucoup plus complexe, d'appariement flou). La situation typique est l'appariement entre deux sources de données selon un identifiant individuel ou un identifiant de code commune, ce qui est notre cas.

Il est recommandé de lire [ce guide assez complet sur la question des jointures avec R](https://linogaliana.gitlab.io/documentationR/joindre-des-tables-de-donn%C3%A9es.html) qui donne des recommandations également utiles en `python`.
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 en `python`.

On utilise de manière indifférente les termes *merge* ou *join*. Le deuxième terme provient de la syntaxe SQL. En `pandas`, dans la plupart des cas, on peut utiliser indifféremment `df.join` et `df.merge`

Expand Down
4 changes: 2 additions & 2 deletions content/manipulation/03_geopandas_tutorial.qmd
Expand Up @@ -54,7 +54,7 @@ l'objet de ce chapitre porte davantage sur la manipulation des données géograp

Ce tutoriel s'inspire beaucoup d'un autre tutoriel que j'ai fait pour
`R` disponible
[dans la documentation `utilitr`](https://www.book.utilitr.org/spatdata.html).
[dans la documentation `utilitr`](https://www.book.utilitr.org/fiche_donnees_spatiales).
Il peut servir de pendant à celui-ci pour l'utilisateur de `R`.


Expand Down Expand Up @@ -193,7 +193,7 @@ partir d'`OpenStreetMap`.

Nous proposons ici une méthode nouvelle de récupération de
ces données qui s'appuie sur le projet interministériel
[`cartiflette`](https://10pourcent.etalab.studio/projets/insee/).
[`cartiflette`](https://www.10pourcent.etalab.gouv.fr/projets/cartiflette/).
Ce projet vise à faciliter la récupération des sources officielles, notamment
celles de l'IGN, et leur association à des jeux de données géographiques.

Expand Down
2 changes: 1 addition & 1 deletion content/manipulation/04a_webscraping_TP.qmd
Expand Up @@ -133,7 +133,7 @@ d'un robot ne signifie pas qu'on peut se permettre de n'être
pas civilisé. En effet, lorsqu'il est non-maîtrisé, le
_webscraping_ peut ressembler à une attaque informatique
classique pour faire sauter un site _web_: le déni de service.
Le cours d'[Antoine Palazzolo](https://inseefrlab.github.io/formation_webscraping/) revient
Le cours d'[Antoine Palazzolo](https://inseefrlab.github.io/formation-webscraping/) revient
sur certaines bonnes pratiques qui ont émergé dans la communauté
des _scrapeurs_. Il est recommandé de lire cette ressource
pour en apprendre plus sur ce sujet. Y sont évoqués
Expand Down
4 changes: 2 additions & 2 deletions content/manipulation/04b_regex_TP.qmd
Expand Up @@ -60,7 +60,7 @@ ou _"regex"_. C'est une fonctionnalité qu'on retrouve dans beaucoup de langages

Une partie du contenu de cette partie
est une adaptation de la
[documentation collaborative sur `R` nommée `utilitR`](https://www.book.utilitr.org/textdata.html#regex) à laquelle j'ai participé. Ce chapitre reprend aussi du contenu du
[documentation collaborative sur `R` nommée `utilitR`](https://www.book.utilitr.org/03_fiches_thematiques/fiche_donnees_textuelles#regex) à laquelle j'ai participé. Ce chapitre reprend aussi du contenu du
livre [_R for Data Science_](https://r4ds.hadley.nz/regexps.html) qui présente un chapitre
très pédagogique sur les regex.

Expand Down Expand Up @@ -662,7 +662,7 @@ Cela peut valoir le coup de s'habituer à l'ajouter.

## Pour en savoir plus

- [documentation collaborative sur `R` nommée `utilitR`](https://www.book.utilitr.org/textdata.html#regex)
- [documentation collaborative sur `R` nommée `utilitR`](https://www.book.utilitr.org/03_fiches_thematiques/fiche_donnees_textuelles#regex)
- [_R for Data Science_](https://r4ds.hadley.nz/regexps.html)
- [_Regular Expression HOWTO_ dans la documentation officielle de `Python`](https://docs.python.org/3/howto/regex.html)
- L'outil de référence [https://regex101.com/] pour tester des expressions régulières
Expand Down
5 changes: 4 additions & 1 deletion content/manipulation/07_dask.qmd
Expand Up @@ -64,8 +64,11 @@ Plusieurs points sont mis en avant dans la documentation officielle et sont rés
### Comment `Dask` se compare à `Spark` ?

Dans le monde du _big-data_, un écosystème concurrent existe: [`Spark`](https://spark.apache.org/). Globalement, lorsqu'on a compris la logique
de l'un, il est très facile de faire la transition vers l'autre si besoin[^1]. Pour ma part, j'ai principalement fait du `Spark` sur
de l'un, il est très facile de faire la transition vers l'autre si besoin[^1].
<!-----
Pour ma part, j'ai principalement fait du `Spark` sur
des [données de téléphonie de plusieurs TB](https://www.linogaliana.fr/publication/2020-segregation/). En fait, la logique sera la même que celle de `Dask` sur données moins volumineuses.
------>

[^1]: Sauf si on doit mettre en oeuvre soi-même l'infrastructure `Spark`, ce qui relève plus des compétences du _data architect_ que du _data scientist_.

Expand Down
2 changes: 1 addition & 1 deletion content/manipulation/index.qmd
Expand Up @@ -89,7 +89,7 @@ utilisent des objets construits à partir de `Numpy`[^1].
de `Numpy` qui n'est pas toujours le plus adapté pour la gestion
de certains types de données. Le _framework_ `Arrow` tend à devenir
la couche basse utilisée par de plus en plus de librairies de _data science_.
[Ce _post_ de blog](https://pypistats.org/api/packages/pandas/) approfondit
[Ce _post_ de blog](https://datapythonista.me/blog/pandas-20-and-the-arrow-revolution-part-i) approfondit
de manière très pédagogique ce sujet.

L'approche `Pandas`, qui offre un point d'entrée harmonisé pour manipuler
Expand Down
6 changes: 3 additions & 3 deletions content/modelisation/0_preprocessing.qmd
Expand Up @@ -45,7 +45,7 @@ print_badges("content/modelisation/0_preprocessing.qmd")
:::

Ce chapitre utilise le jeu de données présenté dans l'[introduction
de cette partie](https://linogaliana-teaching.netlify.app/modelisation/) :
de cette partie](index.qmd) :
les données de vote aux élections présidentielles américaines de 2020 au niveau des comtés
croisées à des variables socio-démographiques.
Le code de consitution de la base de données
Expand Down Expand Up @@ -84,7 +84,7 @@ bénéficié que plus récemment d'une librairie unifiée,
Une autre raison du succès de `scikit` est son approche opérationnelle: la mise
en production de modèles développés via les _pipelines_ `scikit` est peu coûteuse.
Un [chapitre spécial de ce cours](/pipeline-scikit) est dédié aux _pipelines_.
Avec Romain Avouac, nous proposons un [cours plus avancé](https://ensae-reproductibilite.netlify.app/)
Avec Romain Avouac, nous proposons un [cours plus avancé](https://ensae-reproductibilite.github.io/website/)
en dernière année d'ENSAE où nous présentons certains enjeux relatifs
à la mise en production de modèles développés avec `scikit`.

Expand Down Expand Up @@ -289,7 +289,7 @@ Les fonctionnalités de `pandas` sont, à ce niveau, suffisantes pour explorer d
Néanmoins, lorsqu'on est face à un jeu de données présentant de
nombreuses variables explicatives (*features* en machine learning, *covariates* en économétrie),
il est souvent judicieux d'avoir une première étape de sélection de variables,
ce que nous verrons par la suite dans la [partie dédiée](https://linogaliana-teaching.netlify.app/lasso/).
ce que nous verrons par la suite dans la [partie dédiée](4_featureselection.qmd).

Avant d'être en mesure de sélectionner le meilleur ensemble de variables explicatives,
nous allons en prendre un nombre restreint et arbitraire.
Expand Down
2 changes: 1 addition & 1 deletion content/modelisation/1_modelevaluation.qmd
Expand Up @@ -156,7 +156,7 @@ Ce type d'échantillonnage stratifié est également possible avec `scikit`.
:::


L'[exercice sur les SVM](https://linogaliana-teaching.netlify.app/svm/) illustre cette construction et la manière
L'[exercice sur les SVM](2_SVM.qmd) illustre cette construction et la manière
dont elle facilite l'évaluation de la qualité d'un modèle.

## Validation croisée
Expand Down
2 changes: 1 addition & 1 deletion content/modelisation/2_SVM.qmd
Expand Up @@ -46,7 +46,7 @@ print_badges("content/modelisation/2_SVM.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](https://linogaliana-teaching.netlify.app/modelisation/): les données de vote aux élections présidentielles américaines
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).
Expand Down

0 comments on commit 9a4e226

Please sign in to comment.