[PYTHON] Verwenden wir die API des allgemeinen Fensters für Regierungsstatistiken (e-Stat).

Mit e-Stat können Sie eine API verwenden, um verschiedene statistische Daten zu erfassen, die von der Regierung in XML oder JSON bereitgestellt werden.

API-Nutzungsregistrierung und Betriebstest

    1. Beantragen Sie die API-Nutzung über die unten stehende URL. http://www.e-stat.go.jp/api/regist-login/
  1. Nach Abschluss des Antrags auf API-Registrierung können Sie sich mit Ihrer "E-Mail-Adresse" und Ihrem "Passwort" anmelden.

https://www.e-stat.go.jp/api/apiuser/php/index.php?action=login

    1. Wenn Sie nach dem Anmelden erneut zum Anmeldebildschirm wechseln, wird ein Bildschirm angezeigt, in dem Sie "Benutzerinformationen ändern / löschen" und "Anwendungs-ID abrufen" können.

https://www.e-stat.go.jp/api/apiuser/php/index.php?action=login

disp1.png

In der Benutzerinformationsänderung können Sie die zum Zeitpunkt der Registrierung angegebenen Daten ändern.

  1. Geben Sie eine AppID aus. Geben Sie den Namen und die URL im Bildschirm "Anwendungs-ID abrufen" ein und klicken Sie auf die Schaltfläche "Veröffentlichen", um die Anwendungs-ID abzurufen.

disp2.png

Wenn die URL nicht vorhanden ist, geben Sie "http: // localhost /" usw. ein. Sie können bis zu 3 AppIDs ausgeben.

  1. Testen Sie jede API über den Entwicklungsunterstützungsbildschirm. Wählen Sie "Development Support Information" aus "Funktionsübersicht".

disp3.png

Dies stellt das "API Function Test Form" und "Sample" zur Verfügung. disp4.png

API-Übersicht

Sie können die Funktion jeder API im API-Funktionstestformular überprüfen. Darüber hinaus können die API-Spezifikationen auf dem folgenden Bildschirm verwendet werden.

http://www.e-stat.go.jp/api/api-info/api-spec/

Es gibt vier Arten von APIs, die verwendet werden können.

・ Erfassung statistischer Tabelleninformationen Informieren Sie sich über die statistische Tabelle des Allgemeinen Zählers für Regierungsstatistiken (e-Stat). Es ist auch möglich, Informationen mit eingeschränkten Bedingungen durch Angabe von Anforderungsparametern zu erfassen.

・ Erfassung von Metainformationen Erfasst Metainformationen (Tabellenelemente, Klassifizierungselemente, regionale Elemente usw.), die der angegebenen statistischen Tabellen-ID entsprechen.

· Datenerfassung Erfasst statistische Daten (numerische Daten), die der angegebenen statistischen Tabellen-ID oder Datensatz-ID entsprechen. Es ist auch möglich, Informationen mit eingeschränkten Bedingungen durch Angabe von Anforderungsparametern zu erfassen. Diese Daten sind in XML und JSON verfügbar.

・ Datensatzregistrierung Registrieren Sie die Erfassungsbedingungen für die Erfassung statistischer Daten. Sie können die Erfassungsbedingungen weglassen, indem Sie die Verengungsbedingungen für die Erfassung statistischer Daten als "Datensatz" angeben.

・ Siehe Datensatz Beachten Sie die Filterbedingungen des registrierten Datensatzes. Wenn die Dataset-ID nicht angegeben ist, wird die Liste der Datasets angezeigt, die vom Benutzer verwendet werden können.

Die grundlegende Verwendung ist wie folgt. Durchsuchen Sie die statistische Tabelle mit "Statistische Tabelleninformationen abrufen", ermitteln Sie die ID der statistischen Tabelle, rufen Sie die Metainformationen mit "Metainformationen abrufen" ab und rufen Sie die statistischen Daten mit "Daten abrufen" ab.

Stichprobe

Suchen Sie nach statistischen Tabelleninformationen

Dieses Skript ruft die statistischen Tabelleninformationen ab. Führen Sie dies aus, indem Sie API_KEY, den Suchdatentyp und das Suchschlüsselwort angeben. Die Suchdatentypen sind wie folgt. ・ 1: Statistische Informationen (Standardwert) ・ 2: Kleine Fläche / regionales Netz ・ 3: Soziales / demografisches System (Präfekturen / Gemeinden)

Beispielcode:

getStatsListSample.py


#!/usr/bin/python
# -*- coding: utf-8 -*-
import urllib
import urllib2
from lxml import etree
import sys
import codecs
#Für Windows...
sys.stdout = codecs.getwriter('cp932')(sys.stdout)

def main(argvs, argc):
    if argc != 4:
        print ("Usage #python %s api_key search_kind key_word" % argvs[0])
        return 1
    api_key = argvs[1]
    search_kind = argvs[2]
    #Für Windows...
    key_word = argvs[3].decode('cp932')
    key_word = urllib.quote(key_word.encode('utf-8'))

    url = ('http://api.e-stat.go.jp/rest/1.0/app/getStatsList?appId=%s&lang=J&searchKind=%s&searchWord=%s' % (api_key, search_kind, key_word))
    req = urllib2.Request(url)
    opener = urllib2.build_opener()
    conn = opener.open(req)
    cont = conn.read()
    parser = etree.XMLParser(recover=True)
    root = etree.fromstring(cont, parser)
    result = root.find('RESULT')
    print ('RESULT==============')
    print (result.find('STATUS').text)
    print (result.find('ERROR_MSG').text)
    print (result.find('DATE').text)
    data_list = root.find('DATALIST_INF')
    list_infs = data_list.xpath('.//LIST_INF')
    for list_inf in list_infs:
        print '--------------'
        print (u'Statistische Tabellen-ID:%s' % (list_inf.get('id')))

        stat_name = list_inf.find('STAT_NAME')
        if stat_name is not None:
            print (u'Name der Regierungsstatistik:%s %s' % (stat_name.get('code'), stat_name.text))

        gov_org = list_inf.find('GOV_ORG')
        if gov_org is not None:
            print (u'Name des Erstellers:%s %s' % (gov_org.get('code'), gov_org.text))

        statistics_name = list_inf.find('STATISTICS_NAME')
        if statistics_name is not None:
            print (u'Bereitgestellter Statistikname und angegebener Klassifizierungsname:%s' % (statistics_name.text))

        title = list_inf.find('TITLE')
        if title is not None:
            print (u'Titel:%s %s' % (title.get('no'), title.text))

        cycle = list_inf.find('CYCLE')
        if cycle is not None:
            print (u'Angebotszyklus:%s' % (cycle.text))

        survey_date = list_inf.find('SURVEY_DATE')
        if survey_date is not None:
            print (u'Umfragedatum:%s' % (survey_date.text))

        open_date = list_inf.find('OPEN_DATE')
        if open_date is not None:
            print (u'Veröffentlichungsdatum:%s' % (open_date.text))

        small_area = list_inf.find('SMALL_AREA')
        if small_area is not None:
            print (u'Subregionale Attribute:%s' % (small_area.text))


if __name__ == '__main__':
    argvs = sys.argv
    argc = len(argvs)
    sys.exit(main(argvs, argc))

Anwendungsbeispiel:

python getStatsListSample.py API_Schlüssel 1 Beschäftigung

Ausgabeergebnis:

Statistische Tabellen-ID:0003059047
Name der Regierungsstatistik:00550100 Grundumfrage des Ministeriums für Wirtschaft, Handel und Industrie zu Unternehmensaktivitäten
Name des Erstellers:00550 Ministerium für Wirtschaft, Handel und Industrie
Bereitgestellter Statistikname und angegebener Klassifizierungsname:Grundumfrage des Ministeriums für Wirtschaft, Handel und Industrie zu Unternehmensaktivitäten Statistische Tabelle Liste Bestätigter Bericht (Daten)
Bestätigungsbericht zur Unternehmensumfrage 2010 - Ergebnisse 2009
Titel:1-8 Statistische Tabelle (Band 1) [Tabelle zur Unternehmensorganisation] Tabelle 8: Nach Branche, Anzahl der Unternehmen, Unternehmensorganisation
Anzahl der verschiedenen Mitarbeiter
Angebotszyklus:Jährlich
Umfragedatum:201001-201012
Veröffentlichungsdatum:2012-03-31
Subregionale Attribute:0

Die statistische Tabellen-ID "0003059047" ist die ID, die für die Datenerfassung verwendet werden kann.

Anzeige von Metainformationen

Dieses Skript ruft die Metainformationen für die angegebene statistische ID ab. Die Metainformationen werden unter Verwendung der statistischen Tabellen-ID erfasst, mit der nach den statistischen Tabelleninformationen als Parameter gesucht wurde.

Beispielcode:

getMetaSample.py


#!/usr/bin/python
# -*- coding: utf-8 -*-
import urllib
import urllib2
from lxml import etree
import sys
import codecs
#Für Windows...
sys.stdout = codecs.getwriter('cp932')(sys.stdout)


def get_meta_data(api_key, stats_data_id):
    """
Holen Sie sich Meta-Informationen
    """
    url = ('http://api.e-stat.go.jp/rest/1.0/app/getMetaInfo?appId=%s&lang=J&statsDataId=%s' % (api_key, stats_data_id))
    req = urllib2.Request(url)
    opener = urllib2.build_opener()
    conn = opener.open(req)
    cont = conn.read()
    parser = etree.XMLParser(recover=True)
    root = etree.fromstring(cont, parser)
    class_object_tags = root.xpath('//METADATA_INF/CLASS_INF/CLASS_OBJ')
    class_object = {}

    for class_object_tag in class_object_tags:
        class_object_id = class_object_tag.get('id')
        class_object_name = class_object_tag.get('name')
        class_object_item = {
            'id' : class_object_id,
            'name' : class_object_name,
            'objects' : {}
        }
        class_tags = class_object_tag.xpath('.//CLASS')
        for class_tag in class_tags:
            class_item = {
                'code' : class_tag.get('code'),
                'name' : class_tag.get('name'),
                'level' : class_tag.get('level'),
                'unit' : class_tag.get('unit')
            }
            class_object_item['objects'][class_item['code']] = class_item
        class_object[class_object_id] = class_object_item
    return class_object

def main(argvs, argc):
    if argc != 3:
        print ("Usage #python %s api_key stats_id" % argvs[0])
        return 1
    api_key = argvs[1]
    stats_id = argvs[2]
    ret = get_meta_data(api_key, stats_id)
    for key in ret:
        print ('======================')
        print (key)
        print ('name: %s' % ret[key]['name'])
        for obj_code, obj in ret[key]['objects'].items():
            print ('----------------------')
            print ('code: %s' % obj_code)
            print ('name: %s' % obj['name'])
            print ('unit: %s' % obj['unit'])
            print ('level: %s' % obj['level'])

if __name__ == '__main__':
    argvs = sys.argv
    argc = len(argvs)
    sys.exit(main(argvs, argc))

Anwendungsbeispiel:

python getMetaSample.py API_KEY 0003059047

Ausgabebeispiel:

======================
cat01
name: 22_1-8 Anzahl der Unternehmen, Anzahl der Mitarbeiter nach Unternehmensorganisation
----------------------
code: 0011000
name:Anzahl der regulären Mitarbeiter (ohne abgeordnete Mitarbeiter) Hauptsitz / Hauptsitz Hauptsitz Funktionsabteilung Sonstige
unit: None
level: 1
----------------------
code: 0029000
name:Anzahl der regulären Mitarbeiter (einschließlich abgeordneter Mitarbeiter) abgeordnete Mitarbeiter zu anderen Unternehmen usw.
unit: None
level: 1

In den Metainformationen werden die von der entsprechenden statistischen Tabelle verwendete Kategorie und die Werte angezeigt, die von dieser Kategorie verwendet werden können.

Statistische Tabelle als CSV ausgeben

Dieses Beispiel zeigt ein Beispiel, das eine statistische Tabelle als CSV ausgibt. Wenn Sie die statistische Tabellen-ID und den CSV-Ausgabepfad angeben, wird die angegebene statistische Tabelle als CSV ausgegeben.

Beispielcode:

export_csv.py


#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import urllib2
from lxml import etree
import csv

def export_statical_data(writer, api_key, stats_data_id, class_object, start_position):
    """
Statistiken exportieren
    """
    url = ('http://api.e-stat.go.jp/rest/1.0/app/getStatsData?limit=10000&appId=%s&lang=J&statsDataId=%s&metaGetFlg=N&cntGetFlg=N' % (api_key, stats_data_id))
    if start_position > 0:
        url = url + ('&startPosition=%d' % start_position)

    req = urllib2.Request(url)
    opener = urllib2.build_opener()
    conn = opener.open(req)
    cont = conn.read()
    parser = etree.XMLParser(recover=True)
    root = etree.fromstring(cont, parser)

    row = []
    datas = {}
    value_tags = root.xpath('//STATISTICAL_DATA/DATA_INF/VALUE')
    for value_tag in value_tags:
        row = []
        for key in class_object:
            val = value_tag.get(key)
            if val in class_object[key]['objects']:
                level = '';
                if 'level' in class_object[key]['objects'][val]:
                    if class_object[key]['objects'][val]['level'].isdigit():
                        level = ' ' * (int(class_object[key]['objects'][val]['level']) - 1)
                text = ("%s%s" % (level , class_object[key]['objects'][val]['name']))
                row.append(text.encode('utf-8'))
            else:
                row.append(val.encode('utf-8'))
        row.append(value_tag.text)
        writer.writerow(row)
    
    next_tags = root.xpath('//STATISTICAL_DATA/TABLE_INF/NEXT_KEY')
    if next_tags:
        if next_tags[0].text:
            export_statical_data(writer, api_key, stats_data_id, class_object, int(next_tags[0].text))

def get_meta_data(api_key, stats_data_id):
    """
Holen Sie sich Meta-Informationen
    """
    url = ('http://api.e-stat.go.jp/rest/1.0/app/getMetaInfo?appId=%s&lang=J&statsDataId=%s' % (api_key, stats_data_id))
    req = urllib2.Request(url)
    opener = urllib2.build_opener()
    conn = opener.open(req)
    cont = conn.read()
    parser = etree.XMLParser(recover=True)
    root = etree.fromstring(cont, parser)
    class_object_tags = root.xpath('//METADATA_INF/CLASS_INF/CLASS_OBJ')
    class_object = {}

    for class_object_tag in class_object_tags:
        class_object_id = class_object_tag.get('id')
        class_object_name = class_object_tag.get('name')
        class_object_item = {
            'id' : class_object_id,
            'name' : class_object_name,
            'objects' : {}
        }
        class_tags = class_object_tag.xpath('.//CLASS')
        for class_tag in class_tags:
            class_item = {
                'code' : class_tag.get('code'),
                'name' : class_tag.get('name'),
                'level' : class_tag.get('level'),
                'unit' : class_tag.get('unit')
            }
            class_object_item['objects'][class_item['code']] = class_item
        class_object[class_object_id] = class_object_item
    return class_object

def export_csv(api_key, stats_data_id, output_path):
    """
Exportieren Sie die angegebenen Statistiken in die CSV.
    """
    writer = csv.writer(open(output_path, 'wb'),quoting=csv.QUOTE_ALL)

    class_object = get_meta_data(api_key, stats_data_id)
    row = []
    for key in class_object:
        title = class_object[key]['name']
        row.append(title.encode('utf-8'))
    row.append('VALUE')
    writer.writerow(row)

    export_statical_data(writer, api_key, stats_data_id, class_object, 1)

def main(argvs, argc):
    if argc != 4:
        print ("Usage #python %s api_key stats_data_id output_path" % argvs[0])
        return 1
    api_key = argvs[1]
    stats_data_id = argvs[2]
    output_path = argvs[3]
    export_csv(api_key, stats_data_id, output_path)

if __name__ == '__main__':
    argvs = sys.argv
    argc = len(argvs)
    sys.exit(main(argvs, argc))

Anwendungsbeispiel:

python export_csv.py API_KEY 0003059047 output.csv

Ausgabebeispiel:

"22_1-8 Anzahl der Unternehmen, Anzahl der Mitarbeiter nach Unternehmensorganisation","22_1-8 Branchen","VALUE"
"Anzahl der Unternehmen","2005","27677"
"Anzahl der Unternehmen","2006","27917"
"Anzahl der Unternehmen","2007","29080"
"Anzahl der Unternehmen","2008","29355"
"Anzahl der Unternehmen","2009","29096"
"Anzahl der Unternehmen","Insgesamt insgesamt","29096"
"Anzahl der Unternehmen","gesamt","27871"
"Anzahl der Unternehmen","Bergbau, Steinbruch, Kiesgewinnung","36"
"Anzahl der Unternehmen","Fertigungsindustrie","13105"
"Anzahl der Unternehmen","090 Lebensmittelindustrie","1498"
"Anzahl der Unternehmen","091 Viehzuchtindustrie","285"
"Anzahl der Unternehmen","092 Fischerei Lebensmittelindustrie","222"
"Anzahl der Unternehmen","093 Getreide- und Mehlmühlenindustrie","37"

Regionale Netzstatistik der Bevölkerung der Volkszählung 2010

Flächennetzstatistiken unterteilen den Bereich in Netzbereiche ohne Lücken basierend auf Breiten- und Längengrad und organisieren die statistischen Daten in jedem Bereich. Die folgende Abbildung ist dargestellt.

image_log10.png

Beispielcode:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import urllib
import urllib2
from lxml import etree
import csv
from collections import defaultdict
import json
from matplotlib import pyplot
import numpy as np
from math import *


def draw_heatmap(data):
    #zeichnen
    fig, ax = pyplot.subplots()
    heatmap = ax.pcolor(data, cmap=pyplot.cm.Blues)

    ax.set_xticks(np.arange(data.shape[0]) + 0.5, minor=False)
    ax.set_yticks(np.arange(data.shape[1]) + 0.5, minor=False)

    ax.invert_yaxis()
    ax.xaxis.tick_top()

    pyplot.savefig('image.png')
    pyplot.show()

    return heatmap


def get_meta_data(api_key, stats_data_id):
    """
Holen Sie sich Meta-Informationen
    """
    url = ('http://api.e-stat.go.jp/rest/1.0/app/getMetaInfo?appId=%s&lang=J&statsDataId=%s' % (api_key, stats_data_id))
    req = urllib2.Request(url)
    opener = urllib2.build_opener()
    conn = opener.open(req)
    cont = conn.read()
    parser = etree.XMLParser(recover=True)
    root = etree.fromstring(cont, parser)
    class_object_tags = root.xpath('//METADATA_INF/CLASS_INF/CLASS_OBJ')
    class_object = {}

    for class_object_tag in class_object_tags:
        class_object_id = class_object_tag.get('id')
        class_object_name = class_object_tag.get('name')
        class_object_item = {
            'id' : class_object_id,
            'name' : class_object_name,
            'objects' : {}
        }
        class_tags = class_object_tag.xpath('.//CLASS')
        for class_tag in class_tags:
            class_item = {
                'code' : class_tag.get('code'),
                'name' : class_tag.get('name'),
                'level' : class_tag.get('level'),
                'unit' : class_tag.get('unit')
            }
            class_object_item['objects'][class_item['code']] = class_item
        class_object[class_object_id] = class_object_item
    return class_object

def get_stats_list(api_key, search_kind, key_word):
    key_word = urllib.quote(key_word.encode('utf-8'))
    url = ('http://api.e-stat.go.jp/rest/1.0/app/getStatsList?appId=%s&lang=J&searchKind=%s&searchWord=%s' % (api_key, search_kind, key_word))
    req = urllib2.Request(url)
    opener = urllib2.build_opener()
    conn = opener.open(req)
    cont = conn.read()
    parser = etree.XMLParser(recover=True)
    root = etree.fromstring(cont, parser)
    ret = []
    data_list = root.find('DATALIST_INF')
    list_infs = data_list.xpath('.//LIST_INF')
    for list_inf in list_infs:
        item = {
             'id': list_inf.get('id')
        }
        stat_name = list_inf.find('STAT_NAME')
        if stat_name is not None:
            item['stat_name'] = stat_name.text
            item['stat_name_code'] = stat_name.get('code')

        gov_org = list_inf.find('GOV_ORG')
        if gov_org is not None:
            item['gov_org'] = gov_org.text
            item['gov_org_code'] = gov_org.get('code')

        statistics_name = list_inf.find('STATISTICS_NAME')
        if statistics_name is not None:
            item['statistics_name'] = statistics_name.text

        title = list_inf.find('TITLE')
        if title is not None:
            item['title'] = title.text

        cycle = list_inf.find('CYCLE')
        if cycle is not None:
            item['cycle'] = cycle.text

        survey_date = list_inf.find('SURVEY_DATE')
        if survey_date is not None:
            item['survey_date'] = survey_date.text

        open_date = list_inf.find('OPEN_DATE')
        if open_date is not None:
            item['open_date'] = open_date.text

        small_area = list_inf.find('SMALL_AREA')
        if small_area is not None:
            item['small_area'] = small_area.text

        ret.append(item)
    return ret


def _get_stats_id_value(api_key, stats_data_id, class_object, start_position, filter_str):
    """
Statistiken abrufen
    """
    url = ('http://api.e-stat.go.jp/rest/1.0/app/getStatsData?limit=10000&appId=%s&lang=J&statsDataId=%s&metaGetFlg=N&cntGetFlg=N%s' % (api_key, stats_data_id, filter_str))
    if start_position > 0:
        url = url + ('&startPosition=%d' % start_position)
    req = urllib2.Request(url)
    opener = urllib2.build_opener()
    conn = opener.open(req)
    cont = conn.read()
    parser = etree.XMLParser(recover=True)
    root = etree.fromstring(cont, parser)
    ret = []
    row = {}
    datas = {}
    value_tags = root.xpath('//STATISTICAL_DATA/DATA_INF/VALUE')
    for value_tag in value_tags:
        row = {}
        for key in class_object:
            val = value_tag.get(key)
            if val in class_object[key]['objects']:
                text = class_object[key]['objects'][val]['name']
                row[key] = text.encode('utf-8')
            else:
                row[key] = val.encode('utf-8')
        row['value'] = value_tag.text
        ret.append(row)
    return ret

def get_stats_id_value(api_key, stats_data_id, filter_str):
    class_object = get_meta_data(api_key, stats_data_id)
    return _get_stats_id_value(api_key, stats_data_id, class_object, 1, filter_str), class_object

def get_stats_id_list_value(api_key, stats_data_ids, filter):
    filter_str = ''
    for key in filter:
        filter_str += ('&%s=%s' % (key, urllib.quote(filter[key].encode('utf-8'))))
    ret = []
    i = 0
    for stats_data_id in stats_data_ids:
        list, class_object = get_stats_id_value(api_key, stats_data_id, filter_str)
        ret.extend(list)
        i = i + 1
        if i > 5:
            break
    return ret


def get_mesh_id(mesh_id, kind):
    if kind == 1:
        return mesh_id[0:4] + '0000'
    elif kind == 2:
        return mesh_id[0:6] + '00'
    else:
        raise Exception(mesh_id)


def collect_mesh_value(api_key, stats_data_ids, filter, kind):
    filter_str = ''
    for key in filter:
        filter_str += ('&%s=%s' % (key, urllib.quote(filter[key].encode('utf-8'))))
    ret = defaultdict(float)
    i = 0
    for stats_data_id in stats_data_ids:
        list, class_object = get_stats_id_value(api_key, stats_data_id, filter_str)
        sum = 0
        for row in list:
            key = get_mesh_id(row['area'], kind)
            v = row['value']
            if v.isdigit():
                ret[key] += float(v)
        i = i + 1
        #if i > 5:
        #    break
    return ret


def parse_mesh_to_num(mesh_id):
    ret = {}
    if len(mesh_id) == 4:
        ret['p'] = float(mesh_id[0:2])
        ret['u'] = float(mesh_id[2:4])
        ret['q'] = 0.0
        ret['v'] = 0.0
        ret['r'] = 0.0
        ret['w'] = 0.0
        return ret
    elif len(mesh_id) == 8:
        ret['p'] = float(mesh_id[0:2])
        ret['u'] = float(mesh_id[2:4])
        ret['q'] = float(mesh_id[4])
        ret['v'] = float(mesh_id[5])
        ret['r'] = float(mesh_id[6])
        ret['w'] = float(mesh_id[7])
        return ret
    else:
        raise Exception(mesh_id)

def convert_mesh_to_num(mesh_id):
    d1 = parse_mesh_to_num(mesh_id)
    #Der sekundäre Bereich ist 0-7, also multiplizieren Sie mit 80
    x1 = (d1['u'] * 80) + (d1['v'] * 10) + d1['w'];
    y1 = (d1['p'] * 80) + (d1['q'] * 10) + d1['r'];
    return x1, y1

def main(argvs, argc):
    wd = u'2010 National Census-World Survey System(1 km Maschenweite)20101001'
    # API_KEY
    api_key = 'API_KEY'
    search_kind = '2'
    stats_list = get_stats_list(api_key, search_kind, wd)
    stats_ids = []
    for stats in stats_list:
        stats_ids.append(stats['id'])
    #Filtern nach Gesamtbevölkerung
    values = collect_mesh_value(api_key, stats_ids, {'cdCat01':'T000608001'}, 2)
    ret = []
    max_x = 0
    min_x = 9999
    max_y = 0
    min_y = 9999
    for key in values.keys():
        x, y = convert_mesh_to_num(key)
        x = x
        y = y
        if min_x > x:
            min_x = x
        if max_x < x:
            max_x = x
        if min_y > y:
            min_y = y
        if max_y < y:
            max_y = y
    size_x = int(max_x - min_x) / 10 + 1
    size_y = int(max_y - min_y) / 10 + 1
    buff = [[0.0 for i in range(size_x)] for j in range(size_y)] 
    for key in values.keys():
        x, y = convert_mesh_to_num(key)
        x = int(x - min_x) / 10
        y = (size_y-1) - int(y - min_y) / 10
        #Wenn Sie kein Protokoll erstellen, ist der Unterschied zwischen Tokio und anderen Regionen so groß, dass Sie Japan nicht kartieren können.
        buff[y][x] = log10(float(values[key]))
        #print ('%s\t%s %d %d' % (key,values[key],x,y))
    draw_heatmap(np.array(buff))

if __name__ == '__main__':
    argvs = sys.argv
    argc = len(argvs)
    sys.exit(main(argvs, argc))

Erläuterung: In dieser Abbildung wird die Population für jeden zweiten Bereich aggregiert und der reguläre Logarithmus als Wärmekarte angezeigt.

Der Grund für die Verwendung des regulären Logarithmus ist, dass der Bevölkerungsunterschied zwischen dem Kanto-Gebiet und anderen Gebieten zu groß ist, um eine anständige Karte zu erstellen.

Der Versuch, den dritten Bereich (Standardnetz) landesweit anzuzeigen, verbraucht sehr viel Speicher. Die Karte ist im ersten Bereich zu rau.

In diesem Beispiel dauert es enorm lange, bis alles angezeigt wird. Im nächsten Artikel werden wir versuchen, die Effizienz der Verarbeitung zu verbessern, indem wir die Daten vorübergehend in Spatialite speichern.

** So zeigen Sie das regionale Netz des Government Statistics Office (eStat) in einem Webbrowser an ** http://qiita.com/mima_ita/items/38784095a146c87dcd23

Referenz

Merkmale und Geschichte der regionalen Netzstatistik: http://www.stat.go.jp/data/mesh/pdf/gaiyo1.pdf

Heatmap von Python + matplotlib http://qiita.com/ynakayama/items/7dc01f45caf6d87a981b

Recommended Posts

Verwenden wir die API des allgemeinen Fensters für Regierungsstatistiken (e-Stat).
Verwenden wir die Python-Version des Confluence-API-Moduls.
Verwenden wir die offenen Daten von "Mamebus" in Python
[Python] Verwenden Sie die Face-API von Microsoft Cognitive Services
Verwenden Sie die e-Stat-API von Python
Berühren wir die API der Netatmo Weather Station mit Python. #Python #Netatmo
Verwenden wir den verteilten Ausdruck von Wörtern schnell mit fastText!
Anzeigen des regionalen Netzes des Government Statistics Office (eStat) in einem Webbrowser
Verwenden wir usercustomize.py anstelle von sitecustomize.py
Verwenden wir Tomotopie anstelle von Gensim
Verwenden Sie die Flickr-API von Python
Lassen Sie uns den Gewinner des Bingo bestimmen
Von der Einführung der GoogleCloudPlatform Natural Language API bis zur Verwendung
Erhalten Sie Parlamentsprotokolle über API
Untersuchen wir den Mechanismus von Kaijis Chinchirorin
Ermitteln Sie mithilfe der Twitter-API die Anzahl der Tweets, die sich auf ein bestimmtes Keyword beziehen
Das Format der von der Slack-API erhaltenen Nachricht ist auf subtile Weise schwierig zu verwenden
Lassen Sie uns Wiki-Informationen mithilfe der MediaWiki-API abrufen
zsh-Einstellungen, die die Verwendung von virtualenv erleichtern
Bis Sie die Kaggle-API mit Colab verwenden
Verwenden Sie die neueste Version von PyCharm unter Ubuntu
Verwendung der Google Cloud Translation API
Bis Sie die Google Speech API verwenden können
Verwendung der NHK-Programmführer-API
Verwenden Sie die Kaggle-API in einem Docker-Container
Verwenden wir verschiedene Versionen von SQLite3 aus Python3!
[Statistik] Lassen Sie uns die Ausführung der logistischen Regression in Stan im Detail erklären (mit Titanic-Datensatz).