Snowflake Marketplace上でtruestar社が提供するPrepper Open Data Bank – Japanese Calendar Dataを試してみた #SnowflakeDB

2022.12.06

※本エントリは、Snowflakeをもっと使いこなそう! Advent Calendar 2022の6日目の記事となります。

さがらです。

Snowflake Marketplace上でtruestar社が提供するPrepper Open Data Bank - Japanese Calendar Dataを試してみたので、その内容をまとめてみます。

Prepper Open Data Bankとは

Prepper Open Data Bankとは、e-Statで公開されている国勢調査などの商用・二次利用可能なオープンデータを、特別な加工を必要とせずすぐにデータ分析が可能なテーブル形式の形で、Snowflake Data Marketplace上で無料で共有するサービスです。

実際にe-statなどのオープンデータを使用しようと思ったら、「どんなデータがあるかわからない」「データをダウンロードしたけど、形式が特殊でそのままの形で使用できない」など経験したことのある方は多いのではないでしょうか。

そこで、Prepper Open Data Bankの出番です!truestar社がe-statなどのオープンデータをきれいに使いやすい形に加工してくれているため、ユーザーが自分で加工する必要はありません。

共有されている各データの仕様については公式HPがとてもわかりやすいので、ぜひこちらもご覧ください。(各データの詳細ページには、Airtableを用いたサンプルデータもありますよ!)

Japanese Calendar Dataとは

本記事で検証するJapanese Calendar Dataについての説明です。

下記は公式HPからの引用ですが、曜日や祝日の特性を用いたデータ分析は特に多いと思いますので、こういった分析が簡単に出来るのは嬉しいですよね。

Japanese Calendar Data には、日付や曜日情報に加え、内閣府から毎年2月発表される祝日と振替休日や、土日祝、平日、GW、年末年始、休前日など、様々な事業のマーケティング活動に影響のある軸で予めフラグ化するなど、日次データを用いた機械学習などのデータ分析ですぐに活用できる形に加工しています。
例年2月に翌年末までの祝日・振替休日の情報が公開されるため、その後に翌年分を更新します。
日本のカレンダー【JAPAN_CALENDAR】は2017年1月1日から、新たに追加した日本のカレンダーVer2【JAPAN_CALENDAR_VER2】では2010年1月1日からデータを保持しています。
日本のカレンダーVer2【JAPAN_CALENDAR_VER2】では、SQLでの分析やシステム連携時に扱いやすいカラム名を持つテーブルと、TableauなどのBIツールで利用しやすい日本語および英語のカラム名にそれぞれ変更したビュー、計三種類をご用意しています。

試してみた

データの取得

では、Snowflake Marketplaceからデータを取得してみたいと思います!

まず、使用するロールをIMPORT SHARE権限を持っているロールに変更してください。(デフォルトではACCOUNTADMINのみ保持しています)

Snowflake上でMarketplaceを押します。

続いて、一番上の検索BOXにjapanese calendarと入れて検索します。すると、Prepper Open Data Bank - Japanese Calendar Dataが出てきますのでクリックします。

このページでは、データの説明やサンプルクエリを見ることが出来ます。

データを利用するためには、画面右の取得を押します。

すると、下図のようなポップアップが表示されます。オプションを開くと、アカウント上に作成するデータベース名を変更したり、現在使用しているロール以外にどのロールにこのデータへのアクセスを出来るようにするか設定が可能です。

これらの設定が終わったら、取得を押します。

この後、対象のデータベースができていれば準備は完了です!

データへのクエリ

実際に取得したデータについてクエリを発行して、どんなデータがあるか見てみたいと思います。

Marketplaceのページに記載されていたサンプルクエリを実行してみます。

SELECT DATE, HOLIDAY_NAME
FROM BETA.JAPAN_CALENDAR
WHERE IS_HOLIDAY = TRUE
AND DATE >= to_date('2022-01-01')
AND to_date('2022-12-31') >= DATE;

このクエリではWHERE IS_HOLIDAY = TRUEとしていたので、下図のように、日本の祝日だけが表示されました!

このビューはJAPAN_CALENDARというviewなのですが、他にもそのまま使えそうな情報を多く用意してくれています!

特に、「休日・祝日の前日」「連休が残り何日あるか」などの情報まで最初から完備しているのは素晴らしいですね…

SELECT *
FROM BETA.JAPAN_CALENDAR;

また、別のビューであるJAPAN_CALENDAR_TXTFLGでは、祝日を単純に1でフラグを立てているデータもあります。単純に祝日をフラグとして見たい場合には、こちらのデータが便利かもしれませんね。

SELECT *
FROM BETA.JAPAN_CALENDAR_TXTFLG;

では、これらのデータをどの様に使うのか、具体的にJOINをしてみたいと思います。

以下のSQLで、ユーザーごとに日別に購入した数量をまとめたダミーデータと、このカレンダーデータをJOINしてみます。(余談ですが、ダミーデータの作成にはこちらの記事がとても参考になりました!)

with dummy_data as (
    select
        dateadd(day, seq4(), '2022-01-01'::date) as dummy_date,
        uuid_string() as dummy_id,
        abs(random(1))%100 as dummy_purchase_num
    from
        table(generator(rowcount => 365))
),

calendar_data as (
    select
        date,
        holiday_name
    from
        beta.japan_calendar
    where
        is_holiday = true
)

select
    d.dummy_date,
    d.dummy_id,
    d.dummy_purchase_num,
    c.holiday_name
from
    dummy_data as d
left join
    calendar_data as c
on
    d.dummy_date = c.date
order by 
    d.dummy_date;

このクエリを実行すると、下図のような形で、元のデータに対し日本の祝日情報を付与することが出来ました!

最後に

Snowflake Marketplace上でtruestar社が提供するPrepper Open Data Bank - Japanese Calendar Dataを試してみました。

日付で管理しているデータがあれば、簡単にJOINして日本の祝日の情報を付与できますので、とても便利なデータだと思います!

気になる方はぜひ申請をして、試してみてください!