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
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 sousdocs/title: "Observable Workspace"pager: falsetoc: truetheme: "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
closeToBurgerselon 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 :
npm install
Développement (live preview) :
npm run dev
Build statique :
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 previewnpm 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.