2019-12-31

Rで株価を扱う 〜 stock-explorer の公開

対象銘柄および関連業界のいくつかの銘柄の株価情報を使って学習させ、明日の取引の始値を予測するプログラム stock-explorer を GitHub に公開しました。いままで Bitbucket にリポジトリを作って非公開で開発をしていましたが、ある程度の成果を確認できたのでリポジトリを移して公開し、時間をかけて汎用的用途に使えるように機能を実装していこうと考えています。

もともと、2018 年 12 月 19 日にソフトバンクグループの国内通信子会社、ソフトバンクが東京証券取引所第1部に上場したこと [1] を契機に、当日までの株価の情報だけで明日(未来)の株価を、機械学習でどこまで予測できるか評価したいと思ったことが、開発を始めた動機です。

※ 新しく始まる株価データを使って機械学習をする、という意味で契機と捉えました。

一年あまりの期間、毎晩 Yahoo!ファイナンスの株価情報をダウンロードして、そのうちいくつかの銘柄を数種類の機械学習のアルゴリズムで学習させ、仮想的に 100 万円を単純な投資アルゴリズムで運用してみました。その結果、2019 年末時点で、予測精度はともかく、PLS のアルゴリズムで予測したヤフーの運用結果が際立って良かったのでスクリーンショットを下記に載せました。

※ 人力で毎晩処理をするのは大変なので、24 時間稼働させられる安価でファンレスな PC を買って cron で毎晩決まった時間に処理するようにしています。

stock-explorer の実行例

GitHub の下記のサイトにリポジトリを公開しています。

ソースを入手するには下記のように git でクローンしてください。

[bitwalk@fedora-pc ダウンロード]$ git clone https://github.com/bitwalk123/stock-explorer.git
Cloning into 'stock-explorer'...
remote: Enumerating objects: 43, done.
remote: Counting objects: 100% (43/43), done.
remote: Compressing objects: 100% (32/32), done.
remote: Total 43 (delta 16), reused 28 (delta 9), pack-reused 0
Unpacking objects: 100% (43/43), done.
[bitwalk@fedora-pc ダウンロード]$ 

プログラムの詳細は、これから上記 GitHub のサイトに詳しく説明して行く予定ですが、まだできていません。ただ、日々の株価データを取得し、学習・予測し、データベースを更新する処理は support/update.R が担っています。スクリプトの中身はハードコーディングしている箇所がまだ数多く残っています。本体の stock-explorer はデータベースから読み取ってブラウザ上にプロットを表示するだけの Shiny アプリです。

雑感

R の caret パッケージ [2] を利用すると、簡単に機械学習のアルゴリズムを利用できるので、専用のサーバーを用意して何種類もの機械学習のアルゴリズムをチューニングなしで試してみました。RMSE を精度の基準と考えるならば、'bridge' (Bayesian Ridge Regression) が試した中では一番精度が良いと言えます。精度で二番手になるのが多くの場合、PLS でした。利用できる CPU の性能と学習にかかる計算時間を考えると、欲張ったデータ量を学習させようとすれば PLS が現実的な解になるのかもしれません。ただし、まだまだ試すべきアルゴリズムはたくさんありますので、結論にはできません、

株価予測のモニターを始めた当初は、株価のだいたい 1% ぐらいの精度 (RMSE) で次の取引の始値を予測できれば上出来だと思っていましたが、期間を含めてデータが多くなってくればそのぐらいの精度で予測できそうな様子です。しかし(当然ですが)外的要因を加味することができていません。

例えば、ヤフーと LINE の統合についての報道 [3] が 11 月 13 日の夜に出たときに、翌日のヤフーの株価は急騰しましたが、現状ではその情報を予測に反映させる術がありません。そのため、予測が実際のトレンドに一日遅れで追従することになります。これでは精度としての RMSE がそこそこ良くても、まだまだ使い物になりません。

そこで、ウェブスクレイピングを応用して、予測に寄与する情報を収集できればと試行錯誤を始めています。

参考サイト

  1. ソフトバンク上場、終値1282円 公開価格を15%下回る  :日本経済新聞 [2018-12-19]
  2. The caret Package
  3. ヤフーとLINE経営統合へ ネット国内首位に  :日本経済新聞 [2019-11-13]
  4. bitWalk's: Rで株価を扱う 〜 始値を予測してみた [2019-02-03]
  5. bitWalk's: Rで株価を扱う 〜 quantmod パッケージ [2019-01-16]

 

ブログランキング・にほんブログ村へにほんブログ村

2019-12-29

PyGObject を試す

GObject (GLib Object System) は、GTK+ のすべてのウィジェットおよび関連するオブジェクトの基底クラスからなるオブジェクトシステムと、言語間の透過的相互運用性を提供するライブラリです。GObject は C 言語で実装されており、バインディングによって他の言語から利用可能となっています。

PyGObject は GObject へのバインディングを提供する Python パッケージです。

Wikipedia より引用・編集

Fedora 31 の場合

参考サイト [1] の Fedora の設定を確認したところ、必要な環境が揃っていたので、参考サイト [2] に紹介されている二つの Hello World を少々アレンジして試してみました。

まずは、参考サイト [2] に紹介されている最初のサンプル、ウィンドウのタイトルに文字列を設定するだけの単純なスクリプトを試しました。

hello.py
hello.py の実行例

次に、ボタンをクリックすると文字列をコンソール上に出力するスクリプトです。

hello2.py
hello2.py の実行例
hello2.py のボタンをクリック時の出力例
[bitwalk@fedora-pc PyGObject_samples]$ python hello2.py
こんにちは、世界!
こんにちは、世界!

どちらも特に問題なく実行できました。

Windows 10 の場合

参考サイト [1] の Windows の設定では、MSYS2 を利用して、pacman で実行環境を整えます。上記 Linux (Fedora) で作成したスクリプトファイルを UTF-8 のエンコードのまま実行できるかを確認しました。

まず最初の hello.py では問題なくタイトル文字が表示されました。

hello.py の実行例 (Windows 10)

hello2.py でも問題なくウィジェット上の文字が表示されました。

hello2.py の実行例 (Windows 10)

しかし、コンソール上の文字列出力は化けてしまいました。

hello2.py の実行例 (Windows 10) 文字列出力結果 (1)

MSYS のコンソールのロケールを ja_JP、文字セットをシフト JIS (SJIS) に設定してみました。

MSYS mintty のオプション設定

再度 hello2.py を起動してボタンをクリックすると、今度は正常に表示されました。

hello2.py の実行例 (Windows 10) 文字列出力結果 (2)

コンソール上の文字コードが SJIS のままだと vim でコンソール上で UTF-8 のファイルを編集する場合に支障が出ますが、運用方法を工夫することでなんとかなりそうです。

雑感

Python による GUI プログラミングはもっぱら wxPython を使っていましたが、Linux (Fedora) のデスクトップ環境が GNOME なので、自分で作る GUI アプリの UX を GNOME に揃えようと PyGTK をやってみようかと調べたところ、今では PyGObject を使うべしということだったので試してみました。Windows 上でも MSYS2 を利用すれば、Linux 上で作成した同じスクリプトファイルを実行できそうです。Linux で開発したアプリをそのまま Winodws で実行できるのは魅力です。考えてみると wxPython でも同じことができるはずなので、どちらが良いかではなく、選択肢が多い事を喜ぶことにします。

まずは PyGObject を使いこなせるように、ウィジェットの使い方やレイアウトの調整方法をまとめる予定です。

参考サイト

  1. Getting Started — PyGObject
  2. 2. Getting Started — Python GTK+ 3 Tutorial 3.4 documentation
  3. MSYS2 MinGW GCC環境をつくる(その1) [2018-01-30]

 

ブログランキング・にほんブログ村へにほんブログ村

2019-12-22

Web ブラウザで GNOME Shell の拡張機能を設定

GNOME /(ɡ)noʊm/ は、Unix 系 OS 上で動作する、フリーでオープンソースデスクトップ環境です。GNOME という名称は、もともと GNU Network Object Model Environment の頭文字とされていましたが、GNOME プロジェクトの構想 (vision) にそぐわないという理由で、今では 'GNOME' がその頭文字の意味と結びつけられていません。

GNOME は GNU プロジェクトの一部で、GNOME プロジェクトで開発されています。このプロジェクトは無給のボランティアと企業の下で有給で働くコントリビュータで構成されており、最も大きな法人のコントリビュータは IBM 傘下の Red Hat です。

GNOME Shell は GNOME3.0 から導入された新しいグラフィカルシェルです。

※ ちなみにグラフィカルシェルとは、デスクトップ環境などへのユーザインタフェースとしてのシェルです。コマンドラインシェルと違い、形態がそれほど明確には固まっていません。

Wikipedia より引用、編集

参考サイト [1] に、Web ブラウザから GNOME Shell をカスタマイズする方法が紹介されていましたので、自分の環境 (Fedora 31) で試した結果を備忘録にしました。

OS
Fedora 31 (Workstation Edition) x86_64
└ GNOME version 3.34.2

chrome-gnome-shell のインストール

まずは GNOME Shell と Webブラウザを結びつけるプログラム (chrome-gnome-shell) をインストールする必要があるのですが、すでにインストールされていました。(下記)

プログラム名に chrome という名前が入っていますが、下記、黄色でマーキングした箇所を読むと、他のブラウザでも使用できるようです。

[bitwalk@fedora-pc ~]$ sudo dnf install -y chrome-gnome-shell
[sudo] bitwalk のパスワード:
メタデータの期限切れの最終確認: 0:34:30 時間前の 2019年12月22日 09時52分38秒 に実施しました。
パッケージ chrome-gnome-shell-10.1-5.fc31.x86_64 は既にインストールされています。
依存関係が解決しました。
行うべきことはありません。
完了しました!
[bitwalk@fedora-pc ~]$ rpm -qi chrome-gnome-shell
Name        : chrome-gnome-shell
Version     : 10.1
Release     : 5.fc31
Architecture: x86_64
Install Date: 2019年10月24日 08時14分10秒
Group       : Unspecified
Size        : 62277
License     : GPLv3+
Signature   : RSA/SHA256, 2019年07月30日 05時50分17秒, Key ID 50cb390b3c3359c4
Source RPM  : chrome-gnome-shell-10.1-5.fc31.src.rpm
Build Date  : 2019年07月25日 05時15分42秒
Build Host  : buildvm-06.phx2.fedoraproject.org
Packager    : Fedora Project
Vendor      : Fedora Project
URL         : https://wiki.gnome.org/Projects/GnomeShellIntegrationForChrome
Bug URL     : https://bugz.fedoraproject.org/chrome-gnome-shell
Summary     : Support for managing GNOME Shell Extensions through web browsers
Description :
Browser extension for Google Chrome/Chromium, Firefox, Vivaldi, Opera (and
other Browser Extension, Chrome Extension or WebExtensions capable browsers)
and native host messaging connector that provides integration with GNOME Shell
and the corresponding extensions repository https://extensions.gnome.org.
[bitwalk@fedora-pc ~]$ 

Firefox の場合

Fedora Workstation で標準でインストールされる Firefox で確認しました。Firefox を起動して下記の URL へアクセスします。

Firefox で https://extensions.gnome.org にアクセス

ここをクリックしてブラウザー拡張機能をインストールしてください」をクリックして、拡張機能のインストールへ進みます。

アドオンのインストール続行の確認

アドオンのインストールを許可して次へ進みます。

GNOME Shell integration を追加する確認

GNOME Shell integration を追加するか確認してきますので、「追加」をクリックして追加します。

GNOME Shell integration が追加された通知

GNOME Shell integration が追加された通知が表示されますので「OK」をクリックします。

GNOME Shell 拡張機能一覧

すると同じサイトが新しいタブに警告なしで表示されます。「インストール済み拡張機能」のタブをクリックして開きます。

「インストール済み拡張機能」のタブ

この画面でインストール済み拡張機能の ON/OFF を設定できます。

Web ブラウザを使うメリットは?

たったこれだけの機能ですが、インストールされていない拡張機能の一覧を確認でき、追加したければ追加することが出来ます。GNOME Tweaks (gnome-tweaks) でも同じ事ができますが、プレインストールされている拡張機能の ON/OFF ができるだけで、他にどのような拡張機能を利用できるのかを知ることができません。

GNOME Tweaks の実行例

参考サイト

  1. GNOME Shellのカスタマイズに必須!拡張機能をインストールする方法 | LFI [2017-10-02]

 

ブログランキング・にほんブログ村へにほんブログ村

2019-12-21

AppImage を使う

AppImage は Linux のソフトウェアをポータブルに配布できる形式のファイルです。アプリケーションをダウンロード後、実行権限を与えて実行するだけです。インストール不要、システムライブラリ不要、システム設定の変更も不要です。Firejail のようなサンドボックスで動作させることもできます。

AppImage は何度も名前を変えています。2004 年に klik という名前ではじめてリリースされ、2011 年に PortableLinuxApps に、そして 2013 年に現在の AppImage に変わりました。

AppImage | Linux apps that run anywhere および Wikipedia より引用、編集

本ブログ記事では下記の OS 環境で動作確認をしています。

OS
Fedora 31 (Workstation Edition) x86_64

AppImageHub からアプリをダウンロード

参考サイト [3]、AppImageHub のサイトでは、AppImage 形式にビルドされたアプリがダウンロードできます。本ブログ作成時には 946 種類のアプリが登録されているとあります。

AppImageHub のサイト

試しに Multimedia をクリックして、一番下に表示されている youtube-music をダウンロードしてみました。端末エミュレータ上でダウンロードしたディレクトリに移り、chmod +x で実行権限を与えて実行します。

[bitwalk@fedora-pc ~]$ cd ダウンロード
[bitwalk@fedora-pc ダウンロード]$ chmod +x *.AppImage
[bitwalk@fedora-pc ダウンロード]$ ls *.AppImage
youtube-music-1.1.6-x86_64.AppImage
[bitwalk@fedora-pc ダウンロード]$ ll -h youtube-music-1.1.6-x86_64.AppImage
-rwxr-xr-x. 1 bitwalk bitwalk 79M 12月 21 17:44 youtube-music-1.1.6-x86_64.AppImage
[bitwalk@fedora-pc ダウンロード]$ ./youtube-music-1.1.6-x86_64.AppImage
Fontconfig warning: "/usr/share/fontconfig/conf.avail/05-reset-dirs-sample.conf", line 6: unknown element "reset-dirs"
Loaded plugin - navigation
Loaded plugin - shortcuts
Loaded plugin - adblocker
Checking for update
Generated new staging user ID: d9ef94cb-254c-50cd-af1b-222c41a0e5a0
Update for version 1.1.6 is not available (latest version: 1.1.6, downgrade is disallowed).
checkForUpdatesAndNotify called, downloadPromise is null

すると、起動用のアイコンをアプリケーション一覧に登録するかを尋ねるダイアログが表示されます。

※ たまたま例として取り上げた youtube-music では起動用のアプリケーションアイコンを登録する機能がありましたが、これは全ての APPImage のアプリケーションに備わっている機能ではないようです。

ここでは Yes をクリックして、あとでアプリ一覧を確認することにします。

そのあと youtube-music のウィンドウが画面に表示されます。(下図)

起動した youtube-music のウィンドウ

ざっと動作確認をしましたが、問題は無さそうです。

GNOME のアプリ一覧をみると youtube-music のアイコンが登録されていて、マウスのクリックで起動する事を確認できました。

GNOME のアプリ一覧画面

このアイコンは、ユーザーディレクトリ内 $HOME/.local/share/applications に作成された appimagekit-youtube-music.desktop が対応していますので、youtube-music-1.1.6-x86_64.AppImage が不要になってこれを削除した時に、忘れずにこの desktop ファイルも削除する必要があります。

[bitwalk@fedora-pc ダウンロード]$ ls ~/.local/share/applications
appimagekit-youtube-music.desktop
chrome-gdijeikdkaembjbdobgfkoidjkpbmlkd-Default.desktop
chrome-hgmloofddffdnphfgcellkdfbfbjeloo-Default.desktop
chrome-hmjkmjkepdijhoojdojkdfohbdgmmhki-Default.desktop
chrome-iabmpiboiopbgfabjmgeedhcmjenhbla-Default.desktop
mimeapps.list
mimeinfo.cache
[bitwalk@fedora-pc ダウンロード]$ cat ~/.local/share/applications/appimagekit-youtube-music.desktop
[Desktop Entry]
Name=YouTube Music
Comment=YouTube Music Desktop App - including custom plugins
Exec="/home/bitwalk/ダウンロード/youtube-music-1.1.6-x86_64.AppImage" %U
Terminal=false
Type=Application
Icon=appimagekit-youtube-music
StartupWMClass=YouTube Music
X-AppImage-Version=1.1.6.26
Categories=AudioVideo;
X-AppImage-BuildId=1Qi1qqUKGYE8Xsa6HFv7yPWJlGC
X-Desktop-File-Install-Version=0.24
X-AppImage-Comment=Generated by /tmp/.mount_youtubTwqmsO/AppRun
TryExec=/home/bitwalk/ダウンロード/youtube-music-1.1.6-x86_64.AppImage
[bitwalk@fedora-pc ダウンロード]$ 

雑感

ダウンロードしてそのまま実行できるパッケージは、たしかに便利です。既に OS イメージを USB に書き込むユーティリティ balenaEtcher [6] で AppImage のパッケージをフツーに利用していることを、このブログ記事を書いている時に思い出しました。💦

ただ、このように単発で使うアプリを単一のファイルで管理するのは OK でも、全てのアプリをこのような形で管理するのであれば一抹の不安があります。個々のファイルのサイズは大きすぎないか、アプリのアップデートを適切にさばけるのかなど、評価・検討したい項目がいくつもあります。

反面、一般的に必要なアプリとともにインストールする Linux ディストロに対して、インストール後、殆んどアプリが入っていない状態から、必要なアプリを AppImage のような手段でダウンロードして使う方が、もしかするとストレージ使用量が少なく収まるかもしれないとも思ってしまいます。これは、本ブログで紹介した Fedora Silverblue [7]Flatpak でも感じたことです。

Flatpak やこの AppImage など、従来の rpm や deb パッケージをベースとしたシステム構築とは別のアプローチが、すでに普通に使えるレベルになっています。こういったアプローチの進展をフォローせずに何年もやり過ごしてしまいました。これを後悔しても仕方がないので、時間を見つけてキャッチアップに努めます。

参考サイト

  1. AppImage | Linux apps that run anywhere
  2. Upstream packaging — AppImage documentation
  3. index.html – AppImageHub
  4. Firejail | security sandbox
  5. 2016年5月13日 ヤバめのアプリはまず"火の檻"で ―サンドボックス「Firejail」がX11に対応へ:Linux Daily Topics|gihyo.jp … 技術評論社
  6. balenaEtcher - Home
  7. bitWalk's: Linux ディストロ探訪(10) 〜 Fedora Silverblue 〜 [2019-11-24]

 

ブログランキング・にほんブログ村へにほんブログ村

2019-12-20

Linux ディストロ探訪(11) 〜 Android-x86 〜

Linux とは本来 Linux カーネルのことを指しています。しかし、カーネルだけでは OS として動作させることはできません。そこで、OS に関連するツールやアプリケーションなどをまとめて、インストールし易く、インストール後にすぐ利用できるような配布形態にしたものを「ディストリビューション(略してディストロ)」と呼んでいます。

本シリーズ記事は、Linux ディストリビューションをピックアップ、仮想マシン(あるいは実機)にインストールして紹介します[不定期]。

Android-x86 とは

Android は Google が開発したモバイルオペレーティングシステムです。Linux カーネルやオープンソースソフトウェアがベースにしていて、主にスマートフォンやタブレットなどのタッチスクリーンモバイルデバイス向けにデザインされています。

※ Android を Linux ディストロのひとつとみなすことについて議論があるかと思いますが、Linux カーネルベースの OS という理由で、本ブログでは Linux ディストロの一つとして扱います、

Android-x86 は、前述の Android を ARM アーキテクチャのプロセッサではなく Intel や ARM の x86 系プロセッサの PC 上で動作するように AOSP [1] のソースにパッチをあてて移植しているプロジェクトです。

仮想環境へのインストール

Android-x86 のイメージは、ダウンロードサイト [2] から入手できます。x86 (32bit) および x86_64 の iso および rpm ファイルがダウンロードできます。rpm パッケージは、Fedora や RHEL/CentOS にインストールすると、QEMU 上で Android が起動するようになっていいます。

rpm ファイルを試す

ミラーサイト [3] から android-x86-9.0-rc1.x86_64.rpm をダウンロードしてインストールしてみましたが、残念ながら、自分の Fedora 31 の PC では残念ながら正常に動作しませんでした。

[bitwalk@fedora-pc ダウンロード]$ sudo dnf install android-x86-9.0-rc1.x86_64.rpm
...
(省略)
...
完了しました!
[bitwalk@fedora-pc ダウンロード]$ rpm -ql android-x86
/android-9.0-rc1/initrd.img
/android-9.0-rc1/kernel
/android-9.0-rc1/ramdisk.img
/android-9.0-rc1/system.sfs
/usr/bin/qemu-android
[bitwalk@fedora-pc ダウンロード]$ sudo /usr/bin/qemu-android

Please Enter to continue or Ctrl-C to stop.

[    0.000000] Linux version 4.19.80-android-x86_64-g914c6a3 (lh@android-x86) (gcc version 4.6 20120106 (prerelease) (GCC)) #1 SMP PREEMPT Fri Nov 15 11:35:44 CST 2019
[    0.000000] Command line: root=/dev/ram0 androidboot.selinux=permissive console=ttyS0 RAMDISK=vdb 
...
(省略)
...
QEMU 起動後、ここから先に進まず

iso ファイルを仮想環境で起動、インストール

そこでいつものように iso イメージ (android-x86_64-9.0-rc1.iso) をダウンロードして、仮想環境 (GNOME Boxes) にインストールすることにします。

起動後、最初のメニューで、"Advanced options ..." ⇒ "Auto_Installation" を選択し、「おまかせ」でインストールします。

"Advanced options ..." ⇒ "Auto_Installation"

インストール前の最終確認で Yes を選択 ⇒ フォーマット ⇒ インストールと進み、最後に Android-x86 を起動するか再起動するかを選ぶ画面になりますので、再起動 (Reboot) を選択します。

再起動後、Linux でお馴染みの grub の起動メニューが表示されますので、そのまま Enter キーをタイプします。

grub の起動メニュー

しばらく起動中の Android 画面を眺めていましょう。

Android 起動中の画面

最初の起動後の初期設定をします。

初期設定を終え、ランチャーを Taskbar にしました。

初期設定後の Android 画面 (Taskbar)

マウスのポインタでスワイプをするのには苦労しますが、なんとか操作ができます。

実機へのインストール

実機へのインストールは無事に終わるものの、起動ができていません。機種を変え、インストールの条件を変えて試していますが、今のところ成功例は紹介できません。ひきつづきテストを続け、(妥当なインストール方法での)成功事例が出れば記事に反映します。

まとめ

項目 説明
ディストリビューション Android-x86
プロジェクトサイト https://www.android-x86.org/
デスクトップ環境 ランチャー(ホームアプリ)
対応プラットフォーム x86, x86_64
パッケージ管理 APK
日本語入力 Google日本語入力
更新頻度
サポート期間
近年、Google からメジャーバージョンの更新が年に一回ぐらいのペースで行われています。Android-x86 のリリースも追従。
実デバイスにインストールされている Android OS のサポートは、端末メーカーが提供する。
寸評

Android は世界中の多くの端末メーカーが採用してサポートしているオープンソースの OS です。そのためか、趣味的ではありますが、個人レベルで Android をインストールする機会がありませんでした。

Linux 系 OS に何を求めるか次第ですが、Android はモバイルデバイスで実績を積んでいて、Web 閲覧やメール確認などの用途であれば少ないリソースでも充分稼働します。これもまた個人の趣味なのですが、チープで非力な PC にも自力でインストールできるのであれば、是非試したい OS です。

参考サイト

  1. Android Open Source Project
  2. Download | Android-x86
  3. Download File List - Android-x86 - OSDN

ブログランキング・にほんブログ村へ
にほんブログ村