無線局等情報検索(Web-API機能)を利用し基地局情報をデータラングリング

www.tele.soumu.go.jp

件数取得API/一覧取得APIのリクエスト条件一覧

コード値一覧

地方公共団体コード

import urllib.parse

import requests
import pandas as pd

d = {
    # 1:免許情報検索  2: 登録情報検索
    "ST": 1,
    # 詳細情報付加 0:なし 1:あり
    "DA": 1,
    # スタートカウント
    "SC": 1,
    # 取得件数
    "DC": 2,
    # 出力形式 1:CSV 2:JSON 3:XML
    "OF": 2,
    # 無線局の種別
    "OW": "FB_H",
    # 都道府県/市区町村
    "HCV": "38202",
    # 免許人名称/登録人名称
    # "NA": "楽天モバイル",
}

parm = urllib.parse.urlencode(d, encoding="shift-jis")

r = requests.get("https://www.tele.soumu.go.jp/musen/list", parm)

data = r.json()

df = pd.json_normalize(data["musen"])

df

データラングリング

df["電波種類"] = (
    df["detailInfo.radioSpec1"].str.replace(r"\\t", "\t").str.replace(r"\\n", "\n")
)

df0 = df["detailInfo.note"].str.strip().str.split(r"\\n", 2, expand=True)

df["無線局種補足"] = df0[0].str.strip().str.split(":", expand=True)[1]

df["総開設局数"] = (
    df0[1].str.strip().str.split(":", expand=True)[1].str.replace(",", "").astype(int)
)

df1 = (
    df0[2]
    .str.strip()
    .str.replace(r"\\n", "")
    .str.extractall("(.+?)\(([0-9,]+?)\)")
    .rename(columns={0: "自治体名", 1: "開設局数"})
)

df1["自治体名"] = df1["自治体名"].str.strip()

df1["開設局数"] = df1["開設局数"].str.strip().str.replace(",", "").astype(int)

df.drop("detailInfo.note", axis=1, inplace=True)

df2 = df1.droplevel("match").join(df)

df2.to_csv("output.csv", encoding="utf_8_sig")

df3 = df2.loc[df2["自治体名"] == "今治市", ["detailInfo.name", "電波種類", "無線局種補足", "開設局数"]]

df3.to_csv("imabari.csv", encoding="utf_8_sig")