『入門 ソーシャルデータ』9章

34
『入門 ソーシャルデータ』 9章 Facebook: オールインワンのソーシャルウェブ環境 2012/03/16 @torazuka 第9回 『入門 ソーシャルデータ』真面目に勉強する会

description

第9回『入門ソーシャルデータ』真面目に勉強する会

Transcript of 『入門 ソーシャルデータ』9章

Page 1: 『入門 ソーシャルデータ』9章

『入門 ソーシャルデータ』9章 Facebook:

オールインワンのソーシャルウェブ環境

2012/03/16 @torazuka 第9回 『入門 ソーシャルデータ』真面目に勉強する会

Page 2: 『入門 ソーシャルデータ』9章

発表担当: torazuka

こんにちは!

IT系の会社で働くエンジニアです.クラウド回りの社内向け技術支援をしています.

https://twitter.com/torazukahttp://d.hatena.ne.jp/torazuka/

Page 3: 『入門 ソーシャルデータ』9章

今回の資料

● このスライド○ Googleグループ「集合知の会」で共有

■ https://groups.google.com/group/StudyGroup_CI

(参考)http://d.hatena.ne.jp/mamoruk/20111204/p1

● 補足資料○ Facebookのアクセストークン取得

■ http://d.hatena.ne.jp/torazuka/20120312/socialdata○ サンプルコードの実行方法のメモ

■ http://d.hatena.ne.jp/torazuka/20120314/social_data

「この本の優れたところは(中略)、テーマの選定と

動作するコードにあり、その部分は入門書としては

かなりクオリティが高い」と生駒日記の中の先生も

書いていらっしゃるので,動かしてみてもよいかも

Page 4: 『入門 ソーシャルデータ』9章

これまでの流れ

● 1章 イントロダクション : Twitterデータのハック

○ 環境構築● 2章 マイクロフォーマット: セマンティックマークアップと常識のずれ

○ XFNやGeocoordinatesなどの活用

● 3章 古き良きメールボックス

○ 電子メールデータの分析、対話の追跡● 4章 Twitter: フォローしている、フォローされている、集合演算

○ TwitterのAPIでできることの紹介

● 5章 Twitter: ツイート、すべてツイート、ツイートそのもの

○ ツイートの分析とソーシャルネットワークの可視化● 6章 LinkedIn: プロフェッショナルネットワークのクラスタリング

○ 職名によるクラスタリング、プロフィール情報の取得● 7章 Google Buzz: TF-IDF、コサイン類似度、コロケーション

○ 語の類似度を計測する様々な尺度の紹介● 8章 ブログその他: 自然言語処理(さらにその先へ)

○ NLTKライブラリの利用、エンティティ中心の分析

Page 5: 『入門 ソーシャルデータ』9章

9章 Facebook:

オールインワンのソーシャルウェブ環境

● 9.1 ソーシャルネットワークデータへのアクセス

○ 9.1.1 10分でわかるアクセストークンの取得

○ 9.1.2 FacebookクエリAPI

● 9.2 Facebookデータの可視化

○ 9.2.1 ソーシャルネットワーク全体の可視化

○ 9.2.2 グループ内の相互関係の可視化

○ 9.2.3 友達はみんなどこに行った?(データ駆動

ゲーム)

○ 9.2.4 (回転する)タグクラウドとしてウォールデータ

を表示する

● 9.3 まとめ

Page 6: 『入門 ソーシャルデータ』9章

Facebook

ソーシャルネットワーキングサービス

2012年3月現在,8億3千万ユーザー

(情報ソース)http://checkfacebook.com/ Facebookに関する情報発信サイトhttp://www.google.com/adplanner/static/top1000/index.html

世界で最も訪問者の多いサイト「常連ユーザが大勢いるサイトには面白いデータが多数集まる」ソーシャルデータを収集・分析する対象として興味深い上に,手段(API・ツール)も提供されている

Page 7: 『入門 ソーシャルデータ』9章

「オールインワン」

8億ユーザーがFacebook上で様々な活動をする

● 公開ステータスの更新● 自分のしていることや考えていることの伝達● メッセージの交換● リアルタイムチャット● 写真の共有● 「チェックイン」による居場所の共有

その他色々

Page 8: 『入門 ソーシャルデータ』9章

9章の著者の主張

● 豊穣なプラットフォーム● 強力なデータマイニングAPI● この本の8章までで学んだ多くの手法

私たちの手にすでにあるもの――つまり,

これらを活用して,

Facebookのソーシャルデータを分析する

アプリケーションをどんどん作ろう

Page 9: 『入門 ソーシャルデータ』9章

ユーザのプライバシー保護を考慮

次の3つを守ることが求められています

● Facebook利用規約

● 原則● ポリシー

(参考)http://developers.facebook.com/policy/

ソーシャルデータを扱う場合,特に関係しそうなのは「II. Storing and Using Data You Receive From Us」 「ユーザのデータを販売してはいけない」といった当たり前のことから,「ユーザーが同意していても,アプリケーション外でユーザーの友達リストを使用することはできない」といったことまで.14項目ある.要チェック.

Page 10: 『入門 ソーシャルデータ』9章

9.1 ソーシャルネットワークデータへのアクセス

FacebookのOAuth2.0フローを利用

アプリを作成するにはホスティングが必要ホスティングせずに動かす方法は補足資料を参照ください

Facebookで新規アプリケーションを作成する手順1. Facebookアカウントを入手

2. http://developers.facebook.com/ で「Create New App」

3. セキュリティチェック

4. アプリケーションIDと秘密キーを入手

Page 11: 『入門 ソーシャルデータ』9章

(参考)Facebookアプリの作成開始

Page 12: 『入門 ソーシャルデータ』9章

アクセストークンの取得

(p.292) 9.1.1 10分でわかるアクセストークンの取得アプリが入手可能な情報が書かれた"有効期限付きチケット"を発行してもらうイメージ

アプリが入手可能な情報が書かれたチケット

Facebook発行

提示

情報開示

(参考)4.1.1「君が私のパスワードを知っているはずがない」 (OAuthについて)

Page 13: 『入門 ソーシャルデータ』9章

Permissions● デフォルトで「basic information」にアクセスできる

○ id, name, picture, gender, locale, age range● それ以上の情報へのアクセスには,明示的な許可が必要

(p.p294-296)例9-1 facebook__login.py

http://developers.facebook.com/docs/reference/api/permissions/

EXTENDED_PERMS = ['user_about_me','friends_about_me','user_activities',# ...略...

]

これらです

Page 14: 『入門 ソーシャルデータ』9章

user_about_meuser_activitiesuser_birthdayuser_checkinsuser_education_historyuser_eventsuser_games_activityuser_groupsuser_hometown

user_interestsuser_likesuser_locationuser_notesuser_online_presenceuser_photo_video_tagsuser_photosuser_questionsuser_relationship_details

user_relationshipsuser_religion_politicsuser_statususer_subscriptionsuser_videosuser_websiteuser_work_history

(参考)アクセス対象のFacebookデータ

Facebookはアクセス対象をきめ細かく選択させる

Page 15: 『入門 ソーシャルデータ』9章

ads_managementcreate_eventcreate_noteemailexport_streammanage_friendlistsmanage_notificationsmanage_pagesoffline_access

photo_uploadpublish_actionspublish_checkinspublish_streamread_friendlistsread_insightsread_mailboxread_requestsread_stream

rsvp_eventshare_itemsmsstatus_updatevideo_uploadxmpp_login

friends_about_mefriends_activitiesfriends_birthdayfriends_checkinsfriends_education_historyfriends_eventsfriends_games_activityfriends_groupsfriends_hometown

friends_interestsfriends_likesfriends_locationfriends_notesfriends_online_presencefriends_photo_video_tagsfriends_photosfriends_questionsfriends_relationship_details

friends_relationshipsfriends_religion_politicsfriends_statusfriends_subscriptionsfriends_videosfriends_websitefriends_work_history

Page 16: 『入門 ソーシャルデータ』9章

9.1.2 FacebookクエリAPI

● REST API○ http://developers.facebook.com/docs/reference/rest/○ 今後はGraph APIを使うよう勧告されている

● FQL(Facebook Query Language)○ 手軽に実行できるSQLライクなデータクエリ言語

● Graph API○ http://developers.facebook.com/docs/reference/api/○ これ(をラップしたライブラリ)を使用する

● Open Graph Protocol○ セマンティックウェブのためのメタデータ○ オープンといいつつ,ベンダー1社によるもの

4つのツールが紹介されている.重要なのは2つ

発展途上

deplicated

Page 17: 『入門 ソーシャルデータ』9章

Graph APIがサポートするオブジェクト

(p.299)例として,執筆時点より後に追加されたオブジェクトを紹介します

● Achievement(Instance): ユーザのゲーム業績

● Comment: コメント

● Domain: アプリのWebドメイン

● FriendList: 友人リスト

● Insights: アプリ、ページ、ドメインの統計情報

● Message: メッセージ

● Order: オーダー(ペイメント)関係の情報

● Question: ユーザによる質問

● QuestionOption: 質問への回答オプション

● Review: アプリケーションのレビュー

● Thread: メッセージスレッド

Page 18: 『入門 ソーシャルデータ』9章

Graph APIオブジェクトの取得

http://graph.facebook.com/{オブジェクトのID}

にリクエストを送る

オブジェクトのIDにユーザIDを入れて試してみるとよいユーザの基本情報が取れるまた,末尾に?metadata=1を付けると詳細情報が取れる

Page 19: 『入門 ソーシャルデータ』9章

FacebookのPythonSDK

本文で紹介された公式Python SDKhttps://github.com/facebook/python-sdkは… deplicated

forkされたプロジェクトで最も活発なhttps://github.com/pythonforfacebookを使うなどしましょう.

他,JavaScript,PHP,iOS,Androidの公式SDKがあります

Page 20: 『入門 ソーシャルデータ』9章

API利用イメージ

gapi = facebook.GraphAPI(ACCESS_TOKEN)

result = gapi.request('search', {'q' : Q,'type' : 'group',# 略})

(p.p.303-305)例9-5 facebook__graph_queey.py

groups = gapi.get_objects(group_ids, metadata=1)

Webアプリとして動く例: http://miningthesocialweb.appspot.com/

Page 21: 『入門 ソーシャルデータ』9章

FQL

selectname, sex, relationship_status

fromuser

whereuid

in(select

target_idfrom

connectionwhere

source_id = me() andtarget_type = 'user'

)

SQLのサブセット

より複雑な問い合わせをしたいときに使う

Pythonクラスでラップして使う

Page 22: 『入門 ソーシャルデータ』9章

9.2 Facebookデータの可視化

ここからは,Facebookデータの分析例と可視化ツールの紹介です

1. 取得できるデータを把握し,2. どんな分析を行うかを考え,3. 可視化ツールを選択して,4. 実行する(データ収集→分析→整形→可視化) ・・・のくり返し

Page 23: 『入門 ソーシャルデータ』9章

(余談)可視化ツールの選定

ソーシャルネットワークの可視化ツールに重要な6つの機能● 総覧

● ノードのランク付け

● エッジのランク付け

● ノードの表示

● コミュニティの発見

● エッジの種類 インタラクションの重要性SocialAction http://www.cs.umd.edu/hcil/socialaction/ 『ビューティフルビジュアライゼーション』,p.154,オライリージャパン,2011.10.

Page 24: 『入門 ソーシャルデータ』9章

9.2.1 ソーシャルネットワーク全体の可視化1

JavaScript InfoVis Toolkit  http://thejit.org/

(p.311)RGraphを使った可視化 例9-13 facebook__get_friends_rgraph.py1. 友人のIDを取得

2. 友人の友人を探索

3. 友人たちの詳細情報を取得

4. 友人の友人についてのマップを1つにまとめる

5. JIT RGraph データとして整形

ポイント: 複数のクエリでデータを細かく集めて最後にまとめる

Page 25: 『入門 ソーシャルデータ』9章
Page 26: 『入門 ソーシャルデータ』9章

9.2.1 ソーシャルネットワーク全体の可視化.2

(p.319)Sunburstを使った可視化1つ上の領域の内訳を分割表示する円グラフ

例9-14 facebook__sunburst.py1. 性別オブジェクトを作成

2. 性別ごとに友人を集約

3. 友人を人気度(ネットワークの多さ)によって順位付け

4. JIT Sunburst入力データとして整形

Page 27: 『入門 ソーシャルデータ』9章

9.2.1 ソーシャルネットワーク全体の可視化.3

(p.321)スプレッドシートによる可視化 例9-14 facebook__popularity_spreadsheet.py1. JSONデータを読込み

2. CSVデータに整形

※グラフに可視化するのが重要(なハズ)

ジップの法則?

80-20の法則?

Page 28: 『入門 ソーシャルデータ』9章

9.2.2 グループ内の相互関係の可視化

何らかの基準に基づいて,友人をフィルタリングする

(例)指定したグループに属する友人を表示する

Page 29: 『入門 ソーシャルデータ』9章

9.2.3 友達はみんなどこに行った?

(データ駆動ゲーム)

分析のために相関させてみると面白そうな変数を見つける (例)友人の出身地と現住所をツリーウィジェットで表示する

6.4節のようにGoogle Earth上で表示してみると面白いかも

Page 30: 『入門 ソーシャルデータ』9章

9.2.4 (回転する)タグクラウドとして

ウォールデータを表示する

WPCumulushttp://code.google.com/p/word-cumulus-goog-vis/wiki/UserGuide 参考: (WordPressプラグインでの表示例)http://crossinthenight.com/wordpress/1593/

構造化されていないデータから傾向を見つけ出す (例)タグクラウドにウォールデータを表示するタグクラウドは,個々のタグの大きさによって,データの重要度を表わす

Page 31: 『入門 ソーシャルデータ』9章

9.3 まとめ

● 豊穣なFacebookプラットフォーム● 強力なGraph APIとFQL● この本の8章までで学んだ多くの手法

私たちの手にすでにあるもの――つまり,

これらを活用して,

Facebookのソーシャルデータを分析する

アプリケーションをどんどん作ろう

Page 32: 『入門 ソーシャルデータ』9章

応用問題

● 友人のウォールやグループウォールの構造化されていないテキストをタグクラウドで可視化

○ 第8章のエンティティ分析を活用してもOK

● Graph APIで取得できる構造化されたデータから、

最も饒舌な友人を割り出してみる○ ステータス全体の数や投稿コメントに基づいて算出

● 友人が「いいね!」したものをクラスタ分けし、

ピボットテーブルやグラフにして分析

Page 33: 『入門 ソーシャルデータ』9章

次回 3月22日(木) 19:30~

@mi_kamiさんによる第10章 「セマンティックウェブ: 自由討論」です!

Page 34: 『入門 ソーシャルデータ』9章