chore: initial Observable workspace with technical README

This commit is contained in:
Kerboul
2026-03-19 16:28:35 +01:00
commit c390caf2e2
16 changed files with 4980 additions and 0 deletions

137
README.md Normal file
View File

@@ -0,0 +1,137 @@
# Observable Workspace — In-N-Out x Séismes x OVNIs (Californie)
Workspace **Observable Framework** orienté data storytelling avec deux analyses géospatiales en Californie :
- **In-N-Out Seismic Challenge** : classement des restaurants InNOut selon une exposition aux séismes.
- **Paradoxe de lAnimal Style** : corrélation exploratoire entre observations OVNI et proximité dun InNOut.
## Objectifs
- Démontrer une chaîne complète de visualisation interactive avec Observable Framework.
- Croiser des données hétérogènes (OSM/Overpass, USGS, jeu OVNI) avec un traitement géospatial léger.
- Produire des pages analytiques reproductibles, versionnables et publiables statiquement.
## Stack technique
- **Runtime / Build** : `@observablehq/framework` (v1.x)
- **Langage** : JavaScript ESM (`"type": "module"`)
- **Parsing CSV** : `d3-dsv`
- **Visualisation** : `Plot` (via Observable), `d3`, `topojson-client`
- **Topologie US** : `us-atlas@3` (chargement CDN)
## Architecture du projet
```text
observablehq.config.js # Configuration Observable Framework
package.json # Scripts npm + dépendances
docs/
index.md # Page d'accueil
in-n-out-california.md # Analyse séismes ↔ In-N-Out
ufo-animal-style-paradox.md # Analyse OVNI ↔ In-N-Out
data/
in-n-out-ca-overpass.json.js
ca-earthquakes-last365d.json.js
in-n-out-ca-csv.json.js
ufo-ca-sightings-v2.json.js
...
```
## Configuration Observable
Le fichier `observablehq.config.js` définit :
- `root: "docs"` : toutes les pages et données vivent sous `docs/`
- `title: "Observable Workspace"`
- `pager: false`
- `toc: true`
- `theme: "dashboard"`
## Pipeline de données
### 1) In-N-Out (source primaire Overpass)
Le module `docs/data/in-n-out-ca-overpass.json.js` :
- interroge Overpass API pour les POI InNOut (`node/way/relation`),
- normalise les attributs (`id`, `latitude`, `longitude`, `name`, `city`, `address`, `postcode`),
- déduplique par coordonnée arrondie,
- tente plusieurs endpoints Overpass (fallback de résilience),
- bascule sur un fallback CSV GitHub en cas déchec.
### 2) Séismes Californie
Le dataset `ca-earthquakes-last365d.json` est utilisé dans la page `in-n-out-california.md` pour :
- filtrer les séismes dans une bounding box Californie,
- calculer la distance haversine de chaque séisme à chaque magasin,
- agréger des métriques locales (`quakeCount`, `maxMagnitude`, `avgMagnitude`, `nearestKm`),
- produire un **Shake Index** composite.
Formule utilisée :
`shakeIndex = quakeCount * 1.5 + maxMagnitude * 12 + max(0, radiusKm - min(nearestKm, radiusKm)) * 0.25`
### 3) OVNI Californie
La page `ufo-animal-style-paradox.md` :
- charge les observations OVNI et les points InNOut,
- calcule le magasin le plus proche pour chaque observation (distance haversine),
- marque `closeToBurger` selon un rayon interactif,
- agrège des hotspots via regroupement par magasin le plus proche,
- expose des KPIs interactifs (taux de proximité, volume, durée moyenne, etc.).
## Visualisations
- Bar charts classés (top/bottom stores)
- Carte Californie (projection Albers)
- Nuages de points et outils de filtrage (`Inputs.select`, `Inputs.range`)
- Tooltips détaillés pour exploration ad hoc
## Exécution locale
Pré-requis :
- Node.js 18+ recommandé
- npm
Installation :
```bash
npm install
```
Développement (live preview) :
```bash
npm run dev
```
Build statique :
```bash
npm run build
```
## Sorties et dossiers générés
- `dist/` : artefacts de build statique (à ne pas versionner)
- `docs/.observablehq/` : cache/framework interne (à ne pas versionner)
Le `.gitignore` est configuré pour ignorer ces dossiers de cache/génération.
## Qualité, limites et reproductibilité
- Les données externes (Overpass, CDN, sources tierces) peuvent varier dans le temps.
- Les métriques proposées sont exploratoires et non causales.
- Le pipeline privilégie robustesse et disponibilité (fallback réseau) plutôt quune ETL lourde.
## Scripts npm
- `npm run dev``observable preview`
- `npm run build``observable build`
## Publication Git
Ce dépôt est prévu pour être poussé sur un remote Gitea.
Le README sert de documentation technique de référence pour maintenance, reprise et extension du projet.