Skip to content

列型の仕様

データ内の各列には必ずが付与され、その列の性質を表現します。
型があることで、各列の状態を健全に保つことができます。


型の種類

データソース、分析プロジェクトにおける列の型を説明します。

数値型

数値のみで構成される列に付与可能な型であり、数値演算が可能になります。 数値型列には、下記のアイコンが付与されます。

型アイコン

小数の計算で生じる誤差

小数の計算では、結果の末尾にごくわずかな誤差が現れることがあります。

計算nehan での結果
0.1 + 0.20.30000000000000004
0.3 - 0.10.19999999999999998
1.1 * 33.3000000000000003
0.3 / 0.12.9999999999999996
なぜ起きるのか

数値は内部で 2 進数として保持されます。
2 進数で正確に表せるのは0.50.250.125のように2 で割り切れる小数だけで、0.10.2のような日常的な小数は正確に表せません。
そのため、計算のたびにごく小さな差が生まれます。

誤差が出ない場合もあります

正確に表せない値を使っても、必ず誤差が現れるわけではありません。
例えば0.1との足し算では、結果に誤差が現れるのは相手が0.20.7のときだけで、0.30.4との足し算は0.40.5とちょうどの値になります。

どの組み合わせで誤差が現れるかを事前に見分けることはできません。 小数を扱う際は、常に誤差が生じうるものとしてお考えください。

整数の場合

整数は 9,007,199,254,740,992(約 9007 兆) までは正確に扱えます。
これを超えると整数でも正確でなくなり、例えばこの値に 1 を足しても結果は変わりません。

対処方法
  • 小数を比較する場合は、数値列の端数処理で丸めてから比較してください
  • 小数どうしを「等しい」条件で比較すると、見た目が同じでも一致しない場合があります
  • 桁数の多い ID や会員番号は、数値型ではなく文字列型のまま扱ってください

保持できる小数の有効数字は 17 桁までで、それを超える精度は失われます。
文字列型に変換したときの表記は文字列型に変換したときの表記を参照してください。

文字列型

どんな値の列にも付与可能な型であり、列内の値を文字として扱うことで、文字列の結合や置換が可能です。
最も汎用性が高い型であり、全ての列は文字列型に変換が可能です。
文字列型列には、下記のアイコンが付与されます。

型アイコン

日付型

日付のみで構成される列に付与可能な型であり、2022-01-01のように、

  • 4 桁の年
  • 2 桁の月
  • 2 桁の日

をハイフンで繋いだ形式で表記されます。 なお、nehan で扱える日付の範囲は 1677-09-22 ~ 2262-04-11 です。 日付型列には、下記のアイコンが付与されます。

型アイコン

時間型

時間を表す列に付与可能な型であり、12:34:56のように、

  • 2 桁の時
  • 2 桁の分
  • 2 桁の秒

をコロンで繋いだ形式で表記されます。 またに関しては、小数点以下の値を含めることができ、例えば12:34:56.789のような表記も可能であり、小数点以下の値は下 6 桁まで表示され、それ以下は切り捨て表示されます。 なお、nehan で扱える時間の範囲は 00:00:00.000000 ~ 23:59:59.999999 です。 時間型列には、下記のアイコンが付与されます。

型アイコン

小数秒の精度

時間型・日付時間型への変換では、小数秒は 1 桁から 9 桁まで受け付けます。
ただし保持されるのは 6 桁(マイクロ秒)までで、7 桁目以降は切り捨てられます。

12:34:56.1 → 12:34:56.100000
12:34:56.1234 → 12:34:56.123400
12:34:56.123456 → 12:34:56.123456
12:34:56.123456789 → 12:34:56.123456 ← 下 3 桁は切り捨て

10 桁以上の小数秒は変換できません。

日付時間型

日付と時間の両方を含む列に付与可能な型であり、2022-01-01 12:34:56のように、日付型と時間方をスペースで繋いだ形式で表記されます。
なお、nehan で扱える日付時間の範囲は 1677-09-21 00:12:43.145225 ~ 2262-04-11 23:47:16 です。
日付時間型列には、下記のアイコンが付与されます。

型アイコン

型変更で扱える文字列パターン

文字列型の列を日付型・日付時間型・時間型に変更する際、どのような文字列を変換できるかを示します。
この仕様は、データソースの列型変更と、分析プロジェクトの列の型変更に共通して適用されます。

形式を指定しない場合、nehan が値から形式を自動で判定します。
自動で判定できない形式でも、日付形式を指定することで変換できます。指定方法は日付フォーマットの仕様を参照してください。

日付型に変更する

形式を指定せずに変換できる

分類
区切りあり2024-01-15 2024/01/15 2024.01.15
ゼロ埋めなし2024-1-5 2024/1/15
区切りなしの 8 桁20240115
日-月-年15-01-2024 15/01/2024 15.01.2024
月/日/年01/15/2024
英語の月名Jan 15 2024 15-Jan-2024 January 15 2024 15 Jan 2024 Mon Jan 15 2024
日付時間(時刻は切り捨て)2024-01-15 10:30:00 2024-01-15T10:30:00 2024-01-15T10:30:00Z

形式の指定が必要

指定する形式
2024-01%Y-%m
2024/01%Y/%m
202401%Y%m
2024%Y
2024年1月15日 2024年01月15日%Y年%m月%d日
24-01-15%y-%m-%d
1/15/24%m/%d/%y

変換できない

理由
2024-13-01 2024-02-30存在しない日付
1705276800Unix 時間
45306表計算ソフトのシリアル値
2024-01-15全角数字
2024-01-15(月)曜日などの余分な文字を含む

扱える日付の範囲を超えた値も変換できません。範囲は日付型を参照してください。

日付時間型に変更する

形式を指定せずに変換できる

分類
区切りあり2024-01-15 10:30:00 2024-01-15T10:30:00 2024/01/15 10:30:00
ゼロ埋めなし2024/1/15 10:30
秒なし2024-01-15 10:30
小数秒あり2024-01-15 10:30:45.1 2024-01-15 10:30:45.123456
タイムゾーンあり2024-01-15T10:30:00Z 2024-01-15T10:30:00+09:00
日付のみ(時刻は 0 時)2024-01-15

形式の指定が必要

指定する形式
20240115103045%Y%m%d%H%M%S
20240115 103045%Y%m%d %H%M%S
2024年1月15日 10時30分45秒%Y年%m月%d日 %H時%M分%S秒

変換できない

理由
10:30:00時刻のみで日付の情報がない
2024-01-15 25:00:0024 時以上の時刻
1705276800Unix 時間

時間型に変更する

形式を指定せずに変換できる

分類
時分秒12:34:56 00:00:00 23:59:59
秒なし12:34 0:00
ゼロ埋めなし1:05:00
小数秒あり12:34:56.1 12:34:56.123456
タイムゾーンあり12:34:56+09:00
日付時間(日付は切り捨て)2024-01-15 12:34:56

形式の指定が必要

指定する形式
12時34分56秒%H時%M分%S秒
123456%H%M%S
01:34:56 PM%I:%M:%S %p

変換できない

理由
24:00:00 25:00:0024 時以上の時刻
12:34:56.123456789012小数秒が 10 桁以上

列の中で形式が混在する場合

1 つの列に複数の形式が混ざっていても、行ごとに判定して変換されます。
形式を揃えるための前処理は不要です。

変換できない値が 1 つでも混ざるとエラーになりますが、エラーを無視するを有効にすると、変換できなかった値だけが欠損値になり処理は完了します。
欠損値が混ざっていてもエラーにはなりません。

日付型に変更する場合

列の中身結果
2024-01-152024/01/15どちらも 2024-01-15
2024-01-152024.01.15どちらも 2024-01-15
2024-01-1520240115どちらも 2024-01-15
2024-01-152024-1-52024-01-15 と 2024-01-05
2024-01-15Jan 15 2024どちらも 2024-01-15
2024-01-1515-01-2024どちらも 2024-01-15
2024-01-152024-01-15 10:30:00どちらも 2024-01-15(時刻は切り捨て)
2024-01-15 と欠損値2024-01-15 と欠損値(エラーにならない)
2024-01-152024-01エラー2024-01が変換できない)
2024-01-152024エラー2024が変換できない)

日付時間型に変更する場合

列の中身結果
2024-01-15 10:30:002024-01-15T10:30:00どちらも 2024-01-15 10:30:00
2024-01-15 10:30:002024/01/15 10:30どちらも 2024-01-15 10:30:00
2024-01-15 10:30:45.12024-01-15 10:30:45.123456小数秒の桁が違っても変換できる
2024-01-15T10:30:00Z2024-01-15 10:30:00どちらも 2024-01-15 10:30:00
2024-01-15 10:30:002024-01-1510:30:00 と 00:00:00(時刻は 0 時になる)
2024-01-15 10:30:00 と欠損値エラーにならない
2024-01-15 10:30:0010:30:00エラー(時刻のみは変換できない)
2024-01-15 10:30:002024-01-15 25:00:00エラー(24 時以上は変換できない)

時間型に変更する場合

列の中身結果
12:34:5612:3412:34:56 と 12:34:00
12:34:5612:34:56.123小数秒の有無が違っても変換できる
12:34:562024-01-15 12:34:56どちらも 12:34:56(日付は切り捨て)
12:34:5612:34:56+09:0012:34:56 と 03:34:56(UTC に変換される)
12:34:56 と欠損値エラーにならない
12:34:5625:00:00エラー(24 時以上は変換できない)
12:34:5612時34分56秒エラー(和文表記は形式の指定が必要)

時系列型どうしの相互変換

すでに日付型・日付時間型・時間型が付与されている列を、別の時系列型に変更できるかを示します。

変換元\変換先日付型日付時間型時間型
日付型-できる(時刻は00:00:00できる(すべて00:00:00
日付時間型できる(時刻を切り捨て)-できる(日付を切り捨て)
時間型できないできない-

どの型の列も、文字列型には変換できます。


文字列型に変換したときの表記

どの型の列も文字列型に変換できますが、変換後の見た目が元の表示と変わる場合があります。
文字列型に変換したうえで文字列の結合や置換を行う場合は、以下に注意してください。

数値型から

数値型を文字列型に変換すると、値によっては指数表記1e-05のような表記)になります。
指数表記になっても数値そのものは変わりません。表記だけが変わります。

元の値変換後の文字列説明
11整数値は全桁で出力される
100000000000000000000100000000000000000000大きな整数値も全桁で出力される
0.10.1小数はそのまま
0.00010.0001そのまま
0.000123450.00012345そのまま
0.000011e-05指数表記になる
0.00001231.23e-05指数表記になる
1.71e+381.71e+38指数表記になる

日付型・日付時間型・時間型から

元の値変換後の文字列
日付型2024-01-152024-01-15
日付時間型2024-01-15 10:30:452024-01-15 10:30:45
日付時間型2024-01-15 10:30:45.1232024-01-15 10:30:45.123
日付時間型2024-01-15 00:00:002024-01-15 00:00:00
時間型10:30:4510:30:45
時間型10:30:45.12310:30:45.123

小数秒を持つ値は、小数秒を含んだ文字列になります。
日付時間型は時刻が 0 時でも00:00:00が付きます。


列型の自動付与

ユーザーが任意の型を付与せずとも、nehan では列の値に応じて自動で型が付与されます。
自動型付けはデータソースの読み込み時、および分析プロジェクト内でのデータ処理時に行われます。

ファイル系データソース読み込み時

CSV ファイルなどを読み込むと、列の値を見て型が決まります。
判定はファイルの先頭 1,000,000 行までの値をもとに行われます。

列の値付与される型補足
すべての値が数値数値型
数値でない値が 1 つでもある文字列型
2024-01-15文字列型日付型にするには列型変更が必要
10:30:00文字列型時間型にするには列型変更が必要
20240115数値型8 桁の数字は日付ではなく数値として扱われる
true / false文字列型
すべて空文字列型

日付として扱いたい列や、先頭の 0 を保ちたい列は、データソースの列型変更で型を固定してください。
どのような文字列がどの型に変換できるかは型変更で扱える文字列パターンを参照してください。

データソースを更新したとき

一度決まった列の型は、更新後も引き継がれます。 更新のたびに推定し直されるわけではありません。

更新前の型更新後のファイルの中身結果
数値型数値でない値が混ざったエラー(型が合わないため読み込めない)
文字列型すべて数値になった文字列型のまま
列型変更で指定指定した型に変換できない値が混ざったエラー

更新で新しく増えた列には、読み込み時と同じ規則で型が自動付与されます。

列型変更で型を指定した場合

データソースの列型変更で型を指定した場合は、自動付与より指定した型が優先されます。
指定した型に変換できない値が含まれている場合はエラーになり、どの列のどの値が変換できなかったかがメッセージに表示されます。

分析プロジェクト内にて新規列発生時

データ処理機能で新しい列が作られるとき、その列の型は次の順で決まります。

  1. 型を指定できる機能では、指定した型になります
  2. 元の列を引き継ぐ場合は、元の列の型になります
  3. どちらでもない場合は、値の内容から自動で推定されます

3 の自動推定では、数値型か文字列型のどちらかだけが付与されます。
データソースの読み込み時と同じく、日付型・日付時間型・時間型が自動で付くことはありません。

値から推定される型

条件分岐などで、返す値を直接入力して新しい列を作る場合の例です。

入力した値付与される型補足
1 0数値型
100 -1 1.5 1e3数値型
2020-01-01文字列型日付型にはならない
10:30:00文字列型時間型にはならない
high low文字列型
true false文字列型
1lowのように混在文字列型数値と文字列が混ざると文字列型になる
すべて空文字列型全欠損の列になる

元の列や集計結果から決まる型

クロス集計(横持ち変換) のように、元のデータから新しい列が作られる場合は、集計結果の値によって型が決まります。

店舗商品売上
東京A100
東京B200
大阪A300

縦に店舗、横に商品、集計する値に売上(合計)を指定すると、次の結果になります。

店舗(文字列型)A(数値型)B(数値型)
東京100200
大阪300
  • 縦に指定した列(店舗)は、元の列の型がそのまま引き継がれます
  • 横に指定した列(商品)の値が、新しい列の名前になります
  • 新しくできた列(A・B)の型は、集計した結果の値で決まります

集計方法によって結果の型が変わります。

集計する値の型集計方法できる列の型
数値型合計・平均・最大・件数数値型
日付型最大・最小日付型
日付型件数数値型

なお、横に指定した列が日付型の場合、2024-01-15のように日付の値がそのまま列の名前になります。

全欠損と型

データソース、分析プロジェクトにおいて、列の値が全て欠損値の場合、つまり全欠損の場合の挙動を説明します。

新規で全欠損列が作成された場合

型を指定しない場合、全欠損の列は文字列型になります。
これはファイル系データソースの読み込み時と、分析プロジェクト内で新規列が作られた場合の両方に当てはまります。

全欠損の列は任意の型に変更可能で、指定した型が優先されます。

既存の列が全欠損になった場合

分析プロジェクト内で行ったデータ処理の結果、既存の列が全欠損になった場合、その列は親ノードの列型を継承します。
例えば、分析プロジェクト内のノードに下記のデータがあると仮定します。

名前性別身長(数値型)
田中<NA>
鈴木160
佐藤<NA>

このノードに対して条件で行をフィルタノードを接続し、性別列 = “男”の条件を適用します。
結果、下記のデータが得られます。

名前性別身長(数値型)
田中<NA>
佐藤<NA>

身長列は処理の結果全欠損しましたが、親ノードの身長列の型が継承され、数値型となります。