Public
Edited
Jun 30, 2022
Importers
2 stars
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
candidateOrder = ["arthaud", "roussel", "macron", "lassalle", "le_pen", "zemmour", "melenchon", "hidalgo", "jadot", "pecresse", "poutou", "dupont_aignan"]
Insert cell
Insert cell
baseHeader = ["id_dpt", "dpt", "id_com", "com", "etat_saisie", "inscrits","abstentions",
"part_abs_ins", "votants", "part_vot_ins", "blancs", "part_blancs_ins",
"part_blancs_vot", "nuls", "part_nuls_Ins", "part_nuls_vot", "exprimés",
"part_exp_ins", "part_exp_vot"]
Insert cell
candidateHeader =["num_panneau", "sexe", "nom", "prénom", "voix", "perc_voix_ins", "perc_voix_exp"]
Insert cell
Insert cell
keepHeader = ["id_dpt", "dpt", "id_com", "com", "inscrits", "abstentions", "votants", "blancs", "nuls", "exprimés", "voix"]
Insert cell
Insert cell
baseCols = d3.range(1,19+1)
// corespondance entre le numéro de colonne généré par arquero
// et le label original de la colonne
// ['col1', 'id_dpt']
.map(d => "col" + d)
.map( (d,i) => [d, baseHeader[i]] )
// ne conserve que les colonnes utiles
.filter(d => keepHeader.includes(d[1]))
Insert cell
candidatesCols = d3.range(20,103+1)
// corespondance entre le numéro de colonne généré par arquero
// et le label original de la colonne
// ['col1', 'id_dpt']
.map(d => "col" + d)
.map( (d,i) => [d, candidateHeader[i%7]] )
// ne conserve que les colonnes utiles
.filter(d => keepHeader.includes(d[1]))
// remplace le nom de colonne "voix" par le nom du candidat
.map( (d,i) => [d[0], candidateOrder[i]] )
Insert cell
keepCols = baseCols.concat(candidatesCols)
Insert cell
Insert cell
raw = aq.fromCSV(await FileAttachment("resultats-par-niveau-subcom-t1-france-entiere@1.txt").text(),
{
// équivalent du csv français
delimiter: ';', decimal: ',',
// ne pas tenir compte de l'en-tête
// Arquero générè des numéros de colonnes
skip: 1, header: false,
// Forcer au format texte les identifiants de département et de commune
parse: { "col1": String, "col3": String }
})
Insert cell
viewof pres2022_t1 = raw
// filtrer et renommer les colonnes utiles
.select(keepCols.map(d => d[0]))
.rename(aq.names(keepCols.map(d => d[1])))
// correction code dpt outre-mer
.derive({id_dpt: d => op.includes(["ZA", "ZB", "ZC", "ZD"], d.id_dpt) ? "97" : d.id_dpt})
// ajout du code Insee
.derive({id: d => d.id_dpt + d.id_com})
.relocate('id', {before: 'id_dpt'})
.select(aq.not('id_dpt', 'id_com'))
.relocate('dpt', {after: 'com'})
.view()
Insert cell
pres2022_t1
Insert cell
Insert cell
pres2022_t1_arrow = pres2022_t1.toArrowBuffer() // Apache Arrow IPC
Insert cell
pres2022_t1_parquet = parquet.writeParquet(pres2022_t1_arrow,
new parquet.WriterPropertiesBuilder()
.setCompression(parquet.Compression.BROTLI)
.build()
)
Insert cell
Insert cell
Insert cell
test = {
// Import du fichier attaché
const parquetFile = await FileAttachment("pres2022_t1@1.parquet")
// Lecture du fichier attaché au format binaire (arrayBuffer) + typage en Uint8Array
const parquetBytes = new Uint8Array(await parquetFile.arrayBuffer());
// Conversion au format Apache Arrow
const decodedArrowBytes = parquet.readParquet(parquetBytes);
// Conversion en table arquero
const arrowTable = aq.fromArrow(decodedArrowBytes);
return arrowTable
}
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