【ハンズオン資料】twitterのデーターを取得し、Apache Sparkによる感情分析

■ Bluemix x Apache Spark ハンズオン資料

・Bluemix新規登録（30日間、無料枠あり）
　[Bluemix新規アカウント取得はこちら](https://developer.ibm.com/sso/bmregistration?lang=ja_JP&ca=dwjapan-_-bluemix-_-bluemix-registration-_-landing)
　※ この30日間、Bluemixと連携されている100以上のAPIやIBMのサービスがほとんど無料で使えます。

■ [Open Cloud Innovation Festa 2016](http://softlayer.connpass.com/event/34524/)を開催します。

2016年9月16日（金）- 2016年9月17日（土）、二日間電気通信大学にて技術カンファレンス「Open Cloud Innovation Festa 2016」を開催いたします。

★ 今「旬」のテクノロジーや革新的なサービス一挙ご紹介 ★
　オープンイノベーションを支える国内外の最新事例を始め、最先端の技術を活用しサービスを展開している企業やコミュニティの皆さまより、全32セッション（クラウド・ロボティックス・IoT・DevOps・ビックデーターなど）が予定されています。
　インフラエンジニアも、開発エンジニアも、営業の方も、そうでない方も、クラウドを活用した、最新のサービスやテクノロジーに興味のある方ならどなたでも参加していただけます。イベント開催の二日間、今「旬」のテクノロジーやビジネスをお楽しみください。

・イベント申し込みはこちら
　http://softlayer.connpass.com/event/34524/
・セッションの詳細や協力企業はこちら
　http://open-cloud-innovation-festa.com/

<h1>ハンズオンで使うサービス</h1>
![スクリーンショット 2015-12-09 15.59.16.png](https://qiita-image-store.s3.amazonaws.com/0/29452/f380c238-6518-948b-905a-2f0c10b9a10b.png)

・Apache Spark - https://console.ng.bluemix.net/catalog/services/apache-spark/
・Tone Analyzer - https://console.ng.bluemix.net/catalog/services/tone-analyzer/
・Object Storage - https://console.ng.bluemix.net/catalog/services/object-storage-v1/
・Twitter App - https://apps.twitter.com/
・jupyter - http://jupyter.org/

<h1>ハンズオン手順</h1>
・Twitter Application作成
・Spark用notebook入手
・Tone Analyzer作成
・BluemixのSpark設定（追加）

# Twitter Application生成
まず、最初に今回のハンズオンで使用するtwitterデーターを取得するため、Twitter Appを生成し、そのAppのアクセスキーを入手します。
※ Twitterのアカウントをお持ちではない方は、この手順を実施せず次の「sparkの追加」に移動してください。

・Twitterログイン後、下記のURL実行
https://apps.twitter.com/
![スクリーンショット 2015-12-08 14.00.39.png](https://qiita-image-store.s3.amazonaws.com/0/29452/23da0250-ef6a-e6ea-9cf6-7ebfbd5f338c.png)

下記の画面にて、Twitter Apps情報を入力し、APIを生成します。
Website URLは、Bluemixランタイムで構築されたアプリのURLでも良い。
![スクリーンショット 2015-12-08 15.04.12.png](https://qiita-image-store.s3.amazonaws.com/0/29452/432d9613-a170-f8ca-0b64-b9e06f32f179.png)

## 生成されたTwitter API アクセス情報を確認
① Twitter API 初期画面から「Keys and Access Tokens」タブに移動
② Consumer Key (API Key)とConsumer Secret (API Secret)を確認
③ 「Create my access token」をクリックし、トークン生成
![スクリーンショット 2015-12-08 15.13.57.png](https://qiita-image-store.s3.amazonaws.com/0/29452/a98e73fd-1ff3-6c80-4f93-1eaeb77b757d.png)

生成されたトークンが確認できます。
![スクリーンショット 2015-12-08 15.17.46.png](https://qiita-image-store.s3.amazonaws.com/0/29452/d0d73c06-0fc9-da8c-1e18-961301e79e20.png)

ここまで進んだら、下記の4つのキーをメモ帳などにコピーペーしてください。
・Consumer Key (API Key)
・Consumer Secret (API Secret) 
・Access Token
・Access Token Secret

# spark用のサンプルnotebookを入手
下記のリンクに接続してください。
https://github.com/ibm-cds-labs/spark.samples/tree/master/streaming-twitter/notebook

※ 下記の手順に従って「Twitter + Watson Tone Analyzer Part1.ipynbとTwitter + Watson Tone Analyzer Part2.ipynb」をそれぞれ実施（2回実施）してください。結果物として、2つ（Part1とPart2）の「ipynb」ファイルが入手できます。

① Twitter + Watson Tone Analyzer Part1(2).ipynbをクリック
② Rawをクリック
③ ページを別名で保存
※ ダウンロードされたファイルの拡張子が「ipynb」かを確認し、
　違う場合は拡張子を「ipynb」に変更
![スクリーンショット 2015-12-08 16.53.28.png](https://qiita-image-store.s3.amazonaws.com/0/29452/612968f2-0ade-f740-ed1a-ca97298fb494.png)

下記のようにローカルに「ipynb」ファイルがあれば次に進みましょう。
![スクリーンショット 2015-12-10 10.08.33.png](https://qiita-image-store.s3.amazonaws.com/0/29452/08b974db-bc2e-0055-cb41-16da2fc2effd.png)


# Tone Analyzer作成
① カタログ
② 「Bluemix Labs Catalog」クリック（カタログ画面の一番下）
③ 検索バーにて「tone」を入力
④ Tone Analyzer選択
![スクリーンショット 2015-12-08 16.01.18.png](https://qiita-image-store.s3.amazonaws.com/0/29452/a079f7ec-5229-1922-7d8b-38526f6fcaba.png)

・Tone Analyzerのアクセスキー情報を取得
① 情報確認の後、「作成」クリック
② サービス資格情報クリック
③ 資格情報が表示されたら、下の3つの情報をテキストエディターなどにコピーペー。
　・url
　・username
　・password
![スクリーンショット 2015-12-08 15.57.13.png](https://qiita-image-store.s3.amazonaws.com/0/29452/c21b4dd6-2c2d-8077-ade3-ef6471108e6d.png)

# sparkの追加
① カタログ → ② 検索バーに「spark」入力 → ③ Apache Spark選択
![スクリーンショット 2015-12-08 13.39.12.png](https://qiita-image-store.s3.amazonaws.com/0/29452/34df2817-edce-2af3-91d5-686b526ca66c.png)

## Spark作成
① Sparkの情報（スペース・アプリ・サービス名・資格情報名・プラン）を確認し
　「作成」クリック、それぞれの情報は変更可能だが、デフォルトでも良い。
② 「ダッシュボード」へ移動
③ 作成済みの、「Apache SparkとTone Analyzer」が確認できる。
![スクリーンショット 2015-12-08 16.17.27.png](https://qiita-image-store.s3.amazonaws.com/0/29452/80b4e4d0-7956-4db2-83d2-b2911b5b7ad2.png)

## Sparkの設定を始める
※ 上記の画面（ダッシュボード）の「Apache Spark」をクリック
①「OPEN」をクリック
② 先ほど追加されたSparkのサービス名をクリック（今回は、Apache Spark-2p）
![スクリーンショット 2015-12-08 20.31.35.png](https://qiita-image-store.s3.amazonaws.com/0/29452/3fd2a103-456e-4158-9542-df14430ab36c.png)

## Object Storageを追加
① Object Storage クリック
② Add Object Storage クリック
③ New → 内容入力
　・Space情報などに間違いがあるかを確認してください。
　・3番目の項目「Select Plan ~」では、「Free」を選択します。
④ 内容確認後、CREATE クリック
⑤ 生成された「Object Storage」が確認できる。
![スクリーンショット 2015-12-08 20.40.15.png](https://qiita-image-store.s3.amazonaws.com/0/29452/fd4a9616-bd78-a03f-b091-71b62b170dd2.png)

# jupyter Notebookを作成
Notebookに設定する、TwitterやTone Analyzerのキーセット作成

![スクリーンショット 2015-12-09 17.03.35.png](https://qiita-image-store.s3.amazonaws.com/0/29452/5d44aa23-5269-023b-3e68-3f9a13f10d31.png)

・下記のテキストをコピーペーして、「XXXXX」の部分を埋めてください。
val demo = com.ibm.cds.spark.samples.StreamingTwitter
demo.setConfig("twitter4j.oauth.consumerKey","XXXXX")
demo.setConfig("twitter4j.oauth.consumerSecret","XXXXX")
demo.setConfig("twitter4j.oauth.accessToken","XXXXX")
demo.setConfig("twitter4j.oauth.accessTokenSecret","XXXXX")
demo.setConfig("watson.tone.url","XXXXX")
demo.setConfig("watson.tone.password","XXXXX")
demo.setConfig("watson.tone.username","XXXXX")

## Notbook1を作成
※ 注意
Notebookの実行は、一行の処理が終わってから次に進みましょう。
処理が行なわれている間は、「[数字]」の部分が「*（アスタリスク）」になり、処理が終わったら数字に変わります。

① My Notebooksをクリック
② NEW NOTEBOOKをクリック
③ From Fileをクリック
④ Neme 入力
⑤ ファイルを選択で、先ほど「spark用のサンプルnotebookを入手」で
　作成した「Twitter + Watson Tone Analyzer Part1.ipynb」を選択。
⑥ CREATE NOTEBOOKをクリック
![スクリーンショット 2015-12-08 20.51.07.png](https://qiita-image-store.s3.amazonaws.com/0/29452/fe44ea63-15f9-2697-4bd3-0677fa3e9f41.png)

上記の作業を完了すると、下記のNotebook画面が表示されます。
① 「PLAY」アイコンで1行ずつ、実行していきます。
　「STOP」アイコンで実行を止めることができます。
② 上記の「Twitter Application生成」で生成された、Twitterのアクセスキーと「Tone Analyzer作成」で生成された、Tone Analyzerのアクセス情報を設定します。
③ コードに設定されている時間間データーを取得するので、処理が終わるまで待ちます。
　この部分は、TwitterStreamからデーターを取得します。
　処理の途中に「＊（アスタリスク）」が数字に変わり、処理が終わっているように
　見えるが、最終的に検索されたデーターの件数が表示されるので、検索データーの数字が
　出力されるまで待っていてください。
　処理が終わっていない状態で次に進むとエラーになるので要注意です。

![スクリーンショット 2015-12-08 20.59.36.png](https://qiita-image-store.s3.amazonaws.com/0/29452/b39ea020-c7af-2bd8-0596-e4a9ed6dd919.png)

・Notebook1では、Object Storageにデーターを保存します。
① 「tweetsFull.parquet」のファイル名で保存する。（変更可）
② 保存されたファイル（データー）をセレクトしてみます。
③ Object Storageにデーターがどのように生成されているのかを確認してみましょう。
　「ダッシュボード」をクリックします。
④ Object Storageをクリック
⑤ Notebook1で生成した、ファイル名で「Notebook」が保存されているのが確認できる。

![スクリーンショット 2015-12-10 11.03.52.png](https://qiita-image-store.s3.amazonaws.com/0/29452/f65273f3-543b-d1fb-843f-b1bb3ae35f3c.png)


## Notebook2を作成
手順は、「Notebook1を作成」と同じですが、手順⑤のファイル選択で「Twitter + Watson Tone Analyzer Part2.ipynb」を選択してください。
Notebook2では、「Notebook1」で入手されたデーターを使ってデーターを可視化します。
「Notebook1」と同じく一つずつ実行していてください。Notebookのクエリなどを変えながら実行していくと、違う形のグラフを表示することができます。

![スクリーンショット 2015-12-09 17.17.05.png](https://qiita-image-store.s3.amazonaws.com/0/29452/6db16d96-8094-3d7c-b79c-f0c06d42fd9c.png)


# Bluemixコミュニティ
※ Bluemixに関する技術関連情報や最新情報、イベント告知、Bluemixユーザーコミュニティの皆さんからの最新記事などを配信しています。
下記のリンクから「Bluemix」の「今」をフォローできます！

・Facebook ： [Bluemixユーザーグループ](https://facebook.com/groups/bmxug)
・Qiita ： [Bluemix Qiitaページ](http://qiita.com/tags/Bluemix)
・Slack ： [Bluemix User Group(BMXUG)の交流用](http://bit.ly/1QzOgiC)
・stackoverflow ： [stackoverflow（コミュニティQ&A）](http://ja.stackoverflow.com/questions/tagged/bluemix)
・Twitter ： @ibm_ecod_japan