コマンドラインで利用

Tablelinker モジュールをコマンドラインから呼び出すと、 表データの読み込みやクリーニング、さまざまな変換処理を コマンドのように実行できます。

Python プログラムを書かずに CSV ファイルに対する変換処理を バッチ実行したい場合などに有用です。

このページでは、 Tablelinker モジュールを呼び出すコマンドの tablelinker を便宜上「Tablelinker コマンド」と呼びます。

ヘルプ表示

Tablelinker コマンドに -h または --help オプションを 付けて実行すると、詳しいヘルプ画面が表示されます。

$ tablelinker -h

表データの変換

Tablelinker コマンドは、表データを読み込み、 その表データにさまざまな コンバータ を適用して変換処理を行い、 結果を CSV ファイルに保存することができます。

表データの読み込み

表データを読み込むには -i または --input オプションで 読み込みたい表データを含むファイルを指定します。

$ tablelinker -i 入力ファイル

実際のサンプルデータで実行例を示します。

【例1】 ma030000.csv を読み込みます。

リスト 1 ma030000.csv を読み込み
 1$ tablelinker -i ma030000.csv
 2,人口,出生数,死亡数,(再掲),,自 然,死産数,,,周産期死亡数,,,婚姻件数,離婚件数
 3,,,,乳児死亡数,新生児,増減数,総数,自然死産,人工死産,総数,22週以後,早期新生児,,
 4,,,,,死亡数,,,,,,の死産数,死亡数,,
 5 国,123398962,840835,1372755,1512,704,-531920,17278,8188,9090,2664,2112,552,525507,193253
 601 北海道,5188441,29523,65078,59,25,-35555,728,304,424,92,75,17,20904,9070
 702 青森県,1232227,6837,17905,18,15,-11068,145,87,58,32,17,15,4032,1915
 803 岩手県,1203203,6718,17204,8,3,-10486,150,90,60,21,19,2,3918,1679
 904 宮城県,2280203,14480,24632,27,15,-10152,311,141,170,56,41,15,8921,3553
1005 秋田県,955659,4499,15379,9,4,-10880,98,63,35,18,15,3,2686,1213
11...

コンバータを指定していないので、入力データがそのまま出力されます。 ただし読み込む際に次のクリーニング処理が行われています。

  • 文字エンコーディング(シフトJIS、UTF-8など)の自動変換

  • 区切り文字(カンマ区切り、タブ区切り)の自動検出

  • 表データより前の説明文やコメントの除去

実際に ma030000.csv をテキストエディタで開くと、先頭部分は次のようになっています。

リスト 2 ma030000.csv の内容
 1令和2年,人口動態統計,,
 2上巻 総覧 第3.3表-1 都道府県(特別区-指定都市再掲)別にみた人口動態総覧
 3
 4  1) 都道府県別の表章は出生は子の住所、死亡は死亡者の住所、死産は母の住所、婚姻は夫の住所、離婚は別居する前の住所による。
 5  2) 都道府県、特別区-指定都市人口については、総務省統計局「令和2年国勢調査の日本人人口(不詳補完結果)」である。
 6
 7,人口,出生数,死亡数,(再掲),,自 然,死産数,,,周産期死亡数,,,婚姻件数,離婚件数
 8,,,,乳児死亡数,新生児,増減数,総数,自然死産,人工死産,総数,22週以後,早期新生児,,
 9,,,,,死亡数,,,,,,の死産数,死亡数,,
10全 国,123398962,840835,1372755,1512,704,-531920,17278,8188,9090,2664,2112,552,525507,193253
1101 北海道,5188441,29523,65078,59,25,-35555,728,304,424,92,75,17,20904,9070
12...

リスト 1 の出力結果と比較すると、 Tablelinker コマンドが1行目から6行目を 説明文と判断してスキップしていることが分かります。

コンバータの適用

読み込んだ表データにコンバータを適用する文法は次の通りです。

$ tablelinker -i 入力ファイル -c コンバータ名 -p パラメータ

【例2】 ma030000.csvrename_col を適用し、先頭列の見出しを「地域」に変更します。

リスト 3 ma030000.csv に rename_col を適用
 1$ tablelinker -i ma030000.csv -c rename_col -p '{"input_col_idx":0,"output_col_name":"地域"}'
 2地域,人口,出生数,死亡数,(再掲),,自 然,死産数,,,周産期死亡数,,,婚姻件数,離婚件数
 3,,,,乳児死亡数,新生児,増減数,総数,自然死産,人工死産,総数,22週以後,早期新生児,,
 4,,,,,死亡数,,,,,,の死産数,死亡数,,
 5 国,123398962,840835,1372755,1512,704,-531920,17278,8188,9090,2664,2112,552,525507,193253
 601 北海道,5188441,29523,65078,59,25,-35555,728,304,424,92,75,17,20904,9070
 702 青森県,1232227,6837,17905,18,15,-11068,145,87,58,32,17,15,4032,1915
 803 岩手県,1203203,6718,17204,8,3,-10486,150,90,60,21,19,2,3918,1679
 904 宮城県,2280203,14480,24632,27,15,-10152,311,141,170,56,41,15,8921,3553
1005 秋田県,955659,4499,15379,9,4,-10880,98,63,35,18,15,3,2686,1213
11...

リスト 1 の出力結果と比較すると、 2行目の先頭が「地域」に変わっています。

注釈

利用可能なコンバータおよびパラメータについては コンバータ を参照してください。

タスクファイル

処理対象となる表データは、たとえば月ごとの集計表であったり、 自治体ごとに作成したオープンデータだったりと、同じような多数の 表データに対して何度も同じ手順を繰り返すことがよくあります。 そのような場合にコマンドラインで毎回コンバータ名とパラメータを 指定するのは面倒です。

そこで、適用するコンバータとパラメータをファイルに記述しておいて、 Tablelinker コマンドの実行時に呼び出すことができます。

$ tablelinker -i 入力ファイル タスクファイル

注釈

Tablelinker コマンドでは、 convertorparams を含む オブジェクトを「タスク」と呼び、タスクを記述した JSON ファイルを 「タスクファイル」と呼びます。

【例3】 リスト 3 と同じ変換処理をタスクファイルで行います。

まず、以下の内容のタスクファイル task1.json を作成します。

リスト 4 task1.json
1{
2    "convertor":"rename_col",
3    "params":{
4        "input_col_idx":0,
5        "output_col_name":"地域"
6    }
7}

convertor に利用するコンバータ名を、params にパラメータを JSON 記法 で記述します。 次に ma030000.csv にこのファイルで定義されたコンバータを適用します。

リスト 5 ma030000.csv に task1.json を適用
1$ tablelinker -i ma030000.csv task1.json
2地域,人口,出生数,死亡数,(再掲),,自 然,死産数,,,周産期死亡数,,,婚姻件数,離婚件数
3,,,,乳児死亡数,新生児,増減数,総数,自然死産,人工死産,総数,22週以後,早期新生児,,
4,,,,,死亡数,,,,,,の死産数,死亡数,,
5 国,123398962,840835,1372755,1512,704,-531920,17278,8188,9090,2664,2112,552,525507,193253
601 北海道,5188441,29523,65078,59,25,-35555,728,304,424,92,75,17,20904,9070
7...

リスト 3 と全く同じ結果が出力されます。

コンバータの連続適用

通常、1つのコンバータだけでは必要な変換は行えませんので、 複数のコンバータを連続的に適用する必要があります。

リスト 5 の結果を見ると、2行目から4行目までの4行が この表の見出しを表現しているようです。5列目は1行目の「(再掲)」と 2行目の「乳児死亡数」を結合した「(再掲)乳児死亡数」が正しい見出しです。 6列目は1行目が空欄ですが、前の列「(再掲)」が省略されており、 2行目の「新生児」と3行目の「の死産数」を結合した「(再掲)新生児の死産数」が 正しい見出しになります。

このような階層的な見出しは統計局の集計表によく見られるもので、 concat_title コンバータで1行にまとめることができます。

【例4】 リスト 5 の結果に concat_title を適用し、 3行の見出しを1行にまとめます。

まず concat_title を利用するタスクファイル task2.json を 作成します。

リスト 6 task2.json
1{
2    "convertor":"concat_title",
3    "params":{
4        "title_lines":3,
5        "separator":"",
6        "hierarchical_heading":true
7    }
8}

先頭の3行(title_lines =3)を区切り文字無し(separator ="")で 結合し、階層的な見出し構造に対応するために hierarchical_headingtrue をセットしています。

このタスクファイルを元のファイル ma030000.csv ではなく、 リスト 5 の結果に適用したい場合、次の2つの方法があります。

  • タスクファイルを列挙する

    Tablelinker コマンドにタスクファイルを複数指定した場合、 その順番通りにタスクファイルを適用します。

    リスト 7 task1.json と task2.json を指定
    1$ tablelinker -i ma030000.csv task1.json task2.json
    2地域,人口,出生数,死亡数,(再掲)乳児死亡数,(再掲)新生児死亡数,自 然増減数,死産数総数,死産数自然死産,死産数人工死産,周産期死亡数総数,周産期死亡数22週以後の死産数,周産期死亡数早期新生児死亡数,婚姻件数,離婚件数
    3 国,123398962,840835,1372755,1512,704,-531920,17278,8188,9090,2664,2112,552,525507,193253
    401 北海道,5188441,29523,65078,59,25,-35555,728,304,424,92,75,17,20904,9070
    502 青森県,1232227,6837,17905,18,15,-11068,145,87,58,32,17,15,4032,1915
    603 岩手県,1203203,6718,17204,8,3,-10486,150,90,60,21,19,2,3918,1679
    704 宮城県,2280203,14480,24632,27,15,-10152,311,141,170,56,41,15,8921,3553
    805 秋田県,955659,4499,15379,9,4,-10880,98,63,35,18,15,3,2686,1213
    9...
    

    2行目の先頭列は task1.json によって「地域」に変更され、 さらに task2.json によって3行分の見出しが結合されています。

  • パイプで連結する

    Tablelinker コマンドで入力ファイルを指定しない場合、 標準入力から表データを読み込みます。そのため、次のように 2つ以上の Tablelinker コマンドをパイプで連結することができます。

    リスト 8 task1.json の適用結果を入力として task2.json を適用
    1$ tablelinker -i ma030000.csv task1.json | tablelinker task2.json
    2地域,人口,出生数,死亡数,(再掲)乳児死亡数,(再掲)新生児死亡数,自 然増減数,死産数総数,死産数自然死産,死産数人工死産,周産期死亡数総数,周産期死亡数22週以後の死産数,周産期死亡数早期新生児死亡数,婚姻件数,離婚件数
    3 国,123398962,840835,1372755,1512,704,-531920,17278,8188,9090,2664,2112,552,525507,193253
    401 北海道,5188441,29523,65078,59,25,-35555,728,304,424,92,75,17,20904,9070
    502 青森県,1232227,6837,17905,18,15,-11068,145,87,58,32,17,15,4032,1915
    6...
    

    パイプで接続する場合、 Tablelinker コマンド以外のフィルタコマンド (sedgrep など)を 間に挟むこともできます。

複数のコンバータを適用するタスクファイル

複数のタスクを1つのタスクファイルにまとめることもできます。 リスト 4 ではタスクを JSON オブジェクト({ で始まり、 項目名:値 をカンマで列挙し、 } で終わる)で記述しました。 複数のタスクを記述する場合、 JSON オブジェクトを JSON 配列( [ で始まり、要素をカンマで列挙し、 ] で終わる)で並べます。

【例5】 rename_colconcat_title を1つのタスクファイルで 連続適用します。

まず以下の内容のタスクファイル task3.json を作成します。

リスト 9 task3.json
 1[
 2    {
 3        "convertor":"rename_col",
 4        "params":{
 5            "input_col_idx":0,
 6            "output_col_name":"地域"
 7        }
 8    },
 9    {
10        "convertor":"concat_title",
11        "params":{
12            "title_lines":3,
13            "separator":"",
14            "hierarchical_heading":true
15        }
16    }
17]

次に task3.jsonma030000.csv に適用します。

リスト 10 複数のタスクを含む task3.json を適用
1$ tablelinker -i ma030000.csv task3.json
2地域,人口,出生数,死亡数,(再掲)乳児死亡数,(再掲)新生児死亡数,自 然増減数,死産数総数,死産数自然死産,死産数人工死産,周産期死亡数総数,周産期死亡数22週以後の死産数,周産期死亡数早期新生児死亡数,婚姻件数,離婚件数
3 国,123398962,840835,1372755,1512,704,-531920,17278,8188,9090,2664,2112,552,525507,193253
401 北海道,5188441,29523,65078,59,25,-35555,728,304,424,92,75,17,20904,9070
502 青森県,1232227,6837,17905,18,15,-11068,145,87,58,32,17,15,4032,1915
6...

リスト 7 で2つのタスクファイルを指定した場合と 同じ結果が得られます。このように、よく利用する一連の変換処理を 1つのタスクファイルにまとめておくと、簡単に再利用できて便利です。

結果をファイルに出力

変換結果をファイルに保存するには -o または --output オプションで 保存先のファイル名を指定します。

【例6】 リスト 10 の出力を ma030000_cleaned.csv に保存します。

リスト 11 変換結果をファイルに保存
1$ tablelinker -i ma030000.csv -o ma030000_cleaned.csv task3.json
2$ cat ma030000_cleaned.csv
3地域,人口,出生数,死亡数,(再掲)乳児死亡数,(再掲)新生児死亡数,自 然増減数,死産数総数,死産数自然死産,死産数人工死産,周産期死亡数総数,周産期死亡数22週以後の死産数,周産期死亡数早期新生児死亡数,婚姻件数,離婚件数
4 国,123398962,840835,1372755,1512,704,-531920,17278,8188,9090,2664,2112,552,525507,193253
501 北海道,5188441,29523,65078,59,25,-35555,728,304,424,92,75,17,20904,9070
602 青森県,1232227,6837,17905,18,15,-11068,145,87,58,32,17,15,4032,1915
7...

コマンドラインオプション

Tablelinker コマンドは以下のオプションを指定できます。

  • デバッグモード

    -d または --debug を付けるとデバッグ情報を表示します。

  • 入力ファイル指定

    -i <file> または --input=<file> を指定すると、 標準入力ではなく <file> から表データを読み込みます。

    つまり上記の task1.json を適用する処理は、次のように 書いても同じです。

    $ tablelinker -i ma030000.csv task1.json
    
  • 出力ファイル指定

    -o <file> または --output=<file> を指定すると、 標準出力ではなく <file> に CSV データを保存します。

    デフォルトの文字エンコーディングは BOM 無し UTF-8 なので、 そのまま Excel で開くと文字化けします。 Excel で開きたい場合は --sjis オプションを指定して シフトJIS (CP932) で出力するか、 --bom オプションを指定して BOM 付きの UTF-8 で出力してください。

  • マージ指定

    -m または --merge を指定すると、出力ファイルの 末尾に追記します。列の並び、文字エンコーディング、 区切り文字は出力ファイルに合わせます。見出し行は出力しません。

    入力表データ・出力ファイルのどちらかに存在しない列が含まれていたり、 列名に表記揺れがある場合はエラーになります。

    出力ファイルが指定されていない場合は標準出力に通常通り表示しますが、 そのまま追記リダイレクト(>>)で既存ファイルに追記できるように 見出し行をスキップします。

  • クリーニング省略

    --no-cleaning を指定すると、入力表データに対する クリーニング処理を実行しません。

    入力表データが UTF-8 で記述されたカンマ区切りの CSV で あることが事前に分かっている場合、クリーニング処理を 実行しないことで使用するメモリや実行時間を節約できます。

    サンプルデータ ma030000.csv はシフトJISなので、 読み込むときにこのオプションを指定するとエラーになります。

    $ tablelinker -i ma030000.csv --no-cleaning
    Traceback (most recent call last):
    ...
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0x97 in position 0: invalid start byte
    
  • タスクをコマンドラインで指定

    -c, --convertor オプションでコンバータ名を、 -p, --params オプションでパラメータを指定すると、 タスクファイルを作らずに直接コマンドラインでタスクを指定できます。

その他の Tips

  • Excel ファイル入力

    Tablelinker コマンドの入力となる表データには Excel ファイルも 指定できます。

    $ tablelinker -i sample.xlsx task1.json
    

    Excel ファイルに複数のシートが含まれている場合は最初のシートが 選択されます。それ以外のシートを読み込みたい場合は --sheet=シート名 オプションで対象のシートを指定してください。

    $ tablelinker -i sample.xlsx --sheet=シート1 task1.json
    

    シート名には番号も指定できます(最初のシートが 0 です)。

  • タスクノート

    タスクファイルに複数のタスクを記述すると、それぞれのタスクが どんな処理をするのかコメントとして残したいことがあります。 しかしタスクファイルは JSON フォーマットなのでコメントが書けません。

    そのような場合は、 note を追加してください。 リスト 12 に例を示します。

    リスト 12 task4.json
     1[
     2    {
     3        "note": "先頭列名を「地域」に変更。",
     4        "convertor":"rename_col",
     5        "params":{
     6            "input_col_idx":0,
     7            "output_col_name":"地域"
     8        }
     9    },
    10    {
    11        "note": "先頭3行をタイトルとして結合。",
    12        "convertor":"concat_title",
    13        "params":{
    14            "title_lines":3,
    15            "separator":"",
    16            "hierarchical_heading":true
    17        }
    18    }
    19]
    

    note にコメントを書くと実行時にエラーにならないだけでなく、 処理中のタスクのコンバータ名とコメントのテキストをログ表示しますので、 各タスクの所要時間を確認する目的でも利用できます。

    $ tablelinker -i ma030000.csv task4.json -o ma030000_cleaned.csv
    2023-02-18 22:31:21,641:INFO:table:605:rename_col(先頭列名を「地域」に変更。)
    2023-02-18 22:31:21,661:INFO:table:614:rename_col 完了
    2023-02-18 22:31:21,661:INFO:table:605:concat_title(先頭3行をタイトルとして結合。)
    2023-02-18 22:31:21,661:INFO:table:614:concat_title 完了
    

見出し列のマッピング

コンバータを適用すれば表データを目的のフォーマットに変換できます。 しかし、さまざまな表データに対して個別にタスクファイルを作成するのは とても手間がかかります。

その手間を軽減するため、 Tablelinker コマンドには 「目的のフォーマットと少しだけ違う表データ」を変換するタスクファイルを 自動生成する マッピング機能 があります。

タスクファイルの自動生成

入力表データを目的のフォーマットに変換するタスクファイルを作成するには、 Tablelinker コマンドの直後に mapping を指定し、 目的のフォーマットで記述された表データ(=テンプレートファイル)を パラメータとして渡します。文法は次の通りです。

$ tablelinker mapping -i 入力ファイル テンプレートファイル

例として、ダウンロードした sightseeing.xlsx を 推奨データセットの「観光施設一覧」フォーマットに揃えることを考えます。

まず sightseeing.xlsx の見出し行を確認します。

リスト 13 sightseeing.xlsx の内容
1$ tablelinker -i sightseeing.xlsx
2観光スポット名称,所在地,緯度,経度,座標系,説明,八丈町ホームページ記載
3...

これを推奨データセットの見出し行と比較します。

リスト 14 xxxxxx_tourism.csv の内容
1$ tablelinker -i xxxxxx_tourism.csv
2都道府県コード又は市区町村コード,NO,都道府県名,市区町村名,名称,名称_カナ,名称_英語,POIコード,住所,方書,緯度,経度,利用可能曜日,開始時間,終了時間,利用可能日時特記事項,料金(基本),料金(詳細),説明,説明_英語,アクセス方法,駐車場情報,バリアフリー情報,連絡先名称,連絡先電話番号,連絡先内線番号,画像,画像_ライセンス,URL,備考
3...

最初の列の「観光スポット名称」は推奨データセット5列目の「名称」に、 2列目の「所在地」は9列目の「住所」に……と対応させる必要があります。 この対応表をマッピング機能で生成します。

リスト 15 マッピング機能
 1$ tablelinker mapping -i sightseeing.xlsx xxxxxx_tourism.csv
 2{
 3  "convertor": "mapping_cols",
 4  "params": {
 5    "column_map": {
 6      "都道府県コード又は市区町村コード": "八丈町ホームページ記載",
 7      "NO": null,
 8      "都道府県名": null,
 9      "市区町村名": null,
10      "名称": "観光スポット名称",
11      "名称_カナ": null,
12      "名称_英語": null,
13      "POIコード": null,
14      "住所": "所在地",
15      "方書": null,
16      "緯度": "緯度",
17      "経度": "経度",
18      "利用可能曜日": null,
19      "開始時間": null,
20      "終了時間": null,
21      "利用可能日時特記事項": null,
22      "料金(基本)": null,
23      "料金(詳細)": null,
24      "説明": "説明",
25      "説明_英語": null,
26      "アクセス方法": null,
27      "駐車場情報": null,
28      "バリアフリー情報": null,
29      "連絡先名称": null,
30      "連絡先電話番号": null,
31      "連絡先内線番号": null,
32      "画像": null,
33      "画像_ライセンス": null,
34      "URL": null,
35      "備考": null
36    }
37  }
38}

生成されたタスクファイルに記載されている mapping_cols コンバータは、入力表データの列を出力の列に割り当てる変換を行います。

column_map が作成された入力列と出力列の対応表です。 左側(キー)が出力列名、右側(値)が入力列名を表します。 値が null になっている列は、出力列に対応する列が入力表の列から 見つからなかったことを意味します。

リスト 15 では、「緯度」「経度」「説明」列は 同じ名前の列がテンプレートにも存在するのでそのままマップされています。 また、「観光スポット名称」列が「名称」列に、「所在地」列が 「住所」列にマップされています。

この結果をタスクファイル mapping_task.json に保存し、 sightseeing.xlsx に適用すれば一応推奨データセットフォーマットに 従った CSV ファイルを出力できます。しかし対応表をよく見ると 「都道府県コード又は市区町村コード」にマップされている 「八丈島ホームページ記載」は「URL」に割り当てる方が適切なので、 テキストエディタで以下のように修正します。

リスト 16 修正したタスクファイル mapping_task.json
 1{
 2  "convertor": "mapping_cols",
 3  "params": {
 4    "column_map": {
 5      "都道府県コード又は市区町村コード": null,
 6      "NO": null,
 7      "都道府県名": null,
 8      "市区町村名": null,
 9      "名称": "観光スポット名称",
10      "名称_カナ": null,
11      "名称_英語": null,
12      "POIコード": null,
13      "住所": "所在地",
14      "方書": null,
15      "緯度": "緯度",
16      "経度": "経度",
17      "利用可能曜日": null,
18      "開始時間": null,
19      "終了時間": null,
20      "利用可能日時特記事項": null,
21      "料金(基本)": null,
22      "料金(詳細)": null,
23      "説明": "説明",
24      "説明_英語": null,
25      "アクセス方法": null,
26      "駐車場情報": null,
27      "バリアフリー情報": null,
28      "連絡先名称": null,
29      "連絡先電話番号": null,
30      "連絡先内線番号": null,
31      "画像": null,
32      "画像_ライセンス": null,
33      "URL": "八丈町ホームページ記載",
34      "備考": null
35    }
36  }
37}

このタスクファイルを sightseeing.xlsx に適用します。

$ tablelinker -i sightseeing.xlsx mapping_task.json
都道府県コード又は市区町村コード,NO,都道府県名,市区町村名,名称,名称_カナ,名称_英語,POIコード,住所,方書,緯度,経度,利用可能曜日,開始時間,終了時間,利用可能日時特記事項,料金(基本),料金(詳細),説明,説明_英語,アクセス方法,駐車場情報,バリアフリー情報,連絡先名称,連絡先電話番号,連絡先内線番号,画像,画像_ライセンス,URL,備考
,,,,ホタル水路,,,,,,33.108218,139.80102,,,,,,,八丈島は伊豆諸島で唯一、水田耕作がなされた島で鴨川に沿って水田が残っています。ホタル水路は、鴨川の砂防とともに平成元年につくられたもので、毎年6月から7月にかけてホタルの光が美しく幻想的です。,,,,,,,,,,http://www.town.hachijo.tokyo.jp/kankou_spot/mitsune.html#01,
,,,,登龍峠展望,,,,,,33.113154,139.835245,,,,,,,「ノボリュウトウゲ」または「ノボリョウトウゲ」といい、この道を下方から望むとあたかも龍 が昇天するように見えるので、この名が付けられました。峠道の頂上近くの展望台は、八丈島で一、二を争う景勝地として名高く、新東京百景の一つにも選ばれました。眼前に八丈富士と神止山、八丈小島を、眼下には底土港や神湊港、三根市街を一望できます。,,,,,,,,,,http://www.town.hachijo.tokyo.jp/kankou_spot/mitsune.html#02,
,,,,八丈富士,,,,,,33.139168,139.762187,,,,,,,八丈島の北西部を占める山で、東の三原山に対して『西山』と呼ばれます。伊豆諸島の中では最も 高い標高854.3メートル。1605年の噴火後、活動を停止している火山で火口は直径400メートル深さ50メートルで、 さらに火口底には中央火口丘があ る二重式火山です。裾野が大きくのびた優雅な姿は、八丈島を代表する美しさのひとつです。,,,,,,,,,,http://www.town.hachijo.tokyo.jp/kankou_spot/mitsune.html#03,
...

一部手作業による修正が必要になりましたが、ゼロからタスクファイルを 作成する場合に比べるとかなり手間を削減できます。

マッピングと自動変換

リスト 15 では「八丈町ホームページ記載」列の 割り当てが自動ではうまくいきませんでした。これは正しい対応先の 「URL」という列名と入力表の「八丈町ホームページ記載」という列名が あまり似ていないことが原因です。

入力表データのフォーマットと目的のフォーマットがもっと似ていて、 列のマッピングが問題なく成功する場合は、表データの変換処理まで 自動的に行うことができます。

ダウンロードした 2311.xlsx を、推奨データセットの「観光施設一覧」の フォーマットに揃えることを考えます。

まず 2311.xlsx の見出し行を確認します。

リスト 17 2311.xlsx の内容
1$ tablelinker -i 2311.xlsx
2市区町村コード,NO,都道府県名,市区町村名,名称,名称_カナ,名称_英語,POIコード,住所,方書,緯度,経度,利用可能曜日,開始時間,終了時間,利用可能日時特記事項,料金(基本),料金(詳細),説明,説明_英語,アクセス方法,駐車場情報,バリアフリー情報,連絡先名称,連絡先電話番号,連絡先内線番号,画像,画像_ライセンス,URL,備考
3...

ほとんど推奨データセットの xxxxxx_tourism.csv と一致していますが、

  • 1列目:「都道府県コード又は市区町村コード」が「市区町村コード」になっている。

  • 17列目:「料金(基本)」が「料金(基本)」(半角カッコ)になっている。

  • 18列目:「料金(詳細)」が「料金(詳細)」(半角カッコ)になっている。

の3点が異なっています。

これぐらいの表記の揺れや列の入れ替え、一部の列の欠損ぐらいの違いならば マッピング機能で正しいタスクファイルを生成できます。

リスト 18 柳井市観光施設一覧を推奨データにマッピング
 1$ tablelinker mapping -i 2311.xlsx xxxxxx_tourism.csv
 2{
 3  "convertor": "mapping_cols",
 4  "params": {
 5    "column_map": {
 6      "都道府県コード又は市区町村コード": "市区町村コード",
 7      "NO": "NO",
 8      "都道府県名": "都道府県名",
 9      "市区町村名": "市区町村名",
10      "名称": "名称",
11      "名称_カナ": "名称_カナ",
12      "名称_英語": "名称_英語",
13      "POIコード": "POIコード",
14      "住所": "住所",
15      "方書": "方書",
16      "緯度": "緯度",
17      "経度": "経度",
18      "利用可能曜日": "利用可能曜日",
19      "開始時間": "開始時間",
20      "終了時間": "終了時間",
21      "利用可能日時特記事項": "利用可能日時特記事項",
22      "料金(基本)": "料金(基本)",
23      "料金(詳細)": "料金(詳細)",
24      "説明": "説明",
25      "説明_英語": "説明_英語",
26      "アクセス方法": "アクセス方法",
27      "駐車場情報": "駐車場情報",
28      "バリアフリー情報": "バリアフリー情報",
29      "連絡先名称": "連絡先名称",
30      "連絡先電話番号": "連絡先電話番号",
31      "連絡先内線番号": "連絡先内線番号",
32      "画像": "画像",
33      "画像_ライセンス": "画像_ライセンス",
34      "URL": "URL",
35      "備考": "備考"
36    }
37  }
38}

マッピングが成功することが分かっている場合、 mapping モードで -a または --auto オプションを指定すると、 生成したタスクファイルを出力する代わりに入力表データに タスクを適用した結果を出力します。

リスト 19 柳井市観光施設一覧を推奨データに自動変換
1$ tablelinker mapping -i 2311.xlsx -a xxxxxx_tourism.csv
2都道府県コード又は市区町村コード,NO,都道府県名,市区町村名,名称,名称_カナ,名称_英語,POIコード,住所,方書,緯度,経度,利用可
3能曜日,開始時間,終了時間,利用可能日時特記事項,料金(基本),料金(詳細),説明,説明_英語,アクセス方法,駐車場情報,バリアフ リー情報,連絡先名称,連絡先電話番号,連絡先内線番号,画像,画像_ライセンス,URL,備考
4352128,1,山口県,柳井市,白壁の町並み,シラカベノマチナミ,,,山口県柳井市柳井津,,,,月火水木金土日,,,随時見学可能,無料,,"中世の町割りがそのまま今日も生きており、約200mの街路に面した両側に江戸時代の商家の家並みが続いています。藩政時代には岩国藩のお納戸と呼ばれ、産物を満載した大八車が往来してにぎわった町筋です。
5昭和59年に国の重要伝統的建造物群保存地区に選定されました。往時の面影をしのばせる町並みで、心安らぐひとときを味わえます。",,JR柳井駅から徒歩5分。玖珂I.C.から車で約20分。,白壁周辺の観光客駐車場(無料)を使用,,柳井市経済部商工観光課,0820-22-2111,,,,,
6352128,2,山口県,柳井市,国森家住宅,クニモリケジュウタク,,,山口県柳井市柳井津467,,,,火水木金土日,09:00,17:00,年末年始休館,200,高校生以上200円、中学生以下100円,18世紀後半に建てられたもので、江戸時代中期の豪商の家造りの典型として国の重要文化財 に指定されています。細部まで往時のままに保存されており、内部見学も可能。当時の商人の暮らしぶりを、垣間見ることができます。,,JR柳井駅から徒歩5分。玖珂I.C.から車で約20分。,白壁周辺の観光客駐車場(無料)を使用,,国森家住宅,0820-22-0177,,,,,
7...

コマンドラインオプション

Tablelinker コマンドの mapping モードでは以下のオプションを指定できます。

  • デバッグモード

    -d または --debug を付けるとデバッグ情報を表示します。

  • 入力ファイル指定

    -i <file> または --input=<file> を指定すると、 標準入力ではなく <file> から表データを読み込みます。 シートを指定する場合は -s <sheet> または --sheet=<sheet> で シート名を指定できます。

  • 出力ファイル指定

    -o <file> または --output=<file> を指定すると、 標準出力ではなく <file> にタスクファイルを保存します。

  • ヘッダ列直接指定

    --headers=<headers> を指定すると、出力ファイル列名リストを テンプレートファイルの見出し行から読み込む代わりに、 文字列で直接指定できます。

    リスト 15 の例をこのオプションで実行するには 次のように指定します。

    $ tablelinker mapping -i sightseeing.xlsx --headers='都道府県コード又は市区町村コード,NO,都道府県名,市区町村名,名称,名称_カナ,名称_英語,POIコード,住所,方書,緯度,経度,利用可能曜日,開始時間,終了時間,利用可能日時特記事項,料金(基本),料金(詳細),説明,説明_英語,アクセス方法,駐車場情報,バリアフリー情報,連絡先名称,連絡先電話番号,連絡先内線番号,画像,画像_ライセンス,URL,備考'
    
  • テンプレートファイルのシート名指定

    テンプレートファイルにも Excel ファイルを利用できます。 テンプレートとして利用するシートを指定するには、

    $ tablelinker mapping -i sightseeing.xlsx \
      -t 観光施設一覧 templates.xlsx
    

    のように -t <sheet> または --template-sheet=<sheet> で シート名を指定してください。

  • マッピング自動変換

    -a または --auto を指定すると、マッピングと変換処理を 一度に行います。

    このオプションを指定した場合、通常モード コマンドラインオプション-o --output, --sjis, --bom, -m --merge オプションも利用できます。