Git: un outil nécessaire pour les data scientists

Une partie annexe au cours pour découvrir Git, un outil devenu indispensable pour les data scientists afin de mener des projets impliquant du code Python.

Git
Auteur·rice

Lino Galiana

Date de publication

2024-11-20

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 d’un cours dédié fait avec Romain Avouac

Dérouler les slides ci-dessous ou cliquer ici pour afficher les slides en plein écran.

1 Introduction

1.1 Le problème

La démarche naturelle quand on commence à travailler longuement sur un projet pour lequel on veut éviter d’effacer et perdre son code à cause d’une erreur humaine est de dupliquer les fichiers et créer des versions multiples d’un même code qui sont des instantanés à un moment donné :

Figure 1.1: Le contrôle de version artisanal

Ceci est une manière de sauvegarder l’évolution de son code et donc la vie d’un projet. Néanmoins c’est une manière très artisanale de procéder qui n’efface pas l’erreur humaine puisqu’il est toujours possible de faire une erreur lors de la duplication du fichier ou d’oublier de sauvegarder une version qui nous satisfaisait.

Cette pratique présente de nombreux inconvénients. Le premier est le fait que la recherche d’information pertinente, par exemple sur l’introduction d’un bug, est compliquée par cette structure dupliquée. Il est difficile, sans rentrer dans le détail de chaque fichier, de connaître son évolution réelle entre deux dates. Pour l’extraction d’information, il serait beaucoup plus pertinent de construire des fichiers de l’évolution entre telle ou telle version mais cela requiert de nombreux gestes manuels et un temps conséquent. Le deuxième problème est qu’on ne sait pas forcément, quand on revient quelques jours plus tard sur le projet, pourquoi on a enregistré telle ou telle version : quand on est le 28 novembre, se souvient-on de ce qui distingue les versions du 4 mai 12:37 et 16:02 ?

Si on ajoute la dimension collaborative du travail sur le code, on voit rapidement d’autres inconvénients à cette approche artisanale. En premier lieu, quelqu’un reprenant le projet aura du mal à rentrer dans celui-ci. De plus, il sera encore plus difficile pour cette personne de rechercher l’information pertinente sur les choix de version faits: cet historique lui est finalement inutile. D’autant que se pose la question du partage de ces codes: par quel biais cet ensemble de fichiers est-il partagé ? Par mails ? Sur un disque partagé ? Mais que se passe-t-il si plusieurs participants du projet travaillent en même temps dessus ? Comment organiser la collaboration et réconcilier les changements s’ils ont lieu de manière conjointe ?

1.2 La solution technique: Git

Git apporte une réponse technique à ces très nombreuses questions. Ce logiciel spécialisé dans le contrôle de version, c’est-à-dire dans le suivi des évolutions d’un projet, vient résoudre de nombreux problèmes liés à la mise en oeuvre de projets de data science dans les organisations. L’objet de ce chapitre est de présenter quelques concepts nécessaires à la compréhension de Git et présenter la manière dont celui-ci vient aider à gérer l’évolution d’un projet informatique. Le chapitre suivant introduira à la manière dont Git fluidifie la collaboration au sein d’équipes impliquées dans des projets de data science. Ceci est devenu indispensable car l’époque où les data scientists travaillaient tous seuls sur des notebooks est révolue. Les projets de data science sont devenus, dans la plupart des organisations, plus ambitieux et impliquent souvent plusieurs personnes avec des profils diverses1, il est donc nécessaire d’avoir de la discipline pour que la collaboration soit fluide.

2 Comment utiliser Git quand on fait du Python ?

Git est un logiciel de contrôle de version, c’est-à-dire un logiciel en charge d’enregistrer les évolutions d’un fichier dans le temps (ce qu’on appelle versionner). Ce n’est pas un package Python, ce ne sera pas par ce biais que nous l’utiliserons.

Les utilisateurs de Python peuvent utiliser Git par le biais de deux intermédiaires: par le biais de la ligne de commande ou par le biais d’extensions graphiques dans leurs environnements de développement (VSCode, Jupyter, etc.). Sur le SSPCloud, l’infrastructure recommandée pour ce cours, nous avons la possibilité pour faire du Git par les deux approches mais nous allons principalement utiliser l’interface graphique de VSCode qui réduit le coût d’entrée dans Git.

Où trouver de l’information complémentaire à ce cours ?

Git fait parti des pratiques collaboratives devenues standards dans le domaine de l’open-source mais également de plus en plus communes dans les administrations et entreprises de la data science.

Il existe de nombreuses ressources sur l’utilisation de Git sur internet. Malheureusement, beaucoup sont techniques et font l’hypothèse d’une connaissance déjà poussée de certaines notions informatiques utiles à la compréhension de Git. Ce cours ne fera pas de telles hypothèses, à l’exception d’une connaissance minimale de la logique de filesystem, c’est-à-dire de la manière dont s’organisent des fichiers sur un ordinateur.

En ce qui concerne les contenus proches de celui-ci, une série de ressources de formation a été rassemblée par l’Insee sur ce site.

3 Contenu de la partie

L’apprentissage de Git est décliné en deux chapitres:

  • Le premier est consacré à présenter la logique générale de Git, les concepts importants et à illustrer ceux-ci par la pratique dans un cadre de travail individuel.
  • Le second chapitre est consacré aux enjeux liés au travail collaboratif

L’objectif général de cette partie est de démystifier Git. Si la découverte en autodidacte peut être particulièrement douloureuse, ce n’est pas le cas en étant accompagné par une ressource proposant une illustration des concepts importants par la pratique et complixifiant le cadre d’usage de Git de manière progressive.

👉️ Un certain nombre de termes nouveaux quand on découvre Git mais qui constituent les concepts utiles à sa compréhension sont définis dans les marges des deux prochains chapitres comme cela est montré ici.

Informations additionnelles

environment files have been tested on.

Latest built version: 2024-11-20

Python version used:

'3.12.6 | packaged by conda-forge | (main, Sep 30 2024, 18:08:52) [GCC 13.3.0]'
Package Version
affine 2.4.0
aiobotocore 2.15.1
aiohappyeyeballs 2.4.3
aiohttp 3.10.8
aioitertools 0.12.0
aiosignal 1.3.1
alembic 1.13.3
altair 5.4.1
aniso8601 9.0.1
annotated-types 0.7.0
appdirs 1.4.4
archspec 0.2.3
asttokens 2.4.1
attrs 24.2.0
babel 2.16.0
bcrypt 4.2.0
beautifulsoup4 4.12.3
black 24.8.0
blinker 1.8.2
blis 0.7.11
bokeh 3.5.2
boltons 24.0.0
boto3 1.35.23
botocore 1.35.23
branca 0.7.2
Brotli 1.1.0
cachetools 5.5.0
cartiflette 0.0.2
Cartopy 0.24.1
catalogue 2.0.10
cattrs 24.1.2
certifi 2024.8.30
cffi 1.17.1
charset-normalizer 3.3.2
click 8.1.7
click-plugins 1.1.1
cligj 0.7.2
cloudpathlib 0.20.0
cloudpickle 3.0.0
colorama 0.4.6
comm 0.2.2
commonmark 0.9.1
conda 24.9.1
conda-libmamba-solver 24.7.0
conda-package-handling 2.3.0
conda_package_streaming 0.10.0
confection 0.1.5
contextily 1.6.2
contourpy 1.3.0
cryptography 43.0.1
cycler 0.12.1
cymem 2.0.8
cytoolz 1.0.0
dask 2024.9.1
dask-expr 1.1.15
databricks-sdk 0.33.0
debugpy 1.8.6
decorator 5.1.1
Deprecated 1.2.14
diskcache 5.6.3
distributed 2024.9.1
distro 1.9.0
docker 7.1.0
duckdb 0.10.1
en-core-web-sm 3.7.1
entrypoints 0.4
et_xmlfile 2.0.0
exceptiongroup 1.2.2
executing 2.1.0
fastexcel 0.11.6
fastjsonschema 2.20.0
fiona 1.10.1
Flask 3.0.3
folium 0.17.0
fontawesomefree 6.6.0
fonttools 4.54.1
frozendict 2.4.4
frozenlist 1.4.1
fsspec 2023.12.2
gensim 4.3.2
geographiclib 2.0
geopandas 1.0.1
geoplot 0.5.1
geopy 2.4.1
gitdb 4.0.11
GitPython 3.1.43
google-auth 2.35.0
graphene 3.3
graphql-core 3.2.4
graphql-relay 3.2.0
graphviz 0.20.3
great-tables 0.12.0
greenlet 3.1.1
gunicorn 22.0.0
h2 4.1.0
hpack 4.0.0
htmltools 0.6.0
hyperframe 6.0.1
idna 3.10
imageio 2.36.0
importlib_metadata 8.5.0
importlib_resources 6.4.5
inflate64 1.0.0
ipykernel 6.29.5
ipython 8.28.0
itsdangerous 2.2.0
jedi 0.19.1
Jinja2 3.1.4
jmespath 1.0.1
joblib 1.4.2
jsonpatch 1.33
jsonpointer 3.0.0
jsonschema 4.23.0
jsonschema-specifications 2024.10.1
jupyter-cache 1.0.0
jupyter_client 8.6.3
jupyter_core 5.7.2
kaleido 0.2.1
kiwisolver 1.4.7
langcodes 3.5.0
language_data 1.3.0
lazy_loader 0.4
libmambapy 1.5.9
locket 1.0.0
lxml 5.3.0
lz4 4.3.3
Mako 1.3.5
mamba 1.5.9
mapclassify 2.8.1
marisa-trie 1.2.1
Markdown 3.6
markdown-it-py 3.0.0
MarkupSafe 2.1.5
matplotlib 3.9.2
matplotlib-inline 0.1.7
mdurl 0.1.2
menuinst 2.1.2
mercantile 1.2.1
mizani 0.11.4
mlflow 2.16.2
mlflow-skinny 2.16.2
msgpack 1.1.0
multidict 6.1.0
multivolumefile 0.2.3
munkres 1.1.4
murmurhash 1.0.10
mypy-extensions 1.0.0
narwhals 1.14.1
nbclient 0.10.0
nbformat 5.10.4
nest_asyncio 1.6.0
networkx 3.3
nltk 3.9.1
numpy 1.26.4
opencv-python-headless 4.10.0.84
openpyxl 3.1.5
opentelemetry-api 1.16.0
opentelemetry-sdk 1.16.0
opentelemetry-semantic-conventions 0.37b0
OWSLib 0.28.1
packaging 24.1
pandas 2.2.3
paramiko 3.5.0
parso 0.8.4
partd 1.4.2
pathspec 0.12.1
patsy 0.5.6
Pebble 5.0.7
pexpect 4.9.0
pickleshare 0.7.5
pillow 10.4.0
pip 24.2
platformdirs 4.3.6
plotly 5.24.1
plotnine 0.13.6
pluggy 1.5.0
polars 1.8.2
preshed 3.0.9
prometheus_client 0.21.0
prometheus_flask_exporter 0.23.1
prompt_toolkit 3.0.48
protobuf 4.25.3
psutil 6.0.0
ptyprocess 0.7.0
pure_eval 0.2.3
py7zr 0.20.8
pyarrow 17.0.0
pyarrow-hotfix 0.6
pyasn1 0.6.1
pyasn1_modules 0.4.1
pybcj 1.0.2
pycosat 0.6.6
pycparser 2.22
pycryptodomex 3.21.0
pydantic 2.9.2
pydantic_core 2.23.4
Pygments 2.18.0
PyNaCl 1.5.0
pynsee 0.1.8
pyogrio 0.10.0
pyOpenSSL 24.2.1
pyparsing 3.1.4
pyppmd 1.1.0
pyproj 3.7.0
pyshp 2.3.1
PySocks 1.7.1
python-dateutil 2.9.0
python-dotenv 1.0.1
python-magic 0.4.27
pytz 2024.1
pyu2f 0.1.5
pywaffle 1.1.1
PyYAML 6.0.2
pyzmq 26.2.0
pyzstd 0.16.2
querystring_parser 1.2.4
rasterio 1.4.2
referencing 0.35.1
regex 2024.9.11
requests 2.32.3
requests-cache 1.2.1
retrying 1.3.4
rich 13.9.4
rpds-py 0.21.0
rsa 4.9
ruamel.yaml 0.18.6
ruamel.yaml.clib 0.2.8
s3fs 2023.12.2
s3transfer 0.10.2
scikit-image 0.24.0
scikit-learn 1.5.2
scipy 1.13.0
seaborn 0.13.2
setuptools 74.1.2
shapely 2.0.6
shellingham 1.5.4
six 1.16.0
smart-open 7.0.5
smmap 5.0.0
sortedcontainers 2.4.0
soupsieve 2.5
spacy 3.7.5
spacy-legacy 3.0.12
spacy-loggers 1.0.5
SQLAlchemy 2.0.35
sqlparse 0.5.1
srsly 2.4.8
stack-data 0.6.2
statsmodels 0.14.4
tabulate 0.9.0
tblib 3.0.0
tenacity 9.0.0
texttable 1.7.0
thinc 8.2.5
threadpoolctl 3.5.0
tifffile 2024.9.20
toolz 1.0.0
topojson 1.9
tornado 6.4.1
tqdm 4.66.5
traitlets 5.14.3
truststore 0.9.2
typer 0.13.1
typing_extensions 4.12.2
tzdata 2024.2
Unidecode 1.3.8
url-normalize 1.4.3
urllib3 1.26.20
wasabi 1.1.3
wcwidth 0.2.13
weasel 0.4.1
webdriver-manager 4.0.2
websocket-client 1.8.0
Werkzeug 3.0.4
wheel 0.44.0
wordcloud 1.9.3
wrapt 1.16.0
xgboost 2.1.1
xlrd 2.0.1
xyzservices 2024.9.0
yarl 1.13.1
yellowbrick 1.5
zict 3.0.0
zipp 3.20.2
zstandard 0.23.0

View file history

SHA Date Author Description
21db4db 2024-09-30 11:42:26 lgaliana Marges
3e04253 2024-09-30 10:11:32 Lino Galiana Grosse mise à jour de la partie Git (#557)
c9f9f8a 2024-04-24 15:09:35 Lino Galiana Dark mode and CSS improvements (#494)
005d89b 2023-12-20 17:23:04 Lino Galiana Finalise l’affichage des statistiques Git (#478)
09654c7 2023-11-14 15:16:44 Antoine Palazzolo Suggestions Git & Visualisation (#449)
57f108f 2023-11-10 10:59:36 linogaliana Intro git
154f09e 2023-09-26 14:59:11 Antoine Palazzolo Des typos corrigées par Antoine (#411)
9a4e226 2023-08-28 17:11:52 Lino Galiana Action to check URL still exist (#399)
3bdf3b0 2023-08-25 11:23:02 Lino Galiana Simplification de la structure 🤓 (#393)
30823c4 2023-08-24 14:30:55 Lino Galiana Liens morts navbar (#392)
2dbf853 2023-07-05 11:21:40 Lino Galiana Add nice featured images (#368)
f21a24d 2023-07-02 10:58:15 Lino Galiana Pipeline Quarto & Pages 🚀 (#365)
34cc32c 2022-10-14 22:05:47 Lino Galiana Relecture Git (#300)
f394b23 2022-10-13 14:32:05 Lino Galiana Dernieres modifs geopandas (#298)
0e01c33 2021-11-10 12:09:22 Lino Galiana Relecture @antuki API+Webscraping + Git (#178)
9a3f7ad 2021-10-31 18:36:25 Lino Galiana Nettoyage partie API + Git (#170)
aeb3995 2021-07-06 11:11:03 avouacr Relecture et ajouts sur anaconda + jupyter (#116)
4cdb759 2021-05-12 10:37:23 Lino Galiana :sparkles: :star2: Nouveau thème hugo :snake: :fire: (#105)
Retour au sommet

Notes de bas de page

  1. Ce constat est le point de départ du cours de “Mise en production de projets data science” disponible sur ensae-reproductibilite.github.io/website/ que Romain Avouac et moi donnons à la fin de la scolarité de l’ENSAE.↩︎

Citation

BibTeX
@book{galiana2023,
  author = {Galiana, Lino},
  title = {Python pour la data science},
  date = {2023},
  url = {https://pythonds.linogaliana.fr/},
  doi = {10.5281/zenodo.8229676},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
Galiana, Lino. 2023. Python pour la data science. https://doi.org/10.5281/zenodo.8229676.