2021年6月4日金曜日

バッハを聴くと仕事がはかどるのでお勧め

 新型コロナによる在宅勤務のせいで3キロ太ってしまったJ.S.エコハです。

黙々と部屋でPCに向かってまじめに仕事をしているわけですが、さすがに途中でダレてきます。そういうときにBGMとしてバッハを聴くと心が落ち着いて仕事がはかどるのでお勧めです。

《無伴奏チェロ組曲》

アンナー・ビルスマかミッシャ・マイスキーがお勧めです。




《無伴奏ヴァイオリンのためのソナタとパルティータ》

ギドン・クレーメルがお勧めです。



《ピアノ》

ゴルトベルク変奏曲、平均律クラヴィーアともグレン・グールドがお勧めです。



《古楽器によるオーケストラ曲と室内楽》

Musica Antiqua Kölnがお勧めです。

《オルガン曲》

マリー=クレール・アランがお勧めです。



《カンタータ》

リヒターのカンタータ集がお勧めです。素晴らしい。

《受難曲》

これもリヒターがお勧めです。素晴らしい。

古楽器によるマタイ受難曲でしたら鈴木雅明&バッハ・コレギウム・ジャパンも良いです。



2021年1月31日日曜日

Practical Statistics for Data Scientists

図書館で『データサイエンスのための統計学入門』(初版)を借りて読んでいたところ、ネット上に英語の原著のPDFがあることを見つけた。

Practical Statistics for Data Scientists

サポートページからRのコードとデータもダウンロードできる。


元のコードだと、Windowsのドキュメントのフォルダがうまく読み込めないみたい。
PSDS_PATH <- file.path('~', 'statistics-for-data-scientists')
なので、Rのコード保存先を
C:/psds
データフィル保存先を
C:/psds/data
として、
PSDS_PATH <- file.path('C:/psds')
とすると大丈夫。

データファイルについてはほとんどそのまま使えるがsp500のデータはファイル名を以下のように変更するとサンプルコードのまま使えました。
sp500_data.csv → sp500_px.csv
sp500_sectors.csv → sp500_sym.csv

*************************************
メモ《Rでの作業ディレクトリの変更》

setwd("c:/usr")   # 作業ディレクトリを変更する
getwd() # 確認する

Windows では \ を指定しては駄目.例えば,setwd("c:\usr") とするとエラーが出る。setwd("c:/usr") とするか setwd("c:\\usr") とすること。

*************************************

*Mac/LinuxとWindowsでパスの区切りが違う話。

Mac/Linuxではスラッシュ(r4ds/data.csv)

Windowsではバックスラッシュ(r4ds\data.csv)


*絶対パス

Windowsではドライブ文字(C:)またはバックスラッシュ二つで始まり(\\)、Mac/Linuxではスラッシュ(/)で始まる。

Mac/Linuxでは 「~」 はホームディレクトリを表す。Windowsにはホームディレクトリという概念がそもそもないので、ドキュメントディレクトリが使われる。

R for Data Science

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)が求まっている。
参考までにほかの人のブログ