データサイエンティストについてメモ

データサイエンティストとは何か

1.自社や競合他社、顧客のことを正しく把握する為にビッグデータから分析し、ビジネスに展開すること

 

2.データサイエンティストの働きについて

 「データを収集し、分析に適した形に整え、データにストーリーを語らせ
  そのストーリーを他者に伝える」

3.事業の勝ちパターンを定型化すること

データサイエンティストとは

1.価値ある情報を探す技術を持っていること
2.高速にデータを処理すること
3.データ分析の結果をビジネスに展開すること

※重要
□ビジネスへの成果は常に意識しなければいけない
□サービスに実装しても効果が出なかった場合のコストを
 考慮しておく必要がある
□実務に実装する余地があるか
 [出来ないパターン]
 ・分析途中にマーケットの構造が変化した場合
 ・事業に改変が発生した場合
 ・法的に問題が発生した場合

データマイニングのプロセス

1.ビジネスの理解

 ・ビジネスの全体像を理解したうえで課題設定
  多数の関係者にヒアリングを取る
  
 ・プロジェクトの目的を明らかにする
 

2.データ収集・データ理解

 ・データを理解して、仮説のあたり(下地)をつける
 

3.データマートを作る

 ・必要なデータを集めて、分析ツールを作る
 

4.課題を解決する為の仮説を立てる
5.仮説を評価する

 ・仮説の精度の検証
 ・ビジネス的に想定外のものがないか、見落としがないか
 

6.ビジネスに展開する

 ・結果を分かりやすく担当者に伝える
 ・施策実行の為のシステム仕様を作成

zclipはtable内では使えない

zclipで、嵌ったのでメモ。

Webサイト上で「クリップボードへコピー」を行うことができるjQueryプラグイン
http://www.steamdev.com/zclip/

表題の通り、table内にクリップボードをコピーする機能をつけるリンクを入れると
動かなかった。


↓下記のような感じ

<head>
	<script type=text/javascript>
		$(document).ready(function(){
		    $("a#copy-dynamic").zclip({
		        path:'swf/ZeroClipboard.swf',
		        copy:function(){ return $("input#test").val(); }
		    });
		});
	</script>
</head>
<body>
<table>
   <tr>
     <td>
       <a href="#" id="copy-dynamic">コピー</a><input type=hidden id=test value="test">
     </td>
   </tr>
</table>
</body>

div内ならうまくいくけどtable内でうまくいかないのは何故?

SQLメモ(2) group_concat関数を使うときの注意

SQLで便利なgroup_concat関数ですが、うっかりミスに注意するべし。
文字数制限がある。

結果として予測していた値よりかなり少なくて
「何でだ・・・」と思ってたのですが、そういうことか。

[参考]
http://netbizknowhow.seesaa.net/article/31278483.html
http://dev.mysql.com/doc/refman/4.1/ja/group-by-functions.html

SQLメモ(1) 副問い合わせ・関数

[副問い合わせ]

内側にあるSELECT文が実行される

外側にあるSELECT文が実行される

3パターン
・単一の値の代わりとして、副問い合わせの検索結果を用いる
 単一行副問い合わせとは?
  検索結果が1行1列の1つの値となる副問い合わせを指す
  
・複数の値の代わりとして、副問い合わせの検索結果を用いる
 複数行副問い合わせとは?
  検索結果がn行1列の複数の値となる副問い合わせ(ただしnは1以上)
  複数の値との判定を行うwhere句の条件式やselect文のfrom句に記述することが
  出来る
  
  【判定式】
  IN演算子 複数の値との比較が可能
  IN どれかと一致するなら真
  ANY どれかと不等号式との比較で合致していれば真
  ALL すべてと不等号式との比較で合致していれば真
  
・表の値の代わりとして、副問い合わせの検索結果を用いる

[substring]
select substring(メールアドレス, length(メールアドレス)-1, 2) from 回答者

[case文] 文字列の繋げ方 xx || xx
select trim(メールアドレス) as メールアドレス,
case when 年齢 >= 20 AND 年齢 < 30 then '20代'
when 年齢 >= 30 AND 年齢 < 40 then '30代'
when 年齢 >= 40 AND 年齢 < 50 then '40代'
when 年齢 >= 50 AND 年齢 < 60 then '50代' end
|| ':' ||
case when 性別 = 'M' then '男性'
when 性別 = 'F' then '女性' end as 属性
from 回答者

join 結合条件に合致したもののみで作る
left join 左の表は、結合条件に満たないものもすべて作る
right join 右の表は、結合条件に満たないものもすべて作る
full join すべての表は、結合条件に満たないものもすべて作る

開発環境を整える

デバッグしやすく、バグにすぐ気づける環境つくりをしたい。
やってると、PHPUnitで躓いた。

うーむ。

作りたい環境

XAMPP1.8.1
開発環境(IDE)  NetBeans
デバッグ    XDebug

    • (ここまではサクッといける)

自動テスト   PHPUnit ←ここで嵌る
バージョン管理 Git

                            • -

やり方をメモしとく。

XAMPPインストール
開発環境(IDE) NetBeans

ここまではふつーにインストールのみでいける。

XDebug

php.iniを修正する。
XDebugは、XAMPPに入ってるので、php.iniの修正のみでOK。

【修正前】
                                      • -

[XDebug]
;zend_extension = "C:\xampp\php\ext\php_xdebug.dll"
;xdebug.profiler_append = 0
;xdebug.profiler_enable = 1
;xdebug.profiler_enable_trigger = 0
;xdebug.profiler_output_dir = "C:\xampp\tmp"
;xdebug.profiler_output_name = "cachegrind.out.%t-%s"
;xdebug.remote_enable = 0
;xdebug.remote_handler = "dbgp"
;xdebug.remote_host = "127.0.0.1"
;xdebug.trace_output_dir = "C:\xampp\tmp"

【修正後】

[XDebug]
zend_extension = "C:\xampp\php\ext\php_xdebug.dll"
;xdebug.profiler_append = 0
;xdebug.profiler_enable = 1
;xdebug.profiler_enable_trigger = 0
;xdebug.profiler_output_dir = "C:\xampp\tmp"
;xdebug.profiler_output_name = "cachegrind.out.%t-%s"
xdebug.remote_enable = on
xdebug.remote_handler = dbgp
xdebug.remote_host = "127.0.0.1"
xdebug.trace_output_dir = "C:\xampp\tmp"

PHPUnit

ここに載ってるとおりにやる。
pearは、xamppに入ってるぽいのでpearコマンド使ってけばOK。
ただし、管理者権限でコマンドプロンプトを実行する事。
http://lazesoftware.com/blog/11/0213/

うまくいかないときはキャッシュを疑う。

NetBeansでのPHPUnitの使い方

下記をコマンドプロンプトでインストール。
pear install phpunit/PHPUnit_SkeletonGenerator

やってみるも、@assertがテストコードの生成されない。

原因がよく分からず、迷ってます。

学び方について

http://nhiro.org/langbook/
http://www.slideshare.net/nishio/ss-19956967

何から学ぶか

具体的な知識
 膨大な知識を取り込む方法は?
 
 1.必要な順に
  ●学ぶ目的を明確にする(モチベ持続の為にも)
  ●その達成の為に必要な物から学べ
  
 2.おおまかに
  どこに何があるか把握する為に段階的詳細化
  ↓
  知りたいことの明確化
  どこに情報があるかの明確化
  
  ざっくり読んでもわかった気がしない
  自分の知識と結びつかない
  もっと知りたいという気持ちが湧いてこない
  
  ↓
  
  知識を得るには周辺知識が必要
  
 3.片っ端から
  効率的な学習が出来ない場合(最終手段)
  片っ端から書き写す
  
  効率のいい方法への移行
  
  どこが重要な部分かを考える力を養う
  書いて心に浮かんだことは記録して後で見直す
  
  自分の理解が正しいか実験し結果を確認
  
抽象的な知識
 抽象的な知識による学習時間の短縮が長期的には有利、だが現実的に無理
 

webサービスをリリースした人の話を聞いた

メモ帳サービスをリリースした開発者の話を聞きにいってきた。

http://coedo-dev.doorkeeper.jp/events/4137

このサービス↓

https://wri.pe/

 

私が、このイベントにいった目的は下記2点。

 

1.サービスをリリースした人の実体験+言語は違うけど

  どういう風にテストしてるとか、気になる技術などを

  知る。(自分はPHPを普段使ってるけど、このサービスは主に

  Rails4、Ruby2.0、HTML5を使ってる)

 

2.他人の技術レベルを知り、自分に鞭を入れる為。

  私がRuby知らないということもあるけれど

  技術話が、断片的にしか分からなかった。

  

  他の人たちと比べて、圧倒的知識不足であると感じた。

 

[勉強になった事]

●下記サイトをデザインの参考にしたとの事

 http://dribbble.com/

 一定のクオリティがないと載らない為、参考になる。

 

●開発はそんなに大変ではないが、サービスを継続することが

  大変。

 

  運用の手間を省力化する為にしている事

 1.ユーザにメールでバックアップを送る、dropboxとの連携

  いつサービス停止してもいいようにw

 2.herokuを使っている

  Rubyアプリケーションのクラウドプラットフォーム

  (ウェブサービスホスティングサービス)

 

●テスト

 テストを自動化。複数ブラウザで自動テスト実行してくれる

 ツールを使っている。(capybara)Ruby用なのでPHPでは使えない。。。

 http://sssslide.com/www.slideshare.net/tricknotes/capybara-introduction

 

●機能

  処理時間の短縮化のために、HTML5アプリキャッシュを使っている

  (localstrage)

 

googleアプリスクリプト

  毎日定時刻に、アプリを起動しユーザ数や、アクセス数を

  自動グラフ化している。(データは、あるURLたたくとJSONが吐き出されて

それを受け取りデータを追加していく形)

  gmailとも連携可能なので、使い勝手よさそう。

  けどスクリプト文法覚えるのめんどくさいらしい。

 

●おもしろいなと思ったこと

 海外対応の為、英語対応しているが英語圏ではない

 ヨーロッパ圏に何故か受けている。

 

 Evernote対応しろ、と日本ユーザによく言われる。

 

 Facebookでログインする機能は、Facebookに情報取られそうで

 怖い、辞めてくれと要望がくるが、Facebookログイン機能がなかった時代は

 パスワードを入れるのがめんどくさいという苦情が来ていた。

 この手の苦情は無視するに限るw

 

 FlatUIは日本語との相性よくない。

 

●思ったこと

 自分が足りない能力は他人にやってもらってることが多い=コミュ力、人脈が広い

 実現出来る人は、自分だけでどうにかしようとせず人に頼ることもする。

 餅は餅屋という割り切り。

 

 最新の技術を取り入れる試みをしてる。

 機能の実装に、3日というスピード。

 

 プレスリリースなどの展開を行うために、3ヶ月でリリースしようと

 思ったら、3日くらいで開発を終わらせないと終わらない。