Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
企業等に蓄積された
データを分析するための
処理機能の提案
DG Lab 下野寿之
found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 1
本プレゼンテーションでは、次の状況に重きを置きま...
自己紹介 — データの分析歴
独自検索エンジンで計算したページランク
チケット販売会社の販売データ
インターネット上の書籍販売の5年分のデータ
採用時の心理テストと入社後パフォーマンスの関係
過去の特許の住所文字列データから緯度経度変換(GOG...
目次
I. 背景など (3 slides)
II. 蓄積されたデータ列の意味を解読する (7 slides)
III. 数から意味を見出そう (5 slides)
IV. 新しいソフトウェア (10 slides)
V. 補足 (5 slide...
断り書き
 計算機やソフトウェアなどは知っているものとします。
Unix を含む多数のオープンソースソフトウェアは前提知識のように話します。
SQL文の書き方は知っているものとします。
擬似乱数のような確率・統計・機械学習の基礎知識はあるもの...
近年、たくさんのデータが
企業に蓄積されている。
しかし、データの分析が出
来ているか、と言うと…?
厳しい。
アドテクや検索エンジンのイメージの
ようには、なかなか、うまくいかない。
found IT project #8 — 2017-07...
データは大きければ良いのか??
メモリに載せることすら、大変となる。
回帰などで係数が正確に求まっても、
何かの意味を為すかは、疑わしい。
機械学習の方法の多くが、一度に扱う
データを小さくする工夫を要する。
単純な集計や異常検知くらい...
データ列の意味を解読する
7ページ
found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 7
データ分析の流れ
1. 提供されたデータを理解する
2. 何か分析の知見を出す
3. 予測/施策に活かす
found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 8
本プレゼンテーションでは、...
提供されたデータを理解する
● MS SQL Server の場合
1. SQL Server のバージョンを確認。
 select @@version ;
2. 各テーブルの(1)行数 (2) 列数 (3) バイト数を確認。
(1) sel...
colsummary コマンド
10
異なる値の数
列名
値の
範囲
平均値 最頻値
いくつか
高頻度値の頻度 及び 低頻度値の頻度
olympic.tsv : オリン
ピックで日本が何個のメダ
ルを取得したか (1912-2016).
fou...
colsummary 用途 : 各列の様子の把握
1列目 (白) : 列番号
2列目 (緑) : 異なる値が何通りあるか
3列目 (青) : 平均値
4列目 (黄) : 列の名前
5列目 (白) : 値の範囲
6列目 (暗い白) : 頻出する値...
colsummaryを less と使う
found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 12
less コマンドを活用しよう
• 文字列の検索 : / (スラッシュキー) に正規表現
• 行番号の表示のオン/オフ : - , shift + N , Enter
• 長い行の折り畳みのオン/オフ : - , shift + S , Ent...
提供されたデータを理解する
● テーブル間で組みあわせる
(1) SQLクライアントから SQL文を実行して、データを取り出し、
(2) さらに加工を加えて、知見を取り出す。
found IT project #8 — 2017-07-27 L...
数から意味を見出そう
統計学的な手法いくつか 及び 可視化の方法 (計5ページ)
found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 15
SimilarWebのAPIから(2015年1月)
16
約1000個のツイッターアカウントの
フォロー数(x)とフォロワー数(y)
17
30万アカウントに対するフォロー数とフォロワー数。
色と抽出数を段階的に変えて重ねた。
18
パレートの法則(80/20 rule)
擬似的に無作為抽出をした1501人の会員における売上げの全体が、
少数の会員によって為されているか確認するために、ローレンツ曲
線を描いた。 19
会員の25%で売上げ
全部の約80%を占め
る。
このグ...
信頼区間の構成
数に対して、人間の直感はだまされやすい。
R言語の *.test のような関数をよく使って、
数の感覚を持つことは大事と考えられる。
(以下は全て95%水準の信頼区間である)
1. 割合の信頼区間 :
binom.test ( ...
新しいソフトウェアと
考え方の提案
10ページ
found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 21
良いソフトが無いなら、
作ってしまいましょう。
表形式(csv/tsvデータ) の 既存ソフトの弱点
Excel R Pandas SQL系 Hadoop
AWKなど
UNIX系命令
(目指すモノ)
主要用途 表計算 統計解析 行列操作 etc. DB操作 分散処理のDB ファイル操作etc...
足りない機能は賢く作ろう
• 英単語2個の組合せで10文字以下で機能名を付与。
☜ 必要な時にすぐ思い出せるように。
☜ 英単語1語のみで言い表される機能は、開発され尽くされたはず。
☜ 3単語は思い出しにくい。
• Unix哲学を継承する。U...
ディレクトリ構造の解読
対象のディレクトリに対し、
直下のディレクトリ、
2段階下のディレクトリ、
3段階下のディレクトリ、
4段階下のディレクトリ、
…
にあるファイルの個数を表示。
Unix/Linux のls や find などの
既存の...
dirhier 動作の様子
found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN)
25
dirhier コマンドのヘルプ表示
found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN)
26
venn4 :
ベン図の領域サイズ算出
• 顧客idの入った4個のファイルが与えられた場合、どのファイルの組合せ
に、何個のidがあるか、迅速に知るのは、意外とやっかいである。
• 数を作業前に算出することで、分析途中/分析後に、どのデータをど...
現状のコマンド一覧 (2017-07-22)
28
Mercurialでバージョン管理をしている。1,028回コミット済み。
found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN)
SQL sentence generators
→ の右側に記載された機能を持つSQL文の生成 を生成する。
serverInfo  select @@version ; MS SQL Server のバージョンを確認する
tableLine...
SQL generators Demo (PowerPoint animation)
found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 30
新しいソフトの名前/保管URLなど
名前 : bin4tsv , kabutomushi
もしくは ”Hacking tools for big tabular files”
URL : https://github.com/tulamili/...
補足事項
5ページ
found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 32
データ破損への対策
• 稀にメモリやCPU内の情報が書き換わることがある。
• 1テラバイト (240≒ 1012= 1兆バイト) ものデータを処理する
と、それは稀ではなくなる。
• 原因は、 放射線(α線)や熱雑音、太陽活動の影響による。
...
データ活用の条件 (2017年現在)
 あらかじめ、データ活用の仕組みが
設計段階から組み込まれている。
 A/Bテストのような、効果検証のための実験が
きちんと為されている。
 データだけでは、因果関係や交絡因子の存在
などの考察が極め...
データ提供環境の例 :
 とりあえず何かのサービス用に作られた SQL の使えるサーバー
 古い時代に構築された、セキュリティルーム内のCUI端末
 複雑怪奇なディレクトリ構造内に分散配置されたデータ
 何かの大規模DBから引っ張ってき...
コミュニケーションのコツ
 データはまず、少なめにもらうこと
 もらった分だけ確認作業が発生する。
往々にして確認作業だけで、膨大に。
 聞き過ぎないこと
 聞いて知ったことは責任があると考えよ。
 メモがあっても、データでよく確認し...
参考文献
37found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN)
Extra Slides予備スライド
16ページ
found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 38
質疑応答用
ハイプ・サイクル(ガートナー社)
2016年9月現在。図は Gartner社のプレスリリースから引用。
https://www.gartner.co.jp/press/html/pr20161005-01.html
39
found IT pr...
私の考える
データ分析に必要なもの
• オープンソースのソフトウェアを扱うスキル
Unix/Linux, AWK/Perl/Ruby/Python, R など
• 計算機に対する(きちんとした)基礎知識
CPU/メモリ/ストレージ,
{デジタル...
パイプとプロセス置換につい
て
Unix の bash 環境などで、下記の様に使う。
コマンド1 | コマンド2 # ←パイプの使い方
コマンド2 <( コマンド1 ) # 例 wc <( date )
パイプは、左側のコマンドの実行結果が右側...
ワイルドカードと正規表現
ワイルドカードと正規表現は、使う記号が同じ
ものがあるが、異なる。
 ワイルドカード :
* ← 0文字以上の文字列
? ← 丁度1文字の文字列
[a-z] ← a から z の26文字のいずれかを表す
 正規表現...
有用と考えられるコマンド
43
コマンド名 機能 詳細
freq 頻度集計 何が何個あるかまとめる
crosstable クロス表 2次元表で頻度,集計などをまとめる
venn2,3,4 ベン図で要素数
複数データのどんな組み合わせで何個キーが...
(1). 何をしたいのか (事業にとって意味のあることを) 決める。
例 : 「富裕層を(手持ちのデータから) 定義したい」
(2). データからそれを分析できるように必要な手順を考える。
1. 富裕層らしき人はどんな人か?
高額の支払いを1回...
変数間の関係を知る
• 回帰(単回帰/多重回帰)
• 一般化回帰 (ロジスティック回帰など)
• 多重共線性には気をつける
found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 45
モザイクプロット
• 売上げと対比したい。エクセルでは困難。
found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 46
UNIX哲学 (Wikipediaから引用)
47
プログラマーの三大美徳
• 怠慢 Laziness ;
全体の手間を減らす手間は惜しまない。
• 短気 Impatience ;
コンピュータ側の怠慢に対する怒り。
• 傲慢 Hubris ;
過剰な自尊心で良いソフトウェアを作り保守する。
—...
crosstable (2-way contingency table)
Provides the cross-table from
2 columned table
(Add blue color on “0” )(Extract 3rd a...
vars : extracting columns
• Easier than AWK and Unix-cut .
 vars –t 2 ⇒ moves the 2nd column to rightmost.
 vars –h 3 ⇒ ...
有用なコマンド例 [ sampler 確率抽出]
sampler で各行の確率抽出を行う。
-r で抽出確率を指定する。再現性確保の為、-s でシードの設定が可能。
(統計的な処理で必要と考えられる他の機能をいくつか搭載している。)
入力行数と...
有用なコマンド例 [ colorplus 着色]
colorplus で様々な着色を可能とした。
オプション指定で、数値のみ3桁または4桁ごとに着色、
列を5列ごとに背景を着色、指定した正規表現に着色、
さらには、着色の除去などができる。
上記...
累積ヒストグラム (数値分布の把握)
• 通常のヒストグラムは、数値データの
分布によって、ビン(分割)の分け方に
事前指定の困難性が発生。
• 数値データを左から右に、小さい順に
並べて、隙間の無い棒グラフと考える
と良い。
• 提供するコマ...
有用なコマンド例 [ xcol : ルックアップ, 別表参
照 ]
xcol –x 列指定 tablefile < datafile
• 2個のファイル table と data がある場合に、
table を変換表(変換前と変換先の2列から成...
Upcoming SlideShare
Loading in …5
×

企業等に蓄積されたデータを分析するための処理機能の提案

1,273 views

Published on

found it project #8 (Yahoo Japan, LODGE)
2017-07-17

Published in: Data & Analytics
  • Be the first to comment

企業等に蓄積されたデータを分析するための処理機能の提案

  1. 1. 企業等に蓄積された データを分析するための 処理機能の提案 DG Lab 下野寿之 found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 1 本プレゼンテーションでは、次の状況に重きを置きます。 • Who : ”データサイエンティスト” • Subject : 大企業等の基幹システムが蓄積してきたデータ • How : 本格的な分析や環境構築の前の、データを理解するための分析 この文書は、本プレゼン作成者の独自の提案を多数含みます。
  2. 2. 自己紹介 — データの分析歴 独自検索エンジンで計算したページランク チケット販売会社の販売データ インターネット上の書籍販売の5年分のデータ 採用時の心理テストと入社後パフォーマンスの関係 過去の特許の住所文字列データから緯度経度変換(GOGA) ダイレクトメールの開封の様子 ツイッターのアカウント属性/発言 携帯電話の顧客行動分析(国内キャリア) キネクトで収集したテレビ視聴のデータ(TVi) 商品名等の分類(独立行政法人 統計センター) DG Labにて、カードデータの分析 2found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN)
  3. 3. 目次 I. 背景など (3 slides) II. 蓄積されたデータ列の意味を解読する (7 slides) III. 数から意味を見出そう (5 slides) IV. 新しいソフトウェア (10 slides) V. 補足 (5 slides) VI. 予備スライド (16 slides) found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 3
  4. 4. 断り書き  計算機やソフトウェアなどは知っているものとします。 Unix を含む多数のオープンソースソフトウェアは前提知識のように話します。 SQL文の書き方は知っているものとします。 擬似乱数のような確率・統計・機械学習の基礎知識はあるものとします。  すぐ理解が出来なくても、あまり気にしないで、 残りのスライドに進んで理解してもらうのが良いです。  簡単なことも難しいことも、ここには混在しています。 ただし、手を動かして初めて気になることに、重きを置きます。 found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 4
  5. 5. 近年、たくさんのデータが 企業に蓄積されている。 しかし、データの分析が出 来ているか、と言うと…? 厳しい。 アドテクや検索エンジンのイメージの ようには、なかなか、うまくいかない。 found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 5
  6. 6. データは大きければ良いのか?? メモリに載せることすら、大変となる。 回帰などで係数が正確に求まっても、 何かの意味を為すかは、疑わしい。 機械学習の方法の多くが、一度に扱う データを小さくする工夫を要する。 単純な集計や異常検知くらいなら、大規 模なデータで意味を為すことはある。 そういう状況だが、 新しい方法論で 現在の困難を解決したい! found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 6
  7. 7. データ列の意味を解読する 7ページ found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 7
  8. 8. データ分析の流れ 1. 提供されたデータを理解する 2. 何か分析の知見を出す 3. 予測/施策に活かす found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 8 本プレゼンテーションでは、次の状況に重きを置きます。 • Who : ”データサイエンティスト” • Subject : 大企業等の基幹システムが蓄積したデータ • When : 本格的な分析や環境構築の前の、データを理解するための分析 • Conclusion : 新しい方法論/ソフトウェアが必要。その例を説明。 したがって、主に1.のみに重点を置きます。3.はほぼ完全に範囲外です。
  9. 9. 提供されたデータを理解する ● MS SQL Server の場合 1. SQL Server のバージョンを確認。  select @@version ; 2. 各テーブルの(1)行数 (2) 列数 (3) バイト数を確認。 (1) select count(*) from TABLE ; -- 行数(件数); 算出秒数も記録 (2) select table_name, count(*) from information_schema.columns group by table_name ; -- システムテーブルを利用する (3) select sum(cast(datalength(v1)+..)as bigint) from TABLE ; 3. 各テーブルから、ランダムに行を抽出する。  select * from ( select *, rand( cast (newid() as varbinary ) ) randvalue from TABLE ) T where randvalue < 20. / ( select count(*) from TABLE ) -- 20個抽出目標 found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 9
  10. 10. colsummary コマンド 10 異なる値の数 列名 値の 範囲 平均値 最頻値 いくつか 高頻度値の頻度 及び 低頻度値の頻度 olympic.tsv : オリン ピックで日本が何個のメダ ルを取得したか (1912-2016). found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN)
  11. 11. colsummary 用途 : 各列の様子の把握 1列目 (白) : 列番号 2列目 (緑) : 異なる値が何通りあるか 3列目 (青) : 平均値 4列目 (黄) : 列の名前 5列目 (白) : 値の範囲 6列目 (暗い白) : 頻出する値 (上位から数個) 7列目 (暗い緑) : 出現頻度 (上位と下位数個) テーブルデータが与えられたら、まず各列の意味を解読する必 要がある。 (仕様書通りか、聞いた説明通りであるかも、確認に使える。) 上記の情報をすぐ出すことにより、データ解読上の最初の大き なハードルがすぐに解決する。 11 found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN)
  12. 12. colsummaryを less と使う found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 12
  13. 13. less コマンドを活用しよう • 文字列の検索 : / (スラッシュキー) に正規表現 • 行番号の表示のオン/オフ : - , shift + N , Enter • 長い行の折り畳みのオン/オフ : - , shift + S , Enter • 次のファイル : colon(:) , n ( 数 : n という使い方もある ) • 前のファイル : colon , p • 指定正規表現を含む行のみ表示 : & に続けて正規表現 • 全体の指定パーセントの位置へ : 数 に続けて p (例,30p) • タブの文字幅の調整 : - x に続けて数を指定し、Enter • 閲覧内容の保存 : -, o , space に続けてファイル名 Less 実行前のコマンドラインから下記は実行 : • LESSOPEN=”| cut –f1 %s | nkf” less * # そのコマンド行だけに環境変数を設定 日本語を文字化けさせずに複数ファイルの1列目だけを表示。 Enterキーが必要 であることは、 マニュアルから は分かりにくい。 found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 13
  14. 14. 提供されたデータを理解する ● テーブル間で組みあわせる (1) SQLクライアントから SQL文を実行して、データを取り出し、 (2) さらに加工を加えて、知見を取り出す。 found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 14 ▲ 2個のテーブルを組みあわせるSQL文を Squirrel SQLのクライアントソフトから実行 ▲ 結果を考察しやすくするために、Unixのbash シェル環境で5個のコマンドをパイプ結合で実行。 着色はANSIカラーシーケンスによる。 このままエクセルなどにコピペも可能。
  15. 15. 数から意味を見出そう 統計学的な手法いくつか 及び 可視化の方法 (計5ページ) found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 15
  16. 16. SimilarWebのAPIから(2015年1月) 16
  17. 17. 約1000個のツイッターアカウントの フォロー数(x)とフォロワー数(y) 17
  18. 18. 30万アカウントに対するフォロー数とフォロワー数。 色と抽出数を段階的に変えて重ねた。 18
  19. 19. パレートの法則(80/20 rule) 擬似的に無作為抽出をした1501人の会員における売上げの全体が、 少数の会員によって為されているか確認するために、ローレンツ曲 線を描いた。 19 会員の25%で売上げ 全部の約80%を占め る。 このグラフは、数値が正確 に読みとれるように、 3通りの大きさのクロス格子 を組みあわせる工夫がされ ている。 1501人に対するブートス トラップ標本に対して、 赤いローレンツカーブを 描くことを多数回反復し て、統計的揺らぎを図示 している。 found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN)
  20. 20. 信頼区間の構成 数に対して、人間の直感はだまされやすい。 R言語の *.test のような関数をよく使って、 数の感覚を持つことは大事と考えられる。 (以下は全て95%水準の信頼区間である) 1. 割合の信頼区間 : binom.test ( 12 , 100 ) ⇒ 6.3% 〜 20% の区間が出力される。 2. 1件の観測数からの(ポアソン過程を仮定して)母平均値の信頼区間 : poisson.test ( 25 ) ⇒ 16.18 〜 36.90 の区間が出力される 3. 2個の変数の観測数から、比を信頼区間付きで推測する : poisson.test ( c( 515, 478 ) ) ⇒ 0.949 〜 1.22 の区間が出力される。 found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 20
  21. 21. 新しいソフトウェアと 考え方の提案 10ページ found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 21 良いソフトが無いなら、 作ってしまいましょう。
  22. 22. 表形式(csv/tsvデータ) の 既存ソフトの弱点 Excel R Pandas SQL系 Hadoop AWKなど UNIX系命令 (目指すモノ) 主要用途 表計算 統計解析 行列操作 etc. DB操作 分散処理のDB ファイル操作etc. 初期分析,前処理 利用の手軽さ ◎ ○ installに手間? ▲ 知識要求度高 ○ Unixと同様 透明性 × 高 ○? ベンダー依存 成長途上? ○ ○ 経年的互換性 △? △ 不明 やや高 不明 やや高 高くしたい 高速性 低 要工夫 ○ ▲ 適用範囲が 限られる ○ ○ 巨大データ 親和性 ×? 要工夫 高いのかも 要調整 特に高 小範囲のみ 高 対象ファイルが 多い場合 : × メモリサイズの制約 (ロード速度は近年改善) -- -- ある範囲で 高いはず 小データで実 演しやすいか ◎ ◎ ○? 要SQL文理解 意味なし? ◎ ◎ 表データに対 する列指定法 多種 複数あり Rと同様 列名が必要 SQLと同様 cutかawk ならば 列番号を並べる 最も容易 備考 数千行 で不便。 グラフ描 画は便利。 古いマシン で使えない。 SQLは一見万 能だが違う。 インストール が大変らしい。 シェル芸は便利。 しかし限界有り。 found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 22 本資料作成者の主観(2015年〜2017年)が大いに反映されています。 炎上覚悟ですが、建設的なコメントを得られることを期待しています。
  23. 23. 足りない機能は賢く作ろう • 英単語2個の組合せで10文字以下で機能名を付与。 ☜ 必要な時にすぐ思い出せるように。 ☜ 英単語1語のみで言い表される機能は、開発され尽くされたはず。 ☜ 3単語は思い出しにくい。 • Unix哲学を継承する。Unix/Linux 以外だと、 2017年にいたってなお、 • 意図しない動作や間違いに気が付きにくい。 • 気が付いた時の訂正手段と気になった時の検証手段に乏しい。 • CUI 端末で使える便利機能を使って、親切設計を満載にする。 • Ctrl + C ですぐ止めない。途中の結果を表示する親切設計。 • STDERR への出力は、ANSIカラーシーケンスで着色する。 • マニュアルを --help のオプションスイッチで表示。 found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 23
  24. 24. ディレクトリ構造の解読 対象のディレクトリに対し、 直下のディレクトリ、 2段階下のディレクトリ、 3段階下のディレクトリ、 4段階下のディレクトリ、 … にあるファイルの個数を表示。 Unix/Linux のls や find などの 既存のコマンドでは、出来ない。 • ls だと 1000個以上だと遅い。 • find だと情報はすぐには整理困難。 24 /System/Library/Perl/Extras/5.18 の曾孫ディレクトリに1427個のファイルがあり、 さらに曾孫の孫ディレクトリ(8階層下)まであることが分かる。 未知のファイル群を受け取ったときに、手早く解読する場合に有用と考えられる。 found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN)
  25. 25. dirhier 動作の様子 found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 25
  26. 26. dirhier コマンドのヘルプ表示 found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 26
  27. 27. venn4 : ベン図の領域サイズ算出 • 顧客idの入った4個のファイルが与えられた場合、どのファイルの組合せ に、何個のidがあるか、迅速に知るのは、意外とやっかいである。 • 数を作業前に算出することで、分析途中/分析後に、どのデータをどうい う条件で組み合わせて結果を出したのか、把握がかなり容易になる。 27 found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) A B C D
  28. 28. 現状のコマンド一覧 (2017-07-22) 28 Mercurialでバージョン管理をしている。1,028回コミット済み。 found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN)
  29. 29. SQL sentence generators → の右側に記載された機能を持つSQL文の生成 を生成する。 serverInfo  select @@version ; MS SQL Server のバージョンを確認する tableLines  テーブルの行数一覧を出力する tableColumns  テーブル名と列名の一覧をシステムテーブルから出力 byteSize  テーブル名からそのテーブルが持つデータのサイズを出力 minMax  全列の最小値と最大値を取り出す ; 更新の考察にも便利 sampleRows  各テーブルから目標件数のデータを抽出する/重み付きも可 vennTwo  2個の集合に対するベン図を描くのに必要な小領域サイズを出力 newTable  タブ区切りのデータファイルから、新しいテーブルを作る 29 found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN)
  30. 30. SQL generators Demo (PowerPoint animation) found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 30
  31. 31. 新しいソフトの名前/保管URLなど 名前 : bin4tsv , kabutomushi もしくは ”Hacking tools for big tabular files” URL : https://github.com/tulamili/bin4tsv https://github.com/tulamili/sql_generator 備考 : • BitBucket で開発し GitHubで一部公開中。 • 成果物として、もっと洗練かつ充実させたい。 • 以下を世界に広めて、皆にやって欲しい。 「必要な場面で即座に使える形で、多数の有用な 機能を網羅的に保持する、一体のプログラム群を作る。 そのために必要な方法論も形成していく。」 found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 31
  32. 32. 補足事項 5ページ found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 32
  33. 33. データ破損への対策 • 稀にメモリやCPU内の情報が書き換わることがある。 • 1テラバイト (240≒ 1012= 1兆バイト) ものデータを処理する と、それは稀ではなくなる。 • 原因は、 放射線(α線)や熱雑音、太陽活動の影響による。 Error Check and Correction対応のメモリの使用が推奨される。 • 扱うデータに対し、 MD5/SHA-1/SHA-256 によるハッシュ値 の記録が推奨される。これにより破損時に判別が可能。 • データベースの各レコードの順序には、意味が通常は無い。 その場合は各レコードのハッシュ値の算術和を記録する。 found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 33 http://techon.nikkeibp.co.jp/article/COLUMN/20080801/155927/ など参照
  34. 34. データ活用の条件 (2017年現在)  あらかじめ、データ活用の仕組みが 設計段階から組み込まれている。  A/Bテストのような、効果検証のための実験が きちんと為されている。  データだけでは、因果関係や交絡因子の存在 などの考察が極めて困難であることを理解して いる。 found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 34
  35. 35. データ提供環境の例 :  とりあえず何かのサービス用に作られた SQL の使えるサーバー  古い時代に構築された、セキュリティルーム内のCUI端末  複雑怪奇なディレクトリ構造内に分散配置されたデータ  何かの大規模DBから引っ張ってきた、圧縮ファイル ⇒ 気づき: 企業の大小を問わず、とりあえず基幹事業に必要なデータは、 蓄積はされている。しかし、後の分析まで考えていることは、稀。 found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 35
  36. 36. コミュニケーションのコツ  データはまず、少なめにもらうこと  もらった分だけ確認作業が発生する。 往々にして確認作業だけで、膨大に。  聞き過ぎないこと  聞いて知ったことは責任があると考えよ。  メモがあっても、データでよく確認しないと 1週間で聞いた事の意味合いは忘れる。  コミュニケーションは数回で終わらない。  前提知識の違いは、いつでも想定外に大きい。 found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 36
  37. 37. 参考文献 37found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN)
  38. 38. Extra Slides予備スライド 16ページ found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 38 質疑応答用
  39. 39. ハイプ・サイクル(ガートナー社) 2016年9月現在。図は Gartner社のプレスリリースから引用。 https://www.gartner.co.jp/press/html/pr20161005-01.html 39 found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN)
  40. 40. 私の考える データ分析に必要なもの • オープンソースのソフトウェアを扱うスキル Unix/Linux, AWK/Perl/Ruby/Python, R など • 計算機に対する(きちんとした)基礎知識 CPU/メモリ/ストレージ, {デジタル,ファイル,DB,インターネット}とは • 統計学の知識/機械学習の知識 • 数理モデリング, データの可視化 • 上記を独習する能力 • 広い画面(液晶モニター2枚) • 社会現象に対する想像力 40 found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN)
  41. 41. パイプとプロセス置換につい て Unix の bash 環境などで、下記の様に使う。 コマンド1 | コマンド2 # ←パイプの使い方 コマンド2 <( コマンド1 ) # 例 wc <( date ) パイプは、左側のコマンドの実行結果が右側のコマンドに入力として渡される。 プロセス置換で <( .. ) の場合は、括弧内のコマンドの実行結果を格納したファイルが存在 して、そのファイル名が <( .. ) 全体を置換したかのように振る舞う。 ▼ Ctrl + C を押下した時の違い: パイプの場合は、| の前後の両方のコマンドが、interrupt シグナルを受け取る。 <( 〜 ) の 場合は、interrupt シグナルは括弧内に送出されない。 Ctrl+Cを押下した時の動作を設計したコマンドを使う場合に、他のコマンドは Ctrl+C の 影響を受けないようにする場合に、このプロセス置換は便利。 found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 41
  42. 42. ワイルドカードと正規表現 ワイルドカードと正規表現は、使う記号が同じ ものがあるが、異なる。  ワイルドカード : * ← 0文字以上の文字列 ? ← 丁度1文字の文字列 [a-z] ← a から z の26文字のいずれかを表す  正規表現 : . ← 任意の文字 * ← 直前の正規表現の0回以上の繰り返しを意味する [a-z] ← a から z の26文字のいずれかを表す found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 42
  43. 43. 有用と考えられるコマンド 43 コマンド名 機能 詳細 freq 頻度集計 何が何個あるかまとめる crosstable クロス表 2次元表で頻度,集計などをまとめる venn2,3,4 ベン図で要素数 複数データのどんな組み合わせで何個キーがある か xcol 複数表の組合せ join(unix)を改良して、直感的に使い易くした colsummary 各列を要約する 異なる値の個数、値範囲、頻出値、出現回数分布 sampler 確率的抽出 一定値または指定列に比例した値の確率抽出 keyvalues キー重複度 各キーが何個の異なるバリューを持つかを出力 kvcmp KV関係の異同 2個のデータ間でキーバリューの関係の異同を見 る colgrep 列指定の検索 Unix の grep では出来ないことをする。 idmaker 識別子の付与 関係DB第二正規化が出来る denomfind 共通分母の探索 %の値から母数の推定 shuffler 行の順序を乱雑化 sampler とよく一緒に用いる alluniq 全行が異なるか 重なり数と該当行例も出力が可能 expskip "対数的に抽出" 指数関数的に間隔を空けて行を抽出 eofcheck 終末文字の検査 改行で終わらないファイルの検出 dirhier ディレクトリ構造 ディレクトリの階層がどうなっているかが分かる timeput 各行に時刻記載 一行読み取る毎に現在時刻を付加して出力 usec 実行時間測定 uはマイクロを表す madeafter 文件の作成後時刻 日時よりも経過時間の方が便利な場合がある memlogger 使用メモリ測定 指定命令がどれだけのメモリを消費したか知る
  44. 44. (1). 何をしたいのか (事業にとって意味のあることを) 決める。 例 : 「富裕層を(手持ちのデータから) 定義したい」 (2). データからそれを分析できるように必要な手順を考える。 1. 富裕層らしき人はどんな人か? 高額の支払いを1回の買い物または1ヶ月でする人 ← 仮決め 2. そういう人はどういう行動を取っているか? 取り出した id をいくつか1年分追跡する。 3. 似た様な行動を取っている人も富裕層では無いか? ??????? 4. …. (3) そのような分析手順を (ある程度一般化した上で) 実行可能な 計算機環境を考える。 found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 44
  45. 45. 変数間の関係を知る • 回帰(単回帰/多重回帰) • 一般化回帰 (ロジスティック回帰など) • 多重共線性には気をつける found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 45
  46. 46. モザイクプロット • 売上げと対比したい。エクセルでは困難。 found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 46
  47. 47. UNIX哲学 (Wikipediaから引用) 47
  48. 48. プログラマーの三大美徳 • 怠慢 Laziness ; 全体の手間を減らす手間は惜しまない。 • 短気 Impatience ; コンピュータ側の怠慢に対する怒り。 • 傲慢 Hubris ; 過剰な自尊心で良いソフトウェアを作り保守する。 — Larry Wall found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN) 48
  49. 49. crosstable (2-way contingency table) Provides the cross-table from 2 columned table (Add blue color on “0” )(Extract 3rd and 4th columns) You may draw many cross-table from a table data. The crosstable commands provides cross-tables very quickly. 49
  50. 50. vars : extracting columns • Easier than AWK and Unix-cut .  vars –t 2 ⇒ moves the 2nd column to rightmost.  vars –h 3 ⇒ moves the 3rd column to leftmost.  vars –p 5,9..7 ⇒ shows 5th,9th,8th,7th columns.  vars –d 6..9 ⇒ shows except 6th,7th,8th,9th columns. -d stands for deleting, -p for printing, -h for head, -t for tail. 50found IT project #8 — 2017-07-27 LODGE (Yahoo! JAPAN)
  51. 51. 有用なコマンド例 [ sampler 確率抽出] sampler で各行の確率抽出を行う。 -r で抽出確率を指定する。再現性確保の為、-s でシードの設定が可能。 (統計的な処理で必要と考えられる他の機能をいくつか搭載している。) 入力行数と出力行数と抽出行数の事前期待値を、標準エラー出力に出す。 なお、Perlのsrand関数がPerl 5.14 (2011年) を要求する。 上記は、1〜100万の各数を1万分の0.3で確率抽出し、横に12個ずつ並べた。 他、shuffle コマンドで順序も乱雑化できるが、これは行を減らしてから使うこと。 51
  52. 52. 有用なコマンド例 [ colorplus 着色] colorplus で様々な着色を可能とした。 オプション指定で、数値のみ3桁または4桁ごとに着色、 列を5列ごとに背景を着色、指定した正規表現に着色、 さらには、着色の除去などができる。 上記は、5列ごとに背景を青で塗り、less で閲覧している。 詳細未知のデータを与えられて、最初に眺め、意味を把握するときに有用。 52
  53. 53. 累積ヒストグラム (数値分布の把握) • 通常のヒストグラムは、数値データの 分布によって、ビン(分割)の分け方に 事前指定の困難性が発生。 • 数値データを左から右に、小さい順に 並べて、隙間の無い棒グラフと考える と良い。 • 提供するコマンドは、対数で動作する 動作モードも用意している。ただし、 R言語に現状依存している。 • 通常の統計グラフに無いような、「グ ラフから直接かなり正確な数値が読み 取れる」ように、格子の描き方を工夫 している。 Green : Following # Blue : Followers # of millions of twitter accounts Same plot in LOG-SCALE <- The wall of 2000 53
  54. 54. 有用なコマンド例 [ xcol : ルックアップ, 別表参 照 ] xcol –x 列指定 tablefile < datafile • 2個のファイル table と data がある場合に、 table を変換表(変換前と変換先の2列から成る)と見なし、 data の指定列を変換表に従って変換する。 SQLの join句 と同じ意図を持った機能を持つ。 Excel の vlookup 関数 にもほぼ近い。 Unix/Linux にも join コマンドがあるが、使いにくい。 • 下記のオプションがある。 • 変換前の値を残す指定。それをどの列に残すかの指定。 • data に対し該当変換が無い行の処理法の指定(残すか消すか)。 54

×