2012年6月30日土曜日

CSV 値のマスク

CSVファイルのヘッダー行があり、nameを含んでいる場合、
nameをハッシュ する。

import csv

"""おなじみ動的クラス"""
def Dynamic(name, fields):
    """ returns a class object which has fields attribute.
    the class is iterable."""
    dic = dict([x,None] for x in fields)
    o = type(name, (_dynamic,), dic)
    o._fields = fields
    return o
class _dynamic(object):
    _fields = []

    def __init__(self, *args, **kwargs):
        for i,value in enumerate(args[0]):
            setattr(self, self._fields[i], value)

    def __iter__(self):
        for field in self._fields:
            yield getattr(self, field)

    def __str__(self):
        if len(self._fields) == 0:
            return "[]"
        l = "["
        for field in self._fields:
            l += getattr(self, field).__str__() + ", "
        return l[0:-2] + "]"
   
    def __setattr__(self, name, value):
        if name == "_fields":
            for field in set(self._fields) - set(value):
                delattr(self, field)
            for field in set(value) - set(self._fields):
                super(_dynamic, self).__setattr__(field, None)
        super(_dynamic, self).__setattr__(name, value)
           
if __name__ == "__main__":
    reader = csv.reader(file(inputfilename))
    writer = csv.writer(file(outputfilename, "w"))
    Personal = Dynamic("Personal", reader.next())
    for line in reader:
        person = Personal(line)
        person.name=hash(person.name)
        writer.writerow(list(person))

動的に属性を変更可能なクラス (その2)

前回の内容では field を変更したときに値がすべて削除された。
できれば field が a, b, cから b, c, dに変更されたときにはb, c の値を保存しておきたいのでプログラムを修正。

def Dynamic(name, fields):
    """ returns a class object which has fields attribute.
    the class is iterable."""
    dic = dict([x,None] for x in fields)
    o = type(name, (_dynamic,), dic)
    o._fields = fields
    return o
class _dynamic(object):
    _fields = []

    def __init__(self, *args, **kwargs):
        for i,value in enumerate(args[0]):
            setattr(self, self._fields[i], value)

    def __iter__(self):
        for field in self._fields:
            yield getattr(self, field)

    def __setattr__(self, name, value):
        if name == "_fields":
            for field in set(self._fields) - set(value):
                delattr(self, field)
            for field in set(value) - set(self._fields):
                super(_dynamic, self).__setattr__(field, None)
        super(_dynamic, self).__setattr__(name, value)

2012年6月24日日曜日

動的に属性を変更可能なクラス

namedtupleはとても便利だが、値の変更ができない。
値の変更可能な、エセnamedtuple を作ってみました。
namedtuple にはあってこれにはない属性がいろいろあるけど、そこは追々作るということで。

def Dynamic(name, fields):
    """ returns a class object which has fields attribute.
    the class is iterable."""
    dic = dict([x,None] for x in fields)
    o = type(name, (_dynamic,), dic)
    o._fields = fields
    return o
class _dynamic(object):
    _fields = []

    def __init__(self, *args, **kwargs):
        for i,value in enumerate(args[0]):
            setattr(self, self._fields[i], value)

    def __iter__(self):
        for field in self._fields:
            yield getattr(self, field)

    def __setattr__(self, name, value):
        if name == "_fields":
            for field in self._fields:
                delattr(self, field)
            for field in value:
                super(_dynamic, self).__setattr__(field, None)
        super(_dynamic, self).__setattr__(name, value)

2011年3月31日木曜日

海外先進国インデックスファンドの比較(2011/03/30)

海外インデックスファンド(STAM、eMaxis、CMAM、1680)とMSCI国際指数を比較してみた。
4つのファンドがそろっている2010/04/06~2011/03/30までを、基準日時点での基準価額とMSCI国際指数を用いて規格化。



これを見る限り、成績のよいのはCMAM>STAM>1680の順。
eMAXISはそもそも乖離が大きすぎて、よいとも悪いともいいがたいようだ。

2011年3月19日土曜日

早野クイズ

【理系学生必修】今,半減期8日のI-131原子核が10000個あったとします.8日後に何個残っているか答えなさい.最初の数が2個の場合はどうでしょう?
じゃ最初の数が1個だったらどう?

//10000個の場合、5000を中心とした確率50%の場合の二項分布。2,1個の場合も同様。

【物理学生必修】ヨウ素(I-131)が検出されたと報じられています.I-131であることを確認する原理を,100字以内で述べよ.

//ベータ壊変するけど、電子のエネルギーを正確に計る手間を考えたら、ガンマ線のエネルギーから判定するのがお手軽かと。I-131から出る特徴的なエネルギーのガンマ線を検出することで同定する。

【物理大学院生必修】I-131を検出するのに必要な測定器と,その測定原理について述べよ

//ゲルマニウム検出器でガンマ線のエネルギーを計る。サンプル以外にBG放射線と比較し、ヨウ素131に特徴的なガンマ線のところにピークが出ることを確認する、と。

【物理大学院生選択問題】I-131が出す放射線の種類をすべて述べよ.I-131であることが確認できる放射線の種類とそのエネルギーを述べよ.

//パス。もう大学卒業しているので手元に資料がない。

【医療従事者必修】I-131の体内被曝が懸念されています.平常時,日本人の体の中に,放射性物質がどのくらいあり,それによる体内被曝量はどのくらいか,即答してください.

//パス。同位体比率とか半減期がわかる資料が手元にない。

【医療従事者必修】報じられている「1キログラム当たり1万5020ベクレル」とは,何をあらわす単位か,即答してください.http://s.nikkei.com/hWw1fk

//比放射能?

【医学部学生選択問題】「放射性ヨウ素が1キログラム当たり1万5020ベクレル」と「放射性セシウムも524ベクレル」という報道があります.ヨウ素とセシウムの違いにも触れ,健康への影響の有無を適確に説明しなさい.http://s.nikkei.com/hWw1fk

//パス。化学的性質の違いはもはや忘却の彼方。

【地球物理学生必修】天然放射線による被曝量が,その人が住んでいる地域によって異なる理由を,簡潔に答えなさい.

//自然放射線は宇宙、大地、体内などから被爆する。宇宙からの被曝は高度に、大地からの被曝は地質によって変化するため。

【理系学部生必修】半減期Tの放射性物質の個数Nの時間変化N(t)をあらわす微分方程式を即答せよ.

N(t)=N*2^(-t/T)
dN/dt = -N*2~(-t/T)*log2 / T

【医療従事者選択】体内被曝が疑われる方があったとします.体内被曝の有無と,その程度を判定するにはどうすればよいでしょう.

【理系学生選択】測定値15020 Bq/kg などと報じられていますが,同じサンプルを,その直後にもう一度測定するとどうなると考えられるか,簡潔に記しなさい.http://bit.ly/eAWzLW

【理系学生必修】報道やWebで使われている単位, Sv, Sv/h, Gy, Gy/h, Bq, Bq/kgについて,簡潔に説明してください.

【医療関係者必修】I-131,なぜ牛乳なのか.牛肉はどうか.即答してください.

2011年1月3日月曜日

python HTTPクライアントでログイン(POST)処理

特にSBI証券でのリダイレクト関連でセッションが切れることへの対策
が全くわかりません。
ログイン後の処理は試行錯誤中。誰か教えてくれんかなあ。



""" ログイン用の設定 URLやパスワードなど"""
url_string = "ログイン先URL"
form_fields = {
"userName": "*****",
"loginPwdSet": "*****",
'x':'3',
'y':'15'
}
""" POSTでクッキー関連の設定を済ませたopenerを作成 """
def __init__():
cookies = cookielib.CookieJar()
cookie_handler = urllib2.HTTPCookieProcessor(cookies)
redirect_handler = urllib2.HTTPRedirectHandler()
return urllib2.build_opener(redirect_handler, cookie_handler)

""" openerを用いてログイン処理を行う。 """
def login(opener):
try:
form_data = urllib.urlencode(form_fields)
request = urllib2.Request(url_string, form_data)
res = opener.open(request)
return res.read()

except urllib2.HTTPError, e:
print "error has occurred\n"
print e.msg, e.code
except urllib2.URLError, e:
print "error has occurred\n"
print e

def main():
opener = __init__()
response = login(opener)
if __name__ == '__main__':
main()

2010年5月31日月曜日

上場インデックスファンド海外先進国株式とMSCIコクサイ指数の関係について

乖離が大きすぎて正直買いたくないのだが……でも一番信託報酬が安いし、という気持ちで1680 上場インデックスファンド海外先進国株式を買っている人も多いのではないかと思う。ってか、私は乖離が高すぎて最近eMaxisからのスイッチを躊躇しています。
そこで、本当に1680 上場インデックスファンド海外先進国株式は本当にMSCI コクサイ指数(MSCI KOKUSAI Index) に連動しているのか、確認を行いました。

確認に使用したデータ
  1. 日興アセットマネジメントのFUND DATA の日次データ

  2. http://www.nikkoam.com/products/etf/lineup/msci-ko/data
    から2010/1/22から2010/5/27までのデータを取得







    MSCI-KOKUSAIインデックスMSCI-KOKUSAIインデックス÷1001口当たり純資産
    103666.071036.661000

    こんな感じにオーダーが違うので、MSCI-KOKUSAIインデックスの値を100で割ったものを便宜的に使用しています。両者を比較すると、下図のようにだいたい一致しているようです。





  3. MSCIが出しているPrice Index

  4. http://www.mscibarra.com/products/indices/international_equity_indices/performance.html

    から"KOKUSAI INDEX (WORLD ex JP)"を選択し、"Currency:"をLocal(ローカルは日本円?)にしてPrice, Net, Grossの3つのIndex Levelを取得しました。それぞれの日の18:30のデータ(どこの18:30かは不明)です。
    ちなみにこの3つは以下のように定義されています。http://www.mscibarra.com/products/indices/international_equity_indices/definitions.html

    • Price

    • The MSCI Price Indices measure only the price performance of markets. Dividends are not considered in price indices.
      (日本語訳) MSCI Price 指数は市場の値動きのみを計測しています。配当金は price 指数に考慮されていません。
    • Net

    • With Net Dividends:
      This series approximates the minimum possible dividend reinvestment. The dividend is reinvested after deduction of withholding tax, applying the rate to non-resident individuals who do not benefit from double taxation treaties. MSCI Barra uses withholding tax rates applicable to Luxembourg holding companies, as Luxembourg applies the highest rates.
      (日本語訳)この(With Net Dividends)シリーズは最小限可能な配当金再投資を概算しています。配当金は二重課税条約による利益を受けない非居住の個人に対する金利が適用された源泉徴収控除後に再投資されます。ルクセンブルクが最高の税率を適用しているため、MSCI Berraはルクセンブルクの持ち株会社に適用できる源泉徴収税率を使用しています。
      (超訳)
      最悪の税率のルクセンブルクで再投資した場合の指数です。手数料を除けば、どんなにひどくてもこれよりはましなはずです。
    • Gross

    • With Gross Dividends:
      This series approximates the maximum possible dividend reinvestment. The amount reinvested is the entire dividend distributed to individuals resident in the country of the company, but does not include tax credits.
      (日本語訳)この(With Gross Dividends)シリーズは最大限可能な配当金再投資を概算しています。再投資の合計はそれぞれの会社の国の住人への税額控除を考慮しない配当金すべてです。
      (超訳)Grossはそれぞれの会社からの配当金を現地で受け取ったときの、税額控除抜きでの配当金再投資が行われた場合の金額です。つまり、最大効率での再投資を行った場合の結果の概算です。


    これらの説明を読む限りでは、上場インデックスファンド海外先進国株式は「Priceと連動し、配当部分は1/20に分配する。個々人がこれに対して再投資を行った場合はNetよりはまし、Grossにはたどり着けない」という認識でよいかと思われます。
    Price, Net, Gross および日興の日次データを比較した結果が下の図です。



    Gross, Net, Price は元々同じところからスタートしていることを考えると(1969/12/31が100)税率の違いが如実にでてますね~。

で、肝心要の日興の日次データと MSCI の Price の比較を行った結果が次の図です。


比較する時点が(1日の中で)違うので、単純に同じになるわけがないのはわかりますが、日興のMSCIの値、ちょっとばらつき具合(分散)が大きいのが気になります。また、1口あたり純資産が常に下方に乖離していて、しかも乖離具合が大きいことも気になります。信託報酬があるからある程度下方乖離するのはわかりますが、1年0.2625%以上乖離してるようにみえます。
運用時手数料が大きいのでしょうか。

その他、今回これを調べていて気がついたのですが、1680は順調に追加設定されているようです。すでに設定口数は当初の2.2倍になっています。こちらは上場廃止にならなさそうなので一安心です。

2010年4月13日火曜日

timeの結果をリダイレクト

time command &> log ではだめで、
(time command) &> log にする必要あり。
time command &> log だと、commandのエラーだけ出力される。

2010年3月30日火曜日

改行コードの削除

perl -lpe 's/\n//' target
「-l」を付けなかった場合、失敗することあり。
出力時にprintが勝手に改行コードを追加するのか?

2010年3月7日日曜日

Android SDK 2.1 インストール方法

このページからSDKをダウンロード
http://developer.android.com/intl/ja/sdk/index.html

Windowsの場合、android-sdk_r04-windows.zipをダウンロード

ダウンロードしたファイルは圧縮状態なので解凍後、android-sdk-windowsフォルダの中のSDK Setup.exe を起動し実行。

「https://dl-ssl.google.com/android/repository/repository.xml」というエラーメッセージが表示されるので、Settings から「force http……」というチェックボックスにチェックを入れてSave & Applyをおす。

この状態だとAvailable Package が増えるので選択後 Install Selected をおす。

以降、説明は不要かと。

2009年8月15日土曜日

初めてのGoogle Android プログラミング (8)

で、地図の表示地図の表示……あれ、Google Map のView が作成されるのに地図がさっぱり表示されない。何じゃこら??

Android 1.5 での Maps API Keyの取得について
に API Key の場所が変わったよ、みたいな記述があるけどこれ?
でもXPだしなぁ……と探していると、

Android 1.5 のdebug.keystoreのVistaでの場所
というそのものずばりなエントリーを発見!このページの記述によるとWindows Vista ならば
C:\Users\\.android\debug.keystore

ちなみにこの本に書いていたのは
C:\Users\\AppData\Local\Android\debug.keystore

SDK1.5 になるとこういう変更があるっての、わからんかったので助かりました。

初めてのGoogle Android プログラミング (7)

衝撃の事実!
Eclipse でGoogle Map を使うためには、 Build Target を Google APIs にする必要がある!
で、今まで Android 1.5 を使ってきたせいで9章で行き詰まった。

うわぁ↓↓↓

2009年8月14日金曜日

初めてのGoogle Android プログラミング (6)

今日は大はまり。
まず、8章の内容のうち、 id を差し替えてコーディングを行ったところ、別の Activity(同じプロジェクト内) で id をかぶらせてしまい、落ちる落ちる。
途中で気がつき、 id を差し替えて再度デバッグモードで起動すると、
Failed to reopen debug port for Selected Client to: 8700
のエラーが出てAVDの内容が更新されない。うっそ、マジ??とか思っても更新されない。
ポートがあけられないって言うことは、なんかで塞いでもたんかいな?と思うも記憶にないしなぁ。

これについては調べたところ、
Google グループ内で該当するディスカッションを発見。
どうもC:\WINDOWS\system32\drivers\etc\host

::1 localhost

となっている行を
127.0.0.1 localhost

に書き換えればいいとのこと。
今日はこんなんであまり進まず。うーん。

2009年8月13日木曜日

初めてのGoogle Android プログラミング (5)

8章を進める。
どうも匿名クラスを使うのが好きらしく、この作者のコードは匿名クラスのオンパレード。
ってか、たまには Listener の実装別のやつにしてほしい。

書いていて気持ち悪いけど、Javaに詳しくないから修正できない。
どうすりゃいいんだろう?

ともあれ、8章になってやっとアプリらしい外見をしてきた。
機能的にはまだまだだけど、外見さえ何とかなれば後はごり押しでなんとかならんものだろうか?

初めてのGoogle Android プログラミング (4)

第6章、コマンドラインからの操作→あんまり今のところ重要じゃないので流し読み。

第7章、 Intent と Phone Dialer
急激にまともな無いように。あれ、この本もしやJava経験者対象?
Listener の実装で匿名クラスを使用されていて、最初???状態。
調べて内容はわかったが、何となく気持ち悪い実装なのでとりあえずOnClickListener を Activity のクラスに implements しといて実装終了。

本当は元クラスの method を扱いたいときとかもあるだろうから匿名クラスが必要になるときもあるのかな。あ、でもこれってキャストしたら使用できたんだっけ?あれ?てか interface の場合元クラスの method なんてあるはずが無いからこの辺好み?

Java Developer Connection(SM) (JDC) テクニカルティップあたりの解説では、 Local クラスと匿名クラスは似たような使い方ができる。ただ、可読性を考えると匿名クラスより Local クラスが優れている場合が多い、とのこと。実装してみた感じではこの考えは同感。今後実装するとしても匿名クラスを積極的には使わないだろうなぁ。

と、こんなことをしていたら続く解説部分の EditText のインスタンス取得関係が不可思議なことに。
仕方がないから onClick() の中で取得しよう……て、あれ?この方が実装として正しくないか?

この本の実装では Listener を設定する前に EditText を取得しているので、onClick() 以外の Listener(もちろん、別のボタン等がある場合) が存在した場合、極端なこと言えば先に操作していれば getText() が入らなくても動くとか???でも逆順に操作されることを考慮したらこの辺毎回値を取得するようにしたいかな。あ、でも毎回取得してたらプログラムの実行速度が遅くなるのか?
ん~、 Java は新入社員研修以来触っていないので、ここんとこ今ひとつわからんなぁ。
まぁ、この章も意図しておいたプログラムができているから良いとするか。

2009年8月12日水曜日

初めてのGoogle Android プログラミング (3)

5章読了。
末尾の挑戦で示されている、複数のビューの表示には LinearLayout クラスを使用。
LinearLayout linearLayout = new LinearLayout(this);
これ、 linear じゃないクラスもあるんだろうなぁ。
また、複数表示するのに久々のJavaだからということで ArrayList も使用。
Iterator とかなつかしー。最近 SAS ばっかり見てたのでこういうまっとうな小物が出て来るとうれしくなる。

2009年8月11日火曜日

初めてのGoogle Android プログラミング (2)

とりあえずはまったこと。
プロジェクトエクスプローラーを消してしまって、別のプロジェクトを開けない!
windows -> show view -> pacage explorer を選択すると開ける。

んで、このはまりを抜けて5章 Hello! World アプリケーションを続ける。
画像を使ったHello World! の節ではGoogle での画像検索結果(hello world)から画像サイズ小を……って、なんじゃこれ!どーみても18禁じゃないですかいな。
こんなのつかえるか!

もうちょい安全な画像を使用しました。そっか、こんな絵がhello world の検索結果だなんて、Google 社員のhello world は強烈だなぁ……

って、めっちゃ拡大されて表示された。これ、もしかしてこの方法(ImageView クラスを使用)だとサイズ指定できない?
次のページのxmlの方法だとうまくいってるし、なんか大きさ指定の方法がありそうな……
setAdjustViewBoundsかと思ったが違うよう。
setLayoutParams(LayoutParams params)?あ、これくさい……と思うが指定しても失敗。
ImageView のインスタンスに設定しても反映されず。

Android LayoutParamsで検索するとこれについて記述したページが。
JavaDrive さんのHP中に、「レイアウトを指定してビューを設定」というそのものずばりな話が。

記述通り、setContentView(ImageView View, LayoutParams param)として設定してみると……あれ?うまく行くときと行かないときが。

Layoutparams を LayoutParams.FILL_PARENT , LayoutParams.FILL_PARENT
にしたときは画面いっぱいに。

LayoutParams.WRAP_CONTENT , LayoutParams.WRAP_CONTENT
にしたときは小さく。ココまではOK。

ここで、
LayoutParams.FILL_PARENT , LayoutParams.WRAP_CONTENT
にしたら画面中央に小さく。逆にしたら画面上端中央に小さく。なんじゃこれ?

ちなみに、80 , 100と指定した時は……大きく(元画像は50x50 pixel)なってるけど、どう見ても正方形。うーん、Buttonクラスには使用できてもImageView クラスには使えないとか?

不明だが画像が表示できたので今日はここまで。

初めてのGoogle Android プログラミング (1)



お盆休みの間、せっかくまとまった時間がとれるのでお勉強をしよう!
ということで、この本を使ってAndroid Programmingをやってみることにしました。
目標はこの本の内容を完了させる+余裕があれば アプリの作成(smart.fm 用。ログインした後、……どうしよ?日記ぐらい書けると良いなぁ)
という訳で、まずはEclipseのインストール。
その後、JavaSDKのインストール。1.5をインストールしているように指示しているのを見逃して1.6をインストール。大丈夫か?

2009年6月8日月曜日

ディレクトリ構造のコピー

ディレクトリ構造のみのコピーは
cp -as from to
を行うことで可能。
アーカイブを作る(a)うえで、シンボリックリンクを指定すると、fromが絶対パスで無い場合エラーが出る。が、ディレクトリは作成済み。
fromに間違えて絶対パスを記述した場合は
find to -type l -exec rm {} \;
を実行することで作成されたファイルを削除できる。

2009年5月2日土曜日

sudoを使う

sudo を使いたいユーザーをwheelグループに所属させた上で
rootになってから
visudoコマンドを実行。

viエディタ上でsudoの設定ファイルを編集。