以下のサンプルではe-Stat-APIの使用方法と、統計データ取得APIから取得したデータをもとにグラフの表示を行います。
リクエストの実行
以下のリクエストを実行することにより、東京の老年人口割合[65歳以上人口]を取得することが可能です。
http://api.e-stat.go.jp/rest/2.0/app/getStatsData?appId=<アプリケーションID>&statsDataId=C0020050213000&cdCat01=%23A03503
URLについて
// XMLの場合
http://api.e-stat.go.jp/rest/<バージョン>/app/getStatsData?<パラメータ群>
// JSONの場合
http://api.e-stat.go.jp/rest/<バージョン>/app/json/getStatsData?<パラメータ群>
上記の東京の老年人口割合[65歳以上人口]のリクエストの例ではXMLを取得します。
統計データ取得APIのデータの種類については次のページを参照ください。
パラメータについて
リクエストの実行時には、パラメータの指定が必要です。各パラメータは
「パラメータ名=値」
のように名称と値を’=で結合し、複数のパラメータを指定する場合は
「パラメータ名=値&パラメータ名=値…」
のようにそれぞれのパラメータ指定を’&’で結合してください。
また、パラメータ値は必ずURLエンコード(文字コードUTF-8)してから結合してください。
たとえば検索データ種別「社会・人口統計体系」の老年人口割合[65歳以上人口]のコードは、
#A03503
です。これをURLエンコードすると
%23A03503
となります。
パラメータの設定
政府統計の総合窓口(e-Stat)で公開されているAPIを使う際には、アプリケーションIDが必要です。
取得したアプリケーションIDをリクエストに付与してください。
appId=<アプリケーションID>
アプリケーションIDの発行には政府統計の総合窓口(e-Stat)のユーザ登録が必要です。
ユーザ登録はこちらから
取得したいデータの統計表IDを指定します。
東京都の社会・人口統計体系のデータの場合は、C0020050201300を指定します。
statsDataId=C0020050213000
社会・人口統計体系のデータには、多くの項目が存在します。
取得したい項目を指定してください。指定しない場合は、全項目のデータが取得できます。
以下の例では、老年人口割合[65歳以上人口]を指定しています。
cdCat01=%23A03503
省略可能なパラメータについて
アプリケーションIDとstatsDataId以外は、省略可能です。
lang、statsNameListのように省略したときの値が決まっているものがあります。
統計データ取得APIのパラメータについては次のページを参照ください。
政府統計の総合窓口(e-Stat)API 仕様/3. APIパラメータ/3.4. 統計データ取得
これをPHPで取得する場合は次のように組み合わせます。
// アプリケーションID
$APP_ID = <アプリケーションID>;
// API URL
$API_URL = "http://api.e-stat.go.jp/rest/2.0/app/getStatsData";
// 統計表ID
$statsDataId ="C0020050213000"
//コード
$cdCat01 ="#A03503"
// データ取得URLのパラメータを設定
$GET_URL = $API_URL;
$GET_URL .= "?appId=". urlencode($APP_ID);
$GET_URL .= "&statsDataId=". urlencode($statsDataId);
$GET_URL .= "&cdCat01=". urlencode($cdCat01);
Javascriptで取得する場合は次のように組み合わせます。
// アプリケーションID
var APP_ID = <アプリケーションID>;
// API URL
var API_URL = "http://api.e-stat.go.jp/rest/2.0t/app/json/getStatsData"
// 統計表ID
var statsDataId ="C0020050213000"
//コード
var cdCat01 ="#A03503"
var GET_URL = API_URL;
GET_URL += "?appId=" + escape(APP_ID);
GET_URL += "&statsDataId=" + escape(statsdataid);
GET_URL += "&cdCat01=" + escape(cdcat01);
出力データの解析
APIの出力データはXMLやJSONといったテキスト形式になっています。
以下のサンプルは、PHPのsimplexml_load_fileでXMLデータを取得し、
グラフに表示するために必要な情報をXPathを利用して解析しています。
統計データ取得APIからのレスポンスの内容については次のページを参照ください。
// XMLデータを取得します
$xmlData = simplexml_load_file( $GET_URL );
// 配列から結果ステータスを取得
$apiResult = get_object_vars($xmlData->RESULT);
$apiStatus = $apiResult["STATUS"];
$apiErrMsg = $apiResult["ERROR_MSG"];
// 変数定義
$aryGraph = array();
// 地域(都道府県コード + "000")
$areaCode = "13000"; // 13000は東京都のコード
// データ取得成功
if ($apiStatus == "0") {
// メタ情報から統計表名を取得します
$statisticsNameList=$xmlData->xpath('/GET_STATS_DATA/STATISTICAL_DATA/TABLE_INF/STATISTICS_NAME');
$statisticsName=$statisticsNameList[0];
// メタ情報から都道府県名を取得します
$areaNameList=$xmlData->xpath('/GET_STATS_DATA/STATISTICAL_DATA/CLASS_INF/CLASS_OBJ[@id="area"]/CLASS[@code="'.$areaCode.'"]/@name');
$areaName=(string)$areaNameList[0];
// メタ情報から分類事項を取得します
$cat01List=$xmlData->xpath('/GET_STATS_DATA/STATISTICAL_DATA/CLASS_INF/CLASS_OBJ[@id="cat01"]/CLASS[@code="'.$cdCat01.'"]/@name');
$cat01=$cat01List[0];
// 単位を取得します
$UnitList=$xmlData->xpath('/GET_STATS_DATA/STATISTICAL_DATA/CLASS_INF/CLASS_OBJ[@id="cat01"]/CLASS[@code="'.$cdCat01.'"]/@unit');
$Unit=$UnitList[0];
// メタ情報の横軸事項を格納する配列
$apiMetaYokoList = array();
// メタ情報から横軸事項を取得
foreach($xmlData->xpath('/GET_STATS_DATA/STATISTICAL_DATA/CLASS_INF/CLASS_OBJ[@id="time"]/CLASS') as $key1 => $val1) {
// 格納
$apiMetaYokoList[(string)$val1['code']] = (string)$val1['name'];
}
// 取得データを画面表示用に加工する
foreach ($xmlData->xpath('/GET_STATS_DATA/STATISTICAL_DATA/DATA_INF/VALUE') as $key2 => $val2) {
// データでループ
// 取得した横軸事項でループ
foreach ($apiMetaYokoList as $yokoKey => $yokoVal) {
if ((($cdCat01!=""&&(string)$val2['cat01']==$cdCat01)||$cdCat01=="") && // 分類事項01
(string)$val2['area'] == $areaCode && // 都道府県
(string)$val2['time'] == $yokoKey // 横軸
) {
//
$name = $apiMetaYokoList[$yokoKey];
// 取得した値を数値に変換
$value = (float)$val2;
// グラフ表示するデータを配列に格納します
$aryGraph[] = array( "name" => $name."年"
, "value" => $value
);
}
}
}
}
以下のサンプルは、Javascript(JQuery)のgetJSONでJSONデータを取得して解析しています。
$.getJSON(url, function(jsonData){})
.success(function(jsonData) {
var statusCode = jsonData['GET_STATS_DATA']['RESULT']['STATUS'];
// 統計データの数値情報を抽出します
// Javascriptのfilterを使って、jsonデータからデータを抽出します
var valueData = jsonData['GET_STATS_DATA']['STATISTICAL_DATA']['DATA_INF']['VALUE'].filter(function(item, index){
return true;
});
// メタ情報から横軸事項を取得
var apiMetaYokoList = jsonData['GET_STATS_DATA']['STATISTICAL_DATA']['CLASS_INF']['CLASS_OBJ'].filter(function(item, index){
if (item['@id'] == 'time'){
return true;
}
});
// 単位を取得
var apiMetaCat01List = jsonData['GET_STATS_DATA']['STATISTICAL_DATA']['CLASS_INF']['CLASS_OBJ'].filter(function(item, index){
if (item['@id'] == 'cat01'){
return true;
}
});
var Unit = apiMetaCat01List[0]['CLASS']['@unit'];
// グラフに描画するデータを格納する配列
var graphData = new Array();
for (var key in valueData) {
// メタ情報
var apiYokoName = apiMetaYokoList[0]['CLASS'].filter(function(item, index){
if (item['@code'] == valueData[key]['@time']){
return true;
}
});
graphData.push({
name : apiYokoName[0]['@name']+'年',
value: valueData[key]['$']
});
}
});
グラフへの書き出し
解析したデータをもとにJavascriptライブラリを利用してグラフを描画します。
以下のサンプルではMorrisを利用しています。
PHPからJavascriptに配列データを渡す場合は、JSON形式にすると便利です。
以下の例では、IDが’mygraph’のDIVタグ内にグラフが描画されます。
<script>
// グラフを描画します
new Morris.Bar({
element: 'mygraph'
, data: JSON.parse('<?php echo json_encode($aryGraph);?>')
, xkey: 'name'
, ykeys: ['value']
, xLabels: "年"
, labels: ['値']
, postUnits: '<?php echo $Unit;?>'
, gridLineColor: '#000000'
, hideHover: 'auto'
});
</script>
<div id="mygraph"></div>
Javascriptの場合は、そのまま配列データを渡します。
<script>
// グラフを描画します
new Morris.Bar({
element: 'mygraph'
, data: graphData
, xkey: 'name'
, ykeys: ['value']
, xLabels: "年"
, labels: ['値']
, postUnits: Unit
, gridLineColor: '#000000'
, hideHover: 'auto'
});
</script>
<div id="mygraph"></div>