Prognostizieren Sie das Geschlecht anhand des Namens mithilfe der Gender-API und von Pykakasi in Python

Einführung

Ich denke, es gibt eine Nutzungsszene, in der Sie das Geschlecht anhand Ihres Namens vorhersagen möchten. Wenn Sie beispielsweise auf dem Registrierungsformular bei einem Mitgliederservice nach dem Geschlecht fragen, wird der CVR gelöscht. Machen Sie dies mit einer Vorhersage wieder wett! Ist es eine solche Szene?

Es gibt verschiedene Möglichkeiten, das Geschlecht anhand eines Namens vorherzusagen, z. B. mithilfe von maschinellem Lernen einen Klassifikator zu generieren und Vorhersagen zu treffen oder mithilfe einer externen API Vorhersagen zu treffen. Dieses Mal wird es ein Ansatz sein, das Geschlecht anhand der Gender-API in Python anhand des Namens vorherzusagen.

GenderAPI ist ein amerikanisches Unternehmen, das aus einer Vielzahl von Namensdaten Geschlechtervorhersagen getroffen zu haben scheint. Es gibt mehrere ähnliche Dienste, aber dieses Mal werden wir diese Gender-API verwenden, um das Geschlecht vorherzusagen.

Vorbereitung

Gender API Erstellen wir zunächst ein Konto für Gender API. Holen Sie sich nach der Erstellung API_KEY. Wenn Sie es kostenlos verwenden möchten, können Sie es bis zu 500 Namen kostenlos verwenden

Pseudo-Erfassung persönlicher Informationen

Verwenden Sie PersonalGenerator, um pseudo-persönliche Informationen zu generieren. Sie können die anzuzeigenden Elemente frei auswählen. Dieses Mal möchten wir jedoch auch die richtige Antwort beurteilen, damit wir die Seriennummer, den Namen, den Namen (Katakana) und das Geschlecht erhalten. Dieses Mal werde ich versuchen, das Geschlecht anhand der Namen von etwa 30 Personen vorherzusagen. スクリーンショット 2020-08-10 15.27.17.png

Pykakasi Der vorherzusagende Name ist Vorname, und ob der Name in Kanji, Katakana, Hiragana oder Romaji vorhergesagt wird, hat großen Einfluss auf die Genauigkeit. Zusammenfassend lässt sich sagen, dass es wahrscheinlich am genauesten war, es in römische Schriftzeichen umzuwandeln und vorherzusagen, da es sich um einen Überseedienst handelt. (Der Überprüfungsprozess wird weggelassen.)

Daher ist es notwendig, eine Romaji-Konvertierung aus dem folgenden Namen durchzuführen. Informationen zur Verwendung finden Sie in der Entwicklerdokumentation. Verwendung von pykakasi Installieren Sie die folgenden zwei Pakete.

pip install six semidbm
pip install pykakasi

Geschlechtsvorhersage

Geschlechtsvorhersage mit Python

Wir werden tatsächlich das Geschlecht der 30 Probanden vorhersagen. Das allgemeine Verfahren ist wie folgt.

  1. Bereiten Sie den Datenrahmen der Zielperson vor und teilen Sie ihn durch einen Bereich voller Breite, um eine Namenszeichenfolge zu generieren
  2. Erstellen Sie eine Pykakasi-Instanz, setzen Sie sie auf Romaji, konvertieren Sie den Namen und generieren Sie eine Romaji-Zeichenfolge
  3. Übergeben Sie die Romaji-Liste an die Gender-API und erhalten Sie das Vorhersageergebnis
  4. Führen Sie das Vorhersageergebnis mit dem ursprünglichen Datenrahmen zusammen

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:
    """
Sagen Sie das Geschlecht anhand des in Romaji konvertierten Namens voraus
    """
    __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{}Geschlechtsvorhersage für eine Person abgeschlossen.'.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'{}Sagen Sie das Geschlecht einer Person voraus'.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={
            'Ordnungsnummer':'row_num',
            'Vollständiger Name':'name',
            'Name (Katakana)':'name_katakana',
            'Sex':'gender'
        })
        df['first_name']=df.name_katakana.str.split().str[1]
        print(u"{}Extrahieren Sie die vorherzusagende Person.".format(len(df)))
        return df

Ergebnis der Geschlechtsvorhersage

Der Datenrahmen des Vorhersageergebnisses ist wie folgt. Die Antwort bezüglich der Vorhersage der Gender-API ist wie folgt definiert.

estimated_gender accuracy samples duration
Ergebnis der Geschlechtsvorhersage Vorhersagekorrektheit Stichprobengröße zur Vorhersage Verstrichene Zeit bis 1 Anruf
スクリーンショット 2020-08-10 15.29.07.png

Überprüfung der Genauigkeit der Geschlechtsvorhersage

Lassen Sie uns abschließend die Genauigkeit der Ergebnisse der Geschlechtsvorhersage überprüfen. Zeichnen Sie die korrekten und vorhergesagten Ergebnisse und ihre Zahlen für die folgende Tabelle, um eine Matrix zu erstellen Die richtige Antwortrate betrug fast 100%. In diesem Fall habe ich vorausgesagt, dass nur ein Fall tatsächlich eine Frau, aber ein Mann ist. Schließlich scheint es schwierig zu sein, einen Namen vorherzusagen, der sowohl von Männern als auch von Frauen verwendet werden kann, wie beispielsweise "Iori".

Richtige Antwort Prognose 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
Prognose/Richtige Antwort male female unknown Richtige Antwortrate
male 11 0 0 100.00%
female 1 18 0 94.74%
unknown 0 0 0 0%

Recommended Posts

Prognostizieren Sie das Geschlecht anhand des Namens mithilfe der Gender-API und von Pykakasi in Python
Versuchen Sie, die ChatWork-API und die Qiita-API in Python zu verwenden
Führen Sie Ansible über Python mithilfe der API aus
So erhalten Sie mithilfe der Mastodon-API Follower und Follower von Python
Mausbedienung mit Windows-API in Python
Hinweise zur Verwendung von cChardet und python3-chardet in Python 3.3.1.
Von Python bis zur Verwendung von MeCab (und CaboCha)
Versuchen Sie, die Kraken-API mit Python zu verwenden
Tweet mit der Twitter-API in Python
Ich habe versucht, die UnityCloudBuild-API von Python zu verwenden
Spielen Sie, um den Rennwert vorherzusagen und geben Sie den Pokemon-Namen in TensorFlow ein
Entwicklung und Bereitstellung der REST-API in Python mit Falcon Web Framework
Erkennen Sie japanische Zeichen anhand von Bildern mithilfe der Cloud Vision-API von Google mit Python
Versuchen Sie es mit der BitFlyer Ligntning API in Python
Holen Sie sich die Bild-URL mithilfe der Flickr-API in Python
Lassen Sie uns Emotionen mithilfe der Emotions-API in Python beurteilen
Laden Sie den Befehl von yml mit Python und führen Sie ihn aus
Laden Sie Bilder von der URL mit Pillow in Python 3
Versuchen Sie, die DropBox Core-API mit Python zu verwenden
C-API in Python 3
Namensidentifikation mit Python
Übersetzen von Visual Studio 2017 nach Python (Microsoft Translator Text API)
Laden Sie eine JPG-Datei mit der Google Drive-API in Python hoch
Grundeinstellungen bei Verwendung der foursquare-API mit Python
PUSH-Benachrichtigung von Python an Android mithilfe der Google-API
Holen Sie sich LEAD-Daten mit der REST-API von Marketo in Python
Senden und empfangen Sie Google Mail über die Google Mail-API mit Python
OpenVINO verwendet die Inference Engine Python API in einer PC-Umgebung
Lesen und schreiben Sie NFC-Tags mit Python mit PaSoRi
Sprachtranskriptionsverfahren mit Python und Google Cloud Speech API
Verwenden Sie die Such-API der National Parliament Library in Python
Holen Sie sich Dateien von Linux mit paramiko und scp [Python]
Beispiel für das Abrufen des Modulnamens und des Klassennamens in Python
Vorhersage aus verschiedenen Daten in Python mit dem Zeitreihen-Vorhersage-Tool Facebook Prophet
Hit Mastodons API in Python
Mit Python abflachen
Versuchen Sie es mit GUI, PyQt in Python
Ich habe versucht, API list.csv mit Python aus swagger.yaml zu erstellen
Visualisieren Sie die Pflanzenaktivität aus dem Weltraum mithilfe von Satellitendaten und Python
Stapel und Warteschlange in Python
Zeichnen Sie Zeitreihendaten in Python mit Pandas und Matplotlib
Blender Python API in Houdini (Python 3)
Unittest und CI in Python
Generierung von Spezifikationen und Code in der REST-API-Entwicklung (Python Edition)
Holen Sie sich den Produktnamen und den niedrigsten Preis mit der Amazon Product Advertising API
[Python] Zufällige Datenextraktion / -kombination aus DataFrame mit Random und Pandas
Nehmen Sie Zeitraffer von einer PC-Kamera mit Python, OpenCV auf
Übersetzt mit Googletrans in Python
Verwenden des Python-Modus in der Verarbeitung
Ich habe Chatbot mit LINE Messaging API und Python erstellt
Aggregieren und analysieren Sie Produktpreise mit der Rakuten Product Search API [Python]
Verwenden Sie die e-Stat-API von Python
Sammeln Sie Produktinformationen und Prozessdaten mit der Rakuten-Produktsuch-API [Python].
Ich habe Node.js und Python beim Erstellen eines Miniaturbilds mit AWS Lambda verglichen
[Python] Sprechen mit OpenJTalk und Talk API (bis zur Sprachausgabe)
Ausgabe von Firebase-Authentifizierungstoken in Python und Token-Validierung mit Fast API
[Python] Ich habe eine REST-API mit AWS API Gateway und Lambda geschrieben.
Ich habe Chatbot mit der LINE Messaging API und Python (2) ~ Server ~ erstellt
[SEO] Flow / Beispielcode bei Verwendung der Google Analytics-API in Python