よつぴいてひやふつと射る

化学メーカー勤務の弱小技術職がチラシの裏風に雑然と書いていきます

QNAP NASでcrontabを設定する

時々、何かの拍子でcrontabが働かなくなっているので、再設定のための備忘録としてメモ。
いわゆる、NASを再起動しても消えないタイプのcrontab設定法です。

現設定の確認

 crontab -l

設定ファイルの書き換え

 vim /etc/config/crontab
 で設定ファイルを開いて、
 30 15 * * * python /share/CACHEDEV1_DATA/.../hoge.py >> log.log
 とかを設定。

設定を反映して再起動

 crontab /etc/config/crontab
 /etc/init.d/crond.sh restart

QNAPのNASにPython/lxml環境を構築する

NAS: TS-231

Python:2 or 3

lxml: 3.7.3

 

numpy/pandasを入れてからしばらく経ちましたが、仕事が忙しくて疲れていたと言い訳をまず書いておきます。

さて、pythonでのスクレイピングに必要になってくるlxmlパッケージをインストールするところでまた躓いたのでメモしておきます。

python2でも3でも、SSH接続して単純に"pip install lxml"するだけではエラーが出るので、"opkg install libxml2 libxslt"などで関連ライブラリをインストールします。

ただし、それでも以下のようなエラーが出ます。

 

src/lxml/includes/etree_defs.h:14:31: fatal error: libxml/xmlversion.h: No such file or directory
 #include "libxml/xmlversion.h"
                               ^
compilation terminated.
Compile failed: command 'arm-openwrt-linux-gnueabi-gcc' failed with exit status 1
cc -I/usr/include/libxml2 -c /opt/tmp/xmlXPathInitg7GyME.c -o opt/tmp/xmlXPathInitg7GyME.o
unable to execute 'cc': No such file or directory
*********************************************************************************
Could not find function xmlCheckVersion in library libxml2. Is libxml2 installed?
*********************************************************************************
error: command 'arm-openwrt-linux-gnueabi-gcc' failed with exit status 1'''

 

試しにxmlversion.hを検索してみると、

# find / -name "xmlversion.h"
/share/CACHEDEV1_DATA/.qpkg/Entware-ng/include/libxml2/libxml/xmlversion.h

 

パスが通ってないっぽいのでしばらくググってみると

Package Request: python27-lxml · Issue #201 · Entware-ng/Entware-ng · GitHub

ここの回答の通り、シンボリックリンクを張ることで解決しました。

ln -s /opt/include/libxml2/libxml/ /opt/include/libxml

QNAPのNASにPython3/numpy/pandas環境を構築する

この手の情報は、あまりNAS の使用者が多くないのか、Pythonなんて入れる人いないのか、日本語の情報はもとより、英語の情報も非常に数が少なかったので備忘録兼情報公開の意味で投稿します。最初はssh? ARM? Linuxのコマンドはcdとlsしか知らない程度の知識だったため、トータル1週間くらい悩んでました…

 

QNAP製のNAS  TS231+での環境構築です。

Python機械学習使っていろいろ遊びたいんですが、ある種のデータは日々更新されて過去ログが公開されないため、毎日忘れずにダウンロードする必要があります。

それを自動実行するために一日中起動しているNASを使おうと思い立ったわけです。

Pandasやnumpy使わなくてもできるんですが、使えたほうが楽なので…

 

1.NASssh接続できるようにする

 手元のPCにTeraTermを入れ、NASにadminでログイン。以下sshでの操作。

 

2.NASにEntware-ngを入れる

 ググるとipkgやqpkgやEntwareなどが出てくるが、今使えるのはEntware-ngらしい。

 公式サイトに書いているコマンドでセットアップする。

 

3.gccを入れる

 opkg list update

 opkg install gcc

 他にも何か入れたかもしれないが忘れた。

 

4.python3を入れる。

 うちの環境はデフォルトでpython2系が入っていたが、せっかくなので3系を入れておく。

opkg install python3

 ちなみに、

opkg list | grep python*

 で表示されるpython関係のパッケージのいくつかは、opkgからインストールできた。

 このタイミングでpip3もインストールした。

 

5.arm-openwrt-linux-gnueabi-gcc-arのシンボリックリンクを作成。

  この状態で pip3 install numpyしてもCコンパイル時にエラーが出てしまう。

 arm-openwrt-linux-gnueabi-gcc-ar コマンドが not found といわれたので、私の環境では \opt\lib\ にあった ar に対してシンボリックリンクを作成した。

 windowsしか使ったことない人間にとっては難易度高かった・・・

 

6.pip3 install numpy pandas 

 

以上でした。

次はcronの設定するぞ。

pandas のread_csvを使って日本語入りのcsvを読み取る際の注意点

pandasはcsvを扱うための便利なメソッドが用意されていますが、日本語の入ったcsvファイルの読み込みにちょっと躓いたので個人的備忘録。

読み込み:

import pandas as pd
df=pd.read_csv('hoge.csv',encoding='Shift_JIS', index_col =0)

pd.to_csv()で普通にDataFrameをcsvに書き込むと、先頭列にインデックスがカラム名なしで書き込まれ、エンコードの問題も発生しました。

 

DAISOで200円で買ったスマホ充電器が壊れた件

タイトルの通りです。DAISOで半年前に購入したスマホ充電器が壊れたので、ばらして遊んでみたよって話です。

 

ノートパソコンの充電に使っていたんですが、いつの間にか充電できなくなっていました。出力が完全にゼロになっていたのかは未確認です。。。

 

お亡くなりになったのはこちら、テラ・インターナショナル製、DC 5V, 1.0A出力のコンバーターです。

 

f:id:yasumonoe:20170205232546j:plain

ラジオペンチでプラグ部分をぐりぐりしてばらした後の画像です。よく見ると、本体側面に溶けたような跡が・・・

f:id:yasumonoe:20170205232549j:plain

開封してみると、焦げた跡が2か所確認できます。発熱箇所は、上の写真にもあるトランジスタと、下の写真の右上、チップ抵抗R3と思われます。

f:id:yasumonoe:20170205232544j:plain

刻印も読めなくなったR3。

f:id:yasumonoe:20170205232548j:plain

f:id:yasumonoe:20170205232550j:plain

ほかの部品はいたって綺麗、コンデンサの噴火もありませんでした。

どの部品が壊れたのかはわかりませんが、ノーパソに繋いで長時間充電してると、熱がこもって壊れやすくなるのかもしれません。

 

株の売買戦略を考える

とりあえずpythonをのらりくらりと勉強中なので、手始めに株の売買シミュレーションをやってみた。

 

戦略としては、n日移動平均乖離率が o % 以下で買い、i %以上で売り、という原始的な手法。確か、昔はこの戦略で上手くいっていたが、最近はなかなか…って話は聞いたことがあって、試しにやってみようってこと。

 

適当な事前検討の結果、n=7, o=-14, i=-7 がベストっぽいことが分かったので、さっそく1991~2016年の日経225の株価データを使ってシミュレーション。

 

とはいっても、単に1売買ごとの収益率を平均しただけなので、単元株がーとか資金管理がーという課題はあるのだけど。

 

結果は下の図の通り。通説通り、2005年過ぎたあたりから収益率がほぼゼロ。これは平均値なので、分散も考えると、現在ではハイリスク・ローリターンな戦略といえると思います。どうしてこうなった…

 

しばらくはこの手法を調べていきたいと思います。

将来的には、テクニカル戦略を機械学習させて金持ちになるという、男の子なら誰でも一度は見るであろう夢をかなえたいですね。

 

f:id:yasumonoe:20170126232248j:plain

ちなみにこの図はpythonで出力したわけではなく、csv出力したデータをexcelでピボット処理/グラフ化しています。やっぱりexcel使いやすいよ。

 

pythonデータ可視化ライブラリseabornのインストール

備忘録として。

matplotlibのラッパーの一つであるSeabornのインストールが、

>pip install seaborn

ではエラーが出てできなかった。

以下URLからwhlを落としてきて、

Python Extension Packages for Windows - Christoph Gohlke

>pip install c:\seaborn-0.7.1-py2.py3-none-any.whl

で終了。