Ces dernières années, le choix de prénoms non sexués est devenu de plus en plus courant dans différentes cultures. Ces noms permettent de remettre en question les conventions traditionnelles et de promouvoir l’égalité des sexes. Dans cette publication, nous explorerons les noms sans genre utilisés dans les naissances dans la ville de Nantes, en France, de 2001 à 2022. Nous analyserons une base de données de data.nantesmetropole.fr contenant les noms des garçons et des filles nés au cours de cette période, en identifiant les noms qui n’ont pas d’assignation de genre spécifique. Rejoignez-nous dans ce voyage à travers la diversité des prénoms et découvrez quels prénoms sans genre sont populaires à Nantes depuis plus de deux décennies.
Analyse ETL :
En utilisant une base de données qui recueille des informations sur les noms des nouveau-nés à Nantes, nous créons un ETL (Extract, Transform, Load) en Python pour analyser et visualiser les données présentées au format .CSV, où à partir de la bibliothèque Pandas nous capturons les informations initiales qui nous sont présentées par l’ensemble : Types et quantité de variables, nombre d’enregistrements dans l’ensemble de données et révision des données manquantes.
Nous utiliserons les bibliothèques pandas, matplotlib et plotly pour effectuer l’analyse et la visualisation des données. Assurez-vous que ces bibliothèques sont installées avant d’exécuter le code. Vous pouvez les installer à l’aide du gestionnaire de paquets pip. Par exemple, lancez pip install pandas matplotlib plotly dans votre environnement pour les installer.
import pandas as pd
import matplotlib.pyplot as plt
import plotly.express as px
# Extraction des données
data = pd.read_csv('nantes_prenoms.csv')
Exploration initiale du jeu de données :
Après avoir importé les données, nous extrayons les informations de base avec Pandas : nombre d’enregistrements, nombre de colonnes et types de variables.
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 6037 entries, 0 to 6036
Data columns (total 6 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Commune concernée 6037 non-null object
1 Code INSEE 6037 non-null int64
2 Sexe relatif au prénom 6037 non-null object
3 Prénom 6037 non-null object
4 Nombre d'occurrences 6037 non-null int64
5 Année 6037 non-null int64
dtypes: int64(3), object(3)
memory usage: 283.1+ KB
None
Nous renommons les colonnes à utiliser pour supprimer les accents, les espaces et unifier l’utilisation des majuscules et des minuscules :
# Transformation des données
data = data.rename(columns={'Sexe relatif au prénom':'sexe','Prénom':'prenom',"Nombre d'occurrences":'naissances', 'Année':'annee'})
Nous vérifions si le cadre de données contient des données nulles :
data.isnull().sum()
Commune concernée 0
Code INSEE 0
sexe 0
prenom 0
naissances 0
annee 0
dtype: int64
A la découverte des prénoms sans genre à Nantes :
Au fil des années, nous avons observé une tendance croissante vers le choix de prénoms sans genre à Nantes. De 2001 à 2022, plusieurs noms qui ne sont pas exclusivement associés à un sexe spécifique ont été enregistrés. Certains de ces noms sans genre ont gagné en popularité et sont devenus des choix populaires pour les parents qui souhaitent que leurs enfants aient une identité de genre non binaire.
Grâce au regroupement, au filtrage et au décompte final, nous avons identifié les noms qui sont associés à un sexe féminin et à un sexe masculin. Nous pouvons supposer que ces noms sont choisis par des parents désireux de rompre avec les normes traditionnelles et de permettre à leurs enfants de choisir librement leur identité de genre à l’avenir.
# Analyse et visualisation des données
# Filtrer les noms sans genre (apparaissent à la fois dans le genre masculin et féminin)
names_without_gender = data.groupby('prenom').filter(lambda x: x['sexe'].nunique() == 2)
# Compter les occurrences de noms sans genre
names_count = names_without_gender.groupby('prenom')['naissances'].sum().reset_index()
# Diagramme à barres des noms sans genre
fig_names_without_gender = px.bar(names_count, x='prenom', y='naissances', title='Noms non genrés utilisés')
fig_names_without_gender.update_layout(xaxis_title='prenom', yaxis_title='Nombre de naissances')
fig_names_without_gender.show()

Dans ce code, nous lisons d’abord le fichier CSV et stockons les données dans le cadre de données dataframe. Ensuite, nous filtrons les noms qui apparaissent à la fois dans le genre masculin et féminin à l’aide de la fonction groupby() et de filter(). Ensuite, nous comptons les occurrences de chaque nom sans le genre en utilisant groupby() et sum(). Enfin, nous créons un diagramme à barres à l’aide de la fonction px.bar() de Plotly Express, où l’axe des x représente les noms et l’axe des y le nombre de naissances associées à chaque nom. Chaque barre a une couleur unique pour faciliter l’identification et mettre en évidence la diversité des prénoms non sexués utilisés dans la ville.

# Noms utilisés pour les deux sexes
common_names_both_genders2 = data.groupby('prenom')['sexe'].nunique()
common_names_both_genders2 = common_names_both_genders2[common_names_both_genders2 == 2].index
common_names_both_genders2
9 résultats: ['Alix', 'Camille', 'Charlie', 'Eden', 'Lou', 'Louison', 'Noa', 'Sasha', 'Swann']
Après avoir atteint notre objectif initial d’obtenir les 9 noms les plus utilisés pour les deux sexes à Nantes, nous pouvons maintenant revenir à l’exploration de la base de données et résoudre quelques questions de base pour nous aider dans notre analyse.
Quel est le nombre total d’enregistrements ?
La base de données contient 6037 enregistrements de naissances entre 2001 et 2022.
data.shape
(6037, 6)
Combien y a-t-il de noms uniques ?
Il y a 731 noms uniques utilisés dans la base de données.
data['prenom'].nunique()
731
Si vous voulez voir la liste complète, cliquez ici :
data['prenom'].unique()
Nous avons visualisé avec Plotly le nombre de noms uniques par année, l’année 2003 étant la plus faible avec 183 naissances et 2022 (année de la pandémie) avec 316 naissances.

Quelle est la répartition totale par sexe ?
Entre 2001 et 2022, plus de garçons (3110) que de filles (2927) sont nés dans la ville de Nantes.
data['sexe'].value_counts()
M 3110
F 2927
Name: sexe, dtype: int64
Nous pouvons générer un diagramme circulaire comme visualisation :
gender_distribution = data['sexe'].value_counts()
fig_gender = px.pie(names=gender_distribution.index, values=gender_distribution.values, title='Répartition des enfants par sexe')
fig_gender.show()

Afficher la répartition par sexe pour chaque année :
fig_gender_year = px.histogram(data, x='annee', color='sexe', text_auto=True, title='Répartition des sexes par année')
fig_gender_year.show()

Quels sont les noms les plus utilisés dans la base de données ?
Sur les 731 noms uniques présents dans la base de données, nous avons filtré les 10 premiers en fonction du nombre de naissances. Nous les avons également visualisés en fonction de leur sexe, dans le but principal d’identifier les noms non binaires, en mettant en évidence « Camille« , un nom sans genre classé deuxième avec 1147 enregistrements, après « Louise« , un nom féminin classé premier avec 1158 enregistrements.
# Regrouper par nom et par sexe et compter le nombre d'occurrences.
names_count = data.groupby(['prenom', 'sexe'])['naissances'].sum().reset_index()
# Filtrer uniquement les noms les plus utilisés
top_names = names_count.groupby('prenom')['naissances'].sum().nlargest(10).index
# Filtrer les données uniquement pour les noms les plus utilisés
top_names_data = names_count[names_count['prenom'].isin(top_names)]
prenom sexe naissances
80 Arthur M 1143
121 Camille F 890
122 Camille M 257
211 Emma F 1102
281 Hugo M 1024
327 Jules M 1037
402 Louis M 1104
404 Louise F 1158
415 Lucas M 1122
436 Léo M 977
452 Manon F 975
# Diagramme à barres différencié par couleur selon le sexe
fig_top_names = px.bar(top_names_data, x='prenom', y='naissances', color='sexe', text_auto=True, title='Prénoms les plus utilisés (différenciés par sexe)')
fig_top_names.update_layout(xaxis_title='Prénoms', yaxis_title='Nombre de naissances')
fig_top_names.show()

Quels sont les prénoms les plus utilisés pour chaque année ?
Nous pouvons visualiser le prénom qui occupe la première position pour chaque année de la base de données, où « Camille » domine sa présence dans 6 années différentes, suivi de « Charlie » (5 ans), « Louison » (4 ans) et « Noa » (3 ans).
popular_names = data.groupby('annee')['prenom'].agg(lambda x: x.value_counts().index[0])
fig_popular_names = px.bar(x=popular_names.index, y=popular_names.values, text_auto=True, color=popular_names, color_continuous_scale = 'viridis', title='Prénom le plus populaire par an')
fig_popular_names.show()

Pourcentage de noms selon le sexe au fil du temps
Un diagramme à barres empilées montre le pourcentage de noms par sexe au fil du temps, en utilisant le bleu pour le sexe masculin « M » et l’orange pour le sexe féminin « F » :

Dans ce code, après avoir calculé le pourcentage de prénoms par sexe et par année, nous attribuons des couleurs aux sexes à l’aide d’une cartographie des couleurs. Ensuite, nous créons un diagramme à barres empilées en utilisant go.Bar() de Plotly Graph Objects. Nous itérons sur les genres et ajoutons une barre pour chaque genre avec des couleurs différentes. Enfin, nous mettons à jour la disposition du graphique avec un titre, les titres des axes et affichons le graphique généré par Plotly.
Exécutez le code et vous pourrez interagir avec le graphique à barres empilées montrant le pourcentage de prénoms par genre au fil du temps.
# Calculer le pourcentage de prénoms par sexe et par année
percentage_data = data.groupby(['annee', 'sexe']).size() / data.groupby('annee').size() * 100
percentage_data = percentage_data.reset_index(name='percentage')
# Attribuer des couleurs aux sexes
color_map = {'M': 'blue', 'F': 'orange'}
percentage_data['Color'] = percentage_data['sexe'].map(color_map)
# Créer un diagramme à barres empilées du pourcentage de prénoms par sexe au fil du temps
fig = go.Figure()
for sexe in ['M', 'F']:
fig.add_trace(go.Bar(
x=percentage_data[percentage_data['sexe'] == sexe]['annee'],
y=percentage_data[percentage_data['sexe'] == sexe]['pourcentage'],
name=sexe,
marker_color=color_map[sexe]
))
fig.update_layout(
title='Pourcentage de noms de piles par sexe à Nantes',
xaxis_title='Année',
yaxis_title='Pourcentage',
barmode='stack'
)
fig.show()
Lien vers la visualisation interactive dans Plotly
Tendance des prénoms sans genre pour les prochaines années
Grâce au commentaire de Line Ton That, qui s’interrogeait sur l’impact de Camille dans tout cela, si son nom ne serait plus à la mode dans les années à venir, ou si nous verrons la même tendance dans les noms sans genre : j’ai utilisé la bibliothèque scikit-learn (sklearn) pour calculer l’évolution des noms apparaissant dans les deux sexes en fonction du nombre total de naissances par nom et par année. Ensuite, visualisez l’évolution de ces noms à l’aide d’un diagramme à barres avec la bibliothèque Plotly Express (px).

Lien vers la visualisation interactive dans Plotly
Voici le flux d’exécution du code étape par étape :
from sklearn.linear_model import LinearRegression
# Filtrer les noms apparaissant dans les deux sexes
both_sex_names = data.groupby('prenom').filter(lambda x: len(x['sexe'].unique()) == 2)
# Calculer le nombre total de naissances par nom et par année
nacimientos_por_nombre_y_año = both_sex_names.groupby(['prenom', 'annee'])['naissances'].sum().reset_index()
# Analyse et visualisation des données
# Créer un DataFrame avec les tendances futures
tendencias_futuras = pd.DataFrame(columns=['prenom', 'tendencia'])
# Calculer la tendance pour chaque nom
for nombre in both_sex_names['prenom'].unique():
nombre_data = nacimientos_por_nombre_y_año[nacimientos_por_nombre_y_año['prenom'] == prenom]
# Utiliser la régression linéaire pour calculer la tendance
X = nombre_data['annee'].values.reshape(-1, 1)
y = nombre_data['naissances'].values
model = LinearRegression()
model.fit(X, y)
tendencia = model.coef_[0]
future_trends = future_trends.append({'prenom': nombre, 'tendencia': tendencia}, ignore_index=True)
# Trier les noms par tendance décroissante
future_trends = future_trends.sort_values(by='tendencia', ascending=False)
# Afficher la tendance des noms en utilisant les deux sexes
fig = px.bar(tendencias_futuras, x='prenom', y='tendencia', labels={'tendencia': 'Tendencia'},
title='Tendance des noms utilisant les deux genres dans les années à venir')
fig.update_layout(xaxis_title='Prenom', yaxis_title='Tendance')
fig.show()
En bref, ce code filtre les noms qui apparaissent dans les deux sexes, calcule la tendance à l’aide d’une régression linéaire et visualise la tendance des noms à l’aide d’un diagramme à barres. Cela nous permet d’obtenir des informations sur les noms dont la popularité a augmenté ou diminué au fil des ans.
Après avoir effectué la régression linéaire, nous observons une tendance à la baisse pour le prénom « Camille » pour les prochaines années, et une augmentation exponentielle pour le prénom « Charlie » par rapport aux autres prénoms non genrés.
Conclusion:
L’analyse des prénoms non sexués utilisés à la naissance à Nantes nous montre l’évolution et l’acceptation de la diversité des genres dans la société. Les parents optent pour des prénoms qui ne se limitent pas à une identité de genre unique, donnant ainsi à leurs enfants la liberté d’explorer et de définir leur propre identité à l’avenir. Cette tendance reflète une plus grande ouverture et acceptation de la diversité dans la société, ainsi qu’un désir de promouvoir l’égalité des sexes dès le début de la vie.
Il est intéressant de noter qu’en comparant les prénoms les plus populaires par année, on retrouve 5 des 9 prénoms non sexués trouvés au début de l’exploration (Camille, Charlie, Louison, Noa et Sasha). Cela témoigne de la décision ferme prise par les parents de prénommer leurs fils et leurs filles de manière non binaire, qu’il s’agisse d’une tendance ou d’un phénomène adaptatif pour les nouvelles générations.
Il convient de mentionner le prénom « Camille« , en tant que premier choix de prénoms non genrés, et sa présence dans le classement général de la base de données des garçons et des filles nés à Nantes au cours des deux dernières décennies.
Ces résultats évolueront certainement en fonction des données de la ville et du pays, alors si quelqu’un souhaite partager ses résultats pour les comparer à ceux de Nantes, n’hésitez pas à nous contacter pour continuer à apprendre de manière collaborative.
Références :

