1= "Essayez de me copier-coller" x
- 1
- Cliquez sur le bouton pour copier ce contenu et le coller ailleurs.
Lino Galiana
2024-11-20
Ce cours rassemble l’ensemble du contenu du cours Python pour la data science que je donne à l’ENSAE depuis 2018. Ce cours était auparavant donné par Xavier Dupré. Environ 170 élèves qui suivent ce cours chaque année. L’année 2024 a permis l’arrivée progressive d’une version anglophone équivalente à la version française visant à servir de cours d’introduction à la data science pour les instituts statistiques européens grâce à un appel à projets européen.
Ce site (pythonds.linogaliana.fr/) est le point d’entrée principal du cours. Il centralise
l’ensemble des contenus faits en cours dans le cadre de travaux pratiques ou proposés en complément à des fins de formation en continue.
Ce cours est open source
et j’accueille avec plaisir les suggestions d’amélioration sur Github
ou par le biais des commentaires en bas de chaque page. Python
étant un langage vivant et très dynamique, les pratiques évoluent et ce cours s’adapte en continu pour tenir compte de l’écosystème mouvant de la data science, en essayant néanmoins de distinguer les évolutions pérennes des pratiques des effets de mode.
Quelques éléments supplémentaires sont disponibles dans les slides introductives. Des éléments plus avancés sont présents dans un autre cours consacré à la mise en production de projets data science que je donne avec Romain Avouac en dernière année de l’ENSAE (ensae-reproductibilite.github.io/website).
Ce cours présente des tutoriels et des exercices complets. Chaque page est structurée sous la forme d’un problème concret et présente la démarche générique pour résoudre ce problème général.
Vous pouvez naviguer dans l’architecture du site via la table des matières ou par les liens vers le contenu antérieur ou postérieur à la fin de chaque page. Certaines parties, notamment celle consacrée à la modélisation, proposent des exemples fil-rouge pour illustrer la démarche de manière plus extensive.
Python
, dont le logo assez reconnaissable prend la forme de ,
est un langage qui a déjà plus de trente ans
mais qui a connu, au cours de la décennie 2010, une
nouvelle jeunesse du fait de l’engouement autour de
la data science.
Python
, plus que tout autre
langage informatique, réunit des communautés aussi
diverses que des statisticiens, des développeurs,
des gestionnaires
d’applications ou d’infrastructures informatiques,
des lycéens - Python
est au programme du bac français
depuis quelques années - ou des chercheurs
dans des champs à la fois théoriques et appliqués.
Contrairement
à beaucoup de langages informatiques qui fédèrent
une communauté assez homogène, Python
est parvenu à réunir
largement grâce à quelques principes centraux : la lisibilité
du langage, la simplicité à utiliser des modules,
la simplicité à l’associer à des langages plus performants
pour certaines tâches données, l’énorme volume de documentation
disponible en ligne…
Être le deuxième meilleur langage pour réaliser telle ou telle
tâche
peut ainsi être une source de succès lorsque la concurrence ne dispose
pas d’un éventail aussi large d’avantages.
Le succès de Python
, de par sa nature de
langage couteau-suisse, est indissociable
de l’émergence du profil du data scientist, profil
capable de s’intégrer à différents niveaux dans la valorisation
de données.
Davenport et Patil (2012), dans la Harvard Business Review,
ont ainsi pu parler du “boulot le plus sexy du 21e siècle”
et ont pu, dix ans plus tard, faire un panorama complet de l’évolution
des compétences attendues d’un data scientist dans
la même revue (Davenport et Patil 2022). Ce ne sont d’ailleurs pas que les
data scientists qui ont vocation à pratiquer Python
; dans le halo
des emplois autour de la donnée (data scientist, data engineer, ML engineer…),
Python
fait office de tour de Babel permettant la communication entre ces
différents profils interdépendants.
La richesse de Python
permet de l’utiliser dans toutes les phases du traitement de la donnée, de sa récupération et structuration à partir de
sources diverses à sa valorisation.
Par le prisme de la data science, nous verrons que Python
est
un très bon candidat pour assister les data scientists dans tous
les aspects du travail de données.
Ce cours introduit différents outils qui permettent de mettre en relation
des données et des théories grâce à Python
. Néanmoins, ce cours
va au-delà d’une simple introduction au langage et propose
des éléments plus approfondis, notamment sur les dernières
innovations permises par la data science dans les méthodes de travail.
Python
pour l’analyse de données ?Python
est d’abord connu, dans le monde de la data science, pour avoir
fourni très tôt les outils utiles à l’entraînement d’algorithmes
de machine learning sur plusieurs types de données. Certes,
le succès de Scikit Learn
1,
de Tensorflow
2 ou plus
récemment de PyTorch
3 dans la communauté
de la data science ont beaucoup contribué à l’adoption de Python
. Cependant,
réduire Python
à quelques librairies de machine learning
serait réducteur tant il s’agit
d’un véritable couteau-suisse pour les data scientists,
les social scientists ou les économistes. La success story de Python
n’est pas seulement le fait d’avoir proposé des librairies de machine learning à un moment adéquat: ce
langage dispose de réels atouts pour de nouveaux praticiens de la donnée.
L’intérêt de Python
est son rôle central dans un
écosystème plus large autour d’outils puissants, flexibles et open-source.
Il appartient, comme le langage , à cette classe
de langages pouvant servir au quotidien pour des tâches très diversifiées.
Dans de nombreux domaines explorés dans ce cours, Python
est, de loin,
le langage informatique proposant l’écosystème le plus complet et le plus simple
d’accès.
Outre le machine learning dont nous avons déjà parlé, Python
est
incontournable dès lors qu’on désire récupérer des données par le biais
d’API ou de web scraping4, deux approches que nous explorerons
dans la première partie du cours. Dans les domaines de l’analyse de données tabulaires5,
de la publication de contenu web ou de la production de graphiques, Python
présente un écosystème
de plus en plus similaire à du fait de l’investissement croissant de Posit
,
l’entreprise à l’origine des principales librairies pour la data science, dans la
communauté Python
.
Néanmoins, il ne s’agit pas, par ces éléments, de rentrer dans la
guéguerre stérile vs Python
.
Ces deux langages ayant beaucoup plus de points de convergence que de divergence,
il est très simple de transposer les bonnes
pratiques d’un
langage à l’autre. Il s’agit d’un point qui est développé plus amplement
dans le cours plus avancé que je donne avec Romain Avouac en dernière année
d’ENSAE : ensae-reproductibilite.github.io/website.
A terme, les data scientists et chercheurs en sciences sociales ou
économie utiliseront de manière presque indifférente, et en alternance, ou Python
.
Ce cours
présentera ainsi régulièrement des analogies avec pour aider les
personnes découvrant Python
, mais connaissant déjà bien , à
mieux comprendre certains messages.
Ce cours s’adresse aux praticiens de la data science,
discipline entendue ici au sens large comme la combinaison de techniques issues des mathématiques, de la statistique et de l’informatique pour produire de la connaissance utile à partir de données.
Comme la data science n’est pas uniquement une discipline scientique mais vise également à fournir un ensemble d’outils pour répondre à des objectifs opérationnels, l’apprentissage du principal outil nécessaire à l’acquisition de connaissances en data science, à savoir le langage Python
est également
l’occasion d’évoquer la démarche scientifique rigoureuse à adopter face à des données. Ce cours a pour objectif de présenter la démarche face à un jeu de données, les problèmes rencontrés, les solutions pour les surmonter et les implications que ces dernières peuvent avoir. Il ne s’agit donc pas que d’un cours sur un outil technique, désincarné de problématiques scientifiques.
Ce cours présuppose qu’on désire faire un usage de Python
intense
en données dans un cadre statistique rigoureux. Il ne
revient que de manière secondaire
sur les fondements statistiques ou algorithmiques
derrière certaines des techniques évoquées, souvent l’objet d’enseignements dédiés, notamment
à l’ENSAE.
Ne pas connaître ces notions n’empêche ainsi pas de comprendre
le contenu de ce site web car les concepts plus avancés sont généralement présentés à part,
dans des encadrés dédiés.
La facilité d’usage de Python
évite de devoir programmer soi-même un modèle, ce qui rend
possible l’application
de modèles dont on n’est pas expert. La connaissance des modèles sera
plutôt nécessaire dans l’interprétation des résultats.
Pour autant, même s’il est relativement facile d’utiliser des
modèles complexes
avec Python
, il est fort utile d’avoir du recul sur ceux-ci avant
de se lancer dans une démarche de modélisation. Il s’agit de l’une des
raisons pour lesquelles la modélisation arrive si tardivement dans ce cours: en
plus de faire appel à des concepts statistiques avancés, il est nécessaire,
pour produire une modélisation pertinente, d’avoir appréhendé les
faits stylisés dans nos données. Bien comprendre la structure des données et leur adéquation
avec les hypothèses d’un modèle est indispensable pour construire une modélisation
de qualité.
Ce cours donne une place centrale à
la notion de reproductibilité. Cette exigence se traduit de diverses
manières dans cet enseignement,
en premier lieu en permettant que tous
les exemples et exercices de ce cours soient testés par le biais
de notebooks Jupyter
6.
L’ensemble du contenu du site web est reproductible dans des environnements informatiques divers. Il est bien sûr possible de copier-coller les morceaux de code présents dans ce site, grâce au bouton présent au dessus des exemples de code:
1x = "Essayez de me copier-coller"
Néanmoins, comme ce site présente de nombreux exemples, les allers et retours
entre un environnement de test de Python
et celui-ci pourraient être
pénibles. Chaque chapitre est donc facilement récupérable sous forme de
notebook Jupyter
grâce à des boutons au début de chaque page.
Voici, par exemple, ces boutons pour le tutoriel Numpy
:
Les recommandations concernant les environnements à privilégier pour utiliser ces notebooks sont reportées au prochain chapitre.
L’exigence de reproductibilité se manifeste également
dans le choix des exemples pris pour ce cours.
L’ensemble du contenu de ce site s’appuie sur des données
ouvertes, qu’il s’agisse de données françaises (principalement
issues de la plateforme
centralisatrice data.gouv
ou du site
web de l’Insee) ou de données
américaines. Les résultats sont donc reproductibles pour quelqu’un
disposant d’un environnement identique7.
Des chercheurs américains ont pu parler de crise de la reproductibilité dans le domaine du machine learning (Kapoor et Narayanan 2022). Les dérives de l’écosystème de la publication scientifique et les enjeux économiques derrière les publications académiques dans le domaine du machine learning ont une place privilégiée parmi les facteurs pouvant l’expliquer.
Néanmoins, l’enseignement universitaire porte également une responsabilité
dans ce domaine. Les étudiants et chercheurs ne sont pas formés à ces sujets et s’ils
n’adoptent pas cette exigence tôt dans leur parcours, ils n’y seront plus forcément incités
ultérieurement. Pour cette raison, en plus de former à Python
et à la data science, ce cours
introduit à l’usage du
logiciel de contrôle de version Git
dans une partie dédiée.
Tous les projets des élèves doivent être open source, ce qui est l’une des meilleures manières,
pour un enseignant, de trouver une consigne pour que les élèves produisent un code de qualité.
Les élèves de l’ENSAE valident le cours grâce à un projet approfondi. Les éléments relatifs à l’évaluation du cours, ainsi qu’une liste des projets déjà effectués, sont disponibles dans la Section Évaluation.
Ce cours est une introduction aux enjeux de la data science à
travers l’apprentissage du langage Python
. Comme le terme “data science”
l’indique, une partie importante de ce cours est consacrée au travail sur les
données: récupération, structuration, exploration, mise en relation. C’est l’objet de la première
partie du cours
“Manipuler des données” qui sert de fondement au reste du cours.
Malheureusement, de nombreuses formations en data science, statistiques appliquées ou sciences économiques et sociales,
font l’impasse sur
cette part du travail des data scientists qu’on appelle parfois “data wrangling”
ou “feature engineering”.
qui, en plus de représenter une part importante du temps de travail des data scientists, est indispensable
pour construire un modèle pertinent.
L’objectif de cette partie est d’illustrer les enjeux liés à la récupération
de plusieurs types de sources de données et à leur exploitation par le biais de Python
. Les exemples seront diversifiés, pour illustrer la richesse des données qui peuvent être analysées avec Python
: statistiques d’émissions communales de \(CO_2\), données de transactions immobilières, diagnostics énergétiques des logements, données de fréquentation des stations vélib…
La deuxième partie est consacrée à la production de visualisations avec Python
. Après avoir récupéré et nettoyé des données,
on désire généralement synthétiser celles-ci par le biais de tableaux, de productions graphiques ou de cartes. Cette partie est une introduction rapide à ce sujet (“Communiquer avec Python
”). Assez introductive, l’objectif de cette partie est surtout de donner quelques notions qui sont consolidées par la suite.
La troisième partie est consacrée à la modélisation à travers l’exemple fil rouge de la science électorale (“Modéliser avec Python
”). L’objectif de cette partie est d’illustrer la démarche scientifique du machine learning, les choix méthodologiques et techniques afférents et ouvrir vers les enjeux suivants qui seront évoqués dans la suite du cursus universitaire.
La quatrième partie du cours fait un pas de côté pour se consacrer aux enjeux spécifiques liés à l’exploitation des données textuelles. Il s’agit du chapitre d’“Introduction au Natural Language Processing (NLP)” avec Python
”. Ce champ de recherche étant particulièrement actif, il ne s’agit que d’une introduction au sujet. Pour aller plus loin, se référer à Russell et Norvig (2020), chapitre 24.
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
md`Ce fichier a été modifié __${table_commit.length}__ fois depuis sa création le ${creation_string} (dernière modification le ${last_modification_string})`
creation = d3.min(
table_commit.map(d => new Date(d.Date))
)
last_modification = d3.max(
table_commit.map(d => new Date(d.Date))
)
creation_string = creation.toLocaleString("fr", {
"day": "numeric",
"month": "long",
"year": "numeric"
})
last_modification_string = last_modification.toLocaleString("fr", {
"day": "numeric",
"month": "long",
"year": "numeric"
})
SHA | Date | Author | Description |
---|---|---|---|
488780a | 2024-09-25 14:32:16 | Lino Galiana | Change badge (#556) |
5d15b06 | 2024-09-23 15:39:40 | lgaliana | Handling badges problem |
f8b0413 | 2024-08-28 15:15:04 | Lino Galiana | Révision complète de la partie introductive (#549) |
0908656 | 2024-08-20 16:30:39 | Lino Galiana | English sidebar (#542) |
a987fea | 2024-06-23 18:43:06 | Lino Galiana | Fix broken links (#506) |
69a4585 | 2024-06-12 20:02:14 | Antoine Palazzolo | correct link (#502) |
005d89b | 2023-12-20 17:23:04 | Lino Galiana | Finalise l’affichage des statistiques Git (#478) |
1684220 | 2023-12-02 12:06:40 | Antoine Palazzolo | Première partie de relecture de fin du cours (#467) |
1f23de2 | 2023-12-01 17:25:36 | Lino Galiana | Stockage des images sur S3 (#466) |
69cf52b | 2023-11-21 16:12:37 | Antoine Palazzolo | [On-going] Suggestions chapitres modélisation (#452) |
a771183 | 2023-10-09 11:27:45 | Antoine Palazzolo | Relecture TD2 par Antoine (#418) |
e8d0062 | 2023-09-26 15:54:49 | Kim A | Relecture KA 25/09/2023 (#412) |
154f09e | 2023-09-26 14:59:11 | Antoine Palazzolo | Des typos corrigées par Antoine (#411) |
6178ebe | 2023-09-26 14:18:34 | Lino Galiana | Change quarto project type (#409) |
9a4e226 | 2023-08-28 17:11:52 | Lino Galiana | Action to check URL still exist (#399) |
8082302 | 2023-08-25 17:48:36 | Lino Galiana | Mise à jour des scripts de construction des notebooks (#395) |
3bdf3b0 | 2023-08-25 11:23:02 | Lino Galiana | Simplification de la structure 🤓 (#393) |
dde3e93 | 2023-07-21 22:22:05 | Lino Galiana | Fix bug on chapter order (#385) |
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) |
git_history_table = Inputs.table(
table_commit,
{
format: {
SHA: x => md`[${x}](${github_repo}/commit/${x})`,
Description: x => md`${replacePullRequestPattern(x, github_repo)}`,
/*Date: x => x.toLocaleString("fr", {
"month": "numeric",
"day": "numeric",
"year": "numeric"
})
*/
}
}
)
git_history_plot = Plot.plot({
marks: [
Plot.ruleY([0], {stroke: "royalblue"}),
Plot.dot(
table_commit,
Plot.pointerX({x: (d) => new Date(d.date), y: 0, stroke: "red"})),
Plot.dot(table_commit, {x: (d) => new Date(d.Date), y: 0, fill: "royalblue"})
]
})
function replacePullRequestPattern(inputString, githubRepo) {
// Use a regular expression to match the pattern #digit
var pattern = /#(\d+)/g;
// Replace the pattern with ${github_repo}/pull/#digit
var replacedString = inputString.replace(pattern, '[#$1](' + githubRepo + '/pull/$1)');
return replacedString;
}
table_commit = {
// Get the HTML table by its class name
var table = document.querySelector('.commit-table');
// Check if the table exists
if (table) {
// Initialize an array to store the table data
var dataArray = [];
// Extract headers from the first row
var headers = [];
for (var i = 0; i < table.rows[0].cells.length; i++) {
headers.push(table.rows[0].cells[i].textContent.trim());
}
// Iterate through the rows, starting from the second row
for (var i = 1; i < table.rows.length; i++) {
var row = table.rows[i];
var rowData = {};
// Iterate through the cells in the row
for (var j = 0; j < row.cells.length; j++) {
// Use headers as keys and cell content as values
rowData[headers[j]] = row.cells[j].textContent.trim();
}
// Push the rowData object to the dataArray
dataArray.push(rowData);
}
}
return dataArray
}
Library developed by the French public research laboratories of INRIA since 2007.↩︎
Library initially used by Google for their internal needs, it was made public in 2015. Although less used now, this library had a significant influence in the 2010s by promoting the use of neural networks in research and operational applications.↩︎
Library developed by Meta since 2018 and affiliated since 2022 with the PyTorch foundation.↩︎
In these two areas, the most serious competitor to Python
is Javascript
. However, the community around this language is more focused
on web development issues than on data science.↩︎
Tabular data are structured data, organized,
as their name indicates, in a table format that allows matching
observations with variables. This structuring differs from other types
of more complex data: free texts, images, sounds, videos… In the domain of unstructured data,
Python
is the hegemonic language for analysis. In the domain of tabular data, Python
’s competitive advantage is less pronounced, particularly compared to ,
but these two languages offer a core set of fairly similar functionalities. We will
regularly draw parallels between these two languages
in the chapters dedicated to the Pandas
library.↩︎
Un notebook est un environnement interactif qui permet d’écrire et d’exécuter du code en direct. Il combine, dans un seul document, du texte, du code qui peut être exécuté et dont les sorties s’affichent après calculs. C’est extrêmement pratique pour l’apprentissage du langage Python
. Pour plus de détails, consultez la documentation officielle de Jupyter.↩︎
Le fait d’ouvrir les chapitres sous la forme de notebooks dans des environnements standardisés, ce qui sera proposé à partir du prochain chapitre, permet d’assurer que vous disposiez d’un environnement contrôlé. Les installations personnelles de Python
ont toutes les chances d’avoir subies des bidouillages modifiant votre environnement et pouvant provoquer des erreurs inattendues et difficiles à comprendre: ce n’est donc pas un usage recommandé pour ce cours. Comme vous pourrez le découvrir dans le prochain chapitre, les environnements cloud offrent un confort en ce qui concerne la standardisation des environnements.↩︎
@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}
}