【プログラミング未経験者用】データ分析に興味がある方やこれからはじめる方へ


【プログラミング未経験者用】データ分析に興味がある方やこれからはじめる方へ

巷では「データバンク」や「データサイエンス」「人工知能」という言葉が飛び交い、「チョット自分も時代の波において行かれないようにがんばろう」と思っている方も多いと思います。
しかし、「データサイエンス」や「データ分析」どうでしょう?イメージ湧きますでしょうか?
今回は、プログラミング未経験者で「データサイエンス」「データ分析」に興味がある方向けに、情報をまとめてみました。

目次
  1. 【プログラミング未経験者用】データ分析に興味がある方やこれからはじめる方へ
  2. データ分析とは
  3. データ分析が必要な理由
  4. データ分析とデータサイエンスとコンサルティングとマーケティング
  5. データ分析のスキルホルダーについて
  6. 理想とするデータ分析業のイメージ
  7. データ分析スキルを習得する方法
  8. データ分析が活躍するフィールド
  9. ちょっとデータ分析やデータサイエンスを体験
  10. まとめ

【プログラミング未経験者用】データ分析に興味がある方やこれからはじめる方へ

データ分析とは

image

データ分析というと聞き慣れないので 肩 に力が入るかもしれませんが、「水の分析」や「空気の分析」というとどうでしょう。イメージ湧きませんか?データ分析も同じように「 データ の 分析 」と分けて考えると馴染みやすいかもしれません。

このデータには、どんな種類のデータがどれぐらい入っているか、そういったことを考える、行うことがデータ分析といえるでしょう。 そしてそのデータを元に「もっとこの数値を上げたい」「もっとここの数値を下げたい」「本当にこの平均値や算出値は正しいのか?」「来年も同じような数字か?」と考えるようになったら、データサイエンスの出番、というわけですね。

いきなり標準偏差や回帰分析、という難しい言葉を聞くとちょっと抵抗を感じますので、まずは一呼吸おいて「データ分析」という言葉に馴染むことが大事と思います。

データ分析が必要な理由

image

最大の理由は、データが増えている、そしてこれからも増えるからです。

まずデータについては世界最大級のデータ保有&処理をこなす Google が参考になるでしょう。 Googleの保有&処理するデータを正確に把握することは難しいですが、参考値がありましたのでご紹介します。

【保有データ】
10〜15エクサバイト(Exabytes)、データ管理施設はサッカー場 20個分の広さ

1 Exabytes = 1,000,000 TB = 1,000,000,000 GB

【処理】
1 秒間に 4万件以上の検索処理、 1日に換算すると 35億件、 年間換算では 1.2兆件以上

参考ページ:HESHMORE

Googleだけでこのデータ量です。これに Amazon や Facebook、 twitter 、 Rakuten 、 Uber 、各国政府公開データを合わせると天文学的な数値に。 またこの数字は今後も上昇基調です。IoT や 5GBネットワークなど色々ありますが、単純にスマホの台数もこれから増えると予測。日本のスマホ普及率は、52%ぐらいですが、インドは 29%、中国は 56% 、パキスタンは 17% * とまだまだ上昇余地は世界的にあり、それに伴ってデータ量も増えると予測。

そして今、このデータをビジネスに活かす動きが活発で 2017年には 15兆円規模だったデータ活用市場が 2022年には 26兆円規模に*。 上昇基調の市場とは裏腹にそれを支える技術者が少ない、そのためデータ分析やデータサイエンスできる人が求められている、という背景がありますね。

-- Google以外の参考データ量 --

  • YouTube: 69,000時間/日 分の動画がアップロード
  • Facebook: 5,000 万/日 のいいね!

参考:WaterfordTechnologies

データ分析とデータサイエンスとコンサルティングとマーケティング

image

データ分析に興味を持った方の中には、「データサイエンス」や「データサイエンティスト」といった似たような言葉を見た方も。パッと見は同じような言葉に思えますが、役割は違います。今後データ分析を極めるのか、それともデータサイエンティストになるのかブレないようにする、そしてモチベーションを高止まりさせるためにもそれぞれの言葉の意味を把握しておきましょう。

【データ分析】

手元にあるデータから必要なファクターを整理し、データサイエンスのための下準備をする作業。もしくは何だかの算出値の信ぴょう性や中身を確認する作業。使用するデータは、主に付与された特定データ。

【データサイエンス】

目的達成に必要なデータの種類を検討し、算出、傾向把握、そしてビジョンを描く人。使用するデータは任意。

【コンサルティング】

クライアントの要求に応えるべく、市場データ・売上データ・未確認のデータ・スタッフの情報・今後の市場予測から打開策を検討、そのルーティングを処理する仕事。使用するデータは任意。

【マーケティング】

自社サービスと市場ニーズの乖離を把握し、近似させるための仕事。使用するデータは任意。

以上をまとめると、データサイエンティストになるためにはデータ分析のスキルが必要で、コンサルティングやマーケティングには必ずしもデータ分析は必要でない、ということです。ただし、データ分析スキルがあった方がより説得力のある提案をできることは間違いないでしょう。

データ分析のスキルホルダーについて

image

これからデータ分析を学ぶにあたり「まわりの様子」も気になるはず。データ分析ホルダーの市況を以下にまとめます。と、その前に「データ分析」は2012年高校1年の 数学I で単元授業として提供されています。平成生まれの方、覚えていますか?

データ分析を教える国内の大学 37校*

学部は、データサイエンス学部や情報処理学部など違いはありますが、学校で「データ分析」を習得している人もいます。

データ分析できるフリーランス
Upwork 1000
クラウドワークス 154
ランサーズ 798

数値に結構ムラがあります。これは「データ分析」でフリーランスを検索した結果、「Googleアナリティクスのデータ分析スキル」「データ収集のデータ分析スキル」「人工知能を活用したデータ分析スキル」と該当するデータ分析事態が多ジャンルになるためです。ある意味「データ分析」って多くの場面で必要で、習得する価値はあるということではないでしょうか?

データ分析の資格ホルダー

データ分析専用の資格はありませんが、近似する資格として「統計検定」という資格があります。1級から4級までのグレードに加えて、統計調査士や専門統計調査士という資格も。2011年から本資格はスタートして、現在まで 15,000以上の合格者を輩出しています。

理想とするデータ分析業のイメージ

image

データ分析、という言葉の定義が広い中、「こんなことができたらカッコいいのにな」とぼんやりイメージをお持ちの方もいらっしゃるのでは?

以下に最近のデータ分析を活かしたカッコイイ事例をご紹介。

Microsoftはサッカー・ワールドカップの優勝国を当てた

すこし前の 2014年になりますが、サッカー・ワールドカップの優勝国を Microsoft が当てました*。勝率予測値は 60% 。Microsoft は、自社の検索エンジン bing や 人工知能ソフト Cortna を活用して情報収集&処理。現在では Python が使えれば、自分でも機械学習を駆使して勝率を予測できます。これについては文末にご紹介。

次のエルニーニョ現象を予測

日本ではあまり騒がれないエルニーニョ現象(El Nino)。しかし、その被害は甚大で、2016年には中国で洪水が発生し 約 300名が亡くなり 約 4.3兆円の被害額。他にはベトナムやペルーなど太平洋に関係する国々がエルニーニョに敏感。

そんな中、シカゴ大学の数学&コンピュータ工学教授 Rebecca Willettさん率いるチームが、次のエルニーニョ現象発生を予測。非常に複雑な気象予測を機械学習やデータ分析を駆使して算出。世界平和にデータ分析が活用されているイイ事例ですね。

参考:University of Chicago News

この他にも MRI の画像解析から人間では見つけにくい脳の異常を発見したり、画像や動画から異常を検出したり、とデータ分析の活用範囲は拡大を広げています。

データ分析スキルを習得する方法

image

ここまでご覧頂いて「早くデータ分析したい」「データ分析スキルを身につけたい」と考える方も。まず既卒や在学中の方でデータ分析を専門としていない場合、以下の方法でデータ分析スキルを習得できるでしょう。

  • 専門のスクール
  • 研修
  • 独学
  • プログラミングスクール + 独学

個人向けのデータサイエンス&データ分析スクールは、2018年に開校したデータミックスのみ。

研修は、対法人が対象で三菱総研DCS㈱が有名。独学については、参考書やWeb、YouTubeにUdemyなどが有効手段に。

最後のプログラミングスクール + 独学は、データ分析でよく使われる Python や Excel VBA などはプログラミングスクールで、統計学については自分で、といった具合。

自分の基礎学力と予算、それから学習に費やせる時間や将来の展望像、など各人のステータスによってどれがベストマッチするか検討したいですね。これもチョットしたデータ分析と言えるでしょう。

データ分析が活躍するフィールド

image

データ分析はあらゆる場面で有効と考えられますが、市場ニーズは主に以下の内容。データ分析を学びたい理由と照らし合わせて見直しておくと良さそうですね。

目的方法代表的な分析手法
Webサイトを改善したいアクセス解析キーワード分析やページ解析
顧客や市場を詳しく把握したいマーケティング分析顧客分析や市場分析
未来を予測したい機械学習確率分布やポアソン分布など
傾向や結論を出したいデータサイエンス回帰分析やK-最近傍法など

ちょっとデータ分析やデータサイエンスを体験

image

『 理想とするデータ分析業のイメージ』でご紹介したサッカーの勝率について、データ分析&データサイエンスしてみます。

  • 元のデータ:2012年から2018年9月までのJリーグ 2065試合結果
  • 目的: 対戦結果を予測する
  • 実行環境: Jupyter Notebook(Anaconda)
  • プログラミング言語: Python 3

まず元データを見てみますと 21項目のデータが存在します。このデータの傾向を把握して、予測計算にどの項目が有効か、検討することがデータ分析といえるでしょう。いくつかの参考チュートリアルを見てみますと、ホームグラウンドでのゴール数とアウェイグラウンドでのゴール数が試合結果に影響していると紹介。早速ゴール数の傾向を確認してみましょう。

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn
from scipy.stats import poisson,skellam

J1218 = pd.read_csv("http://football-data.co.uk/new/JPN.csv")
J1218 = J1218[['Home','Away','HG','AG']]
J1218 = J1218.rename(columns={'FTHG': 'HomeGoals', 'FTAG': 'AwayGoals'})
J1218.mean()

-- 実行結果 --


HG 1.420339
AG 1.251332
dtype: float64

ホームグラウンド(HG)で試合した方が、0.2ポイントほどゴール数が多いようです。

次にポアソン分布という統計手法を使って、ゴールの傾向を把握。そしてその結果を元にスケラム分布で引き分けや勝率を計算。ちょっと難しいステップですが、コードにすると以下のように。

勝率の算出

skellam.pmf(1,  J1218.mean()[0],  J1218.mean()[1])

引き分け率の算出

skellam.pmf(0.0,  J1218.mean()[0],  J1218.mean()[1])

-- 実行結果 --


0.21550036745931306

0.25868142451374487

ここまでがゴール数と勝率、サッカー場から導き出した傾向です。ここまでがデータ分析と言えるでしょう。次の予測についてはデータサイエンスの出番。ちょっと難しい係数演算式など登場しますが、とりあえずやってみましょう。チュートリアルでは「ポアソン回帰モデル」を使って各チームのゴール数の傾向を確認。

import statsmodels.api as sm
import statsmodels.formula.api as smf

goal_model_data = pd.concat([J1218[['Home','Away','HG']].assign(home=1).rename(columns={'Home':'team', 'Away':'opponent','HG':'goals'}),J1218[['Away','Home','AG']].assign(home=0).rename(columns={'Away':'team', 'Home':'opponent','AG':'goals'})])

poisson_model = smf.glm(formula="goals ~ home + team + opponent", data=goal_model_data, family=sm.families.Poisson()).fit()
poisson_model.summary()

-- 実行結果 --


image

表下の coef という項目がゴール数の傾向を表しています。Kawasaki Frontaleが 0.5423 といい傾向を示し、Tokushima が -0.7508 と悪い傾向を示しましたので、この 2チームで勝率を予測してみます。

まずは Kawasaki のホームグラウンドで対戦した場合、 Kwasaki の得点数は 2.98 と予測。逆に Tokushima の得点数は 0.4。

poisson_model.predict(pd.DataFrame(data={'team': 'Kawasaki Frontale', 'opponent': 'Tokushima','home':1},index=[1]))
poisson_model.predict(pd.DataFrame(data={'team': 'Tokushima', 'opponent': 'Kawasaki Frontale', 'home':0},index=[1]))

-- 実行結果 --


1 2.989644
dtype: float64

1 0.428027
dtype: float64


あとは難しい行列式を駆使して Kawasaki の勝率を予測。

def simulate_match(foot_model, homeTeam, awayTeam, max_goals=10):
    home_goals_avg = foot_model.predict(pd.DataFrame(data={'team': homeTeam,  'opponent': awayTeam,'home':1},index=[1])).values[0]
    away_goals_avg = foot_model.predict(pd.DataFrame(data={'team': awayTeam, 'opponent': homeTeam,'home':0}, index=[1])).values[0]
    team_pred = [[poisson.pmf(i, team_avg) for i in range(0, max_goals+1)] for team_avg in [home_goals_avg, away_goals_avg]]
    return(np.outer(np.array(team_pred[0]), np.array(team_pred[1])))
simulate_match(poisson_model, 'Kawasaki Frontale', 'Tokushima', max_goals=3)

Kawa_Toku = simulate_match(poisson_model, "Kawasaki Frontale", "Tokushima", max_goals=10)
np.sum(np.tril(Kawa_Toku, -1))

-- 実行結果 --


0.87917335075774927

引き分けは、

np.sum(np.diag(Kawa_Toku))

-- 実行結果 --


0.090238851599325334

Kawasaki が負ける確率は

np.sum(np.triu(Kawa_Toku, 1))

-- 実行結果 --


0.030303749544069402

恐ろしいことにほぼ Kawasaki 対 Tokushima の場合、 Kawasaki が勝つという予測に。 この予測精度が正しいかどうか確認する必要がありますが、今回はこれまでにさせて頂きます。 サッカー以外にも野球やバレーなど色々なデータに対して予測してみたくなりますね。


元データ: http://football-data.co.uk

参考チュートリアル: Google BlogYouTube/ Siraj RavalさんDavid Sheehan RSS


AIエンジニアに必要なスキルが身に付く

無料カウンセリングはこちら

まとめ

データ分析の学び方は色々あると思いますが、今回のようにまずやってみるところから始めてみてもいいと思います。ポアソン分布や回帰分析など詳しいことは分からなくても、Pythonプログラムが自分に代わって演算してくれます。これは Excel では難しく、 Python 特有のメリット。

実際に自分でデータ分析やデータサイエンスのおもしろさを体験してから、本格的に学習してみると案外難しい参考書も攻略できるかもしれませんね。そして気づけば自分も「データ分析者」「データサイエンティスト」として活躍できるかもしれません。

今回ご紹介したサッカーの予測も、Python の基礎があったため 30分程度で作業完了。データ分析やデータサイエンスに必須とも言われる Python、始めてみませんか? プログラミングスクールの CodeCamp を利用すると オンライン × マンツーマン で効率よく Python スキルを習得できると思いますよ。


関連記事

オシママサラ
この記事を書いた人
オシママサラ
まずは7日間お試し!人気プログラミング講座を無料公開中
オンライン・プログラミングレッスンNo.1のCodeCamp