メディアライフの日記

メディアを活用したライフスタイルの研究・提案に向けて

GoogleアナリティクスでクライアントIDとアクセス時刻(秒単位)を取得

1.クライアントIDを取得(クッキー)

プリンシプルさんのサイトを参考に設定。

2016年の新定番!ユーザーエクスプローラーをもっと活用するための簡単な方法 | 株式会社プリンシプル

 

2.クライアントIDを取得(customTask)

清水誠さんのサイトを参考に設定。

GTMでGoogleアナリティクスのClient IDを取得する一番確実で楽な方法(2018年版) - 清水誠メモ

 

3.アクセス時刻(分単位)を取得(customTask)

Dimensions & Metrics Explorer  |  Analytics Reporting API v4  |  Google Developers

 

4.アクセス時刻(秒単位)を取得(customTask)

 清水誠さんのサイトを参考に設定。

GTMでGoogleアナリティクスのアクセス時間を計測しよう - 清水誠メモ

 

(1)ページタイトル・ページビューのデータを、クライアントID・タイムスタンプ付で取得。

(2)外部リンクのクリックイベントのカテゴリ・アクション・ラベル・イベント値を、クライアントID・タイムスタンプ付で取得。

 

Googleアナティクスのデータを基に協調フィルタリングによるレコメンドをAzureMLで試す

1/11(金)

クラウドではじめる機械学習」をAmazonで購入

 

1/12(土)

到着

 

1/13(日)

1〜3、7章まで一読・ハンズオンを通じて、サンプルデータを基にモデル作成。

早速、スプレッドシートに取得済みのGoogleアナリティクスデータ(ユーザ毎、ページ毎のページビュー数)を加工して、AzureMLにアップロードし、データを差し替えてモデルを実行。

1回目はエラー(同一ユーザが同一ページを別セッションでビューすると、評点が複数あることになり、AzureMLのレコメンダーではエラー)

2回目は上記エラーが発生するはずの30件のデータに絞って実行してあえてエラーを出し、エラー解消を目指すつもりが、通ってしまった。

また、このページを見た人はあのページも見たをやりたかったのに、あなたへのお薦めになってしまった。

 

1/14(月)

・あなたへのお薦めでなく、類似する商品をお薦めするようにAzureMLで設定

・30件のデータから1万件のデータに

・同一ユーザによる同一ページのPV数をスプレッドシート上で合計

・類似商品のレコメンドの評価はAzureML上でエラー

WebサービスPythonコードで発生したエラーをPython3向けに修正して解消、JupyterNotebookで実行

 

残った課題

・トップページなどを対象から外す

・ページビューが発生しなかったページのお薦め→ページの類似性データを作成?

・評点データをページビューから滞在時間などにしてみる

朝日カルチャーセンターが、日本マイクロソフトの機械学習機能を活用し、講座のレコメンデーションを提供開始 - News Center Japan

Azure Machine Learningによるレコメンデーションの設計&実装を公開!~朝日カルチャーセンターの事例から~

Pythonコードをサーバに実装

・実装時のシステム構成

協調フィルタリング・アソシエーション分析によるレコメンド手法の紹介

 

 

 

 

 

Tableau Extensions APIセミナーのまとめ

Tableau Developers Club Season 2 /*TableauのAPIすべて*/ Extensions API編 #1 + 忘年会|IT勉強会ならTECH PLAY[テックプレイ]

に参加。

 

公式レポートはこちら。

https://techplay.jp/eventreport/701438

 

以下、参加直後の備忘録。

 

事前準備として、

・各種ファイルのダウンロード

・ローカルサーバーの起動

 

ローカルサーバーの起動は、以下の2つの記事

開発用ローカルサーバを立ち上げる方法 - Qiita

pythonでローカルwebサーバを立ち上げる - Qiita

を参考に

$ python3 -m http.server 8000 
を実行。
最初は失敗したが、各種ファイルをダウンロードしたディレクトリに移動してから再度実行したら成功。
ブラウザに
http://localhost:8000
と入力したら、URLが

http://localhost:8000/extensions-api-master/

となり、ディレクトリが表示された。

以降、チュートリアルに入る。

Part0のtrexファイルをエディタで開き、<source-location>タグの<url>タグ内を、以下のように上書き修正。
<url>http://localhost:8000/extensions-api-master/Tutorial/Part_0/MarksSelection.html

ここで、Tableau DeskTop 2018.3を起動し、
データソースは適当にサンプルストアを選択し、
適当にワークシートを作成し、
ダッシュボードで適当にワークシートを表示し、
「拡張子」を選択。
拡張ボタンからtrexファイルを選択し、
「許可」ボタンを選択すると、htmlの内容がダッシュボード内で表示された!

Part1-6も同様。

次に、デバッグモードを起動した。
ダウンロードしたディレクトリ直下のreadme.texを参照し、
$ open /Applications/Tableau Desktop 2018.3.app --args --remote-debugging-port=8696
を実行。
ただし、最初は失敗。
再度、

Applications ユーザー名$ open -a /Applications/Tableau Desktop 2018.3.app --args --remote-debugging-port=8696

と実行したら成功。

ブラウザで

http://localhost:8696/

としたらデバック画面へ。

(≒Tableauをサーバーに見立て、ブラウザからアクセス)

 

改めてExtensions APIとは?

・呼び出すためのおまじないは一手間かかるが、覚えて慣れればそんなに難しくない。

  →Tabpyみたいなもの。

・Tableauのダッシュボード画面をHTML/CSS/JavaScriptで自由に動的に作れる。

 →HTML/CSS/JavaScriptの知識は必要。

  →アイデアも必要。ギャラリーを見て何ができるかつかみながら考えていく。

・「Webページ」と「拡張子」の違い。

 →外部のWebページを呼び出してそのまま表示するのでなく、作ったものを表示できる。≒スマホアプリで言うところの、WebViewとハイブリッドモバイルアプリの違いみたいなものと理解。

 →ダッシュボード内で「Webページ」は一つしか表示できないが、「拡張子」は複数表示できる。

・Tableauの機能を使っていて物足りなくなってきたら使いたくなる?

 

 













Nature RemoのテレビプリセットのWeb APIでリモコンアプリ(HTML/CSS/JavaScriptのMonaca)を作ってみた

1.Nature Remo APIコマンドラインから叩いてテレビを操作する

2.Nature Remo APIスマホアプリに設置したボタンから叩く

3.Nature Remoのリモコンボタンを連続して複数回操作する(2019.2.3追記)

4.Nature RemoのテレビプリセットのAPIでリモコンアプリ(HTML/CSS/JavaScriptMonaca)を作ってみた(2019.1.27追記)

 

1.Nature Remo APIコマンドラインから叩いてテレビを操作する

 

NatureRemo の Cloud API を使って Google Home からテレビを HDMI4 に変更する - おともだちティータイム

を参考とした。

 

Nature Remoは購入済みで、純正アプリもインストール済みだったので、まずはこれが動作することを確認した。

 

その後、http://home.nature.global/

にメアドを入力して、トークンを取得。

 

curl -H "Authorization: Bearer {YOUR_ACCESS_TOKEN}" "https://api.nature.global/1/users/me"

に貼り付けて実行したら、レスポンスが得られた。

 

curl -H "Authorization: Bearer {YOUR_ACCESS_TOKEN}" "https://api.nature.global/1/appliances"

もレスポンスが得られた。

 

ここで、JSONを見やすくするためのjqをインストールした。

 

まずbrewをインストールした。

macOS 用パッケージマネージャー — macOS 用パッケージマネージャー

を参考に、

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

を実行。

 

その後、

環境変数の確認とパスの追加 - Qiita

を参考に、パスを追加。

$ echo export PATH='/usr/local/bin:$PATH' >> ~/.bash_profile

$ source ~/.bash_profile

$ brew doctor

も無事動作。

 

ここで、

Mac に jq コマンドのインストール - メモログ

を参考に、

$ brew install jq
でjqをインストール

Nature Remoの公式APIの使い方 - Qiita

を参考に、

コマンド|jq

としたら、JSONが読みやすくなった。

 

NatureRemo の Cloud API を使って Google Home からテレビを HDMI4 に変更する - おともだちティータイム

に戻り、

curl -X POST "https://api.nature.global/1/signals/550e8400-e29b-41d4-a716-446655440000/send" -H "Authorization: Bearer {YOUR_ACCESS_TOKEN}"

も実行できた。

 

2.Nature Remo APIスマホアプリに設置したボタンから叩く

Monacaでアプリを作った。

jQueryライブラリをインストール。

ajaxからAPIをたたく方法は以下を参考にした。認証ヘッダーも送信可能。

jqueryのajaxから認証用のauthorization bearerヘッダーを送信する - システム開発・構築の神様

 

3.Nature Remoのリモコンボタンを連続して複数回操作する(2019.2.3追記)

setTimeoutで時間差をつけながら実装。

パナソニックのテレビでDlife(BS258)にチャンネルを切り替える場合の例。

 

$('#btn_tvapi_BS258').on('click', function(){
bs();
setTimeout(submenu,1000);
setTimeout(down,2000);
setTimeout(ok,3000);
setTimeout(function(){
ch2();
ch5();
ch8();
},4000)
});
 

4.Nature RemoのテレビプリセットのAPIでリモコンアプリ(HTML/CSS/JavaScriptMonaca)を作ってみた

 

20191.21に下記記事が公開されたので試してみる。

テレビのAPIを公開しました! — Nature

 

Swagger UI

を開く。

 

POST /1/appliances/{appliance}/tv

のことのようだ。

 

Try it outボタンを押す。

 

Appliance ID ID

Button name power

と仮に入力して、Executeボタンを押す

 

以下のcurlコマンドが出た。

curl -X POST "https://api.nature.global/1/appliances/ID/tv" -H "accept: application/json" -H "Content-Type: application/x-www-form-urlencoded" -d "button=power"

 

curlコマンドをajaxに変換するのに、以下のサイトを参考にした。

jQuery - curlコマンドをjqueryのajaxで実行する方法|teratail

 

ハイブリッドモバイルアプリ開発環境Monacaでリモコンアプリを作り、ボタンクリックでNature RemoのテレビプリセットのAPIが呼び出せた!

$('#btn_tvapi_power').on('click', function () {
$.ajax({
type: 'POST',
dataType: 'json',
data: 'button=power',
headers: {
'accept': 'application/json',
'Content-Type': 'application/x-www-form-urlencoded',
},
beforeSend: function(xhr, settings) {
xhr.setRequestHeader('Authorization', 'Bearer MYTOKEN')
}
}).done(function(data) {
console.log(data);
}).fail(function() {
console.log('bad');
});
});

 

謝辞

参考にさせていただいたサイトの皆様、ありがとうございました。 

 

 

「Pythonで学ぶあたらしい統計学の教科書」

11/15木のセミナー

【応募多数のため増枠しました!】【実践講習】現役データサイエンティストが語る R・Pythonのデータ解析活用セミナー@六本木ヒルズ|IT勉強会ならTECH PLAY[テックプレイ]

で、状態空間モデルについて話を聞いた。

参加後、Amazonでぽちっとして、11/16金到着。

 

11/19月のセミナー

Pythonで学ぶ時系列データ解析入門|IT勉強会ならTECH PLAY[テックプレイ]

参加に当たり、11/18日にpandas, numpy, statsmodelの動作確認を兼ね、P72-97, P280-285まで学習。

Jupyter Notebook, Python, numpy, pandasの基本を学び、単回帰分析の入口までやってみた。

 

→予習しておいたので、何となく付いていけた気がする。

ProphetというFacebookのツールがあると聞いた。プロモーションなどのイベントに当たりが付いている場合にいいらしい。

ネットでざっと調べると、R/Pythonのライブラリがあり、専門家でなくても使えるツールらしい。

 

11/20のセミナーでは、

散布図にして相関を見ては?

とヒントをもらった。

 

11/21

Qiitaで、時系列データの相関、

という記事を見つけた。

https://qiita.com/takubb/items/286916434ce44889d0fd

 

11/21のTableau  APIセミナー

時系列の話は想定していなかったが、Python連携の話題で、時系列の紹介。Prophetが5年に一度の変革として紹介された。

なお、時系列解析は、期間を固定して回帰を適用するか、変数を流入元チャネルに絞って時系列解析のどちらか、といったアドバイスをもらえた。

 

11/29Prophetの事例

https://www.kdnuggets.com/2018/11/sales-forecasting-using-prophet.html

 

12/8

https://susishushi.github.io/site/post/crqa1/

非線形時系列解析

ネットとテレビデータにも応用できるか

 

 

 

 

 

 

WordPressサイトにミルビィ動画配信プラグインを追加し、会員管理・認証連携、LMS連携

以下作業計画と進捗メモ

 

1.WordPressサイトにミルビィ動画配信プラグインを追加

ダミー動画をアップ

 

2.会員管理の仕組みを検証

動画への認証がミルビィ側の会員管理に依存することを確認

 

3.既存の別の認証の仕組みと連携

Googleアカウントなどによるソーシャルログインは可能か

 

4.LMS連携

ミルビィの動画視聴履歴と、既存LMSの学習履歴は、連携できるか?

 

5.アクセス解析

Android TVアプリと合わせた履歴も分かる?

 

6.キャスト

動画をテレビにキャストできないか?

 

7.ダッシュボード

サイトの利用状況をGoogleデータスタジオにも表示?

 

 

 

WordPressサイトにPHPでJSONデータを取得/ウェブスクレイピング

作業中メモ

 

1-1.まずはPHPJSONデータを取得する方法を調べて試す。

phpでjsonデータ取得 - Google 検索

PHPの環境作りから始める

→練習用サイトがそのまま使えた!

サブドメインディレクトリ内にあるJSONファイルを読み込むにはどうしたらいいか

JSONファイルを一旦練習用サイトに移す?→できた

JSONファイルを一旦WordPressサイトに移す?

JSONファイルを一旦ニフクラにインポート?

・サーバ側のアクセス権設定又は認証?APIへ?→サーバ上のJSONファイルはアクセス権が設定されていなかったので、URLで指定できた!

 

 

配列の番号を指定することで、データを取り出す方法はわかった。

PHPでJSONデータの取得の仕方 - Qiita

 

他方、取り出したいデータの配列の番号が分からず、

データに付けられたIDを指定するにはどうしたらよいか?

案1:IDを順に読み込んで、取り出したいID番号と一致するまでループを回す?

その配列番号のデータを取り出す?

案2:データのIDを指定することで、ループを回さずにデータを取り出す。

 

案2の方法が以下の記事に載っていた。

PHP多次元配列、特定キーの値を検索しindexを取得する(ループ不要) - 現役プログラマのWordPressカスタマイズ相談

→できた! ただし、同じIDで複数の値がある場合に、複数の中から選び出す処理が要る。。

 JSONファイル形式が変わらない限り、変更不要。

 

1-2.PHPでウェブスクレイピング

phpでウェブスクレイピング - Qiita

【php】webサイトから、欲しい情報を3行で取得する方法 - Qiita

スクレイピング用の「phpQuery-onefile.php」を所定のディレクトリにあpアップロード

できた!スクレイピングの方が簡単かつ確実かもしれない(?)。

ただし、3つの値がHTML上で連結して表示されているため、文字列の処理が要る

ウェブデザインが変更された時に、PHPコードの変更が必要。。

 

2.次に、WordPress管理画面でPHPコードを埋め込む方法を調べて試す。

 

以下のショートコードを使う?

投稿や固定ページでPHPを実行する | altplus

WordPressの記事内でPHPを実行した結果を表示する方法 | tipLog

WordPressの投稿内で任意のPHPコードを実行できる「ショートコード」を自分で作成する方法と呼び出し方。引数の受け渡しも簡単! | WEMO

→1-2のPHPによるスクレイピングコードをfunction.phpに追記し、ショートコードを定義

→投稿記事内にショートコードを記載することで、1-2のスクレイピングの結果を表示できた!

ただし、投稿記事の中でも、日付フォーマット指定されている入力欄では、ショートコードが反映されなかった。

このやり方だと、IDの分だけショートコードを定義する必要がある

 

入力文字制限を解除する

https://plusers.net/wordpress_custom_post