138 lines
4.3 KiB
Markdown
138 lines
4.3 KiB
Markdown
# 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 In‑N‑Out selon une exposition aux séismes.
|
||
- **Paradoxe de l’Animal Style** : corrélation exploratoire entre observations OVNI et proximité d’un In‑N‑Out.
|
||
|
||
## 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 In‑N‑Out (`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 In‑N‑Out,
|
||
- 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 qu’une 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.
|