統計表における機械判読可能なデータの表記方法

CSVファイルの作法 もご参照ください。

はじめに

e-Statで2020年11月25日から12月1日まで意見照会されていた「統計表における機械判読可能なデータ作成に関する表記方法案」が2020年12月18日に統計表における機械判読可能なデータの表記方法について(←リンク切れ。下記参照)の統計表における機械判読可能なデータ作成に関する表記方法(PDF)にまとめられた。これを引用しつつ,コメントする。

上記統計表における機械判読可能なデータの表記方法については2021-05-23時点でアクセスできないが,そこからリンクされていた統計表における機械判読可能なデータ作成に関する表記方法(PDF)はまだ存在する。e-Statには2020-12-25付で「統計表における機械判読可能なデータの表記方法」に関する 「政府統計の総合窓口(e-Stat)」の機能改修についてというページができ,そこから統計表における機械判読可能なデータの表記方法(PDF)がリンクされるようになった。このPDFは2020-12-18のPDFとほぼ同じである。

なお,このPDFには「第1章 機械判読可能なデータの作成 ~Excel 形式による統計表の作成~」しかないので,そのうちに第2章以下が追加されるものと思われる。

第1節 データ形式の留意点

チェック項目1-1 ファイル形式はExcelかCSVとなっているか

Excelならxlsではなくxlsx形式にすべきことや,パーマリンクを付けてほしいことを,意見照会では書いたが,反映されなかった。なお,CSVの文字コードは現在はShift JISが多いが,今後は国際化を考えてUTF-8にするべきである。本来ならBOMなしUTF-8が望ましいが,日本語環境のExcelはBOMなしUTF-8で文字化けするので,当面はBOM付きUTF-8を許容する。なお,JSONはBOMなしUTF-8にしなければならない。

[追記] パーマリンクについては,e-Statでユーザ登録してログインした状態でダウンロードしたデータはダッシュボードの「ダウンロード履歴」に表示されるが,そのURLを(データのランディングページの)パーマリンクと考えてよいということを教えていただいた。詳しくは e-Stat 参照。

第2節 Excelファイルによる統計表のレイアウト

第1項 データ・項目の取扱い

チェック項目1-2 1セル1データとなっているか

例1
1-2-例1

改善案:セル結合や2行のヘッダは避けたい。最初の列には「年度」という列名が欲しい。年度は西暦で単位なしにしたい。

年度仕入額出荷額
2015373973
20164341234
20175491449
20186381738
20197411841

上と同じ形のExcelファイルを tables-1-2-ex1.xlsx として置いておく。このExcelファイルはPythonで簡単に読める:

import pandas as pd

df = pd.read_excel("https://okumuralab.org/~okumura/python/data/tables-1-2-ex1.xlsx")
df
     年度  仕入額   出荷額
0  2015  373   973
1  2016  434  1234
2  2017  549  1449
3  2018  638  1738
4  2019  741  1841

このページにあるHTMLの表をPythonでスクレイプするのも,同様に簡単である:

tables = pd.read_html("https://okumuralab.org/~okumura/python/tables.html")
tables[0]
     年度  仕入額   出荷額
0  2015  373   973
1  2016  434  1234
2  2017  549  1449
3  2018  638  1738
4  2019  741  1841
例2
1-2-例2

改善案:最初の列に列名が欲しい。項目名のスペースによるインデントは避ける(これは下のチェック項目1-5の例2で書かれている)。「総計」は計算できるので,なくてもよい。

チェック項目1-3 数値データは数値属性とし、文字列を含まないこと

例1 数値データ内に文字列が含まれる場合
1-3-例1

改善案:最初の列に列名が欲しい。

例2 数値データ内に空白がある場合
1-3-例2

改善案:最初の列に列名が欲しい。

例3 数値データ内に注釈・脚注が含まれる場合
1-3-例3

改善案:最初の列に列名が欲しい。「1月」「2月」「3月」は2019-01,2019-02,2019-03のように年を併記するほうがわかりやすい(いずれにしても数値に「月」などは付けない)。「商品A」は「商品A」のようにいわゆる半角で統一したい。

チェック項目1-4 セルの結合をしていないか

例1
1-4-例1

改善案:最初の列に列名が欲しい。

1-4-例2

改善案:欠測値を表すのに「−」が使われているが,「−」と区別がつきにくい文字がたくさんあり,不統一を招きかねない。欠測値を表す方法については下の「チェック項目1-13」とその改善案を参照されたい。

チェック項目1-5 スペースや改行等で体裁を整えていないか

例1
1-5-例1

改善案:地域コードを併記してもスペースによる整形は好ましくない。どうしても整形したいなら,Excelのセルの書式設定→配置→水平方向の配置を「均等割り付け(インデント)」とし,インデント幅(左右の空き)を適宜設定する。

例2
1-5-例2

改善案:「合計」はなくてもよい。

例3
1-5-例3

改善案:可能ならば全角「A-1」などはいわゆる半角(ASCIIの範囲)の「A-1」などで統一する。

チェック項目1-6 項目名等を省略していないか

1-6-例

改善案:同上。なお,「〃」のような省略記号を使わないようにということも入れたらよいのではないかというご提案をツイッターでお聞きした。

チェック項目1-7 数式を使用している場合は、数値データに修正しているか

1-7-例

改善案:なし。

チェック項目1-8 オブジェクトを使用していないか

1-8-例

改善案:可能ならば全角は半角に統一する。

チェック項目1-9 データの単位を記載しているか

1-9-例

改善案:ヘッダ行は1行に統一する。単位は括弧書きにするか,別の説明文に入れる。

薬剤名出荷本数(本)単価(円)
鎮静剤A-1429756
鎮静剤A-2321648
鎮静剤A-3384438
鎮静剤A-4408775

チェック項目1-10 機種依存文字を使用していないか。

1-10-例

改善案:「機種依存文字」というのはShift JIS時代の名残りであり,Unicodeでは「機種依存文字」は事実上存在しないと考えてよい。必要に応じてどんな文字でも使ってかまわない。ただ,入力のしやすさを考えれば,簡単な文字で済ませるほうがよい。1や2は数値のように見えるのでaやbとする。

品名収納済額(a)収納未済額(b)収納未済額割合(b/a)
サンプルA10001000.1
サンプルB20002000.1
サンプルC30003000.1
サンプルD40004000.1

チェック項目1-11 e-Statの時間軸コードの表記、西暦表記又は和暦に西暦の併記がされているか

1-11-例

改善案:e-Statの時間軸コードはそのままではRやPythonで扱えないので,特に理由がない限り,通常の日付表記(2020,2020-12,2020-12-31など)に統一していただければありがたい。あるいは年と月を別の行にしてもよい。いずれにしても数値に「年」などは付けない。「2006年度4〜9月期」のような複雑な場合は,幅が一定(半期ごと)であれば始値「2006-04」だけ,幅が不定であれば始値と幅または始値と終値の2欄に分ける。

出荷本数在庫本数
2017429141183
2018321243283
2019384333560
2020408219724

チェック項目1-12 地域コード又は地域名称が表記されているか

1-12-例

改善案:なし。

チェック項目1-13 数値データの同一列内に特殊記号(秘匿等)が含まれる場合

「集計した結果がゼロ、表章桁未満」は 0,「集計に必要なデータがない」は ***,「秘匿データ」は X で表す。

1-13-例

改善案:欠測値を *** で表すのは,それで統一されていれば問題ないが,Excelでグラフを描く場合に 0 と扱われる点に注意しなければならない。別の案として,ExcelでもPython(pandas)でも欠測値の意味になる #N/A はどうか。CSVの場合は # 以下がコメントと解釈されないように "#N/A" のようにダブルクォートで囲む。Excelで合計や平均を求める際には =SUMIF(範囲,"<>#N/A")=AVERAGEIF(範囲,"<>#N/A") のようにして計算する。

都道府県サンプル1サンプル2
北海道5295444940
青森県#N/A#N/A
岩手県65665933
宮城県#N/A#N/A

tables = pd.read_html("https://okumuralab.org/~okumura/python/tables.html")
tables[4]
  都道府県    サンプル1    サンプル2
0  北海道  52954.0  44940.0
1  青森県      NaN      NaN
2  岩手県   6566.0   5933.0
3  宮城県      NaN      NaN

ほかに(特にRで読む場合は)NA もよく使われる。-(U+002D HYPHEN-MINUS)を使ってもいいが,(U+2010 HYPHEN),(U+2014 EM DASH),(U+2015 HORIZONTAL BAR),(U+2212 MINUS SIGN),(U+2500 BOX DRAWINGS LIGHT HORIZONTAL),(U+30FC KATAKANA-HIRAGANA PROLONGED SOUND MARK),(U+4E00 漢数字の「一」),(U+FF0D FULLWIDTH HYPHEN-MINUS)などの類似文字が多いので気を付ける。

ところでこの最後のデータだが,次のように縦長にするほうがよいことが多い(データの整然化 参照)。

地域サンプル個数
北海道152954
北海道244940
岩手県16566
岩手県25933

Last modified: