Alteryxでのデータの型とその役割

こんにちは、小澤です。

Alteryxではデータの型によって使える機能・使えない機能が変わってきたり、同じ計算でも結果が変わったりするため、 どの列がどの型になっているのか意識しておく必要のある場面が出てきます。 とはいえ、「どの型がどういう性質なのか」と問われるとなかなかわからない場面もありますよね?

というわけで、今回はAlteryxでのデータの型について解説します。

データの列と型

最初に解説しておくと、Alteryxでは列単位で同じ型でなければなりません。 これは、ある列に数値と文字列両方を含めるなどのことはできないということです。

例えば、以下のようなデータであればID列には数値、Name列には文字列のみを入れれることになります。

このデータに対して、ID列に文字列を入れると、列全体が文字列となります。 Name列にSpatial Objectを入れようとすると、JSON形式に変換された文字列となり以降はSpatial Objectの入力を必要とするツールでは扱えない状態となります。

また、相互に変換できないような型変換を行うような場合に発生するのがField Conversion Errorとなっています。

型名と役割を見ていく

Alteryxで利用可能な型は以下のような種類に分類できます。

  • 真偽値型
  • 数値型
  • 文字列型
  • 日時
  • 地理空間(Spatial)

この中でも種類の多い数値と文字列を中心にみていきましょう。

数値型

数値型はその名の通り、データを数値として扱います。 1 + 1を計算して2を出力するような、数学的な演算を行うためのものとなります。

数値型には以下のようなものがあります。

  • Byte
  • Int16
  • Int32
  • Int64
  • Float
  • Double
  • Fixed Decimal

上から順にByteからInt64までは整数のみを扱う型です。 それぞれの違いは以下のようになります。

サイズ 内容
Byte 1バイト 0 ~ 255までの範囲の整数
Int16 2バイト –32768 ~ 32767の範囲の整数
Int32 4バイト –2147483648 ~ 2147483647の範囲の整数
Int64 8バイト –9223372036854775808 ~ 9223372036854775807

Byteではマイナスの値は扱えません。 それ以外についてはマイナスも扱えますが、利用可能な数値の範囲に違いがあります。 Int64に至っては特殊な用途を除けば、この範囲に収まらない数値を扱うことはまずないでしょう。

であれば、常にInt64使っとけばいいんじゃね?と思う型もいるかもしれませんが、 実は扱える範囲が広いほどデータサイズも大きくなります。

1件当たりのサイズではそれほど影響はなさそうですが、 Alteryxではデータ分析を行うという性質から大量のデータをまとめて読み込むことが多いです。 そのため、例えば10億件データあった場合、Byte型であれば10億バイト(=1GB)ですみますが、 Int64を使うと80億バイト(=8GB)となります。 1GBであれば現代のPCのメモリ量で困ることはあまりないでしょうが、8GBを全件メモリに乗せたいとすると16GBのメモリを積んだPCを用意するなどの必要があります(※ データ本体以外のオーバーヘッドやAlteryx以外が使う領域もあるためメモリが8GBだと乗り切らない)。

そのため、扱うデータ内の数値がどの範囲に収まるかを考えて適切なサイズにしてやることが処理を効率化させるために有効となります。

続いて、Float以降については小数部分も含めて扱える数値型になります。

サイズ 内容
Float 4バイト ±3.4 x 10^-38 ~ 3.4 x 10^38の範囲で7桁精度
Double 8バイト ±1.7 x 10^-308 to 1.7 x 10^308の範囲で15桁精度

浮動小数点型はコンピュータでの扱い方を知っていないと、実際に扱える範囲の数値で痛い目を見ることもあります。 これらの数値範囲は整数型と異なり、単純に扱える数値の範囲のみでなく、小数点以下を何桁の精度まで表せるかなどにもかかわってきます。 ただし、これをちゃんと理解するには専門的な知識も必要になってくるため

  • 小数を含む値を使える
  • サイズの考え方は整数と同じ

くらいのノリでいったんはとらえておくといいかと思います。

また、もう一点、計算結果に誤差が生じることがあるという点にご注意ください。

文字列型

文字列型はV_が付く/付かない、Wが付く/付かないの組み合わせで4パターンあります。 これらの違いを解説するために、簡単にコンピュータ上での文字列の扱いについて解説しておきます。

コンピュータ上で文字を扱うのには、文字コードと呼ばれる特定の文字とそれに対応した数値の組み合わせが定義されています。

一部の例をあげると以下のような対応関係が決められています。

文字 文字コード
A 65
B 66
... ...
Z 90
a 97
b 98
... ...

文字列型は文字数分の文字コードの値が並んだものが実際の文字列型となっています。

さて、ここで先ほどの整数型のサイズの話を思い出してください。 英語圏で利用する半角英数のみであれば文字の種類が少ないのでByte型を使っても全パターン網羅できそうですね。 ところが、日本語や中国語のような文字種が多い言語になると一対一の対応関係を定義するにはByte型では足りません。 そのため、Int16やInt32のような型を持ち出す必要がありそうです。

では、ここでAlteryxの文字列型の話に戻りましょう。

まずAlteryxにおける文字列型のWの有無は英語以外の文字を扱うか否かとなります。 Wが付かないStringV_String型は1文字1バイトとして半角英数のみを扱う型になります。 一方Wが付くWStringV_WString型は日本語などにも対応したため複数バイトを使って1文字を表すための型となります。

続いて、V_の有無については、"固定長"か"可変長"かというものになります。 V_が付かないStringWStringは文字列の長さを固定で決めます。 例えば100文字分とサイズを指定していれば、実際に入っているデータが10文字だろうと90文字だろうと常に100文字分のデータとなります。 一方V_がついているV_StringV_WStringは可変長となっており、実際の文字数に応じてサイズも変わってくる、というものになります。

これをAlteryxで確認したものが以下のワークフローになります。

元のデータは以下のようになっています。

Text Inputツールは利用可能な最小の型で認識されるので、最初データはWString型でサイズが1となっています。 日本語1文字には3バイト必要で、それが3件ということで9バイト出力されています。

それに対して、続く2つのSelectツールでは、それぞれ、上がWStringでサイズが16384、下はV_WStringでサイズは同じく16384、というような型変換をしています。

それぞれの出力のデータサイズは98.3KBと24バイトとなっています。 上側は全データが固定でサイズ16384のため、非常に大きくなっているのがわかるかと思います。 一方下側はV_が付くことによるオーバーヘッド分、元の9バイトよりもデータ量は多くなっているものの、サイズ分全体が確保されているわけではないことがわかります。

まとめると、文字列型は以下のようになります。

扱える文字種 サイズ 1文字当たりのサイズ
String 半角英数のみ 固定長 1バイト
WString 日本語も含む 固定長 3バイト
V_String 半角英数のみ 可変長 1バイト
V_WString 日本語も含む 可変長 3バイト

また、文字列型を扱う上での注意点を2点あげておきます。

  • V_のつく文字列の場合でも利用可能な最大文字数としてサイズを指定する項目があります。 長い文字列を扱う場合にはそちらもご注意ください。
  • 文字列同士の足し算は結合となります。"じょん"+"すみす"="じょんすみす"となる感じです。 これは便利ですが数値が文字列になっている場合、"1"+"1"="11"のようになるので計算したい場合は必ず数値型を使ってください。

日時型

日時を扱う型についても見ておきましょう。 これには以下の3つがあります。

扱う対象
Date 日付 2019-02-01
Time 時刻 10:32:49
DateTime 日付と時刻両方 2019-02-01 10:32:49

これらは、日時を扱うために特化した型であり、DateTime系の関数を使って専用の計算ができます。 "月末の日付を求める"など、やろうと思えば自力でやることも可能だけど考慮する点が多くて大変な処理をいい感じに行ってくれるわけです。

日時型を扱う際に注意しなければならない点が1つあります。 これらの型は日時計算をするためのものであって、どう表示するかとは分けて考える必要があります。 これらの型のデータをそのままAlteryx上のBrowseツールで確認するとISO8601で定義された国際規格の形式で表示されます。 これをどのような形式で出力したいか、という部分は日時型の扱いとの話と異なるため、 "どのようなフォーマットで文字列型"にするかを考える必要があります。

そのため、特定のフォーマットで記述された日付情報をDate型で扱うにはフォーマットを指定して文字列から変換する必要がありますし、特定のフォーマットで出力したい場合はそれを指定してDateから文字列に変換する必要があります。

その他の型

数値と文字列以外はそれほど説明が必要って感じではないでしょうが、リストアップしておきます。

役割
Bool TrueまたはFalseのどちらかを扱う真偽値型
SpatialObj 地理空間情報のPoint(点)、Line(線)、Polygon(面)を扱う専用の型
Blob バイナリ形式のデータ。画像や機械学習モデルなどが該当

結局どの型を選ぶのが適切なの?

とりあえず以下のようにしとけばいいと思います。

  • 整数のみ : Int32
  • 実数も扱う : Double
  • 文字列 : V_WString
  • 日付を「/」区切りでだしたい : Dateから文字列に変換

おわりに

今回はAlteryxにおけるデータの型について解説しました。 なんかいい感じに計算してくれないから変換したいんだけど、型の種類が多くてわからないよ~ って場合などでお役立てください。

Alteryxの導入なら、クラスメソッドにおまかせください

日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。

alteryx_960x400