Je pense qu'il y a une scène d'utilisation où vous voulez prédire le sexe à partir de votre nom. Par exemple, si vous demandez le sexe sur le formulaire d'inscription avec un service d'adhésion, le CVR tombera, alors compensez-le avec une prédiction! Est-ce une scène comme ça?
Il existe plusieurs façons de prédire le sexe à partir d'un nom, par exemple en utilisant l'apprentissage automatique pour générer un classificateur et faire des prédictions, ou en utilisant une API externe pour faire des prédictions. Cette fois, ce sera une approche pour prédire le sexe à partir du nom à l'aide de l'API Gender en Python.
GenderAPI est une société américaine qui semble avoir fait des prédictions de genre à partir d'une énorme quantité de données de nom. Il existe plusieurs services similaires, mais cette fois, nous utiliserons cette API de genre pour prédire le sexe.
Gender API Commençons par créer un compte pour Gender API. Après la création, récupérez API_KEY. Si vous souhaitez l'utiliser gratuitement, vous pouvez l'utiliser gratuitement jusqu'à 500 noms
Utilisez PersonalGenerator pour générer des pseudo informations personnelles. Vous pouvez librement sélectionner les éléments à afficher, mais cette fois, nous voulons également juger de la bonne réponse, nous obtiendrons donc le numéro de série, le nom, le nom (katakana) et le sexe. Cette fois, je vais essayer de prédire le sexe à partir des noms d'environ 30 personnes.
Pykakasi Le nom à prédire sera Prénom, et le fait que le nom soit prédit en kanji, katakana, hiragana ou romaji affectera grandement la précision. En conclusion, probablement parce qu'il s'agit d'un service à l'étranger, il était le plus précis de le convertir en caractères romains et de le faire prédire. (Le processus de vérification est omis.)
Par conséquent, il est nécessaire d'effectuer la conversion Romaji à partir du nom ci-dessous. Pour savoir comment l'utiliser, reportez-vous à la documentation du développeur. Comment utiliser pykakasi Installez les deux packages suivants.
pip install six semidbm
pip install pykakasi
Nous allons en fait prédire le sexe des 30 sujets. La procédure générale est la suivante.
gender_estimation.py
import sys
import json
from urllib import request, parse
from urllib.request import urlopen
import pandas as pd
import pykakasi
class GenderEstimation:
"""
Prédire le sexe à partir du nom converti en romaji
"""
__GENDER_API_BASE_URL = 'https://gender-api.com/get?'
__API_KEY = "your api_key"
def create_estimated_genders_date_frame(self):
df = pd.DataFrame(self._estimate_gender())
print('\n{}Prédiction de genre terminée pour une personne.'.format((len(df))))
df.columns = [
'estimated_gender', 'accuracy', 'samples', 'duration'
]
df1 = self._create_member_data_frame()
estimated_genders_df = pd.merge(df1, df, left_index=True, right_index=True)
return estimated_genders_df
def _estimate_gender(self):
unique_names = self._convert_first_name_to_romaji()
genders = []
print(u'{}Prédire le sexe d'une personne'.format(len(unique_names)))
for name in unique_names:
res = request.urlopen(self._gender_api_endpoint(params={
'name': name,
'country': 'JP',
'key': self.__API_KEY
}))
decoded = res.read().decode('utf-8')
data = json.loads(decoded)
genders.append(
[data['gender'], data['accuracy'], data['samples'], data['duration']])
return genders
def _gender_api_endpoint(self, params):
return '{base_url}{param_str}'.format(
base_url=self.__GENDER_API_BASE_URL, param_str=parse.urlencode(params))
def _convert_first_name_to_romaji(self):
df = self._create_member_data_frame()
df['first_name_roma'] = df['first_name'].apply(
lambda x: self._set_kakasi(x))
return df['first_name_roma']
def _set_kakasi(self, x):
kakasi = pykakasi.kakasi()
kakasi.setMode('H', 'a')
kakasi.setMode('K', 'a')
kakasi.setMode('J', 'a')
kakasi.setMode('r', 'Hepburn')
kakasi.setMode('s', False)
kakasi.setMode('C', False)
return kakasi.getConverter().do(x)
def _create_member_data_frame(self):
df = pd.read_csv('personal_infomation.csv').rename(columns={
'Numéro de série':'row_num',
'Nom complet':'name',
'Nom (Katakana)':'name_katakana',
'sexe':'gender'
})
df['first_name']=df.name_katakana.str.split().str[1]
print(u"{}Extraire la personne à prédire.".format(len(df)))
return df
La trame de données du résultat de la prédiction est la suivante. La réponse concernant la prédiction de l'API Gender est définie comme suit.
estimated_gender | accuracy | samples | duration |
---|---|---|---|
Résultat de la prédiction du sexe | Exactitude des prévisions | Taille de l'échantillon utilisée pour la prédiction | Temps écoulé pour 1 appel |
Enfin, vérifions l'exactitude des résultats de la prédiction de genre. Tracez les résultats corrects et prédits et leurs nombres pour le tableau ci-dessous pour générer une matrice Le taux de réponse correcte était de presque 100%. Dans ce cas, j'ai prédit qu'un seul cas était en fait une femme, mais un homme. Après tout, il semble difficile de prédire des noms tels que «Iori» qui peuvent être pris par les hommes et les femmes.
Bonne réponse | Prévoir | num |
---|---|---|
male | male | 11 |
male | female | 0 |
male | unknown | 0 |
female | male | 1 |
female | female | 18 |
female | unknown | 0 |
unknown | male | 0 |
unknown | female | 0 |
unknown | unknown | 0 |
Prévoir/Bonne réponse | male | female | unknown | Taux de réponse correct |
---|---|---|---|---|
male | 11 | 0 | 0 | 100.00% |
female | 1 | 18 | 0 | 94.74% |
unknown | 0 | 0 | 0 | 0% |