月別アーカイブ: 2015年4月

python pandas データフレームの日本語で、文字の検索・置換がうまくいかない

m2jのデータを加工するのに、通貨ペアの名前が
‘USD/JPY’だったり’USDJPY’だったりするので統一したい。

とりあえず、さくっと書いてみたけど、
思ったように動作しなくて、データフレームが壊れてしまう。

数字はちゃんと変換されるので、文字コード関係かも知れない。
Shift-JISで使いたいからなぁ。。。

replaceには、encodingオプションなどないし。
ファイルから読み込む時に、str型に変換してしまっているし。

もう少し見てみると。
中でUnicodeに変換するのに失敗しているみたい。

試しに、unicodeのデータフレームを作ってみたら、
正しく検索や置換が動作ることを確認した。

わざわざstr型に変換してみたけれど、
やっぱりUnicodeに統一するのが正解みたいだ。

という訳で。
Pythonの文字コードの扱いについて調べてみた。

PythonのUnicodeEncodeErrorを知る
http://lab.hde.co.jp/2008/08/pythonunicodeencodeerror.html

とは言え。
外のShift JISなcsvファイルからpandasに読み込むときには
どうするのが良いのかな。

read_csvした直後は、もうstr型になってしまっているし。

全部の要素をチェックするループを書くのはチョット。。。
なので、Series用のstr アクセサを書くのが、妥当そう。

strアクセサは、 内部のデータ型が文字列(str か unicode ) 型のとき、
その要素に対して、一通りの文字列用メソッドを適用することができる。

使えるstrアクセサ一覧
http://pandas.pydata.org/pandas-docs/stable/api.html#string-handling

当然、encodeやreplaceもあった。

例えば

これで、文字列の要素がUnicodeに置き換わって、必要な文字置換も完了。

アクセサを使わないで文字列検索や置換を行なう時には、
encode(‘cp932’)しなくても動作するのに。

知らないとハマるよね、コレ。

python pandas データフレームへの代入で警告が出る

Cygwinのpythonだと問題なかったプログラムで、
Macだと SettingWithCopyWarning の警告が出た。

何でCygwinだと稽古が出なかったのかは不明だけど。
SettingWithCopyWarning は出ないようにした方が良さそうだ、
という話。

外のcsvの内容をpandasに読ませたのは良いけど、
そのままの文字列では不都合なので要素の中身を加工しようとして、
アクセサを使ってこんな風に書くと。

警告が出てくる。
結果を見たところ、意図した通りに動作はしているけれど、大変気持悪い。

この原因は、pandasの便利機能を使って要素の選択を行う際に、
中で二度呼びされる…うんぬん。で、予期しない結果になるかも知れないよ、とのこと。

So, why does this show the SettingWithCopy warning / and possibly not work when you do chained indexing and assignment:

dfmi[‘one’][‘second’] = value
Since the chained indexing is 2 calls, it is possible that either call may return a copy of the data because of the way it is sliced. Thus when setting, you are actually setting a copy, and not the original frame data. It is impossible for pandas to figure this out because their are 2 separate python operations that are not connected.

The SettingWithCopy warning is a ‘heuristic’ to detect this (meaning it tends to catch most cases but is simply a lightweight check). Figuring this out for real is way complicated.

The .loc operation is a single python operation, and thus can select a slice (which still may be a copy), but allows pandas to assign that slice back into the frame after it is modified, thus setting the values as you would think.

The reason for having the SettingWithCopy warning is this. Sometimes when you slice an array you will simply get a view back, which means you can set it no problem. However, even a single dtyped array can generate a copy if it is sliced in a particular way. A multi-dtyped DataFrame (meaning it has say float and object data), will almost always yield a copy. Whether a view is created is dependent on the memory layout of the array.

pandasの実装を気にして使っていられないし、
予想外の箇所でこのエラーに遭遇することもある。

なので、アクセサを避けて、言われた通りの使い方をしてみる。

ところが、このままでは警告は消えない。
データのクレンジング作業途中でindexに欠番があったりすると、
そのままでは、さくっと差し替えることも、ちょっと面倒。

あぁ、同じことを言ってる人がいる。
http://stackoverflow.com/questions/25698710/replace-all-occurrences-of-a-string-in-a-pandas-dataframe-python

アクセサを使わないで全体に正規表現で置換をかけると、
SettingWithCopyは出ない。

Columで限定できてないけど、これでOK。

しかも、 encode(‘cp932’) しなくても文字列置換ができた。

この変のAPIの動きは、最近のバージョンで変更になったみたいなので、
要注意。

せっかく便利なアクセサなのに、かえって混乱してしまった。
今後、また仕様が変わるのかも。

python pandasで日本語のcsvファイルを読み込む

pandasのデータフレームやなんかを使いたいけど
読みたいcsvファイルが日本語で、コードがShift-JISな場合、
ちょっとイヤな実装になる。

Python3に乗り換えれば幸せになれるのかな。
でも、GAEやなんかは、まだ当分2.7だろうし。。。

m2jの注文履歴のcsvとか。

予めcsvファイルをUTF-8に変換しておけば、文字コードを意識しなくて済む。

ダウンロードしたままのShift-JISだと、
read_csvで encoding を指定しなければならない。

で、中で使われているstr型の文字コードはUnicodeかutfか、
何かに統一されているのかと思ったら、そうじゃないみたい。

なので、表示したり比較したりするたび
.encode(‘utf-8’) とか、つけないといけない。

場当たり的に対応してると、出来上がったコードは汚くなるなぁ。
良い方法はないものか。

まったく… ホスト名をコロコロ変えんな〜

Yosemiteをインストルしたところ、
MacBookAirのホスト名が変わってました。

“MacBookAir”

おっ、始めて普通のホスト名になった。

自分では一度も、MacBookAirにホスト名をつけてないのだけれど
何かの拍子に MacBookAir が勝手に名前を変えてしまう。

これまでの名前の変化は。。。
“macbookair” # 買ったとき Snow Leopald だったっけ??
“MacBookAir.local” # Merberick
“MacBookAir-2.local” # いつの間にか変わってた
“MacBookAir” # Yosemite

何か困るか、と言うと。

家や会社のPCで emacsの初期化ファイル .emacs.d を共有していて
pathなど、PC毎に変数を切り替える場合に↓のようにしているのだけど。

勝手にホスト名が変わってしまうと、切り替えがうまく行かなくて

あれ? emacsが何かおかしい…

となっちゃう訳です。

macでOctaveを使う

MATLABが必要になったのだけれど、そんな物を買う予算がある訳もなし、
Octaveをインストールしてみました。

すんなりは動作せず。

No Java runtime present, requesting install.

Javaはインストール済みだけど、ここで必要なのは Java6のruntimeらしい。

そこで、Apple Support Communities の “Java SE 6 on Yosemite?”
https://discussions.apple.com/thread/6601242?start=15&tstart=0

を参考に、以下のURLからパッケージを取得してインストール。
https://support.apple.com/kb/DL1572?locale=ja_JP

無事、OctaveがMacBokkAirで動作するようになりました。

ワーニングは結構でますね。

warning: docstring file ‘/usr/local/Cellar/octave/3.8.1_1/share/octave/3.8.1/etc/built-in-docstrings’ not found
GNU Octave, version 3.8.1
Copyright (C) 2014 John W. Eaton and others.
This is free software; see the source code for copying conditions.
There is ABSOLUTELY NO WARRANTY; not even for MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. For details, type ‘warranty’.

Octave was configured for “x86_64-apple-darwin14.1.0”.

Additional information about Octave is available at http://www.octave.org.

Please contribute if you find this software useful.
For more information, visit http://www.octave.org/get-involved.html

Read http://www.octave.org/bugs.html to learn how to submit bug reports.
For information about changes from previous versions, type ‘news’.

warning: /Users/**/**.m: possible Matlab-style short-circuit operator at line 81, column 76
warning: /Users/**/**.m: possible Matlab-style short-circuit operator at line 81, column 49
error: invalid use of script /Users/*/*.m in index expression

ワーニングの方は、元のソースが ‘&’ と ‘&&’ を混同していたため。
エラーの方は、

少し手直しすれば、MATLABのソースが動きそう。

カレコとオリックスのカーシェアリング比較

そろそろ家の車も古くなって、使わない割に維持費もかかるから
今年は買い替えなくて処分する予定。

何と、この4年の間、家の車を動かしたのはたったの3回。
その内2回は車検に持っていくため…

出張先や旅行先じゃレンタカーだし。
極たまに自家用車が必要になった時にバッテリーが上ってたりして、
ますます使わない。

車… 持ってる意味ないじゃん。

という訳で。
昨年末にキャンペーンでお特に入会できた、
カレコとオリックスのカーシェアリングを試してみた。

カレコ
・首都圏中心のサービス
・家の近所に車が少ない、あっても予約が一杯
・入会と同時に近所のステーションが無くなった
・HPが見易くて予約が簡単
・安い!けど、月会費が必要 (会費をレンタル費用にあてられる)
・予約より早く返却すれば、使った時間分だけ請求される

オリックス
・カレコよりサービス範囲が広い
・家の近所に車が少ない、けど空車が多い
・月会費が無料のプランがあるけど、カレコより結構高い
・HPが使い難くて、検索やweb予約に手間がかかる
・予約より早く返却しても、予約した時間分を請求される

使ってみた感じでは、とでも便利。
うちみたいに普段自家用車が必要ない家庭には良い!
レンタカーより気楽に借りられるし、
レンタル代にガソリンが含まれていて、満タン返ししなくて良いのが便利。

カレコの場合は特に費用が安い。
でも、近所ではなかなか空きがないし、ステーションも少ないから、
実際に急な用事の時には使えなかった。
回転率重視なんだろうなぁ。小さいステーションがポツポツある感じ。
全体的なサービスは満点なんだけど、急ぎの時に借りられないのは致命的。

オリックスでも納得の値段。
探す範囲を少し広げれば、いつでも空車が見付かりそう。
色々不満はあるけれど、家の場合はオリックスの方が向いている。
値段は仕方ないとしても、HPは是非とも改善してほしい。

タイムズは試していないけど、こんな感じ。
・お特なキャンペーンが、なかなか無い (待ってるのに)
・あちこちにステーションがある
・月会費が無料のプランがない

大本命なんだけど、月会費払う程は使わないからなぁ。
カレコ位安ければ、月会費を払っても良いんだけど。

なにかと評判の悪い 新しいMacBook を買いたい。いや買うよね。

2014年の11インチMacBookAirを愛用している。
モバイルでUnixツールを使いたい人にとっては最高のPC。

でも、微妙〜に画面サイズが小さくて困ることがある。

普段、EmacsとChromeを常用して、裏でJenkinsとDropboxが働いてくれている。
それに、pdfの資料を数個開いたまま。

これでもバッテリーは6時間くらいはもつから、ACアダプタを持ち歩かなくてもOK。
メモリを8Gにしたせいか、Jenkinsが忙しそうにしていても、性能不足は全く感じない。

でもでも、微妙〜に画面サイズが小さくて困ることがある。

Retinaだったら、画面だけ13インチだったら…
画面の半分づつで、二つの作業を同時にこなせるかも。

って、思う訳ですよ、
でも13インチAirは、微妙に大きい。

そこへ、今度出た「新しいMacBook」。

バッテリーの持ちは同じで、11インチAirより軽くて小さくて、画面は12インチでRetina。
最高なはず。

標準でメモリが8Gなのも最高。
SSDなんて128Gでも余るのに、256GB以上ついてるし。
USBの口が一つしかなくたって、しかもそれがType-Cだって、別に良いよ。
滅多にUSBポートなんか使わないし。

でも。

CPUとGPUが、弱いらしい。。。。

愛用している MacBook Airのスペックは
Corei5 1.4GHz 2コア
メモリとキャッシュは 256KB/3MB/8GB
Intel HD Graphics 5000 / VRAM 1536MB, 1366×768

Jenkinsがビルドやテストを始めても負荷を意識することはないし、
ファンが廻ることは殆どない。その分Jenkinsが遅いだけみたいだけど。
僕の使い方では、全く問題ない。

母艦の MacBook Pro Retina(Mid 2012)のスペックは
Intel Core i7 2.6GHz 4コア
メモリとキャッシュは ?KB/6MB/8GB
Intel HD Graphics 4000 VRAM 1GB
GPU GeForce GT 650M 1GB

ちょっと古い初代Retinaだけど、MacBook Air よりも快適。
もっとも触っていて感じる差じゃなくて、Jenkinsの仕事の速さで分る程度の差。
4コアだからね。
Parallel DesktopでWindows8.1も動かしているけど、全然問題なし。

新しいMacBookの吊しのスペックは
Core M 1.1GHz 2コア
メモリとキャッシュは ?KB/4MB/8GB
Intel HD Graphics 5300 / VRAM ?MB, 2304×1440

いろいろガセっぽい情報も出回っていて、ネットはちょっとした炎上状態。
・某雑誌のHPに異常に低いベンチマーク結果が載ってた (ア○キ○)
・デスクトップのCPUと比較したっぽい記事がある (Pentium以下とか)
・ファンレスだから、普通のCoreMの半分の性能しか出ない
・Intel HD Graphics 5300 は、4000/5000よりも遅い (元ネタ不明)

一方で、良い情報もあって。
・CPUのベースクロックが最低クロックに落ちない設定になっている
・薄いアルミ筐体だから放熱が良い (熱のクロックダウンは少ないだろう)
・SSDが早くなっている

総合して考えると、愛用のMacBookAirと、同じくらいと思って良さそう。

気持遅くなるかも知れないのが不安ではあるけど。

僕が欲しいのは、今より少し広い画面 だから。
買っちゃうだろうなぁ。 新しいMacBook。

情弱言うな。

pythonでメソッドをオーバーロードしたいのに

ついC++のオーバーロードの習慣で、メッソや関数を多重に定義してしまうと、
pythonの場合は単に上書きされてしまうので、思った動作をしてくれない。

ある程度ソフトの規模が大きくなった後に
「オーバーロードした」と思い込んで修正を加えて、
しかも、しばらくしてから動作がおかしい事に気付いたりすると、
なかなか原因が解らなくて時間をとられてしまう。

というか、何度もやってしまった。

pythonのFAQ:

Python では、一つのコンストラクタでデフォルトの引数を使ってすべての場合に対応するように書かなければなりません。例えば:

class C:
def __init__(self, i=None):
if i is None:
print “No arguments”
else:
print “Argument is”, i

これで完全に等価とは言えませんが、実用上は十分に近いです。

長さが変えられる引数のリストを試すには、例えば:

def __init__(self, *args):

これと同じやり方がすべてのメソッド定義で使えます。

引数の数が違う場合には、こういう手もあるけど、引数の型違いで区別したい場合…

そもそも python には変数型の概念があまりないのが良いところなのだけど。

仕方がないので、自分のコードで型判定を行なう必要がある。

とか。

う〜ん。カッコ悪い

2015年の3月末までの成果

2015年の3月末までの成果を振り返ってみます。

裁量取引の成果

dyerware.com


2015年の3月の利益はおよそ 27万円/月で、年率 35%のペースです。

3月は、6日の雇用統計があまりに見え見えだったので、発表直後の5分間で10万円ほど上乗せできました。
これが無ければ利益は15万円程度なので、月の目標利益20万円を達成できないところでした。

今後の裁量取引の課題

為替予測プログラムの的中率はやや回復してきましたが、まだまだ頼れるまでではありません。

しばらくは、普通にテクニカル指標を使ったトレードをする予定です。

先月予想した通り3〜5月は難しい季節になりそうなので、控え目なポジションで小まめに利食いしていきたいと思います。

「セルインメイ」の5月に向けて、ポジションを減らしていきます。

月の目標利益は20万円を維持します。

トラリピ成果

トラリピも振り返りたいと思います。

dyerware.com


2015年の3月の利益はおよそ 38万円/月で、年率 30%のペースです。

先月に続いて予算を増やした結果年率は大幅に落ちましたが、動きの少ない中で30%の利益率はなかなかの成果です。
今後も、維持率をみつつ、予算を増やす予定です。

今後のトラリピの課題

先月と変わって、ドル以外の調子が今一つです。

動きの怪しかったポンドと、豪ドル、南アフリカランドのトラリピを止めていたのですが、
それが裏目に出てしまい利益機会が減ってしまいました。

先月の計画通り、増やした予算を使って各通貨の安値のところを厚めに補強しておきました。

予算を増やした分、月の目標利益を10万円に変更します。

裁量取引とトラリピの予算の比率は現在2:1なのですが、今後は逆にトラリピを増やしてしていきたいと考えています。