本記事は『図解まるわかり データサイエンスのしくみ』の「第1章 データサイエンスを支える技術~需要が高まる未来の必修科目~」から一部を抜粋したものです。掲載にあたって編集しています。
21世紀の資源
データと情報の違いとは?
私たちの生活の中では、「予測」や「見積もり」が必要な場面がたくさんあります(図1-1)。このとき、経験や勘に頼る方法もありますが、過去のデータを探したり、アンケートやインターネットなどを使ったりして、必要な情報を収集します。正確なデータが多く集まると、予測や見積もりの精度が高まると期待されるため、データは「21世紀の資源」ともいわれています。
![図1-1 予測や見積もりが必要な場面 図1-1 予測や見積もりが必要な場面](http://cz-cdn.shoeisha.jp/static/images/article/16178/16178_01.png)
このときに気になるのが、データと情報の違いです。「データ=発生した状態」「情報=人が使える状態」とよくいわれますが、そう考えると、人が使える状態になっていないものがデータです。直感的なイメージとして、データは「数字の羅列」であり、「一定の形式に沿って集めてきたもの」でしょう。コンピュータはデータを扱いやすい一方で、情報は「人間が使いやすい形に整形したもの」「相手に次の行動を起こさせるために使うもの」ということができるでしょう(図1-2)。
![図1-2 データと情報の違い 図1-2 データと情報の違い](http://cz-cdn.shoeisha.jp/static/images/article/16178/16178_02.png)
データから価値を見いだす職種
データ分析における花形の職種
データサイエンスの技術を使って、データ分析などの作業を実施する人をデータサイエンティストといいます。「21世紀でもっともセクシーな職業」と表現され、話題になりました(*1)。
*1 出典: Davenport, Thomas H., and D. J. Patil. "Data Scientist: The Sexiest Job of the 21st Century." Harvard Business Review 90, no. 10 (October 2012): 70‒76.
ビッグデータに対し、サイエンスやエンジニアリング、ビジネスといった知識を組み合わせて、洞察を得ることが求められます。しかし、これらの知識すべてを1人で身につけるのは困難です。ビジネスといっても業務によって求められる知識が異なるため、得意分野を持つ人が集まってチームを作り、部署として分析を行うことが多いです(図1-7)。
![図1-7 組織でのデータサイエンティストの構成 図1-7 組織でのデータサイエンティストの構成](http://cz-cdn.shoeisha.jp/static/images/article/16178/16178_03.png)
データサイエンティストを支える職種
データサイエンティストは膨大なデータに対する分析が得意ですが、そもそもデータがないと何もできません。そこで、データサイエンティストを支える役割として、データエンジニアと呼ばれる職種もあります。
分析するためのデータを加工して整形するだけでなく、サーバーなどのインフラの構築や、クラウドを活用したデータ分析の基盤を整えることで、データサイエンティストが分析しやすい環境を用意することが主な業務です。その業務の幅は広く、ITに関する豊富な知識が求められます(図1-8)。
![図1-8 データエンジニアに求められる知識 図1-8 データエンジニアに求められる知識](http://cz-cdn.shoeisha.jp/static/images/article/16178/16178_04.png)
データ分析からコンサルティングまで対応する職種
データサイエンティストと似たような職種として、データアナリストがあります。名前の通り、データを分析する人を指す言葉で、データマイニングなどの手法を用いて分析だけでなくコンサルティングを行う人を指します。
データエンジニアとデータアナリストの両面を持つような人材のことをデータサイエンティストと呼ぶこともあり、それぞれの職種の上位に位置づけている企業もあります。
データのためのデータを知る
組織でのデータを一元管理する
企業がデータベースを作成するときに、共通で必要となるようなデータをマスターデータといいます。例えば、顧客の名前や住所などの情報が登録されていないと、商品を購入されても発送できません。また、商品の情報が登録されていないと、販売データを登録できません。
このように、マスターデータは基礎となるデータであり、企業では非常に重要です。一般的に「マスター」や「マスタ」と省略して呼ばれることが多く、「顧客マスター」や「商品マスター」などのテーブルが作成されます。そして、これらのマスターデータを他のテーブルと関連づけて、さまざまなアプリケーションが実現されています(図1-17)。
![図1-17 マスターデータの連携 図1-17 マスターデータの連携](http://cz-cdn.shoeisha.jp/static/images/article/16178/16178_05.png)
逆に、同じデータが複数の場所に保存されている、部署によってIDの読み替えが必要である、などマスターデータが整っていない場合には、それぞれのデータを統合する作業が必要になります。
データのためのデータ
データを効率よく管理するには、データにどのような項目が存在し、どのような書式で格納されているのか、といったことを把握する必要があります。データによってその内容は異なるため、それぞれのデータで項目や書式を管理する必要があるのです。このために使われるのがメタデータ で、データのためのデータと呼ばれます(図1-18)。
![図1-18 メタデータ 図1-18 メタデータ](http://cz-cdn.shoeisha.jp/static/images/article/16178/16178_06.png)
画像、音声、動画といったファイルには、ファイルの先頭にメタデータを格納する領域が用意されており、データと合わせて1つのファイルに保存されています。
一方、データベースの場合には、DBMS(データベースマネジメントシステム)にてメタデータを管理するデータディクショナリという機能があり、そこで保管しています。
データを1カ所にまとめる
データを分析する基盤を作る
データがいろいろな場所にあると、そのデータを組み合わせた分析は困難です。そこで、必要に応じていつでもデータを取り出せるように蓄積するシステム群をデータ基盤(データ分析基盤)といいます(図1-19)。
![図1-19 データを蓄積しておくデータ基盤 図1-19 データを蓄積しておくデータ基盤](http://cz-cdn.shoeisha.jp/static/images/article/16178/16178_07.png)
データを蓄えるデータベースだけでなく、それを処理するサーバーや、分析結果を可視化するプログラムまで含めて、一元管理するしくみを備えているものが多いです。クラウド環境を使えば、分析者は手元に高性能なコンピュータを用意することなく、高速な分析環境を使用できます。
データの状況を一画面に表示する
さまざまな分析をしていると、その結果を1つずつ確認していては、手間がかかります。そこで、グラフや集計表などを一画面にまとめて表示することで、それぞれのデータを個別に確認する必要がなくなり、複数のグラフを見比べることも可能になります。
このような画面をダッシュボードといい、見る人に合わせて必要な情報を整理するために使われます。経営者であれば売上や株価などを一覧にしたもの、現場の担当者であれば現在のシステムの稼働状況や当日の作業目標などを一覧にして表示します(図1-20)。
![図1-20 ダッシュボードのイメージ 図1-20 ダッシュボードのイメージ](http://cz-cdn.shoeisha.jp/static/images/article/16178/16178_08.png)
データを自動的に加工する
データ基盤にはさまざまな情報源からデータを収集、加工して蓄積しますが、この作業を手動で実施していては手間がかかります。大規模なシステムの場合、毎日のようにデータが増えていく中で、いつでも分析するためには作業を自動化しておく必要があります。
このようなしくみをデータパイプラインといい、バッチ処理として毎日夜間に1日分のデータを加工して蓄積するなどの方法が使われます。
効率のよい処理手順を考える
アルゴリズムとデータ構造を知る
問題を解決するための手順や計算方法をアルゴリズムといいます。ある問題が与えられたとき、同じ入力に対して同じ答えが得られる場合でも、その答えを導き出す手順はいくつも存在します(図1-21)。しかし、手順さえ明確にしておけば、誰がやっても同じ答えが得られます。
![図1-21 同じ答えが得られる方法は何通りもある 図1-21 同じ答えが得られる方法は何通りもある](http://cz-cdn.shoeisha.jp/static/images/article/16178/16178_09.png)
プログラミングの場合は、コンピュータを使って問題を解決する手順や、プログラムでの実装を指す言葉として使われます。同じ入力に対して同じ結果が得られる複数の手順があったときに、そのソースコードの書き方や処理手順によって実行にかかる時間や必要なメモリ容量は異なるため、書き方や処理手順を工夫すると、処理時間を大幅に短縮できる可能性があるのです。
そして、プログラムでどのようにデータを保持するのかによってもアルゴリズムが変わります。例えば、多くのデータをメモリ上に格納する場面を考えます。連続した領域にデータを格納して番地でアクセスするのか、次のデータの位置を表すデータを付加して前から順にアクセスするのかによって、プログラムの処理方法も変わります。このようにプログラムで扱うときのデータの格納方法をデータ構造といいます(図1-22)。
![図1-22 データ構造の例 図1-22 データ構造の例](http://cz-cdn.shoeisha.jp/static/images/article/16178/16178_10.png)
アルゴリズムの処理時間
あるアルゴリズムで実装したプログラムの実行時間は入力データの量によって大きく変わります。例えば、10件のデータでは一瞬で処理ができても、1万件のデータでは処理に時間がかかることは容易に想像できます。
このとき、入力件数によって処理時間がどのくらい変わるのかを考えることが大切です。データ量が10倍、100倍になったときに処理時間も10倍、100倍になるのか、100倍、1万倍になるのか、それによってアルゴリズムのよさを比較します。データ分析においても、分析前に処理時間を予測しておかないと、処理に膨大な時間がかかってしまう可能性があります。
楽しみながら分析手法を学ぶ
多くのデータ分析者が集まるコミュニティ
データサイエンスを勉強しようと思ったとき、分析の手法を知るだけでなく、実際に分析するためのデータも必要です。公開されているオープンデータを使う方法もありますが、企業などが分析スキルの向上を目的にデータや問題を提供している場合があります。
その代表的な例がKaggleで、さまざまなデータを用いたコンペ(競争)が行われるだけでなく、他の人が書いたコードを見たり、議論に参加したりして、データサイエンスを学べるコミュニティです。コンペに参加するには会員登録をするだけなので初心者でも気軽に参加でき、成績のよい分析モデルに対して賞金が出るものもあります(図1-29)。
![図1-29 Kaggleのサービス 図1-29 Kaggleのサービス](http://cz-cdn.shoeisha.jp/static/images/article/16178/16178_11.png)
ルールなどは英語で書かれているため、簡単な英語を理解できる必要はありますが、日本語で活動しているコミュニティも存在するため、最初はそういったコミュニティに参加してみるのも学ぶための1つの方法です。
競争で問題を解く
データ分析に限らず、プログラミングの技術やアルゴリズムの知識を身につけたい場合、パズルなどの問題を解く方法は有効です。コンテスト形式で出題された問題を解くプログラムを短時間で正確に実装するものとして競技プログラミングがあります(図1-30)。
![図1-30 競技プログラミングの流れ 図1-30 競技プログラミングの流れ](http://cz-cdn.shoeisha.jp/static/images/article/16178/16178_12.png)
勝つためには、実装するまでの時間が短いことも重要ですが、処理の内容を工夫して、短時間で答えが出るようなプログラムを実装することも求められます。実務に直結するとはいえませんが、プログラミングの初心者から上級者まで幅広く楽しめるサイトがいくつか存在しています。
競技プログラミングと似たようなコンテスト形式の大会として、セキュリティ業界ではCTF(Capture The Flag)が開催される場合があります。脆弱性を狙った攻撃を試す技術力だけでなく、ネットワークの設定や暗号の理論など幅広い知識が求められることが特徴です。