LoginSignup
3
0

More than 1 year has passed since last update.

Snowflakeでクロス集計・ヒストグラム作成

Last updated at Posted at 2022-12-23

概要です。

Excelで実施していたデータ処理をSnowflakeに移設することがありました。移行元のExcelではクロス集計やヒストグラムなどを使っていたのですが、Snowflakeには準備されたSQLが存在し、比較的ラクにSQLで処理を再現することが出来ました。EXCELではデータ量が増えてくると辛くなってきます。そんなときにも良いのかな、と考えております。

公式にSQL構文の解説があります。

やってみます。

KaggleのTitanicのデータ、及びチュートリアルのデータ前処理を一部切り取って実装してみました。

上記のURLから

#crosstab : クロス集計表(カテゴリごとの個数をカウント)
pd.crosstab(train_df.Parch, train_df.Pclass).style.background_gradient(cmap="summer_r")

の部分をやります。

まず、テーブルを作成してデータをロードします。同じことをやってみたい方のために
テーブル作成用のSQLは共有しておきます。

CREATE TABLE titanic_train(
PassengerId integer,
Survived integer,
Pclass integer,
Name varchar,
Sex varchar,
Age decimal,
SibSp integer,
Parch integer,
Ticket varchar,
Fare varchar, 
Cabin varchar,
Embarked varchar);

titanic_train テーブルをクロス集計します。

 SELECT * from ( SELECT PassengerId,Parch,Pclass from titanic_train)
    pivot(count(PassengerId) for Pclass in (1, 2, 3))
      as p order by Parch

実行結果
image.png

結果を 別なテーブルに保管しておくことも一つのやり方だと考えます。titanic_train_cross テーブルを結果表として作る形にすると以下になります。

CREATE or replace table titanic_train_cross AS 
 SELECT * from ( SELECT PassengerId,Parch,Pclass from titanic_train)
    pivot(count(PassengerId) for Pclass in (1, 2, 3))
      as p order by Parch

参考までに最も小さいウェアハウスで実行しましたが70msで実行できました。
image.png

ヒストグラム

チュートリアルでは年齢を男女別にヒストグラムとしてグラフ表示していますが、ここでは年齢別のヒストグラムを作成してみます。SQLでは、グラフ表示ではなく既存のレコードがヒストグラムのどの場所(バケット)に割り振られるのかを算出する形になります。
※チュートリアルでは年齢の範囲を10のバケットに分けていました。
 分析はこれでよいのですが、確認が曖昧になるので年代別に分けてみます。

まずバケット番号を割り当てるための列を追加します。

alter table titanic_train
add age_bucket_number smallint;

次にバケット番号を振ります。

update titanic_train
set age_bucket_number = width_bucket(age, 0, 89, 9)

バケット番号を一部確認してみます。

select top 10 age,age_bucket_number from titanic_train

結果
image.png

年代別の件数を確認します。

select age_bucket_number,count(PassengerId) from titanic_train group by age_bucket_number
order by age_bucket_number

結果
image.png

以上になります。 

記事に不具合。不都合などございましたらご連絡いただけると幸いです。記事内容は会社公式のものではなく、個人として記載するものです。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0