こちらの記事をご覧いただきありがとうございます。
少し前までは時系列データの練習で天気予報をしていたのですが、私情によりデータレイクの勉強をすることになったので、それに関連する記事を書くことにしました。
勉強している中で、データレイクやデータウェアハウスが料理に例えられていることが多かったので、それにあやかって例え話を中心に解説します。
パワポを使ってデータレイクの解説を作ったので、こちらにもそれを使った解説記事を書きます。
記事の中身
・前置き
・データレイクをファミレスで例える話
・データレイクとは(データウェアハウスとは)
・おまけ
・あとがき
この記事を見るといいことがありそうな人
- データ分析に関わっている人
- データ分析基盤を作る(作ろうとしている)人
- データレイクが何か知りたい人
- 機械学習やデータ分析に興味がある人
データレイクって何ですか?
先にデータレイクの全体像をお見せしておきます。
データ分析の流れとして
- 収集 → 加工 → 分析
が基本だと思いますが、この流れをスムーズにするための仕組みです。
これだけ見てもイメージが湧きにくいと思うので、ここからファミレスの例えを使って解説します。
分析結果=料理 ということにする
分析結果=料理ということにすると結構共通点が出てきます。
スライド構成
以下の解説で出てくるスライドは下図のような構成になっています。
まあ見ればわかります。
ここから本題
前置きが済んだので、ここから本題です。
スライドと一緒にデータレイクをファミレスで例える話をしていきます。
原初のファミレス
まずは導入です。
何にしても最初は初心者です。最初から全国展開で何店舗も出店なんてやらないと思います(目標にするだけならわかる)。
ので、ファミレス1店舗、それも料理もまだ少ない状態から始まります。
データ分析でいえば、pythonの文法練習とか、pandas、numpy、scikit-learnの使い方とか、Titanic分析とか、皆さんもその辺から始まったんじゃないでしょうか。
かくいう私もそうでした。
現代のファミレスなら、注文を受けてから食材仕入れを始めるなんてありえないですよね。
昔のファミレスだとしてもなかなかないような気がしますが、原初のファミレスはこんな感じだったのではないでしょうか。
データ分析では、さすがに初心者でも生データを毎回取ってくることは稀だと思いますが、生データの加工を毎回している人なら割とあり得るような気がします。
なんせ私も最初はやりましたからね。すぐに加工が面倒くさくなって、加工後のデータを保存するようになりました。
事前に仕込みをしておけばすぐに料理を出せるようになると、割とすぐに気が付くと思います。
これでお客様の待ち時間がかなり短くなりますね。
データ分析でも、何度も使うデータは加工済みの状態で保存しておくことが大半でしょう。
小規模なデータなら加工もすぐ終わるのであまり気にならない場面もありますが、大規模なデータの前処理は数時間の待ちが発生しますからね。
ちなみにデータウェアハウスの考え方がこれです。
分析に必要なデータを事前に加工した状態で保存し、いつでもすぐに分析できる状態にしておきます。
ファミレスが1種類の料理しか作らないのは最近ならありえないでしょう。
1種の商品で商売を続けるのは職人と言えるような人くらいだと思います。
データ分析でも、ヒストグラムや散布図や折れ線グラフは基本的なグラフでとても重要ですが、それしか作れないとなるとさすがにやれることが少ないですね。
回帰線を引けるようにするとか、時系列の将来予測が出来るようにするとか、やれることを広げようと考えるのではないでしょうか。
ファミレスも生存戦略で新しい商品を開発することは多々あるでしょう。
様々な料理を提供できるようになれば、おのずとお客様が増えていきます。
データ分析もやれることが増えていけば、いろいろなデータを分析することができるようになりますし、同じデータでも分析してわかることが増えていきます。
その過程で、いろいろなデータを収集して、いろいろなデータ加工をして、いろいろなファイルやフォルダが散在していきますね。
はい、今の私です。
ファミレスの組織化
いろいろな料理を提供して人気が出てくればお客様が増えていくでしょうが、今度は自分一人では手が回らなくなる問題が出てきます。
何ならいろいろな料理を出すようになったので、いろいろな食材を準備して、いろいろな仕込みを済ませて、いろいろな調理をして提供するので、単に作業量が増えるだけでなく、こなす難易度も上がっています。
こうなると、協力者を募って仕事を分担することを考えるのではないでしょうか。
データ分析でも、規模が大きい分析をするようになったり、一つのデータに様々な分析手法を試そうとしたりすれば、一人で全てを行うにはかなり時間がかかります。
ただでさえ機械学習はデータの学習でかなり時間がかかるので、効率よく進めるためにやることを分担しようと考えるのは自然だと思います。
で、バイトを雇い始めた時に起こるであろうことが、仕事が複雑すぎてこなせない問題です。
今までは自分一人だったので、どこに何があって、どのような手順で進めるのか、全て自分が理解していればOKでした。
たとえ冷蔵庫が散らかっていても、調理道具を適当にしまっていても、仕込みの手順が複雑でも、自分がこなせればOKです。
こなせているうちは問題にならないので、改善する意欲も起こらないですからね。
バイトを雇う時になって初めて、やることの複雑化が問題として表面化します。
私も最初はそうでした。
一つの分析は一つのファイルに、ろくにコメントもつけず、やることを上から順にコードを書いていっていました。
ファイルは1個しかないので探すのは簡単ですが、ファイルの中でどこで何をしているのか全く分かりません。
ファイルを作った自分が、あの分析はどこに書いてあったっけとファイルの中を探し回っていましたね。どう考えてもアホです。
皆さんはどうでしょうか?ファイルの中で探し物をしていませんか?お目当てのファイルがどこにあるか日々探していませんか?
バイトなどの初心者が仕事を任されるとき、大抵は簡単な仕事から任されるはずです。
ファミレスなら、注文を取ってくればOKとか、レジ打ちが出来れがOKとか、その辺から始めるのではないでしょうか。
この役割分担ができるのは、仕事が整理されていることが前提にあります。
食材や調理器具がどこにあって、料理Aを作るならこういう手順で進めて、とやることが整理されています。いわゆるマニュアルですね。
データ分析初心者に、これ分析しといてと言ってデータを渡して丸投げ、なんてことはしないでしょう。
私が企業の分析初心者によく任されると聞くのがSQLのクエリを使った分析です。
クエリが出来るようになったら機械学習の予測モデルとかそういう話に参加できるようになるんじゃないでしょうか。
あと、企業のデータなら間違いなくフォルダやファイルの整理は必要でしょうね。
自分が適当なところにデータを保存すれば、他の人が必要になったときに毎回自分にデータどこ?と聞かれることになります。クッソ面倒です。
置き場所がわかりやすいように、適切なフォルダ名やファイル名を付けて整理しているはずです。
これやってない会社も結構あるんだろうなぁ~。データが増えすぎてどっから手を付けていいかわからないから放置されてるとか結構ありそう。そういう会社がブラックって呼ばれるんだろうなぁ~。知らんけど
ファミレスの規模拡大
バイトに仕事を任せるのもうまく行くようになれば、個のファミレスとしてはうまく行っているように思います。
こうなると、1店舗だけじゃなくて店舗を増やしてさらに規模を広げていくことを考えるのではないでしょうか。
分析でも、自分の分析が大抵うまく行くようになったら、もっと規模の大きい分析をしたくなるのではないでしょうか?
個人で分析をする分にはあまりないかもしれませんが、企業内で売り上げに関する分析がうまく行ったらwebサイト訪問者の分析とか顧客満足度の分析とかいろいろ手を広げていくことを考えると思います。
店舗が増えると、店舗ごとに仕入れをするのも効率悪くね?と考える人は多いでしょう。
ここで仕入れと仕込み以降を分担して、大規模な仕入れをしやすくするようにすると思います。
何なら仕入れも分担して、〇〇担当の仕入れが生まれていくのではないでしょうか?
データ分析なら、データ収集とデータ分析で分かれるのではないでしょうか。
収集については既に稼働しているシステム(アプリケーション)が該当するように思います。
DBにある顧客情報とか、アプリへのアクセスログとか、そういうやつですね。
いろんなシステムがあれば、その分得られるデータも多岐にわたります。
規模が大きくなるとやることが複雑化するのが世の常です。
ファミレスの店舗が増えれば在庫管理がややこしくなるのは想像に難くないでしょう。
今でこそ在庫管理の最適化も進んでいるような気がしますが、在庫管理システムがない時代はどうやって管理していたんでしょうね。
江戸時代とかならマジで職人の勘頼りだったんじゃないですか?知らんけど。
データ分析においても、特に企業内のデータ分析をするときには、ITの進歩もあって年々とデータ管理が複雑になっていった背景があるそうです。
傍から見ればもっとデータ整理しなよって思えますけど、当事者からすればデータ整理自体が価値を生むわけではなく、それどころじゃないって考えが多いんでしょうね。
企業が軌道に乗っている中でデータ整理に注目が行くはずもなく、エンジニアの仕事がブラック化していくのが想像つきますね。
環境整備の重要性を考えさせられます。
ファミレスの今の時代の在庫管理って、大抵は1個(か地域ごと)の工場に原料が集められて、工場で必要な仕込みを全部行って、各拠点に仕込んだ料理を持っていく仕組みになっていると思います。
これの便利な点は仕込みをまとめて行えて効率が良いだけじゃなく、モノの流れがわかりやすいということも挙げられます。
仕入れたものはとりあえず工場の倉庫に持っていけばいいし、工場ではとりあえず倉庫の原料を仕込んで別の倉庫にしまっておけばいいし、拠点に運ぶにしてもとりあえず工場の倉庫から必要な分だけ持っていけばいい。
めっちゃ簡単じゃないですか!
とはいっても、どの原料Aをどれだけ料理B用に仕込むのか、各拠点が何をどれだけ必要としているのか、食品は長期間保存できないのでいつどれだけ仕入れてどれだけ仕込むのか、など、
この仕組みだけでは解決しない問題もあります。
まだ問題はあれど、それぞれの担当の人のする仕事がかなり簡単になった点は凄いところですよね。
企業のデータ分析をするときに、整理されたフォルダだとエンジニア側は感動するんじゃないでしょうか。
どこにどんなデータがあるか誰かに聞くまでもなく見ればわかるって凄くないですか?
ええ、それを実現しようとしているのがデータレイクです。
改めてデータレイクとは
ここまでの話を見ていただいた皆様なら、このスライドの図の意味がご理解いただけているのではないでしょうか?
データレイクではデータ保存は生データと加工済みデータで分けて保存されます。
アプリなどから収集したデータは生データ置き場にそのまま保存します。
生データは分析用途に応じて加工され、生データと分けて加工済みデータを保存します。
分析者は対応した加工済みデータを取り出して分析します。
それぞれの工程が独立して稼働できるので、やることもシンプルで分かりやすいですね。
データによっては新鮮なうちに分析に出したいこともあるでしょう(リアルタイムであることを重視する分析とか)。
その場合はデータレイクを介さず、収集からそのまま加工分析まで流します。
逆に言えば、リアルタイムの必要性がそこまで高くないなら、データレイクの仕組みはとても便利です。
データウェアハウスとの違いは?
データウェアハウスの話をちらっと出しましたが、データレイクとデータウェアハウスは一緒に出てくることも結構あるのではないでしょうか。
データウェアハウスは、分析のために事前に加工しておいたデータを保存しておく場所を指します。
データレイクは生データも加工済みデータもまるっと保存する(さすがにフォルダ分けはする)場所ですが、データウェアハウスは一つの分析ごとに用意する加工済みデータを保存する場所です。
データレイク勉強中に思ったこと
おまけです。
勉強中に自分が思ったことを載せておきます。
終わり。
いかがでしたでしょうか。
私はデータレイクを勉強したことでデータ分析を全体から理解できたように思います。
別視点からの理解が進んだことで、普段の分析の時も考え方が少し変わったような気がします。特にファイルとフォルダ整理。
何にしてもシンプルで分かりやすいってのは大事ですね。
データレイクの構築はクラウドを利用するのが一般的みたいですね。
最近はAWSを使ったデータレイク構築の勉強を進めています。
S3はもちろん、GlueとかAthenaとかRedshiftとかQuickSightとか…。
その辺も使ってみて便利だなーと思えることが結構あったので、そのうち各サービスの基本的な使い方の解説記事とか書くかもしれません。
