Azure Stream Analytics でのソーシャル メディア分析

この記事では、Azure Event Hubs に Twitter イベントをリアルタイム入力し、次に Stream Analytics を使用して分析することで、ソーシャル メディアのセンチメント分析ソリューションを構築する方法について説明します。 Azure Stream Analytics クエリを作成してデータを分析し、後で使用できるように結果を保存したり、Power BI ダッシュボードを作成してリアルタイムで分析情報を提供したりします。

ソーシャル メディア分析ツールは、組織がトレンド トピックを把握するのに役立ちます。 トレンド トピックとは、ソーシャル メディアにおいて大量の投稿が行われているテーマや考え方のことです。 センチメント分析 (意見マイニングともいう) ではソーシャル メディア分析ツールを使用して、製品やアイデアに対する考え方を特定します。

リアルタイム Twitter 傾向分析は、分析ツールの好例です。ハッシュタグ サブスクリプション モデルにより、特定のキーワード (ハッシュタグ) をリッスンし、フィードの感情分析を展開できます。

シナリオ:リアルタイムのソーシャル メディア感情分析

ニュース メディア Web サイトを運営している会社は、その閲覧者に直接関係するサイト コンテンツを際立たせることで、競合他社より優位に立つことに関心があります。 そのため、会社は、Twitter データのリアルタイム感情分析を実行することで、閲覧者に関連するトピックのソーシャル メディア分析を使用します。

Twitter のトレンド トピックをリアルタイムで特定するには、主要なトピックのツイートの量とセンチメントに関するリアルタイム分析が必要です。

前提条件

この攻略ガイドでは、Twitter に接続し、特定のハッシュタグ (設定可能) が付いたツイートを検索するクライアント アプリケーションを使用します。 アプリケーションを実行し、Azure Streaming Analytics を使用してツイートを分析するための前提条件を次の一覧に示します。

  • Azure サブスクリプションをお持ちでない場合は、無料アカウントを作成してください。

  • Twitter アカウント。

  • Twitter フィードを読み取る TwitterClientCore アプリケーション。 このアプリケーションを入手するには、TwitterClientCore をダウンロードしてください。

  • .NET Core CLI バージョン 2.1.0 をインストールします。

実装するソリューション アーキテクチャを次に示します。

A diagram showing different pieces of services and applications used to build the solution.

入力をストリームするためのイベント ハブの作成

サンプル アプリケーションでは、イベントを生成し、イベント ハブにプッシュします。 Azure Event Hubs は、Stream Analytics に推奨されるイベント取り込み方法です。 詳細については、Azure Event Hubs のドキュメントをご覧ください。

Event Hubs 名前空間とイベント ハブを作成する

クイック スタート: Azure portal を使用したイベント ハブの作成」の手順に従って、Event Hubs 名前空間と、socialtwitter-eh という名前のイベント ハブを作成します。 別の名前を使用してもかまいません。 その場合、名前を書き留めておきます。後でこの名前が必要になります。 イベント ハブの他のオプションを設定する必要はありません。

イベント ハブへのアクセスを許可する

プロセスがイベント ハブにデータを送信できるようにするには、イベント ハブに、アクセスを許可するポリシーが必要です。 アクセス ポリシーにより、承認情報を含む接続文字列が生成されます。

  1. Event Hubs 名前空間の左側にあるナビゲーション バーで、[Event Hubs] を選択します。これは、[エンティティ] セクションにあります。 次に、先ほど作成したイベント ハブを選択します。

  2. 左側のナビゲーション バーで、 [設定] の下にある [共有アクセス ポリシー] を選択します。

    注意

    [共有アクセス ポリシー] のオプションには、名前空間用とイベント ハブ用があります。 名前空間ではなく、イベント ハブのコンテキストで作業するようにしてください。

  3. [共有アクセス ポリシー] ページで、コマンド バーの [+ 追加] を選択します。 次に、 [ポリシー名]socialtwitter-access と入力し、 [管理] チェックボックスをオンにします。

  4. [作成] を選択します

  5. ポリシーがデプロイされたら、共有アクセス ポリシーの一覧からそのポリシーを選択します。

  6. [接続文字列 - 主キー] というボックスを見つけ、接続文字列の横のコピー ボタンを選択します。

  7. 接続文字列をテキスト エディターに貼り付けます。 この接続文字列は、少し編集を加えた後に、次のセクションで必要になります。

接続文字列は次のようになります。

Endpoint=sb://EVENTHUBS-NAMESPACE.servicebus.windows.net/;SharedAccessKeyName=socialtwitter-access;SharedAccessKey=XXXXXXXXXXXXXXX;EntityPath=socialtwitter-eh

接続文字列には、セミコロンで区切られた複数のキーと値のペア (EndpointSharedAccessKeyNameSharedAccessKeyEntityPath) が含まれています。

注意

セキュリティのため、この例では接続文字列の一部が削除されています。

Twitter クライアント アプリケーションの構成および開始

クライアント アプリケーションは、Twitter からツイート イベントを直接取得します。 そのために、クライアント アプリケーションには Twitter ストリーミング API を呼び出すためのアクセス許可が必要です。 このアクセス許可を構成するために、Twitter でアプリケーションを作成し、一意の資格情報 (OAuth トークンなど) を生成します。 次に、API 呼び出しを行うときにこれらの資格情報を使用するようにクライアント アプリケーションを構成します。

Twitter アプリケーションを作成する

この攻略ガイドに使用できる Twitter アプリケーションがまだない場合は、作成できます。 Twitter アカウントを既に持っている必要があります。

注意

Twitter でアプリケーションを作成し、キー、シークレット、トークンを取得するための正確なプロセスが変更されている場合があります。 以下の手順が Twitter サイトで表示される内容と一致しない場合は、Twitter の開発者向けドキュメントを参照してください。

  1. Web ブラウザーで Twitter の開発者用ページに移動して、開発者アカウントを作成し、 [Create an app](アプリの作成) を選択します。 Twitter 開発者アカウントを申請する必要があるというメッセージが表示される場合があります。 お気軽にお申し込みください。申請が承認されると、確認メールを受け取ります。 開発者アカウントの承認には、数日かかることがあります。

    Screenshot shows the Create an app button.

  2. [Create an application](アプリケーションの作成) ページで新しいアプリの詳細を入力し、 [Create your Twitter application](Twitter アプリケーションの作成) を選択します。

    Screenshot shows the App details pane where you can enter values for your app.

  3. アプリケーションのページで [Keys and Tokens](キーとトークン) タブを選択し、 [Consumer API Key](コンシューマー API キー)[Consumer API Secret Key](コンシューマー API シークレット キー) の値をコピーします。 さらに、 [Access Token and Access Token Secret](アクセス トークンとアクセス トークン シークレット) の下の [Create](作成) を選択して、アクセス トークンを生成します。 [Access Token](アクセス トークン)[Access Token Secret](アクセス トークン シークレット) の値をコピーします。

    Twitter アプリケーションについて取得した値を保存します。 これらの値は後で必要になります。

注意

Twitter アプリケーションのキーとシークレットにより、Twitter アカウントにアクセスできるようになります。 Twitter のパスワードと同様に、この情報は機密情報として扱ってください。 たとえば、他のユーザーに提供するアプリケーションにこの情報を埋め込まないでください。

クライアント アプリケーションを構成する

特定のトピック セットに関するツイート イベントを収集するために、Twitter Streaming API を使用して Twitter データに接続するクライアント アプリケーションを作成しました。

アプリケーションを実行するには、Twitter のキーやイベント ハブの接続文字列などの特定の情報が必要となります。

  1. 前提条件に記載されている TwitterClientCore アプリケーションのダウンロードが完了していることを確認します。

  2. テキスト エディターを使用して、App.config ファイルを開きます。 <appSettings> 要素を次のように変更します。

    • oauth_consumer_key を Twitter のコンシューマー キー (API キー) に設定します。
    • oauth_consumer_secret を Twitter のコンシューマー シークレット (API シークレット) に設定します。
    • oauth_token を Twitter のアクセス トークンに設定します。
    • oauth_token_secret を Twitter のアクセス トークン シークレットに設定します。
    • EventHubNameConnectionString を接続文字列に設定します。
    • EventHubName をイベント ハブ名 (つまり、エンティティ パスの値) に設定します。
  3. コマンド ラインを開き、TwitterClientCore アプリが配置されているディレクトリに移動します。 コマンド dotnet build を使用してプロジェクトをビルドします。 次にコマンド dotnet run を使用してアプリを実行します。 アプリによりツイートが Event Hubs に送信されます。

Stream Analytics のジョブの作成

ツイート イベントが Twitter からリアルタイムでストリーミングされるようになったので、これらのイベントをリアルタイムで分析する Stream Analytics ジョブを設定します。

  1. Azure portal で、お使いのリソース グループに移動し、 [+ 追加] を選択します。 次に、Stream Analytics ジョブを検索し、 [作成] 選択します。

  2. ジョブに socialtwitter-sa-job という名前を付け、サブスクリプション、リソース グループ、場所を指定します。

    最適なパフォーマンスを実現し、リージョン間でのデータ転送の料金がかからないように、ジョブとイベント ハブを同じリージョンに配置することをお勧めします。

  3. [作成] を選択します デプロイが完了したら、ジョブに移動します。

ジョブの入力の指定

  1. Stream Analytics ジョブで、 [ジョブ トポロジ] の下の左側のメニューで [入力] を選択します。

  2. [+ ストリーム入力の追加]>[イベント ハブ] を選びます。 [新規入力] フォームに次の情報を入力します。

    設定 推奨値 説明
    入力のエイリアス TwitterStream 入力のエイリアスを入力します。
    サブスクリプション <該当するサブスクリプション> 使用する Azure サブスクリプションを選択します。
    Event Hubs 名前空間 asa-twitter-eventhub
    イベント ハブ名 socialtwitter-eh [既存を使用] を選択します。 次に、作成したイベント ハブを選択します。
    イベントの圧縮タイプ Gzip データ圧縮の種類。

    他の既定値はそのままにし、 [保存] を選択します。

ジョブ クエリの指定

Stream Analytics は、変換を記述するための単純な宣言型のクエリのモデルをサポートします。 言語に関する詳細については、 Azure Stream Analytics クエリ言語リファレンスを参照してください。 この攻略ガイドでは、Twitter データに対するいくつかのクエリを作成してテストすることができます。

トピック間のメンション数を比較するには、タンブリング ウィンドウを使用して、5 秒ごとにトピック別のメンション数を取得します。

  1. ジョブの [概要] で、クエリ ボックスの右上付近にある [クエリの編集] を選択します。 そのジョブ用に構成されている入力と出力が一覧表示され、出力に送信される入力ストリームを変換するクエリを作成できます。

  2. クエリ エディターでクエリを次のように変更します。

    SELECT *
    FROM TwitterStream
    
  3. メッセージのイベント データは、クエリの下の [入力プレビュー] ウィンドウに表示されます。 [ビュー][JSON] に設定されていることを確認します。 データが表示されない場合は、データ ジェネレーターがイベント ハブにイベントを送信していること、および入力の圧縮の種類として Gzip が選択されていることを確認します。

  4. [クエリのテスト] を選択し、クエリの下の [テスト結果] ウィンドウで結果を確認します。

  5. コード エディターでクエリを次のように変更し、 [クエリのテスト] を選択します。

    SELECT System.Timestamp as Time, text
    FROM TwitterStream
    WHERE text LIKE '%Azure%'
    
  6. このクエリは、キーワード Azure を含むすべてのツイートを返します。

出力シンクの作成

これで、イベント ストリーム、イベントを取り込むためのイベント ハブ入力、ストリームに対して変換を実行するためのクエリを定義しました。 最後に、ジョブの出力シンクを定義します。

この攻略ガイドでは、ジョブ クエリから Azure Blob Storage に集計済みのツイート イベントを書き込みます。 アプリケーションのニーズに応じて、Azure SQL Database、Azure Table Storage、Event Hubs、または Power BI に結果をプッシュすることもできます。

ジョブの出力の指定

  1. 左側のナビゲーションメニューの [ジョブ トポロジ] セクションで、 [出力] を選択します。

  2. [出力] ページで、[+ 追加][Blob Storage/Data Lake Storage Gen2] を選択します。

    • 出力のエイリアス:TwitterStream-Output という名前を使用します。
    • [インポート オプション] : [サブスクリプションからストレージを選択する] を選択します。
    • [ストレージ アカウント] 。 使うストレージ アカウントを選びます。
    • [コンテナー][新規作成] を選択して socialtwitter と入力します。
  3. [保存] を選択します。

ジョブの開始

ジョブ入力、クエリ、出力が指定されました。 Stream Analytics ジョブを開始する準備が整いました。

  1. TwitterClientCore アプリケーションが実行されていることを確認します。

  2. ジョブの概要で、 [開始] を選択します。

  3. [ジョブの開始] ページで、 [ジョブ出力の開始時刻][Now](今すぐ) を選択し、 [開始] を選択します。

サポートを受ける

詳細については、Azure Stream Analytics に関する Microsoft Q&A 質問ページを参照してください。

次のステップ