Skip to content

Latest commit

 

History

History

koshu-xsv

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 

メタデータつき CSV

このノートでは、オープンデータ流通推進コンソーシアム が提案する CSV データに項目名や単位、データ全体の見出しなどを付与する規格である 「オープンデータ化のための CSV 形式データ規格」 (PDF) にもとづいて、CSV データを甲州記法に変換するプログラムをつくります。

見出し

データセット全体に対する情報として、 見出し、作成者、作成日、言語の 4 つがあります。 日付の形式は ISO 8601:2004 に、 言語の記号は ISO 639-1:2002 にしたがいます。 これらの情報を、つぎのような先頭に @ がついた形式の CSV データであらわします。

@Caption,都道府県別人口と人口増加率,ja,,,,,,
@Creator,総務省統計局,ja,,,,,,
@Date,2010-10-01,,,,,,,
@Language,ja,,,,,,,

各項目に関する情報として、項目名、データ型、単位、記数単位があります。 データ型として XML Schema Part 2 で定義された名前を使います。 こちらは、先頭に @@ がついた形式の CSV データであらわします。 表計算ソフトなどでデータを表示したとき、データの内容と同じ列になるように、 @@ のつぎの行に記載します。

@@Title,ja,,,,,,,
都道府県,2000年の人口,2005年の人口,2005年の人口集中地区の人口, ...
@@Datatype,,,,,,,,
string,integer,integer,integer,double,integer,double, ...
@@Unit,ja,,,,,,,
,,,,%,,,/km2,%
@@Baseval,,,,,,,,
,1000,1000,1000,,1000,,,

本体

ここでの例は、日本の統計 第 2 章 人口・世帯 の 2-2「都道府県別人口と人口増減率」から抜粋したものです。

都道府県 2000 2005 集中地区 増減率 1 2010 人口性比 人口密度 増減率 2
北海道 5683 5628 4108 -1.0 5506 89.7 70.2 -2.2
青森 1476 1437 653 -2.6 1373 88.9 142.4 -4.4
岩手 1416 1385 407 -2.2 1330 91.3 87.1 -4.0
宮城 2365 2360 1371 -0.2 2348 94.3 322.3 -0.5
秋田 1189 1146 386 -3.7 1086 88.5 93.3 -5.2

都道府県ごとの人口として、2000 年、2005 年、2010 年の数値があり、 2000 年から 2005 年、および、2005 年から 2010 年の人口増減率が計算されます。 2005 年は人口集中地区の人口という項目があり、 2010 年は 女性 / 男性 の人口性比と、人口密度があります。 これが、つぎのような CSV データで表現されます。

北海道,5683,5628,4108,-1.0,5506,89.7,70.2,-2.2
青森,1476,1437,653,-2.6,1373,88.9,142.4,-4.4
岩手,1416,1385,407,-2.2,1330,91.3,87.1,-4.0
宮城,2365,2360,1371,-0.2,2348,94.3,322.3,-0.5
秋田,1189,1146,386,-3.7,1086,88.5,93.3,-5.2

甲州記法

変換対象とするデータを CSV データ (comma-seperated values) A,B,C に限らず、タブ区切り A →B →C( はタブ)、 棒区切り A|B|C、セミコロン区切り A;B;C なども含むように、 XSV (X-seperated values) とよぶことにします。 XSV データの見出しと本体を、つぎの 6 つの判断種のデータに変換します。

判断種 用途
XSV-DOC データ全体に言及する情報
XSV-TERM 位置 /pos が名前 /term の項目であること
XSV-DATATYPE 項目 /term のデータ型 /datatype
XSV-UNIT 項目 /term の単位 /unit
XSV-BASEVAL 項目 /term の記数単位 /baseval
XSV 各行のデータ

上に引用した「都道府県別人口と人口増加率」の CSV ファイル POPULATION.csv を対象として、 甲州記法への変換コマンド

$ koshu-env.sh ./unxsv.hs < POPULATION.csv > POPULATION.k

を実行すると、つぎような内容のファイル POPULATION.k に出力されます。

|-- XSV-DOC       /caption '都道府県別人口と人口増加率
                  /creator '総務省統計局
                  /date '2010-10-01
                  /language 'ja

|-- XSV-TERM      /pos 1  /term '都道府県
|-- XSV-TERM      /pos 2  /term '2000年の人口
...

|-- XSV-DATATYPE  /term '都道府県  /datatype 'string
|-- XSV-DATATYPE  /term '2000年の人口  /datatype 'integer
...

|-- XSV-UNIT      /term '2000年から2005年の人口増減率  /unit "%"
|-- XSV-UNIT      /term '2010年の人口密度  /unit "/km2"
|-- XSV-UNIT      /term '2005年から2010年の人口増減率  /unit "%"

|-- XSV-BASEVAL   /term '2000年の人口  /baseval 1000
|-- XSV-BASEVAL   /term '2005年の人口  /baseval 1000
...

|-- XSV           /都道府県 '北海道  /2000年の人口 5683  /2005年の人口 5628
                  /2005年の人口集中地区の人口 4108  /2000年から2005年の人口増減率 -1.0
                  /2010年の人口 5506  /2010年の人口性比 89.7
                  /2010年の人口密度 70.2  /2005年から2010年の人口増減率 -2.2

|-- XSV           /都道府県 '青森  /2000年の人口 1476  /2005年の人口 1437
                  /2005年の人口集中地区の人口 653  /2000年から2005年の人口増減率 -2.6
                  /2010年の人口 1373  /2010年の人口性比 88.9
                  /2010年の人口密度 142.4  /2005年から2010年の人口増減率 -4.4
...

追加の計算

甲州記法に変換されたデータは、関係代数にもとづいて、追加の計算を実行できます。 たとえば、つぎのコマンド

$ koshu POPULATION.k to-year-pop.k > YEAR-POP.k

to-year-pop.k により変換し、 /年 /都道府県 /人口 の項目だけをもつように正規化されたデータ YEAR-POP.k を作成できます。

|-- 都道府県人口  /年 2010  /都道府県 '北海道  /人口 5506
|-- 都道府県人口  /年 2010  /都道府県 '青森    /人口 1373
|-- 都道府県人口  /年 2010  /都道府県 '岩手    /人口 1330
...
|-- 全国人口  /年 2000  /人口 126926
...