Prédire le sexe à partir du nom à l'aide de l'API Gender et de Pykakasi en Python

introduction

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.

Préparation

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

Acquisition d'informations pseudo-personnelles

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. スクリーンショット 2020-08-10 15.27.17.png

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

Prédiction de genre

Prédiction de genre avec python

Nous allons en fait prédire le sexe des 30 sujets. La procédure générale est la suivante.

  1. Préparez le dataframe de la personne cible, divisez-le par un espace pleine largeur et générez une chaîne de nom
  2. Créez une instance Pykakasi, définissez-la pour la convertir en Romaji, convertissez le nom et générez une chaîne Romaji
  3. Transmettez la liste Romaji à l'API Gender et obtenez le résultat de la prédiction
  4. Fusionner le résultat de la prédiction avec la trame de données d'origine

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

Résultat de la prédiction du sexe

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
スクリーンショット 2020-08-10 15.29.07.png

Vérification de l'exactitude de la prédiction du sexe

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%

Recommended Posts

Prédire le sexe à partir du nom à l'aide de l'API Gender et de Pykakasi en Python
Essayez d'utiliser l'API ChatWork et l'API Qiita en Python
Exécutez Ansible à partir de Python à l'aide de l'API
Comment obtenir des abonnés et des abonnés de Python à l'aide de l'API Mastodon
Fonctionnement de la souris à l'aide de l'API Windows en Python
Notes utilisant cChardet et python3-chardet dans Python 3.3.1.
De Python à l'utilisation de MeCab (et CaboCha)
Essayez d'utiliser l'API Kraken avec Python
Tweet à l'aide de l'API Twitter en Python
J'ai essayé d'utiliser l'API UnityCloudBuild de Python
Jouez pour prédire la valeur de la course et le type à partir du nom de Pokemon dans TensorFlow
Développement et déploiement de l'API REST en Python à l'aide de Falcon Web Framework
Détectez les caractères japonais à partir d'images à l'aide de l'API Cloud Vision de Google avec Python
Essayez d'utiliser l'API BitFlyer Ligntning en Python
Obtenir l'URL de l'image à l'aide de l'API Flickr en Python
Jugons les émotions à l'aide de l'API Emotion en Python
Charger et exécuter la commande depuis yml avec python
Charger des images à partir d'une URL à l'aide de Pillow dans Python 3
Essayez d'utiliser l'API DropBox Core avec Python
API C en Python 3
Identification de nom à l'aide de python
Traduire de Visual Studio 2017 vers Python (API Microsoft Translator Text)
Importez un fichier JPG à l'aide de l'API Google Drive en Python
Paramètres initiaux lors de l'utilisation de l'API foursquare avec python
Notification PUSH de Python vers Android à l'aide de l'API de Google
Obtenez des données LEAD à l'aide de l'API REST de Marketo en Python
Envoyez et recevez Gmail via l'API Gmail en utilisant Python
OpenVINO utilisant l'API Python d'Inference Engine dans un environnement PC
Lire et écrire des balises NFC avec python en utilisant PaSoRi
Procédure de transcription vocale à l'aide de Python et de l'API Google Cloud Speech
Utiliser l'API de recherche de la Bibliothèque du Parlement national en Python
Récupérer des fichiers depuis Linux en utilisant paramiko et scp [Python]
Exemple d'obtention du nom du module et du nom de la classe en Python
Prédire à partir de diverses données en Python à l'aide de l'outil de prédiction de séries chronologiques Facebook Prophet
Hit API de Mastodon en Python
Aplatir à l'aide du rendement Python de
Essayez de le faire avec GUI, PyQt en Python
J'ai essayé de créer une API list.csv avec Python à partir de swagger.yaml
Visualisez l'activité des plantes depuis l'espace à l'aide de données satellites et de Python
Pile et file d'attente en Python
Graphique des données de séries chronologiques en Python à l'aide de pandas et matplotlib
API Blender Python dans Houdini (Python 3)
Unittest et CI en Python
Génération de spécifications et génération de code dans le développement d'API REST (édition Python)
Obtenez le nom du produit et le prix le plus bas à l'aide de l'API Amazon Product Advertising
[Python] Extraction / combinaison de données aléatoires à partir de DataFrame en utilisant random et pandas
Tirez en accéléré à partir d'une caméra PC en utilisant Python, OpenCV
Traduit à l'aide de googletrans en Python
Utilisation du mode Python dans le traitement
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python
Regroupez et analysez les prix des produits à l'aide de l'API Rakuten Product Search [Python]
Utilisez l'API e-Stat de Python
Collectez des informations sur les produits et traitez les données à l'aide de l'API de recherche de produits Rakuten [Python]
J'ai comparé Node.js et Python lors de la création d'une miniature à l'aide d'AWS Lambda
[Python] Talk en utilisant OpenJTalk et l'API Talk (jusqu'à la sortie vocale)
Émission de jetons d'authentification Firebase en Python et validation de jetons avec Fast API
[Python] J'ai écrit une API REST en utilisant AWS API Gateway et Lambda.
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python (2) ~ Server ~
[SEO] Flux / exemple de code lors de l'utilisation de l'API Google Analytics en Python