##はじめに
こんなことはありませんか?
toBの企業情報は取得しているけどCRMには法人番号はない。
あるのは、法人名と設立年度などの基本情報。
こんな時に他のリストのデータセットと結合する際に、何を結合keyにすればいいのか?
悩むと思います。
行政の定める法人番号さえあれば、あらゆる企業情報を結合し、1つの情報にすることができます。
例えば,以下のように、テーブルAとテーブルBを結合したい時がありうるとします。
テーブルA(企業情報)
会社名 | 設立年 | 都道府県 |
---|---|---|
hoge | fuga | 3 |
テーブルB(コンタクト情報)
会社名 | 見込み金額 | 受注状況 |
---|---|---|
hoge | 3000 | 初回接続 |
##gbizinfoを使ってみる
sqlなどデータベース言語に触れることがある人ならわかると思います。
文字列同士の結合はDB負荷がかかるという事に。
法人番号さえあれば共通の結合Keyとして使用できます。
法人番号を取得する場合に、便利なのが、経産省のgbizinfoです
なんとこのサービスREST APIを備えているのです。
なので、とっても法人番号の取得が簡単です。
https://info.gbiz.go.jp/api/index.html
のちにheadersの情報でX-hojinInfo-api-tokenが必要になるので
あらかじめAPIの利用申請が必要です。
##pythonで呼んでみる
###サンプルデータ
以下のように、会社名と設立年度だけが入ったデータがあるとします。
このデータに法人番号を入れたいです。
リクエストの際のメソッドはGETです
会社名 | 設立年 |
---|---|
楽天モバイル株式会社 | 2018 |
株式会社松屋フーズ | 2018 |
###リクエストしてみる
import json
import pandas as pd
import requests
class CorporateNumbers:
def __init__(self):
self.headers = {
"Accept": "application/json",
"X-hojinInfo-api-token": "###token###"
}
self.endpoint_url = 'https://info.gbiz.go.jp/hojin/v1/hojin'
def _create_taeger_company_dataframe(self):
df = pd.read_clipboard()
return df
def _get_corporate_number(self,df):
#df = self._create_taeger_company_dataframe()
name = df.name
founded_year = df.founded
results = []
for name,founded in zip(name,founded_year):
data = {
'name':name,
'founded':founded
}
res = requests.get(
url = self.endpoint_url,
headers = self.headers,
params = data
)
json = res.json()['hojin-infos']
results.extend(json)
df = pd.io.json.json_normalize(results)
return df
def _merge_dataframe(self):
df1 = self._create_taeger_company_dataframe()
df2 = self._get_corporate_number(df = df1)
df3 = pd.merge(df1,df2,on='name',how='left')
return df3