Files
observable/README.md

138 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.