『入門 ソーシャルデータ』9章
DESCRIPTION
第9回『入門ソーシャルデータ』真面目に勉強する会TRANSCRIPT
『入門 ソーシャルデータ』9章 Facebook:
オールインワンのソーシャルウェブ環境
2012/03/16 @torazuka 第9回 『入門 ソーシャルデータ』真面目に勉強する会
発表担当: torazuka
こんにちは!
IT系の会社で働くエンジニアです.クラウド回りの社内向け技術支援をしています.
https://twitter.com/torazukahttp://d.hatena.ne.jp/torazuka/
今回の資料
● このスライド○ 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
「この本の優れたところは(中略)、テーマの選定と
動作するコードにあり、その部分は入門書としては
かなりクオリティが高い」と生駒日記の中の先生も
書いていらっしゃるので,動かしてみてもよいかも
これまでの流れ
● 1章 イントロダクション : Twitterデータのハック
○ 環境構築● 2章 マイクロフォーマット: セマンティックマークアップと常識のずれ
○ XFNやGeocoordinatesなどの活用
● 3章 古き良きメールボックス
○ 電子メールデータの分析、対話の追跡● 4章 Twitter: フォローしている、フォローされている、集合演算
○ TwitterのAPIでできることの紹介
● 5章 Twitter: ツイート、すべてツイート、ツイートそのもの
○ ツイートの分析とソーシャルネットワークの可視化● 6章 LinkedIn: プロフェッショナルネットワークのクラスタリング
○ 職名によるクラスタリング、プロフィール情報の取得● 7章 Google Buzz: TF-IDF、コサイン類似度、コロケーション
○ 語の類似度を計測する様々な尺度の紹介● 8章 ブログその他: 自然言語処理(さらにその先へ)
○ NLTKライブラリの利用、エンティティ中心の分析
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 まとめ
ソーシャルネットワーキングサービス
2012年3月現在,8億3千万ユーザー
(情報ソース)http://checkfacebook.com/ Facebookに関する情報発信サイトhttp://www.google.com/adplanner/static/top1000/index.html
世界で最も訪問者の多いサイト「常連ユーザが大勢いるサイトには面白いデータが多数集まる」ソーシャルデータを収集・分析する対象として興味深い上に,手段(API・ツール)も提供されている
「オールインワン」
8億ユーザーがFacebook上で様々な活動をする
● 公開ステータスの更新● 自分のしていることや考えていることの伝達● メッセージの交換● リアルタイムチャット● 写真の共有● 「チェックイン」による居場所の共有
その他色々
9章の著者の主張
● 豊穣なプラットフォーム● 強力なデータマイニングAPI● この本の8章までで学んだ多くの手法
私たちの手にすでにあるもの――つまり,
これらを活用して,
Facebookのソーシャルデータを分析する
アプリケーションをどんどん作ろう
ユーザのプライバシー保護を考慮
次の3つを守ることが求められています
● Facebook利用規約
● 原則● ポリシー
(参考)http://developers.facebook.com/policy/
ソーシャルデータを扱う場合,特に関係しそうなのは「II. Storing and Using Data You Receive From Us」 「ユーザのデータを販売してはいけない」といった当たり前のことから,「ユーザーが同意していても,アプリケーション外でユーザーの友達リストを使用することはできない」といったことまで.14項目ある.要チェック.
9.1 ソーシャルネットワークデータへのアクセス
FacebookのOAuth2.0フローを利用
アプリを作成するにはホスティングが必要ホスティングせずに動かす方法は補足資料を参照ください
Facebookで新規アプリケーションを作成する手順1. Facebookアカウントを入手
2. http://developers.facebook.com/ で「Create New App」
3. セキュリティチェック
4. アプリケーションIDと秘密キーを入手
(参考)Facebookアプリの作成開始
アクセストークンの取得
(p.292) 9.1.1 10分でわかるアクセストークンの取得アプリが入手可能な情報が書かれた"有効期限付きチケット"を発行してもらうイメージ
アプリが入手可能な情報が書かれたチケット
Facebook発行
提示
情報開示
(参考)4.1.1「君が私のパスワードを知っているはずがない」 (OAuthについて)
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',# ...略...
]
これらです
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はアクセス対象をきめ細かく選択させる
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
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
Graph APIがサポートするオブジェクト
(p.299)例として,執筆時点より後に追加されたオブジェクトを紹介します
● Achievement(Instance): ユーザのゲーム業績
● Comment: コメント
● Domain: アプリのWebドメイン
● FriendList: 友人リスト
● Insights: アプリ、ページ、ドメインの統計情報
● Message: メッセージ
● Order: オーダー(ペイメント)関係の情報
● Question: ユーザによる質問
● QuestionOption: 質問への回答オプション
● Review: アプリケーションのレビュー
● Thread: メッセージスレッド
Graph APIオブジェクトの取得
http://graph.facebook.com/{オブジェクトのID}
にリクエストを送る
オブジェクトのIDにユーザIDを入れて試してみるとよいユーザの基本情報が取れるまた,末尾に?metadata=1を付けると詳細情報が取れる
FacebookのPythonSDK
本文で紹介された公式Python SDKhttps://github.com/facebook/python-sdkは… deplicated
forkされたプロジェクトで最も活発なhttps://github.com/pythonforfacebookを使うなどしましょう.
他,JavaScript,PHP,iOS,Androidの公式SDKがあります
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/
FQL
selectname, sex, relationship_status
fromuser
whereuid
in(select
target_idfrom
connectionwhere
source_id = me() andtarget_type = 'user'
)
SQLのサブセット
より複雑な問い合わせをしたいときに使う
Pythonクラスでラップして使う
9.2 Facebookデータの可視化
ここからは,Facebookデータの分析例と可視化ツールの紹介です
1. 取得できるデータを把握し,2. どんな分析を行うかを考え,3. 可視化ツールを選択して,4. 実行する(データ収集→分析→整形→可視化) ・・・のくり返し
(余談)可視化ツールの選定
ソーシャルネットワークの可視化ツールに重要な6つの機能● 総覧
● ノードのランク付け
● エッジのランク付け
● ノードの表示
● コミュニティの発見
● エッジの種類 インタラクションの重要性SocialAction http://www.cs.umd.edu/hcil/socialaction/ 『ビューティフルビジュアライゼーション』,p.154,オライリージャパン,2011.10.
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 データとして整形
ポイント: 複数のクエリでデータを細かく集めて最後にまとめる
9.2.1 ソーシャルネットワーク全体の可視化.2
(p.319)Sunburstを使った可視化1つ上の領域の内訳を分割表示する円グラフ
例9-14 facebook__sunburst.py1. 性別オブジェクトを作成
2. 性別ごとに友人を集約
3. 友人を人気度(ネットワークの多さ)によって順位付け
4. JIT Sunburst入力データとして整形
9.2.1 ソーシャルネットワーク全体の可視化.3
(p.321)スプレッドシートによる可視化 例9-14 facebook__popularity_spreadsheet.py1. JSONデータを読込み
2. CSVデータに整形
※グラフに可視化するのが重要(なハズ)
ジップの法則?
80-20の法則?
9.2.2 グループ内の相互関係の可視化
何らかの基準に基づいて,友人をフィルタリングする
(例)指定したグループに属する友人を表示する
9.2.3 友達はみんなどこに行った?
(データ駆動ゲーム)
分析のために相関させてみると面白そうな変数を見つける (例)友人の出身地と現住所をツリーウィジェットで表示する
6.4節のようにGoogle Earth上で表示してみると面白いかも
9.2.4 (回転する)タグクラウドとして
ウォールデータを表示する
WPCumulushttp://code.google.com/p/word-cumulus-goog-vis/wiki/UserGuide 参考: (WordPressプラグインでの表示例)http://crossinthenight.com/wordpress/1593/
構造化されていないデータから傾向を見つけ出す (例)タグクラウドにウォールデータを表示するタグクラウドは,個々のタグの大きさによって,データの重要度を表わす
9.3 まとめ
● 豊穣なFacebookプラットフォーム● 強力なGraph APIとFQL● この本の8章までで学んだ多くの手法
私たちの手にすでにあるもの――つまり,
これらを活用して,
Facebookのソーシャルデータを分析する
アプリケーションをどんどん作ろう
応用問題
● 友人のウォールやグループウォールの構造化されていないテキストをタグクラウドで可視化
○ 第8章のエンティティ分析を活用してもOK
● Graph APIで取得できる構造化されたデータから、
最も饒舌な友人を割り出してみる○ ステータス全体の数や投稿コメントに基づいて算出
● 友人が「いいね!」したものをクラスタ分けし、
ピボットテーブルやグラフにして分析
次回 3月22日(木) 19:30~
@mi_kamiさんによる第10章 「セマンティックウェブ: 自由討論」です!