Public
Edited
Nov 8, 2022
3 stars
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
pres2022_t1 = {
// Apache Parquet -> Apache Arrow
const arrow = parquet.readParquet(pres2022_t1_parquet)
// Conversion en table arquero
return aq.fromArrow(arrow)
}
Insert cell
Insert cell
zonages_insee = {
// Apache Parquet -> Apache Arrow
const arrow = parquet.readParquet(zonages_insee_parquet)
// Conversion en table arquero
return aq.fromArrow(arrow)
}
Insert cell
Insert cell
viewof pres2022_t1_zonages = pres2022_t1
.join_right(zonages_insee, 'id')
.relocate('id', {before: 'com'})
.view()
Insert cell
Insert cell
control = pres2022_t1.antijoin(zonages_insee, 'id')
Insert cell
control.dedupe('dpt').select('dpt').view()
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
groups = new Map([
['inscrits', 'A'],
['votants', 'A'],
['exprimés', 'A'],

['abstentions', 'B'],
['blancs', 'B'],
['nuls', 'B'],

['macron', 'C'],
['le_pen', 'C'],
['melenchon', 'C'],

['arthaud', 'D'],
['poutou', 'D'],
['roussel', 'D'],
['jadot', 'D'],
['hidalgo', 'D'],
['pecresse', 'D'],
['lassalle', 'D'],
['zemmour', 'D'],
['dupont_aignan', 'D']
])
Insert cell
viewof pres_gridCat = pres2022_t1_zonages
// passage au format long de toutes les variables de quantité (nb de voix ou de personnes)
.fold(aq.range(3,20), { as: ['type', 'voix'] })
// somme les voix par catégorie de grille communale de densité
.groupby('type', 'gridCat')
.rollup({ voix: d => op.sum(d.voix) })
// ajoute le total des voix par type
.groupby('type')
.derive({ total: aq.rolling(op.sum('voix'), [-Infinity, +Infinity]) })
// ventilation de la part des voix par type
.derive({ percent: d => d.voix / d.total * 100 })
.ungroup()
// ajoute les groupes (A, B, C, D)
.params({groups})
.derive({ groups: (d,$) => op.recode(d.type, $.groups)})
// trie de la table
.orderby('groups', 'gridCat', aq.desc('voix'))
.view()
Insert cell
// Trie du groupe 'D. Les miettes' selon la part des résultats en commune densément peuplé (gridCat == 1)
orderGroupD = pres_gridCat
.filter(d => d.groups == 'D' && d.gridCat == 1)
.orderby(aq.desc('percent'))
.columnArray('type')
Insert cell
Insert cell
viewof pres_aav = pres2022_t1_zonages
// réuni '11. commune centre', '12. autre commune du pôle principal' et '13. commune d'un pôle secondaire'
.derive({aav_cat: d => op.includes(['12', '13'], d.aav_cat)
? '11'
: d.aav_cat == '30'
? '20'
: d.aav_cat})
// concatène la taille de l'aire d'attraction ('aav_size') et la catégorie de commune ('aav_cat')
.derive({aav: d => d.aav_size + '-' + d.aav_cat})
// passage au format long de toutes les variables de quantité (nb de voix ou de personnes)
.fold(aq.range(3,20), { as: ['type', 'voix'] })
// somme les voix par catégorie de grille communale de densité
.groupby('type', 'aav', 'aav_size', 'aav_cat')
.rollup({ voix: d => op.sum(d.voix) })
// ajoute le total des voix par type
.groupby('type')
.derive({ total: aq.rolling(op.sum('voix'), [-Infinity, +Infinity]) })
// ventilation de la part des voix par type
.derive({ percent: d => d.voix / d.total * 100 })
.ungroup()
// ajoute les groupes (A, B, C, D), au cas où
.params({groups})
.derive({ groups: (d,$) => op.recode(d.type, $.groups)})
// trie de la table
.orderby('groups', aq.desc('aav_size'), 'aav_cat', aq.desc('voix'))
.view()
Insert cell
aav_size_label = new Map([
['5', 'Paris'],
['4', '>700k hab'],
['3', '>200k hab'],
['2', '>50k hab'],
['1', '<50k hab'],
['0', 'hors AAV'],
])
Insert cell
Insert cell
Insert cell
// Load the parquet-wasm library
parquet = {
const parquetModule = await import(
"https://unpkg.com/parquet-wasm@0.3.0/esm/arrow1.js"
);
// Need to await the default export first to initialize the WebAssembly code
await parquetModule.default();
return parquetModule;
}
Insert cell
Insert cell
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more