[]En 2024, les prénoms les plus donnés par les Français sont presque les mêmes qu’en 2023 : Louise est toujours en tête des prénoms féminins, mais Jade remplace Ambre en deuxième place et Gabriel et Raphaël sont les plus courants pour les garçons. Chaque année, en juillet, l’Institut national de la statistique et des études économiques (Insee) publie son fichier des prénoms, qui recense les prénoms donnés aux enfants depuis 1900.
[]A quelle époque tel ou tel prénom a eu son heure de gloire, a-t-il décliné, est-il revenu à la mode ? Saisissez, dans le moteur de recherche ci-dessous, les prénoms qui vous intéressent et comparez leurs évolutions.
`); }); let contentTop = ` [] ${items_legende.join(« »)}
`; topContainer.innerHTML = contentTop; getA(« .dec_ligneleg »).forEach((elem) => { elem.addEventListener(« click », function () { let rm_elem = elem.getAttribute(« data-colorId »); data_on_graph = data_on_graph.filter((elem) => elem[2] != rm_elem); drawPrenoms(); }); }); }; fillMeta(); // Définir les dimensions const margin = { top: isMobile ? largeur / 14 : largeur / 30, right: largeur * 0.01, bottom: isMobile ? largeur / 10 : largeur / 20, left: isMobile ? largeur * 0.03 : largeur * 0.02, }; const radius = 2.75; const ratio = isMobile ? 0.8 : 0.5; const width = largeur – margin.left – margin.right; const height = largeur * ratio – margin.top – margin.bottom; // Dessiner le svg d3.select(« .timeserie-prenoms_chart svg »).remove(); const svg = d3 .select(« .timeserie-prenoms_chart ») .append(« svg ») .attr(« width », « 100% ») .attr(« class », « chart ») .attr(« viewBox », `0 0 ${width + margin.left + margin.right} ${height + margin.top + margin.bottom}`) .append(« g ») .attr(« transform », `translate(${margin.left},${margin.top})`); // Définir tous les éléments qui vont s’animer const axes = svg.append(« g »).attr(« class », « axes_prenoms thumb_hide »); const lines = svg.append(« g »).attr(« class », « lines_prenoms »); const yAxis = axes.append(« g »); const xAxis = axes.append(« g »); const grid = axes.append(« g »); // Définir les éléments du tooltip let tooltip; if (isMobile) { tooltip = d3.select(« body »).append(« div »).attr(« class », « timeserie-prenoms_tooltip »); } else { tooltip = d3.select(« .timeserie-prenoms_tooltip »); } const tooltipLine = svg.append(« line »).attr(« class », « line_prenoms_tt »).attr(« y1 », 0).attr(« y2 », height); // Zone de hover const svgRect = svg .append(« rect ») .attr(« width », width + margin.left + margin.right) .attr(« height », height + margin.top + margin.bottom) .attr(« class », « svg_rect ») .attr(« fill », « transparent »); // La fonction pour mettre à jour le chart const updateChart = () => { // Les échelles let yDomain = [0, 0]; const xCol = « date »; data_on_graph.forEach((origin, i) => { // Obtenir le min et le max de toutes les series const yAccessor = (d) => +d[origin[0] + « _ » + origin[1]]; const ySubDomain = d3.extent(data, yAccessor); if (ySubDomain[1] > yDomain[1]) yDomain[1] = Math.ceil(ySubDomain[1]); // ajouter un path par categorie lines .append(« path ») .attr(« class », `ligne`) .attr(« stroke », couleurs_prenoms_graph[origin[2]]) .attr(« stroke-width », 2) .attr(« data-id », origin[0] + « _ » + origin[1]); }); const xAccessor = (d) => parseTime(d[xCol]); const xDomain = d3.extent(data, xAccessor); const yScale = d3.scaleLinear().range([height, 0]).domain(yDomain); const xScale = d3.scaleTime().range([0, width]).domain(xDomain); const line = (data, xName, yName) => { const lineGen = d3 .line() .curve(d3.curveMonotoneX) .x((d) => xScale(parseTime(d[xName]))) .y((d) => yScale(+d[yName])); return lineGen(data); }; // L’axe y yAxis .transition() .duration(duration) .ease(ease) .attr(« class », « axes y passelect ») .attr(« transform », « translate(10,-8) ») .call( d3 .axisLeft(yScale) .ticks(5) .tickFormat((d) => new String(d).replace(« . », « , »)) ); const makeYGridLines = () => d3.axisLeft(yScale).ticks(5); // La grille grid.transition().duration(duration).ease(ease).attr(« class », « grid »).call(makeYGridLines().tickSizeOuter(0).tickSize(-width).tickFormat(« »)); // L’axe x xAxis .attr(« class », « axes x passelect ») .attr(« transform », `translate(0,${height})`) .call( d3 .axisBottom(xScale) .ticks(24) .tickPadding(8) .tickSizeOuter(0) .tickFormat((d, i) => { return i % 4 == 0 ? d.getFullYear() : « »; }) ); svgRect.on(« mouseover mousemove », moveTooltip).on(« mouseout », hideTooltip); svg.selectAll(« path.ligne »).attr(« d », function () { return line(data, xCol, this.getAttribute(« data-id »)); }); // Afficher le tooltip function moveTooltip(event) { const [x, y] = d3.pointer(event, svg.node()); let datePoint = new Date(xScale.invert(x)); if (datePoint <= xDomain[0]) return; if (datePoint > xDomain[1]) datePoint = xDomain[1]; const year = new String(datePoint.getFullYear()); const strMonth = new String(datePoint.getMonth() + 1); const month = strMonth.length < 2 ? "0" + strMonth : strMonth; const yearMonth = year + "-" + month; // Find data const dataYear = true; let content = ` `; tooltipLine .style("opacity", 1) .attr("x1", xScale(parseTime(year))) .attr("x2", xScale(parseTime(year))); tooltip.html(content).style("opacity", 1); if (!isMobile) { let translateX = x < width * 0.3 ? "10%" : x > width * 0.6 ? « -120% » : « -50% »; let translateY = « -140% »; tooltip.style(« transform », `translate(` + `calc(${translateX} + ${x}px),` + `calc(${translateY} + ${y}px)` + `)`); } } }; // Cacher le tooltip function hideTooltip(event) { tooltip.style(« opacity », 0); tooltipLine.style(« opacity », 0); } // Force tooltip hide ios aec if (isMobile) { topContainer.onclick = () => { hideTooltip(); }; } // Dessiner le graphe une première fois avec la moyenne générale updateChart(); } // Tout lancer une première fois function initGraph() { let random_letter = String.fromCharCode(97 + Math.floor(Math.random() * 26)); let url = `https://assets-decodeurs.lemonde.fr/decodeurs/assets/prenoms-insee/${random_letter}_2025.csv`; new Promise((resolve) => { d3.csv(url) .then((data) => { all_names[random_letter] = data; const usual_names = d3 .range(data.length) .filter((i) => data[i].sum >= 2000); const rand_index = usual_names[Math.floor(Math.random() * usual_names.length)] let temp = [data[rand_index].preusuel, data[rand_index].sexe, 0]; data_on_graph.push(temp); drawPrenoms(); resolve(data); }) .catch((error) => { console.error(error); }); }); } initGraph(); []Les prénoms les plus populaires n’ont pas colonisé toutes les régions au même moment, comme vous pouvez le voir dans les cartes ci-dessous, qui présentent pour chaque année depuis 1946 l’occurrence locale des prénoms.
Table des matières
De Marie à Louise : 125 ans de prénoms féminins
[]Carte des prénoms féminins les plus populaires par région et par an depuis 1900. Les données à Mayotte ne démarrent qu’en 2012.
1946 : Marie Françoise Marie Marie Marie Marie Françoise Françoise Marie Marie Marie Marie Marie Marie Marie Marie Marie Marie []Source : Insee (fichier des prénoms 2024)
De Jean à Gabriel : 125 ans de prénoms masculins
[]Carte des prénoms masculins les plus populaires par région et par an depuis 1900. Les données à Mayotte ne démarrent qu’en 2012.
1946 : Marie Françoise Marie Marie Marie Marie Françoise Françoise Marie Marie Marie Marie Marie Marie Marie Marie Marie Marie []Source : Insee (fichier des prénoms 2024)
word.charAt(0) + word.slice(1).toLowerCase()) .join(« -« ); } function handleTimeline(selecteur) { var listeDates = []; for (var i = min; i <= max; i++) { listeDates.push(new Date(i, 0, 1)); } var largeur = document.querySelector(".d_prenoms_carte[data-sexe='" + sexe + "']").offsetWidth, mobileDec = false, combien = listeDates.length, margin = { left: 30, right: 25, }, tableauGlissiere = []; /* on vérifie si on est en mobile ou non */ if (largeur < 500) { mobileDec = true; margin = { left: 50, right: 30, }; } selecteurGliss = d3.select("[data-sexe='" + sexe + "'] .d_glissiere"); let width = largeur, height = mobileDec ? 90 : 80, step = 1, index = 0, every = mobileDec ? 19 : 5, monIntervale; /* on prépare les divs de la glissière */ const d_glissiere = selecteurGliss.append("div").attr("class", "glissiere").attr("id", "d_glissiere"); /* on ajoute les svg des boutons lecture/pause */ selecteurGliss.select("[data-sexe='" + sexe + "'] .lecturepause svg").style("height", height * (mobileDec ? 0.6 : 0.7) + "px"); var svg = d_glissiere .append("svg") .style("width", "100%") .attr("width", width) .attr("viewBox", "0 0 " + width + " " + height), glissiere = svg .append("g") .classed("glissiere", true) .attr("transform", "translate(" + margin.left + ", " + height / 4 + ")"); var xScale = d3 .scaleLinear() .domain([min, max]) .range([0, width - margin.left - margin.right]) .clamp(true); var xAxis = d3 .axisBottom(xScale) .ticks(mobileDec ? 5 : 10) .tickSize(15) .tickFormat(function (d, i) { return d; }); xScale.clamp(true); var drag = d3 .drag() .on("start.interrupt", function () { glissiere.interrupt(); }) .on("start drag", dragged); var track = glissiere.append("line").attr("class", "track").attr("x1", xScale.range()[0]).attr("x2", xScale.range()[1]), trackInset = d3.select(glissiere.node().appendChild(track.node().cloneNode())).attr("class", "track-inset"), trackColor = d3.select(glissiere.node().appendChild(track.node().cloneNode())).attr("class", "track-color"); var ticks = glissiere.append("g").attr("class", "ticks").attr("transform", "translate(0, 4)").call(xAxis).selectAll("text").style("text-anchor", "middle"); /* le bouton */ var handle = glissiere.append("circle").classed("handle", true).attr("r", 12), trackOverlay = d3.select(glissiere.node().appendChild(track.node().cloneNode())).attr("class", "track-overlay").call(drag); function dragged(event, d) { current_year = Math.round(xScale.invert(event.x)); displayMapOfYear(current_year); moveHandleTimeline(current_year); } function moveHandleTimeline(year) { valeurX = xScale(year); handle.transition().duration(100).ease(d3.easeLinear).attr("cx", valeurX); trackColor.transition().duration(100).ease(d3.easeLinear).attr("x2", valeurX); } /* on patouille les événements avec les flèches */ document.addEventListener("keydown", checkKey); function checkKey(e) { e = e || window.event; if (e.keyCode == "37") { current_year = Math.max(min, current_year - 1); } else if (e.keyCode == "39") { current_year = Math.min(max, current_year + 1); } moveHandleTimeline(current_year); displayMapOfYear(current_year); } /* on prépare l'événement sur le bouton lecture/pause */ let enLecture = false; const boutonLecturePause = d3.select("[data-sexe='" + sexe + "'] #lecturepause"); function startAnim() { monIntervale = setInterval(function () { if (current_year max) { enLecture = false; boutonLecturePause.select(".pause").style("visibility", "hidden"); boutonLecturePause.select(".lecture").style("visibility", "visible"); clearInterval(monIntervale); } }, 600); } boutonLecturePause.on("click", function () { enLecture = !enLecture; boutonLecturePause.select(".pause").style("visibility", enLecture ? "visible" : "hidden"); boutonLecturePause.select(".lecture").style("visibility", enLecture ? "hidden" : "visible"); if (enLecture) { startAnim(); } else { clearInterval(monIntervale); } }); let current_year = 1946; moveHandleTimeline(current_year); displayMapOfYear(current_year); } } drawMap("f"); drawMap("m"); ]]>
Les gloires éphémères
[]Le choix d’un prénom peut être influencé par des modes plus ou moins passagères. Nous avons repéré une dizaine de prénoms masculins et féminins qui ont la particularité d’avoir connu un pic très court (une à deux années). Le gain soudain de popularité est ici lié à des personnalités allant du maréchal Joffre, pendant la première guerre mondiale, à Elon Musk, à la faveur de sa notoriété grandissante. Mais le soufflé semble être retombé.
« ; tooltipLine.attr(« class », « line_sea_surface_active »).attr(« x1 », xScale(year_mouse)).attr(« y1 », 0).attr(« x2 », xScale(year_mouse)).attr(« y2 », innerHeight); tooltip.html(content).style(« opacity », 1); if (!isMobile) { let translateX = x < width * 0.3 ? "10%" : x > width * 0.6 ? « -120% » : « -50% »; let translateY = « -140% »; tooltip.style(« transform », `translate(` + `calc(${translateX} + ${x}px),` + `calc(${translateY} + ${y}px)` + `)`); } }) .on(« mouseout », function () { return tooltip.style(« opacity », « 0 »); }); }); const xAxis = d3 .axisBottom(xScale) .tickFormat((d) => d.toFixed(0)) .ticks(isMobile ? 5 : 10) .tickSizeOuter(0); chart .append(« g ») .attr(« class », « axes x passelect ») .attr(« transform », « translate(0, » + innerHeight + « ) ») .call(xAxis); const yAxis = d3 .axisLeft(yScale) .tickFormat((d) => d.toFixed(0)) .ticks(5) .tickSizeOuter(0); chart.append(« g »).attr(« class », « axes y passelect »).call(yAxis); chart.append(« g »).attr(« class », « grid »).call(yAxis.tickSize(-innerWidth).tickFormat(« »)); } async function drawRaresNamesOnMobile() { let data = await d3.csv(« https://assets-decodeurs.lemonde.fr/sheets/fOOsdESqpiMzDYTBGcTEMOU0uaXSFw_2001.csv »); data = data.filter((d) => d.CHOISI === « OUI »); const grouped_data = d3.group(data, (d) => +d.id); const ratio = 1.4; const margin = { left: 40, top: 20, right: 100, bottom: 20 }; const innerWidth = width – margin.left – margin.right; const innerHeight = width * ratio – margin.bottom – margin.top; const svg = d3 .select(« #prenoms_rares ») .append(« svg ») .attr(« width », width) .attr(« height », width * ratio); const chart = svg.append(« g »).attr(« transform », `translate(${margin.left}, ${margin.top})`); const getY = (x) => +x.year_min; const getX = (x) => +x.value_max; const getNom = (x) => x.preusuel_; const xScale = d3 .scaleLinear() .range([0, innerWidth]) .domain([0, d3.max(data, getX)]); const yScale = d3.scaleLinear().range([innerHeight, 0]).domain([2024, 1900]); const path = d3 .line() .y((d) => yScale(+d[0])) .x((d) => xScale(+d[1])) .curve(d3.curveCatmullRom); const all_groups = chart.append(« g »).attr(« class », « groups »); grouped_data.forEach((group_data, i) => { function mouse_over(event) { const data_group_id = event.target.parentElement.getAttribute(« data-group »); d3.select(« g.active »).classed(« active », false); const active_group = d3.select(`g[data-group= »${data_group_id} »]`).classed(« active », true); // Mettre le group au dessus const active_node = active_group.node(); if (active_node) active_node.parentElement.appendChild(active_node); // Initialiser la description const e = group_data[0]; console.log(e, group_data); // description du prénom d3.select(« #tooltip_prenoms_rares »).style(« opacity », 1).html(`[]${group_data.map((x) => cap_name(getNom(x))).join( » – « )}
[]${e.description}
`); } function mouse_out(event) { const data_group_id = event.target.parentElement.getAttribute(« data-group »); d3.select(`g[data-group= »${data_group_id} »]`).classed(« active », false); // description du prénom d3.select(« #tooltip_prenoms_rares »).style(« opacity », 0); } const groups = all_groups .append(« g ») .attr(« data-group », i) .attr(« color », isDark ? couleurs_courbes_rares_dark[i] : couleurs_courbes_rares[i]) .on(« mouseover », mouse_over) .on(« mouseout », mouse_out) .selectAll(« lines-data »); const group = groups.data(group_data).enter(); group .append(« line ») .attr(« class », « pics_line ») .attr(« stroke », « currentColor ») .attr(« y1 », (d) => yScale(getY(d))) .attr(« y2 », (d) => yScale(getY(d))) .attr(« x1 », xScale(0)) .attr(« x2 », (d) => xScale(getX(d))); const mean_Y = d3.mean(group_data, getY); const max_X = d3.max(group_data, getX); const decalage_y = 15; let start_y = yScale(mean_Y) – (group_data.length > 1 ? 3 / 2 : 1) * decalage_y; group .append(« text ») .attr(« fill », « currentColor ») .attr(« data-content », (d) => sanitizeInput(getNom(d))) .attr(« x », xScale(max_X) + 5) .attr(« y », (d) => { start_y += decalage_y; return start_y; }) .text((d) => cap_name(getNom(d))); group .append(« path ») .attr(« class », « line ») .attr(« d », (e) => path(transform_array(e))); }); const yAxis = d3 .axisLeft(yScale) .tickFormat((d) => d.toFixed(0)) .ticks(isMobile ? 5 : 10) .tickSizeOuter(0); chart.append(« g »).attr(« class », « axes x passelect »).attr(« transform », `translate(0, 0)`).call(yAxis); } const width = document.querySelector(« .outliers-prenoms_chart »).offsetWidth; const isMobile = window.innerWidth < 800; if (isMobile) drawRaresNamesOnMobile(); else drawRaresNames();
Source
No comment yet, add your voice below!