deblan.io-gemini/blog/posts/578.gmi.md

52 lines
2.5 KiB
Markdown
Raw Normal View History

2020-12-18 11:56:13 +01:00
# Analyser efficacement un fichier CSV
* 2020-02-20 15:17:02
* Développement
Je travaille régulièrement sur des traitements de fichiers CSV.
J'apprécie beaucoup ce format de fichier car il se génère et se lit
facilement, qu'on soit informaticien ou non. J'ai d'ailleur écrit 2
librairies PHP pour lire, générer et valider des CSV :
[deblan/csv](https://gitnet.fr/deblan/csv) et [deblan/csv-validator](https://gitnet.fr/deblan/csv-validator).
Lors des mes analyses, je me confronte parfois à des fichiers qui
comportent beaucoup de colonnes et c'est un enfer d'utiliser un tableur pour
visualiser et filtrer ces tableaux très larges.
Après quelques recherches, j'ai découvert deux projets qui se complètent à merveille !
Le premier est un outil qui transforme un fichier CSV en une base de données SQLite : [csvs-to-sqlite](https://pypi.org/project/csvs-to-sqlite/).
Le second génère une interface web (avec un serveur web intégré) pour faire
des requêtes SQL sur une base de données SQLite : [datasette](https://pypi.org/project/datasette/).
Ce sont des outils écrits en Python qui s'installent et s'utilisent en une poignée de secondes.
```{.language-bash data-title="Installation"}
$ sudo pip3 install csvs-to-sqlite datasette
```
Pour illustrer, je vais traiter le fichier CSV de la base officielle des codes postaux
disponible sur [data.gouv.fr](https://www.data.gouv.fr/fr/datasets/base-officielle-des-codes-postaux/).
```{.language-bash data-title="Installation"}
$ wget -O codes_postaux.csv https://datanova.legroupe.laposte.fr/explore/dataset/laposte_hexasmal/download/\?format\=csv\&timezone\=Europe/Berlin\&use_labels_for_header\=true
$ csvs-to-sqlite -s ";" codes_postaux.csv codes_postaux.db
$ datasette serve codes_postaux.db
Serve! files=('codes_postaux.db',) (immutables=()) on port 8001
INFO: Started server process [8550]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:8001 (Press CTRL+C to quit)
```
On peut maintenant accéder à http://127.0.0.1:8001 depuis un navigateur et commencer
à analyer et traiter les données :
![datasette](https://upload.deblan.org/u/2020-02/5e4e93b5.png)
Et le plus intéressant pour moi, c'est de pouvoir écrire des requêtes SQL affiner
vraiment les données affichées :
![datasette](https://upload.deblan.org/u/2020-02/5e4e93c1.png)
Enfin, on peut générer un nouveau fichier CSV (ou JSON) avec les données filtrées.
Simple, rapide et efficace !