Upgrade to Pro — share decks privately, control downloads, hide ads and more …

一橋大学 #経済学のための実践的データ分析 2020冬: 2/12

yasushihara
November 09, 2020

一橋大学 #経済学のための実践的データ分析 2020冬: 2/12

一橋大学「経済学のための実践的データ分析」2020冬: 2/12
2.統計処理と回帰分析
2.1 コンピュータとプログラミング
2.2 プログラミング言語の入り方
2.3 Python で統計処理
2.4 Python で重回帰分析

一橋大学大学院経済学研究科
原泰史
[email protected]

yasushihara

November 09, 2020
Tweet

More Decks by yasushihara

Other Decks in Education

Transcript

  1. 今日の内容 • 10:30-10:45 • プレ講義 [録画なし] • 10:45-11:05 • 2.1

    コンピューターとプロ グラミング [録画あり] • 11:05-11:10 • インターミッション[録画な し] • 11:10-11:30 • 2.2 プログラミング言語 のイロハ [録画あり] • 11:30-11:35 • インターミッション 2[録画なし] • 11:35-11:55 • 2.3 Python で統計 分析 [録画] • 11:55-12:00 • インターミッション3 [録画なし] • 12:00-12:20 • 2.4 Python で重回 帰分析 [録画]
  2. そもそもコンピューターとは (を、とても大まかに把握する) • あまたある事象を情報にして、 かつすべてを2進数で処理でき るようにしたもの • 電気が流れている=0, 流れてい ない=1

    と区別する(ものすごく 単純化すると) • 2進数と10進数 • 1と0 だけなので、シグナルでも、 電気信号でも、情報をやり取りす ることができる • 2進数と表記がめんどいので、 16進数を使う • ここから先は情報の講義で是非細 かく聴いてみてください 10進数 2進数 0 0 1 1 2 10 3 11 4 100 5 101 15 1111
  3. フォンノイマン型コンピューター • 制御装置 • 演算装置 • 記録装置 • バス から構成される。

    ・命令 (command) ・データ (data) が存在する。 記録装置からデータを取り出し、命 令を演算装置が実行する。これらを を制御装置が管理する。
  4. コンピューター産業 のレキシ • 1950年代 • 巨大なメインフレーム • 1960年代 • DEC

    やIBM などによる、商用メ インフレーム • 1970年代 • APPLE II の登場 • 1980年代 • マッキントッシュ, DOS/V 互換 機 • 1990年代 • Windows 95 • 2000年代 • Windows XP, Mac X • 2010年代 • スマートフォン, iPhone, Android
  5. ALU

  6. Decline of one-firm leadership Top Companies in the IT Services

    Industry (2009) # IT Service Company Services Revenue mln US$ Services Revenue growth Total Revenues mln US$ Services Revenue share 1 IBM 39,264 9% 103,630 38% 2 HP 27,745 45% 117,837 24% 3 Fujitsu 27,102 20% 53,313 51% 4 CSC 16,680 -1% 16,680 100% 5 Accenture 15,985 9% 22,784 70% 6 Northrop Grumman 12,454 6% 33,887 37% 7 Hitachi 12,318 21% 113,525 11% 8 Capgemini 11,154 -5% 12,123 92% 9 NTT Data Corporation 10,498 29% 12,368 85% 10 NEC 9,103 24% 47,538 19% 11 Ericsson 8,951 -6% 26,524 34% 12 BT Global Services 8,375 -18% 31,019 27% 13 Atos Origin 7,827 -9% 7,827 100% 14 T-Systems 7,660 -11% 15,325 50% 15 Siemens 7,590 -8% 107,396 7% 16 Lockheed Martin 7,338 32% 42,731 17% 17 Nokia Siemens Networks 7,103 9% 21,309 33% 18 SAIC 6,983 13% 9,975 70% 19 Microsoft 6,463 16% 61,900 10% 20 ACS 6,342 6% 6,342 100%
  7. オープンソースソフトウェアの特徴 • It makes possible to develop high reliability software

    • – Have independent-minded incentive for developer • – reuse current (software) asset • – Flexible bugfix • – High reliability • – Using worldwide network (『Delphi Effect』) • Agile Development • Low Cost development • Creating new business by means of Open Source Software • User activity could be independent from developer/resellers strategy.
  8. ネットワーク効果 • In economics and business, a network effect (also

    called network externality or demand- side economies of scale) is the effect that one user of a good or service has on the value of that product to other people. • When network effect is present, the value of a product or service is dependent on the number of others using it.
  9. カスタマーがオープンソースを選ぶ理由 • 無償だから • サンクコストがほぼ0 • ユーザーコミュニティが存在するから • ソフトウェア開発に主体的に参画できる •

    困ったことや迷ったことを交換できる • アジャイル開発 • すばやく解決策を用意してくれる • 特定企業の開発の方向性に依存しない • GAFA?
  10. オープンソフトウェアのビジネスモデル (in early 2010s) 1. ネットワーク効果や two-sided network が成り立つように、アー リーアダプターな顧客を捕まえ、コミュニティを形成する

    2. “認証サービス”を導入する。コミュニティの全員ではなく、特定 グループのニーズを満たすようなサービスを企業の有償サービス として提供する 1. Certificated Service 2. Support Service 3. Certificated Engineer 4. Certificated Reseller 3. 認証サービスをベースとした、有償ツールやサービスを提供する
  11. プログラミングの方式 • インタープリター方式 • 命令を、ひとつひとつ機械語に翻訳する • Python や BASIC, Perl

    など (あとRも) • 作成したソースプログラムを、すぐさま実行できる • コンパイル型に比べると実行速度が遅い • この講義で採用している方 • コンパイル方式 • 命令をいったん機械語に翻訳し、その機械語になったプログラムを実行する • コンパイル; ソースコードを機械語にすること • コンパイラー; 翻訳するプログラム • C や C++, Fortran, COBOL など • インタープリター方式に比べると、実行速度が早い • 一橋教養課程で教えている方 • 中間方式 • JAVA (仮想マシン上でコンパイルしたプログラムを実行する)
  12. まとめ • 現状のコンピューターは命令 (command) をしたら動きます • ただし、正しい命令 (command) を投げたら動きます •

    正しい命令の投げ方を覚えていくのが重要です • オープンソースを使うと、コストゼロでプログラミングを始め られます。 • 会社に入っても、必要な分析ルーチンを自分で組むことが出来 るようになります
  13. まずは基本をやってみよう • Print 文 • 四則演算 • 論理演算 • 関数の作成

    • For 文 • While 文 など、どんなプログラミング言語でも使う主なメソッドをpython で実行出来るようにします。これと、2-3. から本格的に使い始める パッケージを組み合わせると、この講義内で実行するメソッドは概 ね実行出来るようになります。
  14. サンプルファイル • Google Colaboratory版 • https://colab.research.google. com/drive/1ZMXOZx6uvICKN cH58hDti9xw3yKb8VMi?usp= sharing •

    Jupyter Notebook版 • https://www.dropbox.com/s/x 4avqccf9e6f993/Python%20% E3%81%A7%E6%89%8B%E5% A0%85%E3%81%8F%E3%83% 97%E3%83%AD%E3%82%B0% E3%83%A9%E3%83%9F%E3% 83%B3%E3%82%B0%E3%81% AE%E5%9F%BA%E7%A4%8E.i pynb?dl=0
  15. プログラミングの勉強の仕方 1. とりあえず納期の短い仕事を抱える (アカデミアっぽくない けど) 2. Python で出来ることをあえて Excel でやることで、自分の時

    間を無駄にしていることに気づく 3. そうすると、がんばってプログラミングスキルを磨くことの 重要性に気づく 4. 手を動かす。解説サイトをググったり、本を読みながら、ひ とつひとつバグを潰していく 5. 動くとなんか嬉しい 6. 1.-5. を繰り返す
  16. ここからの主な流れ • ここまでに説明した関数 (for や while や if etc…) を組み合わ

    せれば、複雑なコーディングを自分で書くことも出来るが、ま あすごい面倒。 • なので、数値計算ライブラリがある R や Fortran が好かれる場合も • なので、他の誰かが書いてくれたパッケージ (package) を利用 することで、手間を減らす。逆行列を導出して、回帰係数を求 める代わりに、そうした操作を一行のコマンドで実行できる package を import することで、作業を簡略化する
  17. 2.3と2.4の notebook Google Colaboratory 版 https://colab.research.google.com/drive/1 qeYXrHXGE5yTxP5SVSvfxK9zmmXnyokD Jupyter Notebook 版

    https://www.dropbox.com/s/xj4uhfr6ycpt4 21/Empirical%20Analysis%20for%20Econo mics%20%232.ipynb?dl=0
  18. Exercise 1: 1+1 = 2 を計算する • Jupyter notebook の

    in: に, 1+1 をタイプする • 2 がout: に出力される
  19. Exercise 2: 3*9-12+14/3 を計算する • Jupyter notebook の in: に,

    3*9-12+14/3 をタイプする • 19.66666… がout: に出力される
  20. Exercise 3(1): sin(1)+cos(2)+tan(3) を計算する Exercise 3(2): 円周率を確認する • Math パッケージをインポートする

    • python の場合, データ処理 etc… を円滑を行うためにはパッケージを インポートします. • ここでは, 数学関数の含まれる math パッケージをインポートして, 続 いて三角関数を計算してみます • Sin(1)+cos(2)+tan(3)を計算する • ついでに, 円周率を確認する • Out に以下の通り出力されます
  21. Panda パッケージを利用してみる • pandas • Python でデータ解析を行うためのパッケージ • Excel の表やSQL

    を直接取り込んで処理するのにピッタリ • データ構造 • 一次元: Series • 二次元: DataFrame (※. 個人的にはよく使います) • 行タイトルや列タイトルがつけられる • 文字列と数字を excel みたいに混在出来る • インポートの方法 • import pandas as pd
  22. Exercise (6): Pandas パッケージで行列を DataFrame に変換する • Pandas パッケージをイン ポートする

    • import pandas as pd • 先程作成した行列c を DataFrame に変換する • Data “F”rame になってるよう にチェック • 出力する • 行番号と列番号が付いているこ とが確認できる
  23. Exercise (6-2): 行番号と列番号を名称変更する • Pandas パッケージをイン ポートする • import pandas

    as pd • 先程作成した行列c を DataFrame に変換する • Data “F”rame になってるよう にチェック • 出力する • 行番号と列番号が付いているこ とが確認できる
  24. Exercise (6-3): 行番号と列番号を名称変更する • 行番号を変更する • df1.columns で指定 • (データフレーム名).変更箇所

    • 列番号を変更する • df1.index で指定 • (データフレーム名).変更箇所 • 出力して確認
  25. Exercise (8): DataFrame 内の要素について平均を求める • Statistics パッケージを用いる • statistics.mean の中に、平均を導出した

    い項目を指定する • 今回は坂本の値 • それを mean に代入して、 • Print で出力する
  26. Exercise (9): DataFrame 内の要素について中央値を求める • Statistics パッケージを用いる • statistics.median の中に、平均を導出し

    たい項目を指定する • 今回は坂本の値 • それを median に代入して、 • Print で出力する
  27. 回帰分析 • 変数 X, Y のデータがあるとき, データからY をX で説明する回 帰方程式と呼ばれる式を求めること

    • Y; 被説明変数 • X; 説明変数 • X と Y それぞれの観測数を i とすると、 • = 0 + 1 + , = 1,2, … , と書ける. 0 と1 は未知パラメータ. は誤差項または撹乱項となる.
  28. 回帰分析 (cont.) • 回帰分析における仮定 • Xi は確率変数ではなく, 固定された値をとる • 誤差項は確率変数であり,

    期待値は0 となる. すなわち, E( ) = 0 • 誤差項 と は無相関となる. ( , ) = = 0 • 誤差項の分散は一定となる. ( ) = 2 = 2
  29. 回帰分析 (cont.) • 最小自乗推定量 • ෢ 1 = σ(− ത

    )(−ത ) σ(− ത )2 = σ(− ത ) σ(− ത )2 • ෢ 0 = ത - ෢ 1 ത • ത および ത はそれぞれ , の標本平均となる. • 前述の仮定において, 最小自乗推定量は最良線形不偏推定量を満たす. (ガウス・マルコフの定理) • 決定係数 • 誘導系 (reduced form) の回帰式の説明力を示す値 • R2 = σ(෢ − ത )2 σ(− ത )2 = 1 − σ 2 σ −ത 2 , ℎ = − ෢ 0 - ෢ 1
  30. 単回帰分析を廻してみる • Y=αX+β をベタに求めてみましょう • 決定係数や係数を求める • 使うデータ • 落合博満(ロッテ,

    中日, 巨人, 日本ハム) の打率(X)と年俸(Y) • データソース • https://nipponbaseball.web.fc2.com/personal/batter/ochiai_hiromitsu.html
  31. Exercise: 単回帰分析を回す • avg とsalary をそれぞれ, Numpy x, yに変換する •

    x に, とりこんだ avg のデータを取り込み Numpy 化する • 回帰分析を lingregress で実施する • 回帰分析の結果を出力する (p値的に, 打率は年俸を説明できて いない可能性)
  32. Exercise: 単回帰分析を回す • x,y の散布図と回帰曲線を プロットして表示する • どうやら、打率は年俸を説 明出来ていない様子 •

    Self Exercise • 打率ではない、別の変数 (Ops やホームラン数) を 引っ張ってきて, 同じように 単回帰を廻してみましょう
  33. Exercise; 単回帰を回す alternative バージョン • statsmodels.api モ ジュールを使う • add_constant

    によって 定数項を追加する • Excel やStata で解析し たのと似たような表が出 力される
  34. 重回帰分析 • 複数の説明変数が被説明変数に影響を与えると推定する • 複数の説明変数を, 1 , 2 , …

    , と表した場合 • = 0 + 1 1 + ⋯ + + , = 1,2, … , と表される. 0 … は未知パラメータとなる. また, は誤差項である. • 仮定 • 説明変数1 , 2 , … , は確率変数ではなく, 固定された値を取る • 誤差項は確率変数であり, 期待値は0 となる. すなわち, E( ) = 0 • 誤差項 と は無相関となる. ( , ) = = 0 • 誤差項の分散は一定となる. ( ) = 2 = 2 • 説明変数は他の変数の一次結合として表すことはできない. すなわち, 0 + 1 1 + ⋯ + = 0 となる 0 , 1 , … , は 0 = 1 = ⋯ = = 0以外に存在しない. このことを, 変数間に多重共線性がないという.
  35. 重回帰分析 (cont.) • それぞれ, 以下の通りベクトルおよび行列を仮定する. • = 1 2 …

    , = 1 ⋯ ⋮ ⋱ ⋮ 1 ⋯ , = 0 1 … , = 1 2 … • 行列表示で表すと, • = + • = 0 • ′ = 2
  36. 重回帰分析 (cont.) • 最小自乗推定量 • ෡ = (′)−′ • 決定係数

    • R2 = σ(෢ − ത )2 σ(− ത )2 = 1 − σ 2 σ −ത 2 , ℎ = − ෢ 0 - ෢ 1 • ところが, 重回帰分析の場合, 説明変数を増やすと誤差項 σ 2 が小さく なり, 結果, 決定係数が大きくなる可能性がある. そこで, 自由度修正済 み決定係数を用いる • 2 = 1 − σ 2/(−−1) σ −ത 2/(−1)
  37. 重回帰分析 (cont.) • 多重共線性 • 0 + 1 1 +

    ⋯ + = 0; = 1,2, … , が成立するとき, 説明変数間に多重共線性があるという. • 多重共線性がある場合, ≠ 0であれば, = − 0 + 1 1 + ⋯ + −1 −1 となり, すなわち, を他の説明変数で説明できる. • 対処方法; • VIF を用い, 多重共線性のチェックを行う
  38. 重回帰分析を行う • サンプルデータ • Scikit-learn の住宅価格データ • ボストンの506地区について, 犯罪率や固定資産税率, 教師あたりの生

    徒数などの属性値と, 住宅平均価格をテーブルに • 目的変数を target, 説明変数を boston に振り分ける
  39. 重回帰分析を行う CRIM 町ごとの人口一人あた りの犯罪率 AGE 1940年以前に建てられ た、所有者が住む建物 の割合 ZN 宅地の比率。25,000平

    方フィート以上のゾー ンで数えた値 DIS ボストンの5つの雇用中 心からの距離 INDUS 町ごとの非小売業の面 積比 RAD 放射状幹線道路からの 距離 CHAS チャールズ川に道がつ ながっているか TAX 固定資産税率 NOX NOx 濃度 PTRATIO 町ごとの教師あたりの 生徒数 RM 住宅あたり部屋数 B 町ごとの黒人比率 LSTAT 低階層人口の比率 MEDV 所有者が住む住宅の価 値の中央値
  40. Exercise 重回帰分析を行う • データセットをsklearn から 取り込む • データを dset に放り込む

    • boston に説明変数を放り込 む • target に被説明変数を放り込 む • 結果をアウトプットする
  41. Exercise: VIF 値を確認する • 多重共線性のチェッ ク • statsmodels.stats.ou tliers_influence から

    variance_inflation_fa ctor を使って VIF(Variance Inflation Factor) を チェックする
  42. 次回予定.データの取得と前処理 (Web スクレイ ピング, RPA, API そして手入力) / SQL の使い方

    • データといっても、そのほとんどは実のところ定型化されていません。Web サ イトや書籍や国会図書館から手作業でひとつひとつ入力し、あるいは、Web ス クレイピングやAPI, RPA を用いて, Web から取得する必要があります。データ 分析は、こうした事前の作業が作業全体の60-70パーセントを占めています。こ うした手続きの具体例について、座学を用いて紹介した後、雑誌や Web に掲載 されたデータを取得する手法についてご紹介します。 • 後半では, SQL の使い方について概要を説明します。大量のデータを運用し活用 するためには、データベースを用いると便利です。Google BigQuery を用い、 データから必要な情報を抽出し、データ同士を接合する方法について簡単に解説 を行います。また続いて, Google Big Query を用いて解析を行いますまた, 必要 に応じて MySQL サーバおよび MySQL Workbench の導入方法、多変量データ の展開方法について解説します。