Latest update on 2018年3月7日 (水) at 15:42:47.
【第1190回】 グランフロントでKobe.R(2015年12月26日)
- 6:30起床。高菜かけご飯と,ベーコンとピーマンとナスとネギを適当に切ってオリーブオイルで炒め,マリナーラソースを絡めてクレイジーソルトを振ったおかずで朝食を済ませた。
- 8:20頃出発すれば大阪のグランフロントで開催されるKobe.Rには間に合うはず。久々に他の予定がなく参加できる。内容は(参加者限定でなければ)ここにメモする予定。
- 9:30にグランフロントに着いたが,うっかり2, 6, 9階しか停まらないエレベータに乗ってしまい,9階から非常階段を降りればいいかと思ったのが大失敗だった。非常階段のスペースにいったん出てしまったが最後,どうあがいてもバックヤードから出られないのだった。偶然にも封鎖空間で親切な警備員さんに出会うことができ,助け出して貰えて助かった。20分以上階段を上がったり降りたりしていたので汗だくになった。
- ともあれ,10:00スタートに何とか間に合った。メニューはオープンデータ,カテゴリカルデータ分析,アソシエーション分析入門,RとMeCabを用いたtwitterマイニング,IoTハンズオン(仮)。IoTは時間がかかりそうなので最後で……ということで,以下メモ(例によって内容は無保証です)。
- 神戸に限らず,最近は大阪中心。Rに限らずデータ解析関連なら何でもOKな感じで。運営者募集中。
- この会場,壁がホワイトボードになっている! びっくり。
- 最初の発表は,お肉の検査員(超非エンジニア)でもわかるアソシエーション分析入門。普段は病理検査や微生物検査をしている。超アナログ。PCはほとんど使ってない。データは主にエクセルでやっていたが,今春4万件以上のデータ集計をする必要がでてRを使い始めた。属性Aをもつobsは属性Bをもつ傾向にあるのような知識A→Bをアソシエーションルールと呼ぶ。ビジネスで重要な役割を果たす。このルールを見付けるのがアソシエーション分析。ルールヘッドやルールボディをトランザクションデータから見付け出す。4つの確率。前提確率p(A)は高いほどよい。適用するチャンスが高い。p(B|A)は信頼度と呼ばれる。この確率が高いルールは良いルール。適用されれば高い確率でヒットする(例:パチンコ台の特定の釘が曲がっている→大もうけ)。同時確率p(A, B)はp(A)*p(B|A)。高くなって欲しい。事前確率p(B)は低いほどよい。元々p(B)が大きかったらルールを見付けるうまみがない(例:上着を買う→ハンカチを買うというルールの条件付き確率と,ハンカチを買う確率に差がなかったら,「上着を買う」条件が不要になる)。改善率(lift値)を指標とする。改善率はp(B|A)/p(B)=p(B, A)/(p(A)p(B))。この値が1を超えたら採用。パッケージはarulesを使う。『銀座で働くデータサイエンティストのブログ』の購買データex_trans.txtを使用。まず元データを素性ベクトルの形にする。read.transactions()関数で,format="basket"を用いる。重複を消す場合はrm.duplicate=TRUEオプション。これをwrite.csv()でcsvファイルに書き出しておく。。apriori()関数でアソシエーションルールを推定。Inspect()関数でルールを表示。arulesVizパッケージでplot()するとグラフが出る(method="graph"を付ける)。バージョンによってはうまくいかないことがあるが,バージョンを落とすとうまくいくこともある。ここまでは元ブログに書かれている。前回のKobe.Rで河原さんがigraphを紹介していた。素性ベクトルを隣接ベクトルの形にするとネットワーク分析ができる。隣接行列はアイテムが行列に並んだ正方行列。推移数をカウントする。peccuさんのサイトがgithubにあって,peccu 隣接行列で検索すると出てくるコードをadjacency.Rと名前を付けて保存し,それをsource()で読み込み,adjacency()で計算。igraphパッケージを使えばgraph.adjacency()でグラフにできる。近接中心性や次数中心性,固有ベクトル中心性などがあるが,degree()関数で計算できる。Rで学ぶデータサイエンスシリーズ『ネットワーク分析』がお勧め。ネットワークのどこが違うのか(例えば,焼き肉屋のPOSデータを使ったデータハッカソンの優勝チームが示した,ワインを飲む人と飲まない人の注文の仕方の差はどこか?)を検出する方法はあるのか? が疑問とのこと。例えば,ワインを飲む人と飲まない人で(あるいは注文があったテーブル別)別々に集計してネットワーク図を書いたときに見た目で違うというだけか,分析手法があるのか? ■検査そのものも画像解析が応用できるんでは? ■腕の数の頻度分布はどう?(スケールフリーの検出は時系列の変化をみたら面白いかもしれない,と河原さんコメント) 4万件でも1秒かからないくらいでできる。アソシエーション分析と協調フィルタリングとの違いは? ■協調フィルタリングはユーザ側のデータが必要だから,このデータではできないはず。ワインの奴は経路分析しているのかも?
- 次の発表は共起を用いたtwitterデータの分析(webスクレイピング)。神戸情報大学院大学の大学院1年の方。データマイニングやテキストマイニングの勉強中。SNSから商品被害を抽出する方法の探索。加水分解小麦石けん問題とか,カネボウ化粧品白斑問題とか,5年ほど売られてから被害が問題化した。もっと早く検出したい。被害者情報は消費生活センターや病院,企業経由で国民生活センターに集まるが,タイムラグが数ヶ月かかる。そこでSNSから被害情報を収集して検出したい。webスクレイピングはrubyで収集,postgresqlに格納。Twitter REST APIとTwitter Steraming APIがあるが,前者がプログラミング用。制限がきつい。2013年6月12日に制限が変更されたので古い情報には注意。twitter社は後者推奨。その中から前検索として日本語データを取り出し,被害候補があったらREST APIを使って詳しく分析。共起とは,ある単語がある文章中に出たとき,その文章中に別の限られた単語が頻出すること。例えばニュース集合では,「メルケル」と「難民」,「安部首相」と「談話」は共起している。今回はtwitterのstreamingの日本語tweetから特定の会社の社名を含むものを1万件抽出し,RMeCabのcollocate()とcolScores()を用いて共起を検出。collScores()は見せかけの共起(限られた単語の共起ではなく,たんに頻出する言葉を検出してしまう)を防ぐのに重要。結果をみると明らかにおかしいデータがあった。リツイートが1万行中に899行あったため。これはノイズ。前処理が必要。意味が重複した単語やリンクを削除(正規表現を使う)。そこはviで:sort uで済ませた。10000行→5113行。次に共起したのはその企業の創業者の名言。商品名はほぼ入っていないので:g/創業者の名前/dで削除。さらにアルファベット1文字などを除外し,Afterで並べ替え。そこでやっと商品名や商品の機能が出てくる。次に商品名はカタカナが多いことに注目し,カタカナだけ抽出。(■長音などの表記揺らぎは?→メーカがどう表記しているかの影響が大きい,とのこと。使う辞書によりどうにでも分析できる。)製品名や商品名を抽出するのは難しい。(■目的からしたら,この後さらに「被害」とか「問題」とかとの共起を探ることになるのか?)【質疑】▲最初からメーカー名ではなくてカタログなどから商品名を探して,それを検索しないのか?→目的が特定の商品に注目ではなく,いまSNSで問題になっている商品を探すことだから,そうしない。商品名はMeCabの辞書に入れると効率が上がるかもしれない。▲なぜ3スパン?→2スパンではうまくいかなかったので3スパンでやった。▲アソシエーション分析との関連は?→アソシエーション分析の中心語を入れるというのがこの分析法。▲全文の方が良いのでは?→広げすぎると関係のない単語が入ってしまうため試行錯誤で3スパンに決めた。
- 5分休憩。ハンズオン発表者はまだ来ていないため,とりあえず他の発表で終わるかも。
- 次の発表はカテゴリカルデータの分析事例。データマイニングシリーズ本の『カテゴリカルデータ解析』を参照しながら。心理統計でサービス・マーケティングなどをやっているごとうさん(@hikaru1122)。ブログもある。R歴は1年ちょっと。来年からJAIST在籍。経営系の研究科。500人7変数のデータ。共創(co-creation)への姿勢の強さ(6段階の順序尺度)は性別によって違いがあるか? 成果指標(満足度とか口コミしたいとかの順序尺度)と相関するか? 成果指標に影響するか? を明らかにしたい。統計たん(@stattan)のtweet「なぜ3カテゴリの順序データを連続量とみなして分析するのか理解に苦しむ」に対して,順序カテゴリデータをちゃんと分析しようという企画。満足度が7件法のリッカート尺度ならば重回帰をやってもいいという人がいるかもしれない。成果指標はぜんぶ左裾を引いていて正規分布でない。xtabs(),wilcox.exact(),polychor() {polycor}, makedummies.R,polr(),orm(),lrm(),multinom()を利用。パッケージは{polycor}の他には{MASS},{exactRankTests},{nnet},{rms}にこれらの関数が入っている。まずはxtabs()でクロス集計。chisq.test()とwilcox.exact()で結果が違う。■chisq.test()の帰無仮説は2つの変数が独立ということなので順序の情報は一切使わないし,wilcoxは順位和をランダムな場合と比べるわけで,順序の情報を使うかどうかが違うから検定結果が違って当然。マンテル検定もありうる(■あれって行列の差の検定じゃなかったっけ?)。polychor()とcor()は多少結果が違う(■cor()でmethod="spearman"とかmethod="kendall"ではどうか?→スピアマンの順位相関係数はピアソンの相関係数よりもポリコリック相関係数に近かった)。HADを使ってみる。いま紹介したものは全部できる。Excelのマクロ。SPSSっぽいインターフェース。(■HADのカテゴリカル相関って本当に順位相関ではなくてポリコリック相関なのか?)心理統計では知られるようになってきた,使い方が簡単なソフト。ただし,使っていいのは学部生まで,と開発者(清水さん)は言っている。なお,texregパッケージのscreenreg関数の出力が見やすいとのこと。
- 最後は河原さん。オープンデータの例としてe-Stat APIの使用例。加工も利用も自由なデータをオープンデータといいたい。e-StatのAPIは最近充実してきた。web「API機能」に説明あり。統計表一覧でDBというアイコンが付いてるものはAPIでデータが取れる。手順は,会員登録→自分のKeyを取得→ID(statsDataId)を取得→IDに対応するデータを取得→データ分析。難しいのは,statsDataIdを取得する部分。xmlなのでそこからスクレイピングしてリストにすれば良い。{rvest}というwebスクレイピングによく使われるパッケージを利用。{pipeR}も使用。Hadley Wickham開発。html_attrs()とhtml_nodes()が便利。
- ということで,大変充実した会だった。ありがとうございました。
- その後,Kobe.R参加者のうち10人で昼飯を食べながらもう少し喋ろうということで,神戸あぶり牧場へ。特製ハンバーグ定食を頼んだが,美味だったし1000円で十分満腹になった。他の人が頼んでいた特製カレーライスだったら650円だったし,それも十分に旨そうだったので,次に行ったらカレーライスを頼んでみたい。
- さらに喫茶店に移動して少し喋ってから解散となり,三宮経由で大学に来た。予定通り,HOY(GoosehouseのHouse of the Yearと題されたUst Live)を聴きながら溜まっている仕事をこなすつもり。
- 晩飯をカップヌードルチリトマト味で済ませ,生姜湯を飲んで暖をとりながら(研究室の暖房は壊れたままなので)溜まっている仕事中。メールで新たに1月2日締め切りの仕事が届いたりしてげんなりしつつもやるしかない。
- HOYが始まってしまうと,ついそっちに気持ちがいってしまうので仕事が捗らない。Rough & Laughが予選を通らなかったのは残念だったが,どの曲も気合いの入った(かつ楽しそうな)パフォーマンスで素晴らしかった。HOYが全員曲のSUNになったのは,まあ予想通りだったが,星野源のオリジナルとはまた違うこの曲の魅力に気づかせてくれる演奏だった。
△Read/Write COMMENTS
▼前【1189】(年末が近づいている(2015年12月25日)
) ▲次【1191】(健康寿命について(2015年12月27日)
) ●Top
Notice to cite or link here | [TOP PAGE]