FME Desktop クィックスタートガイド(作成時バージョン: FME 2018.1) Takashi Iijima, FME Certified Professional, pragmatica inc.
実習 3 属性の変換と属性テーブルの作成 これまでの実習と同じソースデータ"mmm20151001.shp"(Esri Shapefile 形式の市区町村区域ポリ ゴンデータ)を読み込み、いくつかの属性の変換(属性名の変更、属性の削除、文字列の書式設定、 文字列の連結)を行い、変換後のデータ(属性のみ)を Excel ファイルに出力するワークスペースを 作成します。 3-1. リーダーの追加 Workbench を起動し、実習 1 と同じ方法でソースデータを読み込むためのリーダーとリーダーフィ ーチャータイプをワークスペースに追加してください。 3-2. 属性名の変更と属性の削除 AttributeManager 実習 2 では、リーダーフィーチャータイプとライターフィーチャータイプの間で属性を直接マッピ ングしました。単にデータフォーマットを変換するだけのワークスペースならばそれで十分ですが、 読込から書出の間で何段階かのデータ変換を行う場合は、あらかじめ属性名を変更したり、不要な属 性を削除したりしておけばワークスペース全体が分かり易くなり、結果としてワークスペース作成作 業の効率があがるとともに、保守も容易になります。 今回は、ソースデータを読み込んだ直後に次のように属性名の変更と削除を行います。 ソース 変更後 NO 番号 DATE 年月日 JISCODE 市区町村コード PNAME 都道府県名 GNAME 政令市・郡・支庁・振興局名 CNAME 市区町村名 NAME (削除する) AttributeManager トランスフォーマーによって、データフローの途中でフィーチャーの属性名の変 更と削除を同時に行うことができます。。
3-2 キャンバスに現れた AttributeManager とリーダーフィーチャータイプを接続してください。 次に、AttributeManager のプロパティボタン(歯車アイコン)をクリックして、パラメーター設定 画面を開いてください。 すべてのトランスフォーマーは、少なくともひとつのパラメーター(Transformer Name)をもって います。その他のパラメーターの構成や内容は、トランスフォーマーの種類によって異なります。
AttributeManager のパラメーター設定画面の Attribute Actions(属性に対するアクション)テーブル には、初期状態で入力側の属性名が Input Attribute 列と Output Attribute 列に表示されており、それら に対するいくつかの操作(アクション: 値の設定、名前の変更、削除など)が設定できます。
属性名を変更するときは、Output Attribute 列を新しい属性名に変更するだけです。Action 列は自動 的に"Rename"(名前を変更する)に変わります。
属性を削除するときは、Action 列で"Remove"(削除する)を選択するか、または、その属性の行を 選択した状態で、左下の「-」ボタンによって削除します。
前出の表に基づく属性名の変更や削除の設定は、次のとおりです。
OK で閉じてください。 これ以降のデータフローでは、変更後の属性名によって処理ができるようになります。 属性名の変更を AttributeRenamer、属性の削除を AttributeRemover で別々に行うこともできます。 トランスフォーマーの入出力ポートには名前があり、画面上に表示されます。ただし、入力ポート がひとつだけの場合は、その入力ポートに名前はありません。今後、名前のある入出力ポートを指す ときには「<名前>ポート」と呼ぶことにします。 例えば、上記の AttributeManager の出力ポートは「Output ポート」と呼びます。
3-4
ここで、AttributeManager の Output ポートに Inspector を接続して実行してみましょう。
Transformer Gallery や Quick Add で Inspector を追加、接続しても良いですが、トランスフォーマー 名または出力ポート名が表示されている部分を右クリックして表示されるメニューで Connect Inspector を選択することによって、Inspector の追加と接続を 1 動作で行うこともできます。
この状態でワークスペースを実行すると、実行後に Data Inspector が起動し、Table View に次のよ うに表示されます。属性名の変更、属性の削除が確かに行われました。確認後、キャンバス上の Inspector は削除して構いません。
3-3. 文字列の書式設定 StringFormatter 実習 2 で確認したように、ソースデータの市区町村コード(元の属性名は JISCODE)は数値型の値 で格納されているため、何もしなければ、北海道(都道府県コード 01)から栃木県(同 09)の市区町 村コードは、先頭の 0 が省かれた 4 桁の数字となります。 市区町村コードは 5 桁の文字列(北海道~栃木県では先頭に 0 を付加する)で扱われることが多い ので、ここで、全ての市区町村コードを 5 桁に揃えるための書式設定を行います。 StringFormatter トランスフォーマーによって文字列の書式設定ができます。
StringFormatter をキャンバス追加して、AttributeManager の Output ポートに接続し、パラメーター 設定画面を開いてください。
Attributes: 書式を設定する属性(複数可)を指定します。右側の[…]ボタンをクリックすると次のよう に選択可能な属性が表示されるので、「市区町村コード」を選択して OK で閉じてください。
3-6 Format String: 書式を指定します。"05s"は、「元の文字列の文字数が 5 以上の場合はそのまま、5 に満 たない場合は不足分の 0 を先頭に付加した 5 文字の文字列」の書式を表します。 以上のパラメーター設定によって、全ての市区町村コードが 5 桁の文字列に変換されることになり ます。書式設定の詳細については、StringFormatter のヘルプを参照してください。 キャンバス上でトランスフォーマーを選択すると、Workbench のヘルプ(Help)ウィンドウにその トランスフォーマーのヘルプが表示されます。また、キャンバス上でトランスフォーマーを選択した 状態で F1 キーをクリックするか、または、パラメーター設定画面の Help ボタンをクリックすると、 別ウィンドウでヘルプが表示されます。 OK で閉じてください。
トランスフォーマーのプロパティボタンの色について StringFormatter をワークスペースに追加したとき、そのプロパティボタン(歯車アイコン)の色は 赤色でしたが、パラメーターを設定して OK ボタンで閉じた後は、トランスフォーマー本体と同じ色 に変わっていることに注意してください。赤色は必須のパラメーターが未設定の状態、本体と同じ色 はパラメーター設定済みの状態を表します。 StringFormatter パラメーター設定「前」: プロパティボタン(歯車アイコン)が赤色 StringFormatter パラメーター設定「後」: プロパティボタンはトランスフォーマー本体と同じ色 他のトランスフォーマーでは、ワークスペースに追加したときに歯車の軸の部分が黄色になってい るものもあります。 これは「未設定の必須パラメーターはないが、パラメーター設定画面が OK で閉じられていない状 態」、つまり、FME が設定した初期状態(デフォルト)で良いかどうかが未確認である(パラメータ ー設定画面が OK で閉じられていない)ことを表します。 デフォルトの設定で支障がないことが多いのですが、必ず確認することをお勧めします。
3-8 3-4. 文字列の連結 StringConcatenator
都道府県名、政令市・郡・支庁・振興局名、市区町村名を空白(半角スペース)区切りで連結した 文字列を新たに作成し、「名称」という名前の属性に格納します。
StringConcatenator トランスフォーマーによって複数の文字列を連結することができます。 StringConcatenator を追加して StringFormatter の Output ポートに接続し、パラメーターを下の図の ように設定してください。
New Attribute: 連結した文字列を格納する属性の名前を指定します。
String Parts: 連結する文字列を先頭から順番に指定します。各文字列は、String Type 列でドロップダ ウンリストからそのタイプを選択し、String Value 列で指定します。
Attribute Value タイプはフィーチャーの属性値を使用することを示し、String Value 列でその属性を 選択します。Constant タイプはキー入力した文字列を使用することを示し、String Value 列に直接そ の文字列をキー入力します。図では見えませんが、半角スペースを入力してください。
Concatenated Result: String Parts で指定した結果が表示されます。ここでの編集はできません。 @Value は FME の関数で、ワークスペースの実行時、FME によって ( ) 内に指定した属性の値に置き 換えられます。
パラメーターの設定が終わったら OK で閉じます。StringConcatenator の属性リストに「名称」とい う属性が追加されたことを確認してください。
Inspector を接続して実行すると、FME Data Inspector の Table View で変換結果が確認できます。 StringConcatenator パラメーター設定画面右下の Switch To Advanced ボタンをクリックすると Advanced モードに切り替わり、より柔軟に文字列の編集ができます。
Advanced モードにおける文字列編集部分は、他のトランスフォーマーのパラメーター設定でも共 通で使用される Text Editor と同じです。Text Editor の使用方法については次のドキュメントを参照し てください。 テキストエディタ (Text Editor) http://www.pragmatica.jp/fme/references/BasicTextEditor.html 政令市以外の市や東京特別区には政令市・郡・支庁・振興局名がない(空文字列である)ため、都 道府県名と市区名が 2 個のスペースをはさんで連結された文字列になります。 これを 1 個のスペースにしたいときは、StringReplacer トランスフォーマーによって 2 個のスペー スを 1 個のスペースに置き換えるのが簡単です。この実習では取り上げませんが、チャレンジしてく ださい。
3-10
3-5. ライターの追加(Automatic モード)と出力先スキーマの編集 (1) Excel ライターの追加
Workbench メニュー Writers > Add Writer によって Add Writer 画面を開き、Excel 形式用のライタ ーを追加します。
Excel 形式の場合、データセットはファイル、フィーチャータイプはワークシートに対応します。 Dataset フィールドには出力先 Excel ファイルのパスを指定してください。
実習 2 で MITAB ライターを追加したときは Add Feature Type(s)として Manual を選択しましたが、 今回は Automatic を試します。
Automatic の場合は、キャンバス上でリーダーフィーチャータイプまたはトランスフォーマーの出力 ポートにこのライターフィーチャータイプを接続したときに、接続元の属性リストが自動的にコピー されるという働きをします。
Add Writer 画面を OK で閉じてください。Feature Type Properties 画面が表示されるので、フィー チャータイプ名(Sheet Name)を適切な名称(例えば「全国市区町村」)に変更してから OK で閉じ ます。
キャンバスには次のライターフィーチャータイプが現れます。
Navigator ウィンドウで、次のように Excel ライター"20151001 全国市区町村[XLSXW]"が追加され たことを確認してください。
ライターには、パラメーターによって動作の方法を調整できるものがあります。パラメーターの構 成や内容はフォーマットによって異なります。
Excel ライターの Overwrite Existing File パラメーターは、指定された出力先データセット(ファイ ル)が既に存在する場合に、ワークスペース実行時にそれを上書きする(Yes)/ しない(No)をコン トロールします。 デフォルトは No で、ワークスペースを実行したときに既存のファイルがあった場合は、ワークスペ ースから出力されたデータがそれに追記されることになります。これを Yes に変更すると、ワークス ペースを実行するたびに新たなファイルで上書きされます(既存のファイルは失われます)。 パラメーターの値を変更するには、Navigator に表示されているパラメーター名の右クリックメニュ
3-12
(2) ライターフィーチャータイプの接続と出力先スキーマの編集
キャンバス上のライターフィーチャータイプオブジェクトを適当な位置に移動して、その入力ポー トと StringConcatonator の Output ポートを接続してください。
次の図のように接続元=StringConcatenator の属性リストがライターフィーチャータイプに自動的に コピー、マッピングされた状態になります。これが、ライターを追加する際に Add Feature Type(s)と して Automatic を選択した場合の働きです。Manual(実習 2)との違いに注意してください。 ただし、出力先フィーチャータイプのスキーマ(属性の構成、属性名、データ型、順番など)がこ のままで良いとは限りません。特に、ソースデータセットで定義されている属性名と異なる名前の属 性については、データ型を編集しなければならないケースが多いです。 ここでは例として、次のようにデータ型を編集することにします。 1)「番号」のデータ型を数値型(number)に指定する。 2)「年月日」のデータ型を日付型(date)に指定する。 3) その他の属性のデータ型を文字列(string)に指定する。
ライターフィーチャータイプのプロパティボタンをクリックして、Feature Type 画面を開き、User Attributes タブを表示してください。
Attribute Definition が Automatic の状態では編集できませんが、次のように Manual に変更すると、 編集できるようになります。
3-14 各属性のデータ型(Type)を次の図のように変更します。データ型は Type 列各欄のドロップダウン リストで選択できます。 Cell Width 列の値は出力先の列幅を意味しており、それを編集することもできます。 OK で閉じれば、ワークスペースは完成です。ワークスペースを実行し、作成されたファイルを Excel で開いて処理結果を確認してください。 (以下略) 実習 3 はここまでです。主に次の事項を学びました。 ・属性名の変更 AttributeManager ・属性の削除 AttributeManager ・文字列の書式設定 StringFormatter ・文字列の連結 StringConcatenator ・ライターの追加(Automatic モード)と出力先スキーマ(データ型)の編集
日付/時刻型の取り扱い 属性のデータ型として日付型、日付時刻、時刻型(以下「日付/時刻型」と総称)をサポートしてい るフォーマットは数多くありますが、FME の内部の処理では、日付や時刻はすべて文字列として取り 扱われます。 リーダーがソースデータから日付/時刻型のデータを読み込んだときは、原則として次のいずれかの 書式の文字列に自動的に変換されます。 YYYYmmdd YYYYmmddHHMMSS YYYYmmddHHMMSS.nnn… HHMMSS HHMMSS.nnn… YYYY:西暦年、mm:月(01~12)、dd:日(01~31) HH:時(00~23)、MM:分(00~59)、SS:秒(00~59)、nnn:ミリ秒(0~999…) 時刻の後に、"+/-hh"または"+/-hh:mm"の書式でタイムゾーンが付加されることもあります(例えば、 日本標準時の場合は"+09"または"+09:00")。 日付/時刻型の値が上記のうちどの書式で読み込まれるかは、フォーマットによって異なります。ワ ークスペースにリーダーを追加した後、リーダーフィーチャータイプに Inspector や Logger を接続し て実行し、確認しておくのが良いでしょう。 出力先データセットに書き出すときは、日付/時刻型の属性の値を上記書式で整えれば、ライターが 出力先のフォーマットで定義された日付/時刻型のデータに自動的に変換します。 実習 3 のソースデータの年月日(元の属性名は DATE)は文字列型(char)でしたが、データの内 容は YYYYmmdd 形式の文字列"20151001"だったので、その書式には何も手を加えず、Excel ライタ ーによって Excel の date 型の属性にそのまま出力することができました。
3-16 Excel の書式設定
Excel ライターフィーチャータイプの Feature Type 画面 User Attributes タブで、各属性の Formatting 列の Edit ボタンをクリックすると書式設定画面が開き、出力先ワークシートの書式を列単位で設定す ることができます。 例えば「年月日」属性について次のように設定すると、ワークシートの「年月日」は"2010/10/01" と表示されるようになります。 Custom: yyyy/mm/dd その他の使用可能な書式については、Excel の セルの書式設定 > 表示形式 > ユーザー定義 など を参照してください。