2015-07-15

複数テーブルの統合と重複レコードの除外

共通のレコードを持つ複数の Excel ワークシートについて、重複レコードを除外してひとつのテーブルに統合するワークスペース例を掲げます。後半では要件を追加し、ワークスペースを修正(再利用)します。
FME 2015.1.0.3 build 15485

=====
総務省サイトで公開されている全国地方公共団体コード表(Excel形式)には次の2表(ワークシート)が含まれている。
(a) H26.4.5現在の団体
(b) H26.4.5政令指定都市
両方に政令指定都市(札幌市、仙台市など)の行があるが、(a) にはそれらの「区」の行はなく、「区」の団体コードは (b) に記録されている。各政令指定都市の行は重複させずにこれらの2表を統合することにより、(a) に政令指定都市の「区」の行を挿入した表を作成する。

ソースデータ
総務省 > 政策 > 地方行財政 > 電子自治体 > 全国地方公共団体コード よりダウンロードした全国地方公共団体コード表(平成26年4月5日現在、平成27年4月1日時点における最新)Excelファイル
データファイル名: 000318342.xls
全ての地方公共団体は、団体コードによって一意に識別できる。
注: 上記サイトで公開されているコード表は、変更があったときに更新されることがある。
=====

FMEワークスペース例












[XLSXR] リーダー: Excel のワークシートを読み込む。
AttributeRenamer: 属性名を変更する(2表共通の属性は同じ名前にする)。
StringFormatter: 団体コードの書式を整える(検査数字を含む6桁)。
DuplicateRemover: 団体コードが重複するフィーチャーを除外する。
Sorter: 団体コードの昇順でソートする。
[XLSXW] ライター: Excel ファイルの「全国地方公共団体コード」ワークシートに出力する。

Excel 形式の場合、ブック(ファイル)がデータセット、ワークシートがフィーチャータイプ、ワークシートの各行(レコード)がフィーチャーとして取り扱われます。リーダーをワークスペースに追加する際に Add Reader 画面でソースデータセット(Excelファイル)を指定した後、パラメーター設定画面によって読み込むべきワークシートを選択することや、ワークシートごとに列名の行や読み込む範囲を指定することなどができます。

XLSXR リーダーパラメーター設定画面
左: 「H26.4.5現在の団体」シートについての設定内容
右: 「H26.4.5政令指定都市」シートについての設定内容



























Field Names Row: 列名の行の指定
列名(属性名)として使用する内容が記述されている行の行番号を指定できます。列名の行がないときは空欄にします。列名の行を指定しなかった場合の全ての列、及び、指定した場合でも列名のセルがブランクである列については、Excel の列名(A, B, C ...)が属性名となります。

Cell Range: 読込範囲の指定
読込範囲の左上セルと右下セルの位置を "[列名][行番号]:[列名][行番号]" の形式で指定できます。指定する必要がない要素は省略できます。この例では、
- 「H26.4.5現在の団体」シートについて "2:E" (2行目以降データがある全ての行のE列までの範囲)
- 「H26.4.5政令指定都市」シートについて ":C" (データがある全ての行のC列までの範囲)
を指定しています。

このワークスペースでは、2つのリーダーフィーチャータイプ(ワークシートに対応する)で読み込んだフィーチャー(レコード)を、AttributeRenamer の入力ポートでひとつのデータフローに合流させています。このようにデータフローをトランスフォーマーやライターフィーチャータイプの入力ポートで単純に合流させたときは、個々のフィーチャーには何の変更も加えられず、到着順に接続先のトランスフォーマー等に入力されます。フィーチャーの流れが合流するだけであって、合流地点においてフィーチャー間の比較、結合などの処理は一切行われません。

AttributeRenamer は属性名を変更するトランスフォーマーで、パラメーター設定画面の Old Attribute (変更前の属性名) 列と New Attribute (変更後の属性名) 列で変更前後の属性名の対応を定義します。
Default Value (デフォルト値) 列では、変更前の属性が存在しないときに変更後の属性に与える値を設定できますが、この例では2つのフィーチャータイプの属性名を一緒に変更しており、一方には存在しない属性でも変更後は共通の属性名とするものについてデフォルト値で上書きしてしまわないように、<No Action> (何もしない、つまり、存在しないままにしておく)にしました。

AttributeRenamer パラメーター設定画面



















DuplicateRemover は、個々の入力フィーチャーについて Key Attributes パラメーターに指定された属性の値を調べ、入力順で初めて現れた値を持つフィーチャーを Unique ポート、2回目以降のフィーチャーを Duplicate ポートから出力します。ここでは「団体コード」について調べているので、Unique ポートから出力されるフィーチャーのみを使用することにより、2表にあった政令指定都市レコードをユニークにすることができます。

DuplicateRemover パラメーター設定画面











結果: FME Data Inspector の Table View での表示
札幌市の各区の行が、(b) 「H26.4.5政令指定都市」シートから読み込まれて挿入されたレコードです。元の表に都道府県名、都道府県名仮名に相当する列がないため、「区」はそれらの属性を持ちません。Data Inspector では、存在しない属性は図のように <missing> で表示されます。


























ワークスペースの再利用

ここまでで当初の要件である「重複レコードを除外して2表を統合する」ことは達成されましたが、結果表を眺めると、次の要件を追加したくなります。
1. 政令指定都市の「区」の行にも都道府県名、都道府県名仮名を与える
2. 半角カタカナの都道府県名仮名、市区町村名仮名をひらがなに変換する

ワークスペースはファイル(*.fmw)に保存できるので、要件の変更や追加があった場合には、元のワークスペースを再利用して変更・追加があった部分だけを修正することによって対応できます。

修正後のFMEワークスペース例(一部)
Sorter とライターフィーチャータイプの間に AttributeCreator, 2個の StringPairReplacer を挿入




















1. 政令指定都市の「区」の行にも都道府県名、都道府県名仮名を与える
結果表は団体コードによってソートしてあるので、「区」の前には必ず (a) 「H26.4.5現在の団体」シートから読み込まれた政令指定都市の行があり、その行には都道府県名と都道府県名仮名の値があります。したがって、「区」の行のそれらの列について、ひとつ前の行の値をコピーすることを順次繰り返せば、都道府県名、都道府県名仮名を埋めることができます。
これは、AttributeCreator の Enable Adjacent Feature Attributes (フィーチャーの入力順で前後のフィーチャーの属性値の参照を可能にする)オプションと、Conditional Value (条件別の値)設定によって行うことができます。
具体的には、Sorter の後に AttributeCreator を挿入して次のようにパラメーターを設定すると、「都道府県名がブランクならばひとつ前のフィーチャーの都道府県名をコピーし、ブランクでなければ何もしない(現在持っている都道府県名を維持する)」という処理ができます。
右下の Parameter Condition Definition 画面に見える feature[-1] がひとつ前のフィーチャーを意味し、そのフィーチャーについて、ドットをはさんで連結した名前の属性が参照できます。また、<No Action> は何もしないことを意味します。

AttributeCreator パラメーター設定画面























2. 半角カタカナの都道府県名仮名、市区町村名仮名をひらがなに変換する
半角カタカナをひらがなに変換する処理は、StringPairReplacer によって行うことができます。

StringPairReplacer パラメーター設定画面(都道府県名仮名)

















StringPairReplacer は、Source Attribute パラメーターで選択した属性文字列について、Replacement Pairs パラメーターで指定したルール(変換前と変換後の文字列のペア)に基づいて変換した結果を、Result Attribute パラメーターで指定した名前の属性に格納します。Replacement Pairs に次のように半角カタカナとひらがなのペアを半角スペースや改行で区切って列挙すれば、半角カタカナの地方公共団体名をひらがなに変換できます。
-----
ガ が ギ ぎ グ ぐ ゲ げ ゴ ご ザ ざ ジ じ ズ ず ゼ ぜ ゾ ぞ
ダ だ ヂ ぢ ヅ づ デ で ド ど バ ば ビ び ブ ぶ ベ べ ボ ぼ
パ ぱ ピ ぴ プ ぷ ペ ぺ ポ ぽ
ア あ イ い ウ う エ え オ お カ か キ き ク く ケ け コ こ
サ さ シ し ス す セ せ ソ そ タ た チ ち ツ つ テ て ト と
ナ な ニ に ヌ ぬ ネ ね ノ の ハ は ヒ ひ フ ふ ヘ へ ホ ほ
マ ま ミ み ム む メ め モ も ヤ や ユ ゆ ヨ よ
ラ ら リ り ル る レ れ ロ ろ ワ わ ヲ を ン ん ッ っ ャ ゃ ュ ゅ ョ ょ
-----
各ペアは記述順に評価されるので、濁点、半濁点がある仮名(半角カタカナで2文字のもの)を先に記述しています。
地方公共団体名では現れない ァ ィ ゥ ェ ォ などは省略しています。

仮名変換は「FMEサポート > 国内データ変換のサポート」ページで公開している JpCharacterWidthChanger カスタムトランスフォーマーでもできます。

修正後の結果: FME Data Inspector の Table View での表示

























0 件のコメント:

コメントを投稿