[PYTHON] Obtenez les débats parlementaires via l'API

Obtenez les débats parlementaires via l'API

TL; DR

Frappez l'API de python pour collecter les minutes parlementaires.

1. Informations officielles

Vous pouvez également effectuer une recherche par interface graphique à partir du Système de recherche des enregistrements des réunions parlementaires, mais [Il existe un manuel API approprié](https: //kokkai.ndl.go) .jp / api.html).

2. Rechercher et obtenir en spécifiant des mots clés

Ici, nous allons collecter des minutes contenant les mots-clés suivants pour les déclarations faites au cours des 10 années de 2010 à 2019.

# -*- coding: utf-8 -*-
"""
Created on Thu Dec 26 15:05:04 2019

@author: boomin

pip install untangle
"""

import urllib
import untangle
import urllib.parse

import re
import pandas as pd
import os

spt = os.sep
pklDir  = "pkl"

def getSpeech(keyword:str):
    start="1" #'#Numéro de série de la remarque
    apipath = 'http://kokkai.ndl.go.jp/api/1.0/speech?'

    #Expression régulière pour supprimer la partie locuteur du contenu de l'instruction
    p = re.compile(r'^○([^ ]+)Tu?\s(.+)')

    startdate='2010-01-01'
    enddate= '2020-01-01'

    df = pd.DataFrame()

    while start!=None:
        date = []
        speaker = []
        speech = []
        speakerGroup = []
        speakerPosition = []

        url = apipath+urllib.parse.quote(
            'maximumRecords=100&recordPacking=xml'
            + '&from=' + startdate
            + '&until=' + enddate
            + '&any=' + keyword
            + f'&startRecord={start}'
        )
        #Obtenir les résultats de la recherche de demande de signal (XML)
        obj = untangle.parse(url)

        for record in obj.data.records.record:
            speechrecord = record.recordData.speechRecord

            speechdata = speechrecord.speech.cdata.replace("\u3000"," ").replace("\n"," ")
            m = p.search(speechdata)
            if not isinstance(m,type(None)):
                date.append(speechrecord.date.cdata)
                speaker.append(speechrecord.speaker.cdata)
                speech.append(m.group(2))
                speakerGroup.append(speechrecord.speakerGroup.cdata)
                speakerPosition.append(speechrecord.speakerPosition.cdata)

        offset = int(start)-1
        index = [ offset+n for n in list(range(len(date))) ]
        adddf = pd.DataFrame({
            "date":date, 
            "speaker":speaker,
            "speech":speech,
            "speakerGroup":speakerGroup,
            "speakerPosition":speakerPosition,
          }, index=index)
        df = pd.concat([df, adddf ])

        #Étant donné que seuls 100 éléments sont renvoyés à la fois, modifiez la position de départ et envoyez à plusieurs reprises la fonction GET.
        try:
            start = obj.data.nextRecordPosition.cdata
            print(f"finished: {start}")
        except:
            pass
            break

    df["date"] = pd.to_datetime(df["date"])
    return df

if __name__ == '__main__':
  
    df1 = getSpeech('Intelligence artificielle')
    df2 = getSpeech('AI')
    df3 = getSpeech('Big Data')
    df4 = getSpeech('Apprentissage automatique')

    df = pd.concat([df1,df2,df3,df4])
    #Supprimer les remarques en double
    df.drop_duplicates(subset=["date","speaker","speech"], inplace=True)
    df.sort_values(by=["date","speaker"],inplace=True)

    df.reset_index(drop=True, inplace=True)

    pd.to_pickle(df, f"{pklDir}{spt}kokkailog.pkl")
    df.to_csv(f"{pklDir}{spt}kokkailog.tsv", sep="\t")

3. Données acquises

In[4]: df.tail()
Out[4]: 
#           date speaker  ...         speakerGroup speakerPosition
#4288 2019-12-05 Taku Eto...Parti libéral démocrate, Association indépendante Ministre de l'agriculture, des forêts et des pêches
#4289 2019-12-05 Masayoshi Hamada...Fête Komei
#4290 2019-12-05 Naeko Ishii...Fête de la restauration au Japon
#4291 2019-12-05 Takashi Midorikawa...Démocrate constitutionnel / National / Assurance sociale / Forum indépendant
#4292 2019-12-05 Koichi Hagita...Parti libéral démocrate, ministre indépendant de l'Éducation, de la Culture, des Sports, des Sciences et de la Technologie
#
#[5 rows x 5 columns]

Recommended Posts

Obtenez les débats parlementaires via l'API
[Python] Récupérez le texte de la loi à partir de l'API e-GOV law
Obtenez le nombre de chiffres
Obtenez le nombre de vues de Qiita
Obtenir les attributs d'un objet
Obtenez le premier élément du jeu de requêtes
Obtenez le nombre d'abonnés Youtube
Obtenez le nombre de PV d'articles Qiita que vous avez publiés avec l'API
[Comprendre en 3 minutes] Le début de Linux
Obtenez la liste des colonnes et la liste des données de CASTable
Obtenez la valeur de la couche intermédiaire de NN
Obtenez des vacances avec l'API Google Agenda
Obtenez le dernier jour du mois spécifié
[Python] Récupère le code de caractère du fichier
Obtenez le nom de fichier du répertoire (glob)
[PowerShell] Obtenez la lecture de la chaîne de caractères
J'ai essayé d'obtenir le code d'authentification de l'API Qiita avec Python.
Obtenez des visites d'articles et des likes avec l'API Qiita + Python
J'ai essayé d'obtenir les informations sur le film de l'API TMDb avec Python
Récupérer le contenu de git diff depuis python
Obtenez la météo à Osaka via l'API Web (python)
Golang api obtenir
[Python] Obtenir / modifier l'étiquette d'échelle de la figure
[Python] Obtenez les principaux sujets de Yahoo News
Obtenons les informations Wiki en utilisant l'API MediaWiki
Récupérer l'appelant d'une fonction en Python
[Python] Obtenez la dernière date de mise à jour du site Web
Obtenez un jeton d'accès pour l'API Pocket
Obtenez le nombre de tweets liés à un certain mot-clé à l'aide de l'API Twitter
Obtenir uniquement la partie adresse de la carte réseau (eth0)
[Python] Get the day (anglais et japonais)
Obtenez la date de mise à jour du fichier de mémorandum Python.
Utilisez l'API Spotify pour obtenir toutes les chansons des informations sur les chansons d'Arashi et vérifier l'index
Obtenez le titre de Yahoo News et analysez les sentiments
Obtenez le nom de la variable sous forme de chaîne de caractères.
Comment obtenir le nombre de chiffres en Python
[Python] Obtenez le chemin d'accès officiel du fichier de raccourci (.lnk)
Calculez la valeur totale de plusieurs colonnes avec awk
Utilisons l'API de la fenêtre générale des statistiques gouvernementales (e-Stat)
Obtenez l'image de "Suzu Hirose" par recherche d'images Google.
Obtenez le chemin absolu du script en cours d'exécution
[python] Récupère la liste des classes définies dans le module
Puisqu'il y a beaucoup de tremblements de terre, obtenez l'histoire du tremblement de terre
Récupérer le code retour d'un script Python depuis bat
[Langage C] [Linux] Récupère la valeur de la variable d'environnement
Envoyez et recevez Gmail via l'API Gmail en utilisant Python
Obtenir la taille (nombre d'éléments) de Union Find en Python
Utilisons la version Python du module API Confluence.
Essayez d'obtenir le contenu de Word avec Golang
[Python] Obtenir la liste des noms ExifTags de la bibliothèque Pillow
Obtenez des commentaires et des abonnés avec l'API de données YouTube
J'ai essayé d'utiliser l'API de Sakenowa Data Project
Utiliser l'API de recherche de la Bibliothèque du Parlement national en Python
[Django 2.2] Trier et obtenir la valeur de la destination de la relation
Obtenez l'état de fonctionnement de JR West avec Python
Script pour obtenir la date d'expiration du certificat SSL
[Python] Obtenez le nombre de vues de tous les articles publiés
Obtenez l'URL de la destination de la redirection HTTP en Python