文字列や数値から日付を生成したい

日付を表す文字列や数値情報から、日付型の列を生成する方法を解説します。時系列分析を行う前段階として利用します。

説明

  • 日付を表す情報が文字列や数値としてデータに存在するとき、それを用いて日付列を生成するスクリプトです。
  • まず、format_str関数を用いて、元データの年・月・日の3列から「年/月/日」の形でつなげた1つの文字列を作成します。
  • その後、str_to_date関数を用いて、文字列(string)型の列を日付(date)型に変換します。

入出力イメージ

  • 入力

  • 出力

使い方

  1. 計算元となるデータを用意し、「Python script」アイコンを繋げます。 (例では、顧客データ.dftから日付情報を数値列として抽出し、計算元のデータとしています。このデータは、共有ワークスペース>サンプル>Alkano>顧客データ.dft にあります。)

計算元データに年・月・日列が数値列として存在しています。

  1. 「Python script」アイコンの編集画面を開き、スクリプト部分を以下で置き換えます。 入出力設定は変更しません。
    • Python script
from msi.common.dataframe import DataFrame, cbind, rbind, merge, select, is_valid, format_str
from msi.common.dataframe.params import Axis, Merge, DType, Agg
from msi.common.dataframe.special_values import Na, Error, NegativeInf, PositiveInf

# format_str関数を利用して数値列を文字列に変換します
datestr_col = format_str("%d/%d/%d", table["年"], table["月"], table["日"])

# 日付の文字列を日付型に変換します
date_col = datestr_col.str_to_date("%Y/%-m/%-d")
# 列名を変更します
date_col.colnames[0] = "日付"

# 元データと結合します
result = cbind(table, date_col)

  1. 「Python script」アイコンを実行します。終了後、可視化画面で結果を確認すると、元データに日付型の列が追加されていることが確認できます。 (例では、「日付」という列名のデータが元データに追加されていることがわかります。)

分析への応用

時系列切り出しや時系列欠損補間などの、Alkanoの時系列分析を行う前段階として利用する

OnePoint

  • format_str関数では、指定した書式で文字列を生成することができます。2個目以降の引数の値を利用して、1個目の引数で指定されたフォーマットの文字列を生成します。例えば年月日の他に時間がある場合には、datestr_col = format_str("%d/%d/%d %d:%d:%d", table["年"], table["月"], table["日"], table["時"], table["分"], table["秒"])のように指定することができます。また、%d/%d/%dの部分を%d/%02d/%02dにすると、月と日を0埋めした2桁表記に指定することができます。

    • 元データの列型がstringやcategoryなどの文字列型の場合、1個目の引数で%dの代わりに%sと記述します。
  • str_to_date関数では、文字列から日付型列を生成することができます。引数で入力フォーマットを指定します。年は%Y(4桁表記)または%y(下位2桁表記)、月は%m(0埋めされた表記)または%-m(0埋めされていない表記)、日も%d(0埋めされた表記)または%-d(0埋めされていない表記)を指定できます。今回の場合、format_str関数で生成される文字列は2013/1/2のように年は4桁表記、月と日は0埋めされていない表記なので、%Y/%-m/%-dと指定しています。

    • 時間を含む日時型への変換関数str_to_datetimeも存在します。詳細はMSI DataFrame マニュアルで「str_to_datetime」を検索してください。

関連項目