2020年12月15日火曜日

『Rによる時系列モデリング入門』北川源四郎


『Rによる時系列モデリング入門』が発売されたのでさっそく購入しました。この本の前身である『FORTRAN77時系列解析プログラミング』は時系列分析について私のバイブルでした。

本書ではRの時系列解析パッケージTSSSを使用します。本書の例題で用いられているデータと解析プログラムの多くはTSSSに含まれています。

TSSSはCRANからもダウンロードできますが、統計数理研究所の以下のサイトからダウンロードできます。インストールの詳しい説明もあります。

「TSSS」

Time Series analysis with State Space model

統計数理研究所

https://jasp.ism.ac.jp/ism/TSSS/

そこに書かれていますが、パッケージをインストールするには、Windowsの場合

(1) R (RGui)を起動し,メニュー [Packages] から

   --> Install package(s) from local zip files...

   --> Select files で ダウンロードした TSSS_1.3.0.zip を選択.

(2) メニュー [Package] から

   --> Load Package..

   --> Select one で TSSS を選択.

でできました。


本の内容については、前身である『FORTRAN77時系列解析プログラミング』や『時系列解析入門』とほとんど同じようです。それらの復習も兼ねて、Rのプログラムを動かしながらこの本を読んでいきます。


2020年9月27日日曜日

みなかみ温泉へ旅行

 四連休を利用して群馬の世界の名犬牧場とみなかみ温泉へまんぺいさんと行ってきました。新型コロナの自粛の反動か、関越がすごく混雑していて、普通なら2時間で行けるところが4時間かかりました。

「世界の名犬牧場」のドッグランで、なぜかブルドッグに後ろから体当たりされて吹っ飛んだまんぺいさん。

特に怪我もなく他の犬と交流しました。






「世界の名犬牧場」では、世界中のいろいろな種類の犬と触れあうこともできる。
馳さんの『走ろうぜ、マージ』に出てくるバーニーズ・マウンテンドッグ。この犬は歳のため触れあいはできなかった。
泊ったのは、ペットもOKの「だいこく館」さん。
近くに無料のドッグランがあり、ゴールデン・レトリーバーと交流。
ごはんも犬といっしょにいただく。
道の駅 「みなかみ水紀行館」にあった、植木鉢で作ったロボット風オブジェ
利根川添いが遊歩道になっていて犬の散歩に最適です。

与謝野晶子の碑がいくつかある。
利根川の水がきれいです。

利根川添いを散歩中によその犬と交流

スコットランドから持ってきたというロックハート城に寄りました。



2020年7月23日木曜日

GoogleアラートとIFTTTでウェブ上の情報を収集

ある会社や商品のウェブ上の情報を定期的に収集したいときに、Googleアラートが役に立つ。
「アラートを作成」の欄に検索したいキーワードを入力。例としてクオンツ運用会社の"AQR Capital"を登録してみる。

 マイアラートに"AQR Capital"が追加される。

鉛筆のアイコンを押して編集。オプションを自分の好みに変更する。
頻度を「その都度」、言語を「英語」にしてみる。
配信先はGmailのメールアドレスも選べるが、「RSSフィード」も選べる。
 「RSSフィード」にする場合は「アラートを更新」ボタンを押すとRSSフィードのマークが出てくる。そのマークを押して、RSSフィードのURLをコピーして『IFTTT』などに渡して別の処理をすることが可能。

 IFTTTのウェブサイトからCrreateで「+This」のところをクリック。
 「Choose a service」でRSSフィードを選択。
「Choose triggr」で「New feed item」を選ぶ。

「Feed URL」の欄に、Googleアラートで作成されるRSSフィードのURLを貼り付け。

 「That」のところをクリックして、アクション・サービスを選ぶ。ここではEmailにしてみる。
これで設定は完了。「AQR Capital」という単語に関連した情報がウェブ上に新しく見つかるとその都度収集されてメールで送られてくる。

メールを送る代わりに、Googleスプレッドシートに1行追加していくこともできる。





2020年7月13日月曜日

Excel VBAでWebからデータを収集

大人の事情により、Excel VBAでWebからデータを収集する必要になってきたので試しにやってみる。今回は『データを集める技術』を参考にさせていただいた。この中でExcel VBAでAmazonのクラウド関連本の売れ筋ランキングを取得するというサンプルに挑戦。

まずVBAのライブラリの参照設定で「Microsoft HTML Object Library」と「Microsoft Internet Controls」をチェックする。


これでサンプルのコードを動かしてみたが、そのままではうまくランキングを取得できなかった。そこで試行錯誤して2点ほど修正すると、狙い通り売れ筋の本のランキングをExcelに取得できた。


修正の一点目は、Excelが64ビットの場合はWindows APIのSleepライブラリの書き方が違うとのことで、そこで以下のように場合分けするように修正。VBA7の方がおそらく64ビット向けですね。

#If VBA7 Then
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr)
#Else
Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long)
#End If

二点目は『データを集める技術』の出版時からAmazonのHTMLの構造が変わったためにそこを修正。書名のクラスが以前は”a-fixed-left-grid-inner”だったものが、今はChromeで検証すると"p13n-sc-truncated"となっているようなので、そこを修正。

最終的にうまくデータを取得できたVBAのコードは以下のとおり。

=======================================
Option Explicit

#If VBA7 Then
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr)
#Else
Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long)
#End If


Private objIE As InternetExplorer

Sub main()
    Set objIE = New InternetExplorer
    Dim url

    url = "https://www.amazon.co.jp/gp/bestsellers/books/3257503051/"

    objIE.Visible = True
    objIE.Navigate2 (url)

    '読み込み完了待ち

    While objIE.readyState <> READYSTATE_COMPLETE Or objIE.Busy = True
        DoEvents
        Sleep 100
    Wend
    Sleep 100

    Dim objDoc As HTMLElementCollection
    Set objDoc = objIE.document
    Dim element As IHTMLElement

    Dim row '書き込むセルの行数
    row = 1
    For Each element In objDoc.getElementsByClassName("p13n-sc-truncated") 
        'シートに取得したタイトルの書き込み
        Worksheets(1).Cells(row, 1) = row
        Worksheets(1).Cells(row, 2) = element.innerText
        row = row + 1
    Next element

    objIE.Quit
    Set objIE = Nothing
End Sub
=======================================

他の分野のベストセラー・ランキングを取得したい時はurlを変えればいい。
例えば、「金融・ファイナンス」なら
url = "https://www.amazon.co.jp/gp/bestsellers/books/1099154/"  
「新書」なら
url = "https://www.amazon.co.jp/gp/bestsellers/books/2189049051/" 
=======================================

また、"p13n-sc-truncated"のような属性の要素を確認するにはChromeでXPathを抽出する。
《ChromeでXPathを抽出する方法》
①目的のノードを選択している状態で、右クリック
②メニューから「検証」を選ぶ
③選択されているノード(青くなっている部分)の上で右クリック
④「Copy」→「Copy XPath」を選択。

FirefoxでXPathを抽出する場合は、前提としてFirebugをインストール。「ツール」→「アドオン」からFirebugを検索。
《FirefoxでXPathを抽出する方法》
①目的のノードを選択している状態で、右クリック
②「Firebugで要素を調査」メニューを選ぶ
③選択されているノード(青くなっている部分)の上で右クリック
④「XPathをコピー」を選択。

Chromeで抜き出すXPathは、目的のノードに一番近いid属性からの相対パス。Firefoxで抜き出すXPathは、ルートノードからの絶対パス。

2020年3月16日月曜日

Pythonで線形計画問題を解く

『最適化手法入門』を読んでいて、Pythonで線形計画問題を解く方法が載っていたのでメモ。
CVXPYをダウンロード、インポートして使う。


CVXPYはMATLABのCVXを元にしたPythonの凸計画最適化ツール。Windowsの場合はインストールにVisual Studioのコンパイラーが必要らしいけど私のPCはVSが既にインストールされていたので、Anacondaから pip install cvxpyでインストールできた。

例2.1の問題(2.1)

import cvxpy as cp
x1, x2 = cp.Variable(), cp.Variable()
obj = cp.Maximize(20*x1 + 60*x2)
cons = [5*x1 + 4*x2 <= 80,
    2*x1 + 4*x2 <=40,
    2*x1 + 8*x2 <=64,
    x1 >= 0,
    x2 >= 0]
P = cp.Problem(obj, cons)
P.solve(verbose=True)
print(x1.value, x2.value)

ちゃんと最適解(x1, x2)=(8,6)が求まっている。

上の問題を行列で表現し、目的関数に-1をかけて最小化に書き換えたもの。

import cvxpy as cp import numpy as np x = cp.Variable(2) c = np.array([-20.0, -60.0]).T G = np.array([ [5.0, 4.0], [2.0, 4.0], [2.0, 8.0], [-1.0, 0], [0, -1.0]]) h = [80.0, 40.0, 64.0, 0.0, 0.0] obj = cp.Minimize(c.T * x) cons = [G * x <= h] P = cp.Problem(obj, cons) P.solve(verbose=True) print(x.value)


こちらも最適解(x1, x2)=(8,6)が求まっている。
参考までにほかの人のブログ



2020年1月12日日曜日

ハワイ

生まれて初めてハワイに行ってきた。JTBのツアーで飛行機とホテルだけ予約。JTBのツアーだとOLI OLIトロリーが無料で使える。20:25成田発のJL780でハワイへ。


朝の8時にダニエル・K・イノウエ空港に到着。ホテルは15時チェックインなので、バスでアラモアナ・センターというショッピングセンターに連れていかれてそこで降りる。
いろいろと店を見た後、フードコートでステーキとガーリックシュリンプ丼を食べる。

15時にヒルトンにOLI OLIトロリーで移動。大きいホテルなのでチェックインのカウンターも激混みだったが、我々は「MAIL AND KEY DESK」という別のカウンターでチェックインするとJTBの資料に書いてあって、そちらだと少し空いていた。
ヒルトンの部屋のベランダから見たワイキキビーチ
 夕暮れのワイキキビーチ
翌日の午前中にワイキキビーチで海水浴
 ワイキキビーチでも意外と水は透明だった。あと、ビーチの幅が予想外に狭かった。人が多くて日本の海水浴場みたい。



 伝説のサーファー、デューク・カハナモクの像
 伝統のあるホテル、モアナ サーフライダー ウェスティン リゾート&スパ
ホテルに帰るつもりが間違ってダイヤモンドヘッド一周トロリーに乗ってしまって仕方なく観光。
 ダイヤモンドヘッドってクレーターだったんですね。いろいろ楽しめた。
 途中で見えるカハラの街

トロリーバスはこんな感じ。





 ホテルに帰って、New Year's Eveのディナーショー。ライブは、Blayne Asing、Honoka、Manoa DNAの三組。
 ウクレレのHonokaのステージ。Honokaはハワイに移住した日本人ですね。
Manoa DNAのライブ。すごく良かった。私は知らなかったのだけれど、Manoa DNAはNHKの「みんなの歌」でも取り上げられていたらしく、有名なグループらしい。


11時に、一足早くヒルトンの打ち上げ花火。



この後、12時にはHappy New Yearの打ち上げ花火。写真は撮り忘れた。

三日目(1/1)は念願のビショップ博物館(Bishop Museum)へ。トロリーのパープルラインで行こうと、Tギャラリア by DFSの地下のトロリーのチケット・センターへ。Tギャラリアには初売り待ちなのか、開店前に行列ができていた。ところがチケット・センターで聞いたところ、パールハーバーの施設が1月1日で休日なので、パープルラインのトロリーもお休みとのこと。仕方がないので、ザ・バスの2番で行くことに。バスの運転手に、ビショップ博物館の近くに着いたら教えてくれとお願いしたものの、テープで案内が流れるからとつれない返事。
School StreetとKapulama Av.の角でバスを降りる。バス停の周りはこんな感じ。




 山を背にしばらく歩くとビショップ博物館の看板が見えた。



広い芝生の庭がある。
ハワイアンホール本館。
 まず、キャッスル記念館で期間限定の特別展示をしていたサーフィン展に。

 
伝説のサーファー、デューク・カハナモクのサーフボード。
デューク・カハナモクが乗った波を再現した模型。

 昔のサーフボードってこんなに長かったんですね。

デューク・カハナモクのサーフボード。

ハワイアンホール本館。大きなクジラの模型。

ハワイの戦いの神クーカイリモク(もしくはクー)。季節によって対象が変わるそうで、白い布が巻いてある方は、今の季節ではないので巻いてあるのだそう。足を微妙に曲げているのが特徴。







カメハメハの羽毛ケープ。今は絶滅した鳥から数枚しか取れない羽毛をふんだんに使っている。





ザ・バスの60番でアラモアナ・センターに戻り、フラショーを見る。





時間があったので、ホノルル動物園へ。






夜は、日本食の店が集まる「ワイキキ横丁」の居酒屋「NOMU(呑)」で焼鳥。
4日目は、オプショナル・ツアーでハナウマ湾のシュノーケリングとカイルア訪問。
ハナウマ湾。火口が侵食されてできた湾。水の透明度が高く、水中の溶岩の岩場にたくさんの魚がいて、シュノーケリングで見ることができる。



 こんな魚を見ることができます。
シュノーケリングを楽しんだ後は、おしゃれな街、カイルアへ。途中で見えた、ラビット・アイランドとドライバーが言っていた島。
カイルアの街。

ハワイの地ビールを持ち帰りできる「Three Peaks」 でビールの試飲。ビールは20種類くらいあった。私が行った日は、日本人の奥さんがやっていて、日本語でOKだった。簡単なおつまみも三種類くらいあった。
店にあるタンブターを買って、ビールを日本に持って帰ることにした。この機械で二酸化炭素を注入すると鮮度を保てるとのこと。
このタンブラーを購入。
 



 カイルアの自然志向のお店。いろいろな食材がある。
ホテルに帰還。
ワイキキビーチの日没。

ハワイ最後の夜は、ホテルの「Tropics Bar and Grill」の海沿いのオープン席でディナー。

バーベキューの肉が大きすぎて食べきれなかった。

 ダニエル・K・イノウエ国際空港から日本へ帰還。


帰りの飛行機で見た映画「ジ・アート・オブ・レーシング・イン・ザ・レイン」、犬好き・フェラーリ好きにはたまらない良い映画だった。原作は、 小説『エンゾ レーサーになりたかった犬とある家族の物語』。
「無作為に荷物検査があるので機内に預ける荷物に施錠しないこと」と『地球の歩き方』に書いてあったので、施錠しないでスーツケースベルトで縛っておいたら、私の荷物が検査されたようで、ご丁寧に「あなたの荷物を検査しました」 という紙が入れてあった。施錠していた場合、鍵を壊して開けるらしいので、施錠しないでよかった。右はお土産のキーフォルダー。