狠狠撸

狠狠撸Share a Scribd company logo
全部Excelだけで実現しようとして後悔するデータ分析
2nd Edition
じょんすみす
2お前誰よ?
じょんすみす
クラスメソッド
データアナリティクス事業本部インテグレーション部
ML推進チーム リーダー
札幌の人
普段のお仕事
? 機械学習, SageMakerおじさん
? Hadoop, EMRおじさん
? Alteryx ACEの人
? クソExcelにモンク言うおじさん
3ある日の出来事...
4お題目
? なぜExcelは万能で人々に愛されるのか?
? データ分析のためのExcel準備
? データ分析のための贰虫肠别濒活用
5お題目
? なぜExcelは万能で人々に愛されるのか?
? データ分析のためのExcel準備
? データ分析のための贰虫肠别濒活用
6なぜExcelは万能で人々に愛されているのか?
世界で最も多く使われているソフトウェアの1つ、それがExcelと言っても
過言ではないでしょう。
? 誰でも簡単に「とりあえず使ってみる」が可能
? 自由すぎるセルと圧倒的多機能により割と何でも実現
? 自由に使えすぎるので他の人のExcelは何してるかわからん
? 「正しいExcelの使い方」なんて概念すらも...
? 誰でもフリーダムに使えるのでエンジニアにとって忌み嫌われる存在
? 自動化や効率化の妨げ的存在として扱われる
? もっと適切なツールがあるでしょ...と言われる
7実践!嫌われる贰虫肠别濒の使い方
8ちょっと待て
その使い方は本当に悪なのか?
9データ分析の流れで考える必要な要素
データの取得 分析 レポーティング
テーブルデータ
以下の内容を明確化
? 取得元
? フォーマット
? 含まれる情報
定期的な取得?更新の検討
分析内容に合わせた加工
分析処理の実施
専門知識が必要
意思決定で活用可能な形式
帳票やダッシュボード作成
この部分でレイアウトや
印刷形式を整える
10お題目
? なぜExcelは万能で人々に愛されるのか?
? データ分析のためのExcel準備
? データ分析のための贰虫肠别濒活用
11データを整備しよう
何処にあるのかわからないデータは存在しないのと同じ
また、データとして利用可能な形式になっていない場合も同様
12データを整備しよう
理想的なデータの集め方と現実
理想
現実
13データを整備しよう
まずはスモールスタートで始めていく
今あるデータや今回使いたいデータをまずは準備
より詳細な分析を行ったり精度を高めたりするには様々なデータが
必要となるがいきなり全部は扱いきれない
まずは共有フォルダなど低コストで実現可能な方法でデータを集約
最初は手動でもいいのでデータカタログを作成しておく
共有されているデータを加工して分析を行う
すぐに始められる手ごろなツールを使ってDWHなどの導入は
共通処理などが見えてきてから行う
→ Excelでデータソースのリストを作成する
→ Power 蚕耻别谤测を使ったデータの取得?加工
14データを整备しよう
15データを整備しよう
ある程度分析が定着してきたら
データ収集の自動化も検討
データからカタログを自動生成可能なツールの導入を検討
整形されたデータを共通の基盤で利用可能とするためのDWHを導入
データレイクからのETLを自動化
様々な視点で分析を行ためのBIツールや分析ツールを導入
データ分析の民主化
16今あるデータをカタログ化する
データの情報をリスト化する
17今あるデータをカタログ化する
データの情報をリスト化し、HYPERLINK関数を使って紐づける。
HYPERLINK(“https://dev.classmethod.jp/”, “Developers.IO”)
HYPERLINK(“Z:analysisdata”, “データフォルダ”)
HYPERLINK(“[iris.xlsx]iris!A1”, “颈谤颈蝉データセット”)
18今あるデータをカタログ化する
データの情報をリスト化し、HYPERLINK関数を使って紐づける。
19データの取得にはPower Queryを使う
Power Query? 何それおいしいの?
20データの取得にはPower Queryを使う
なんかいろいろ対応してる!!
21データの取得にはPower Queryを使う
Excelの場合、シートを選択(複数も可)
22データの取得にはPower Queryを使う
フォルダからの場合、同一スキーマの複数ファイルをまとめて取得可能
23データの取得にはPower Queryを使う
ODBCではSQLやテーブル選択で取得可能
24データの取得にはPower Queryを使う
WebページからではHTMLのtableタグやデータセットを取得可能
※ 画像はデモ用のものになります。Wikipediaなどクロールを禁止してるサイトもあるのでご注意ください。
25データの取得にはPower Queryを使う
(再掲)そのほかもいろいろ対応
26データはキレイな形式に!!
取り込むデータは分析しやすいように加工しよう。
データの基本はテーブル形式
27データはキレイな形式に!!
取り込むデータは分析しやすいように加工しよう。
データの基本はテーブル形式
先頭行はヘッダ
各列の名前を入れる
28データはキレイな形式に!!
取り込むデータは分析しやすいように加工しよう。
データの基本はテーブル形式
データは1行につき1件
29データはキレイな形式に!!
取り込むデータは分析しやすいように加工しよう。
データの基本はテーブル形式
同じ列には同じ種類の
データ
30データはキレイな形式に!!
取り込むデータは分析しやすいように加工しよう。
ダメな例 : 1行に複数データ
購入商品列に複数データが
入ってる
一行1データに変換する
31データはキレイな形式に!!
取り込むデータは分析しやすいように加工しよう。
ダメな例 : 複数列に1つのデータ(データにあわせて列も増加する)
同一の指標が複数列に
またがってる
同じ指標は常に同じ列
32いいデータってどんなデータ?
Tidy Data(整然データ)という概念が存在する。
R界隈で有名なHadley Wickham氏が提唱
? 個々の変数が1つの列をなす。
? 個々の観測が1つの行をなす。
? 個々の観測の構成単位の類型が1つの表をなす。
TidyじゃないデータはMessy Data(雑然データ)と呼ばれる
Tidy Dataの詳細は以下を参照
? Wickham, Hadley (20 February 2013). "Tidy Data". Journal of Statistical Software.
? 【翻訳】整然データ|Colorless Green Ideas
33ここまでやると何が嬉しいか?
分析をする際にこの構造になってることで様々なメリットが生まれる。
? 元データが未集計の状態なので分析の切り口を変更しやすい
? Power Queryはデータに更新があった際に「データ更新」のみで対応可能
? データをテーブルにしておくことで構造化参照が利用可能
? Tidy Dataは分析での利用やそのための変換をしやすくするためのデータ構造
? ピボットテーブルを利用する際に扱いやすい構造
? などなど
34ところで...
構造化参照 is 何?
セルの範囲ではなく列名を使ってデータを取り出す参照方法
↑こんな感じのデータがあるとする
35ところで...
構造化参照 is 何?
セルの範囲ではなく列名を使ってデータを取り出す参照方法
↑こんな感じのデータがあるとする
テーブル名[列名]で特定の列全体を取り出す
=SUM(iris[Sepal.Length])
36ところで...
構造化参照 is 何?
セルの範囲ではなく列名を使ってデータを取り出す参照方法
↑こんな感じのデータがあるとする
テーブル名[[列名1]:[列名2]]で連続する複数列を取り出す
=SUMPRODUCT(iris[[Sepal.Length]:[Sepal.Width]])
テーブル名のみでデータ部分全体を取り出す
=SUMPRODUCT(iris)
37ところで...
構造化参照 is 何?
セルの範囲ではなく列名を使ってデータを取り出す参照方法
↑こんな感じのデータがあるとする
テーブル名[#見出し]で列全体を取り出す
=COUNTA(iris[#見出し])
テーブル名[[#見出し], [列名]]で特定の列を取り出す
=iris[[#見出し], [Sepal.Length]]
38データをキレイにしろ、と言いたいことはわかった
俺のデータはお前の言う形式になってない
だから使えないじゃないか!
39データをキレイにしろ、と言いたいことはわかった
俺のデータはお前の言う形式になってない
だから使えないじゃないか!
安心してください
Power Queryの真価はここからです!
40Power Queryでデータの加工?整形をせよ!
JSONデータの取り込みで学ぶPower Query
俺、こんな感じのデータがあるので取り込んでみようと思うんだ...
41Power Queryでデータの加工?整形をせよ!
JSONデータの取り込みで学ぶPower Query
こんな感じの画面が出てくる
機能リスト
データのプレビュー
やったこと
リスト
42Power Queryでデータの加工?整形をせよ!
JSONデータの取り込みで学ぶPower Query
今どんなデータ?
JSONの構造、こんな感じですよー
43Power Queryでデータの加工?整形をせよ!
JSONデータの取り込みで学ぶPower Query
JSONはテーブル形式のデータってわけじゃないのでまずは変換
“オブジェクトの名前とその中に含まれるデータ”の構造に展開された
44Power Queryでデータの加工?整形をせよ!
JSONデータの取り込みで学ぶPower Query
リストの中身を展開しよう
Value列がカンマ区切りで展開された。
45Power Queryでデータの加工?整形をせよ!
JSONデータの取り込みで学ぶPower Query
1データ1列にしよう
1データ1列になった
46Power Queryでデータの加工?整形をせよ!
JSONデータの取り込みで学ぶPower Query
Name列を列名、それ以外を値とするために転置しよう
1行1データの形に近づいた!!
47Power Queryでデータの加工?整形をせよ!
JSONデータの取り込みで学ぶPower Query
先頭列をヘッダにして、完成!!
Tidyな感じのデータになった!!
48Power Queryでデータの加工?整形をせよ!
JSONデータの取り込みで学ぶPower Query
こんな感じでデータ整形できるわけですが、そのプロセスはすべて記録されてる。
? 何の処理をしたかを明確化
? 各ステップの実行前後の結果比較が可能
? ステップの削除や追加が可能
? もちろん編集も可能
? ステップに名前を付けて明確化することも可能
49Power Queryでデータの加工?整形をせよ!
他にもできることは様々!
? このほかにも様々な処理があるので大体なんとかなる
? 複数のデータソースを扱うことも可能
? 独自言語(M言語)ではあるが、ソースコード記述も可能
50Power Queryでデータの加工?整形をせよ!
JSON取り込みのソースコードはこんな感じ
51データモデルの話
データモデルとキューブと...
Power Queryで読み込んだデータはどこに保持してるのか?
? Power Queryでの読み込み先設定
? テーブルとして読み込む以外にも様々
? データモデルに追加することも可能
キューブはこんな感じ→
軸1 : 月ごとの
軸2 : 商品ごとの
売上
52データモデルの話
データモデルを作成してPower Pivotで扱う。
データモデルに対するリレーション リレーションはPivot 罢补产濒别でそのまま利用可能
53お題目
? なぜExcelは万能で人々に愛されるのか?
? データ分析のためのExcel準備
? データ分析のための贰虫肠别濒活用
54分析をはじめていこう
さあ、準備は整った!いよいよここからデータ分析が始まるゾ!!
55分析をはじめていこう
さあ、準備は整った!いよいよここからデータ分析が始まるゾ!!
の前にExcelの基礎知識
56Excelの基本的な関数
関数名 用途?利用方法 備考
SUM関数 対象範囲の足し算を行う
=SUM(A1:A10)
TRANSPOSE ベクトルや行列の転置を行う
{=TRANSPOSE(A1:C10)}
MMULT 行列積を計算する最も基本的な関数と言える
{= MMULT(TRANSPOSE(A1:C4), A1:C4)} さらばSUMPRODUCT
よく使う基本的な関数を確認していこう
57Excelの基本的な機能
配列数式を理解しておこう
入力または出力が配列になるような計算式
全行を合計
入力または出力が配列になるような計算式
範囲内で行ごとに計算した結果に対してSUM関数を実行
Ctrl+Shift+Enter
58Excelの基本的な機能
配列数式を理解しておこう
入力または出力が配列になるような計算式
配列数式とTRANSPOSE, MMULT関数の組合せでベクトルの内積計算
→ SUMPRODUCTより汎用性が高いので以降の計算はこっちを利用
59Excelの基本的な機能
配列数式を理解しておこう
入力または出力が配列になるような計算式
複数の値を結果として返すことも可能
出力と同じサイズの範囲を選択して配列数式を実行
60Excelの基本的な機能
配列数式を理解しておこう
入力または出力が配列になるような計算式
NxM行列とMxK行列の積をMMULTで計算
NxKの範囲で結果を出力
61Excelの基本的な機能
おまけ:配列を作る
「{}」内に値を入れる
「,」で次の列、「;」で次の行
62分析をはじめていこう
今度こそ本当にデータ分析が始まるゾ!!
63データを用意したらまず最初にやること
それは、基本統計量の確認。
データ > データ分析を選択(ない場合はアドオンで追加)
64データを用意したらまず最初にやること
それは、基本統計量の確認。
データ > データ分析を選択(ない場合はアドオンで追加) > 基本統計量
65データを用意したらまず最初にやること
それは、基本統計量の確認。
データ分析ツールは甘えなので計算する
66データを用意したらまず最初にやること
それは、基本統計量の確認。
データ分析ツールは甘えなので計算する
フィル
67データを用意したらまず最初にやること
ヒストグラムは1列1列心を込めて丁寧に作成
対象の列を選択し、グラフの種類にあるヒストグラム(棒グラフではないよ!)で作成
68データを用意したらまず最初にやること
ヒストグラムは1列1列心を込めて丁寧に作成
コピーしてデータソースだけを書き換えると比較的楽
69データを用意したらまず最初にやること
ヒストグラムは1列1列心を込めて丁寧に作成
そんなことはやってられないので、VBAで全列のヒストグラム作成
Sub test()
Dim col As Variant
For Each col In Range("boston").ListObject.HeaderRowRange
Range("boston").ListObject.ListColumns(col.Value).Range.Select
ActiveSheet.Shapes.AddChart2(366, xlHistogram).Select
ActiveChart.ChartTitle.Select
Selection.Caption = col
Next col
End Sub
※ このままだと全部同じ位置に出力されるので適当に調整する
70カーネル密度推定もしてみよう
カーネル関数にぶっこんである値周辺の確率値を求める
? ? =
1
??
?=1
?
?
? ? ??
?
? ? =
1
2?
??? ?
?2
2
x についての確率密度 ガウシアンカーネルを使用
n : データ件数
xi : 観測された各データ
h : パラメータ
71カーネル密度推定もしてみよう
カーネル関数にぶっこんである値周辺の確率値を求める
取りうるxの範囲をデータから決める
? 最大値 : MAX(boston[medv])
? 最小値 : MIN(boston[medv])
編集 > フィル > 連続データの作成
でmin/maxを参照にxの値を生成する
? 今回は0~60までを0.1刻みで生成
72カーネル密度推定もしてみよう
カーネル関数にぶっこんである値周辺の確率値を求める
??
?
? {=SUM(
1 / SQRT(2 * PI()) *
EXP(
-POWER(($D3 - boston[medv]) / E$2, 2) / 2
)
) / COUNT(boston[medv]) * E$2}
? ? =
1
??
?=1
?
1
2?
??? ?
? ? ?? ? 2
2
計算する値 :
73カーネル密度推定もしてみよう
カーネル関数にぶっこんである値周辺の確率値を求める
あとは下までオートフィル
74カーネル密度推定もしてみよう
カーネル関数にぶっこんである値周辺の確率値を求める
この値で折れ線グラフを作ることでカーネル密度関数の完成!
いい感じになるようにhを調整しよう
75異常値を見つけてみる
z値を計算する
? = (? ? ?) ?
=STANDARDIZE(
boston[@nox],
AVERAGE(boston[nox]),
STDEV.S(boston[nox]))
計算する値 :
? テーブルになってれば行は勝手に計算される
? 列方向はオートフィルで
76異常値を見つけてみる
異常値となるものに対して条件付き書式を割り当てて確認する
z値の絶対値が3以上のものを異常値として設定。
この結果を元にフィルタの対象にするなど、どのように対処するかを決める。
77相関係数を求めてみる
どのデータとどのデータに関連がありそうなのか俯瞰する
? =
1
? ?=1
?
(?? ? ?)(?? ? ?)
1
? ?=1
?
(?? ? ?)2 1
? ?=1
?
(?? ? ?)2
? 相関係数は2つの列データにの関連性を数値で表す
? 値が1に近いほど正の相関(片方が高くなればもう片方も高くなる)がある
? 値が-1に近いほど負の相関(片方が高くなればもう片方は低くなる)がある
? 値が0に近ければ相関なし
? 列の組み合わせ分だけ相関係数が計算できるので行列で表せる
相関係数の求め方
78相関係数を求めてみる
どのデータとどのデータに関連がありそうなのか俯瞰する
データ > データ分析 > 相関 で利用可能
79相関係数を求めてみる
別解 : 頑張って計算する
各データのz値
{=MMULT(TRANSPOSE(boston_z), boston_z) / (COUNT(boston_z[crim])-1)}
行列積を計算してデータ件数-1で割る
データ分析ツールは甘えなので計算する
80相関係数を求めてみる
別解 : 頑張って計算する
任意の2の列x,yに対して、i番目のデータのz値をzxi, zyiとする。
元データDに対してDTDを計算結果の、x行y列目の値は
? ?
? ? ? =
?
? ?? ? ?? ? ?? =
?? ? ? ?
? ?
? ?? =
?? ? ? ?
? ?
=
?
?? ? ? ? ?? ? ? ?
? ? ? ?
? ? =
1
? ? 1
?
?? ? ? ?
2 ? ? =
1
? ? 1
?
?? ? ? ?
2
=
? ? 1
?? ? ? ?
2 ?? ? ? ?
2 ?? ? ? ? ?? ? ? ?
,
,
n-1で割ることで、相関係数と一致する。
81散布図を見てみる
相関係数と同じように2つのデータの関連を見るためのもの
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
0 5 10 15 20 25 30
nox
indus
散布図
82主成分分析(PCA)をしてみる
PCA is 何?は割愛
列数と同じ数の適当な値を入れる
適当な値
=SUMSQ(I2:I5)
ベクトルの長さ
{=MMULT(
iris4[@[Sepal.Length]:[Petal.Width]],
$J$2:$J$5)}
主成分の値を計算する
分散を求める
=VAR.S(iris4[第1軸])
83主成分分析(PCA)をしてみる
PCA is 何?は割愛
ソルバーを起動する
目的セル : 分散を計算している部分
→ PCAの定義からこれを最大化できればOK
変更可能 : 最初に適当な値を入れた4つのセル
制約条件 :
? 各値が-1から1の範囲内
? ベクトルの長さが1になっている
84主成分分析(PCA)をしてみる
PCA is 何?は割愛
第1主成分(分散を最大化する軸)が求まった!!
第2主成分も同じ手順で求める
=SUMPRODUCT(I2:I5, J2:J5)
第1主成分と第2主成分の内積
PCAの各主成分は直交するので
→ソルバでこの値が0を制約条件に追加する
85主成分分析(PCA)をしてみる
PCA is 何?は割愛
第2主成分も求まった!!
主成分の軸でプロットすると
こんな感じ
※ 第3, 4主成分も同様に求められる
86主成分分析(PCA)をしてみる
結果を確認する
共分散行列を作成(相関行列と同じノリで作れます)
共分散行列 第一主成分(固有ベクトル)
分散(固有値) 第一主成分(固有ベクトル)
ソルバーによる近似解
なので多少のずれ
はあるがほぼ一致してる
87回帰分析をしよう
我々は未知の数値を予測する
データ分析ツールにある回帰分析
88回帰分析をしよう
我々は未知の数値を予測する
データ分析ツールにある回帰分析
89回帰分析をしよう
我々は未知の数値を予測する
データ分析ツールにある回帰分析
0
2
4
6
8
10
12
切片 crim zn indus chas nox rm age dis rad tax ptratio black lstat
変数重要度
y = 0.7406x + 5.844
R? = 0.7406
-10
0
10
20
30
40
50
0 10 20 30 40 50 60
予測値
medv
90回帰分析をしよう
我々は未知の数値を予測する
データ分析ツールは甘えなので計算する
とはいえ、回帰は関数が用意されている
{=LINEST(boston[medv], boston[[crim]:[lstat]], TRUE, TRUE)}
※ 係数の順番が元データと逆になるので注意
91回帰分析をしよう
我々は未知の数値を予測する
関数の戻り値以外は計算する
92回帰分析をしよう
我々は未知の数値を予測する
関数の戻り値以外は計算する
93回帰分析をしよう
我々は未知の数値を予測する
説明変数と係数をかけ合わせて切片を足すだけ!!
予測値を求めてみようよ!!
94ロジスティック回帰もしよう
我々は分類もする
Excelの機能にロジスティック回帰は無いので実装する
切片の項を追加
wをランダムな値で初期化
95ロジスティック回帰もしよう
我々は分類もする
Excelの機能にロジスティック回帰は無いので実装する
損失関数を計算
? ? =
1
1 + exp ? ? ?
? = ?
?=1
?
?? ??? ?? + 1 ? ? ?? 1 ? ? ??
{=-SUM(
iris_orig[num_species] *
LN(1 / (1 + EXP(-MMULT(iris_orig[[Sepal.Length]:[w_0]], TRANSPOSE(A4:E4))))) +
(1-iris_orig[num_species]) *
LN((1 - 1 / (1+EXP(-MMULT(iris_orig[[Sepal.Length]:[w_0]], TRANSPOSE(A4:E4))))))
)
96ロジスティック回帰もしよう
我々は分類もする
Excelの機能にロジスティック回帰は無いので実装する
損失関数の微分とハイパーパラメータα
の値を使って各wの値を更新
?? = ?? + ?
??
???
??
?? ?
= ? ? ? ?
?
??
=$A4:$E4 + $B$1 *
MMULT(
TRANSPOSE(iris_orig[num_species] –
(1/(1+EXP(
-MMULT(iris_orig[[Sepal.Length]:[w_0]],
TRANSPOSE($A4:$E4)))))),
iris_orig[[Sepal.Length]:[w_0]]
)/COUNT(iris_orig[Sepal.Length])
損失関数の減り具合を確認
97ロジスティック回帰もしよう
我々は分類もする
Excelの機能にロジスティック回帰は無いので実装する
収束するまでオートフィル
98ロジスティック回帰もしよう
我々は分類もする
実装できたロジスティック回帰で推論する
=IF([@predict] > 0.5, 1, 0)
{=1 / (1 + EXP(-MMULT(iris[@[Sepal.Length]:[w_0]], TRANSPOSE(Sheet1!$D$300:$H$300))))}
99ロジスティック回帰もしよう
我々は分類もする
実装できたロジスティック回帰で推論する
そして無事それっぽい結果に
100時系列予測をしよう
Excelなら時系列データだって扱えちゃうんです!
今度はExcelの機能を使えるよ!
時系列の売上データ データタブにある「予測シート」
101時系列予測をしよう
Excelなら時系列データだって扱えちゃうんです!
今度はExcelの機能を使えるよ!
102時系列予測をしよう
Excelなら時系列データだって扱えちゃうんです!
今度はExcelの機能を使えるよ!
103時系列予測をしよう
Excelなら時系列データだって扱えちゃうんです!
データ分析ツールは甘えなので計算する
=FORECAST.ETS(A35, $B$2:$B$34,$A$2:$A$34)
予測値(C列)
予測対象 推論に使うデータ 時系列情報
上振れ、下振れの95%信頼区間(D, E列)
=C35-FORECAST.ETS.CONFINT(<同じ範囲>)
=C35+FORECAST.ETS.CONFINT(<同じ範囲>)
104時系列予測をしよう
Excelなら時系列データだって扱えちゃうんです!
データ分析ツールは甘えなので計算する
A~E列全体で折れ線グラフを作成する
予測値となる部分を境に別な系列に
なっているので色や形を調整する
105ダッシュボートを作ろう
色々データが出そろったのでまとめようと思うんだ...
106ダッシュボートを作ろう
色々データが出そろったのでまとめようと思うんだ...
107ダッシュボートを作ろう
色々データが出そろったのでまとめようと思うんだ...
甘えなかったものはそのまま更新可能
甘えた場合再度生成する必要がある
元データは簡単に
更新可能
108ダッシュボートを作ろう
色々データが出そろったのでまとめようと思うんだ...
109ダッシュボートを作ろう
色々データが出そろったのでまとめようと思うんだ...
110ダッシュボートを作ろう
色々データが出そろったのでまとめようと思うんだ...
111まとめ(?)的な何か
そんなことはない!!Excel大っっっっっっ嫌い!!!!!
112参考資料
? Excelパワーピボット
? 最速で収益につなげる完全自動のデータ分析
? Excelで学ぶデータ分析本格入門
? プロコンサルタントの最強エクセル術
? Excelで操る! ここまでできる科学技術計算
? 2017 Planning Guide for Data and Analytics
? HYPERLINK関数でハイパーリンクを作成する
? 主成分分析をExcelで理解する
113

More Related Content

全部Excelだけで実現しようとして後悔するデータ分析 2nd Edition

Editor's Notes

  • #4: 札幌で谜に好评だったのでパワーアップして再演!!
  • #8: みんな大嫌いなやつ Excel方眼紙?神エクセル 楽しいセルの結合 図をふんだんに使ったお絵描き 嫌われるExcelの使い方は本当に悪なのか? そもそもなぜ彼らが嫌われるのか考えてみよう。 Excelは元々”表計算ソフト”である 「こんな使い方は嫌われる」の主な原因は 効率的な使い方の妨げになっている データとして再利用できない形式になってる 検索性が著しく悪い 嫌われる使い方が蔓延る原因はいったいどこにあるのか 印刷が前提など、どのようにレイアウトするかのみを気にする よくわかってないけどググって出てきたやり方をコピペ
  • #10: インターネットの歴史に残るブラウザ戦争HTML/CSSの分離 あの頃のホームページ作成で起こっていた出来事 maqueeタグやblinkタグなど見た目装飾用のタグ乱立 tableのネストや結合を利用したレイアウト?1x1pxの透明画像で幅調整 今では主流の考え方 HTMLはデータとして活用を用意するために構造を定義するもの デザインを整えて見た目をいい感じにするのはCSSの役目 MVCモデルの考え方 今でも使われてる概念なのかなぁ 誰もViewに全部書こうとはしないでしょ? バックエンドは無視できません Excelの利用でもきちんとそれぞれが分離し状態であれば データは再利用可能なまま印刷や帳票用のレイアウトが可能になる
  • #12: 利用可能な形式になってないデータ = クソExcel 左 : 様々なデータソース(ブラックボックス化されてるものは闇) 中央 : データ分析基盤 右上 : データカタログ 右下 : 分析環境(Excel) 様々なソースにまたがるデータを基盤に集約する この過程でデータの整理や整形(ETL処理)なども必要になる データを蓄える基盤として データレイク DWH データマート などがあげられる。 テーブル構造になってることが保証されていると嬉しいので、それらがあるのが望ましいが かならずしも最初から大掛かりなものを用意する必要はなく、最初は共有フォルダにCSVやExcelファイルを入れとくでもいい 集約したデータをデータカタログ化して どのようなソースから取得したデータか どのような方法で取得したデータか どのような人を対象として取得したデータか どのタイミングで取得したデータか どのような内容(列一覧とその意味や単位など)か 保存されてるデータの期間は などの情報を格納しておく この情報が分析者から参照可能な状態になっている必要がある 分析者はカタログ情報を参照して、必要なデータを見つける 実際のデータを取得して、分析作業に取り掛かる。 データガバナンスの話はしない
  • #13: データを集める 理想的な形 データレイク : 色々入れる DWH : きれいにする データマート : やりたいことごとに 分析基盤を整えるのにはお金も時間もかかる。 なぜ、このような形が理想的なのか? データサイエンティストの仕事の8割は前処理 データ分析の民主化
  • #17: データ一覧情報を作成する DBのテーブル情報や列一覧情報はPower QueryでSQL書けば取得可能 ファイルで管理されているものは共有フォルダなどを使って一か所にまとめる それぞれのファイルにリンクを張るとともに列名情報はPower Queryで取得 今回はやってないけど、ファイル一覧を取得する部分や各テーブル情報を取得する部分はVBA使って自動化も可能
  • #18: 任意の場所にリンク可能な性質を利用して web上のデータから他のExcelファイルまで様々なデータソースへのリンクを貼れる 参照先がExcelであればさらにそこからHYPERLINK関数で階層化することも可能
  • #19: hyperlink関数を使うことで 任意のExcelファイルの特定のシートなどに移動 Web上のデータにリンクを張る などする 何が嬉しいか このようにまとめておけば元データはこの情報を参照してPower Queryで取得可能になる (次の分析の話に続く)
  • #20: データ取得元がRDBであればテーブル一覧から利用するものを選択できるほか、 SQLを記述してデータ取得することも可能 ODBCを使ったRDBからのデータ取得のほか Excel CSV Web など様々なデータソースから同一の操作感で取得可能 読み込んだデータはテーブルやデータモデルとして保持する。 PowerQueryで読み込んだデータは 元データそのものを編集するわけではないので事故がない 元データに変更があった場合もデータの更新を行うことで対応可能 データモデルであればシートには読み込まないので1,048,576行、16,384列の壁を超えることも可能 という特徴を持つ Power Queryではhttp経由でcsvやjsonを取得できるのはもちろんのこと、 HTMLのテーブルを指定して取得することも可能です。 そういったwebからデータを取得するような際にはそのページへのリンクを貼っておくといいでしょう。
  • #21: 他の贰虫肠别濒ファイルや颁厂痴、翱顿叠颁を使ったデータベース接続など様々なデータソースが选択可能
  • #22: 他の贰虫肠别濒ファイルや颁厂痴、翱顿叠颁を使ったデータベース接続など様々なデータソースが选択可能
  • #23: 他の贰虫肠别濒ファイルや颁厂痴、翱顿叠颁を使ったデータベース接続など様々なデータソースが选択可能
  • #24: 他の贰虫肠别濒ファイルや颁厂痴、翱顿叠颁を使ったデータベース接続など様々なデータソースが选択可能
  • #25: 他の贰虫肠别濒ファイルや颁厂痴、翱顿叠颁を使ったデータベース接続など様々なデータソースが选択可能
  • #26: 他の贰虫肠别濒ファイルや颁厂痴、翱顿叠颁を使ったデータベース接続など様々なデータソースが选択可能
  • #41: 列名のオブジェクトの中に各列の値が配列で入ってる
  • #44: 列名のハッシュの中に各列の値が配列で入ってる
  • #50: pivot, unpivot フィルター 列の追加?削除 グループ化 Join/Union などなど
  • #52: いきなりピボットテーブル作成したり、読み込まないで接続情報のみを保持しとくとかも可能 データモデルにデータを追加することで、Excelでの表示領域とは別にデータを保持する。 この表形式ではなく、データはキューブと呼ばれる形式で保存される。 キューブは「データから軸を生成して、その値ごとに集計した結果を得る」ということを行いやすくするためのデータ構造 この構造は、ピボットテーブルを使った分析で行いことそのものなので、それに適した構造となっている。 また、データモデルにデータを追加することで様々な操作が可能になったり、 データモデルにおいてはExcelの100万行制限もない。 今回は解説しないが、キューブ関数はこのデータモデルを扱うための関数群
  • #53: データモデルに読み込むことでリレーションの定義も行える。 これはPivot Tableで利用可能。 なお、リレーションを定義するほか、あらかじめJOINしておくことも可能。 人類がVLOOKUPに苦戦したりXLOOKUPに歓喜してる間にExcelはRDBになっていた。 もちろん取り込む際にPower Queryでjoinをすることも可能なので、必要に応じて使い分ける。
  • #75: 适切な丑を求めるための手法もあるがここで割爱
  • #77: |3|以上を異常値としてるのは正規分布の分散に由来する 分布が異なる場合は別途検討が必要。 任意の分布に対して分散由来の外れ値を設定したい場合は「チェビシェフの不等式」で調べてみよう!
  • #79: 上側は同じ値になるので下参画だけ出力される 出力は数字だけなので、条件付き書式で色を設定してる
  • #82: 相関係数は線形の関係しか表せない 散布図を見ることで、非線形の関係が読み取れることもある 散布図も相関係数と同様に行列にできるけど、同じノリでVBAでやってね
  • #89: 笔値は条件付き书式で太字にしてる
  • #100: ここまでできた、ということはディープラーニングもExcel(VBAなし)で実装できるということ 行列演算 損失関数 ウエイトの更新 シグモイド関数が活性化関数相当 バックプロパゲーションも要はただの計算
  • #104: 最初の部分だけかぶせるように実测値をそのまま入れる
  • #106: テーブルやセルの範囲からピボットテーブルやピボットグラフを作成する。 通常、ピボットグラフは単体で作成することはできず、必ずピボットテーブルと連動する。 これだとダッシュボード化するに際していろんな指標を見たいときにいちいち画面上には表示しないピボットテーブルも作らないとなので残念
  • #107: データモデルからであればそれぞれを独立して作ることが可能
  • #109: スライサを通じてレポートを接続
  • #110: テーブルもピボットテーブルもスライサを設定可能だが、それらを連動させることはできない。 散布図やヒストグラムはピボットテーブルからは作成できないのでこれらをダッシュボードに含める場合は注意が必要。 また各種分析機能はモノによってはデータの更新時に再度実行しないとダメなものもあるのでそれらにも注意
  • #111: こんな感じでダッシュボードが作れる というわけで、すべての分析がここに集結!!