deblan.io-gemini/blog/posts/578.gmi
2021-04-09 15:40:55 +02:00

78 lines
2.9 KiB
Plaintext

# Analyser efficacement un fichier CSV
* 2020-02-20 15:17:02
* Développement
```html
<p>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 :
<a href="https://gitnet.fr/deblan/csv">deblan/csv</a> et <a href="https://gitnet.fr/deblan/csv-validator">deblan/csv-validator</a>.</p>
```
```html
<p>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.</p>
```
```html
<p>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 : <a href="https://pypi.org/project/csvs-to-sqlite/">csvs-to-sqlite</a>.
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 : <a href="https://pypi.org/project/datasette/">datasette</a>.</p>
```
```html
<p>Ce sont des outils écrits en Python qui s'installent et s'utilisent en une poignée de secondes.</p>
```
```html
<pre><code class="language-bash" data-title="Installation">$ sudo pip3 install csvs-to-sqlite datasette
</code></pre>
```
```html
<p>Pour illustrer, je vais traiter le fichier CSV de la base officielle des codes postaux
disponible sur <a href="https://www.data.gouv.fr/fr/datasets/base-officielle-des-codes-postaux/">data.gouv.fr</a>.</p>
```
```html
<pre><code class="language-bash" data-title="Installation">$ wget -O codes_postaux.csv https://datanova.legroupe.laposte.fr/explore/dataset/laposte_hexasmal/download/\?format\=csv\&amp;timezone\=Europe/Berlin\&amp;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)
</code></pre>
```
```html
<p>On peut maintenant accéder à http://127.0.0.1:8001 depuis un navigateur et commencer
à analyer et traiter les données :</p>
```
```html
<p><img src="https://upload.deblan.org/u/2020-02/5e4e93b5.png" alt="datasette" /></p>
```
```html
<p>Et le plus intéressant pour moi, c'est de pouvoir écrire des requêtes SQL affiner
vraiment les données affichées :</p>
```
```html
<p><img src="https://upload.deblan.org/u/2020-02/5e4e93c1.png" alt="datasette" /></p>
```
```html
<p>Enfin, on peut générer un nouveau fichier CSV (ou JSON) avec les données filtrées.</p>
```
```html
<p>Simple, rapide et efficace !</p>
```