Octopress Blog

自分のためのまとめブログ

エキスパートPythonプログラミング

辞書的に使ってしらべたことから覚書。

2.3 デコレータ

  • Python2.4で追加された構文
  • 関数やメソッドのラッピング処理(受け取った関数を拡張して返す)の見た目をわかりやすくする
  • クラスメソッドや静的なメソッドを定義する際に、メソッド定義の前の行にすっきりと書く事が目的
  • いくつかのコードパターンを実装するときに非常に意図がわかりやすいコードになる

2.3.1 デコレータの書き方

第31回R勉強会@東京

第31回R勉強会@東京

お勧め資料

はじめてのR masaha03 (SlideShare) 超お勧め

データの読み込み

  • 組み込み関数 read.table read.csv

  • 外部パッケージを使う Eccel 画像ファイル

  • データ構造 データフレームがメイン

分析の前処理

データの結合 merge, rbind, cbind データの抽出 subset

分析

  • 各種手法の適用 ここで外部パッケージを使うことが多い 便利パッケージの紹介は本編

ファイル出力

  • テキスト、Excel

  • 図 組み込みのplot 外部パッケージ lattice ggplot2 (最近はこちらが多い)

  • レポーティング knitr 普通のレポート slidify パワーポイントに出力 Rpubs

(昔はTeXとかでまとめることが多かった)

エディタ

RGUI Windowsは使いにくい RStudio 最近の定番。メモリは食う。一番無難 ESS Emacs EZR 医学系ではやりつつある Rzパッケージ SPSSの使いやすさ(GUI)をRで実現、masaha03さんが作った

情報収集

検索

  • seekR Rについて検索しやすい

  • Rseek 英語版

Web資料

R-tips Rjpwiki 同志社大学 金明哲先生 群馬大学 青木繁伸先生

書籍

  • ほかプログラミング言語の経験あり R言語逆引きハンドブック Rによるデータサイエンス Rパッケージガイドブック

  • データ分析自体の不慣れ データ解析のための統計モデリング入門 デー玉イニング入門 早稲田大学 豊田先生 シナリオに沿ってRを使っていく

勉強会

ゼロからはじめるR言語勉強会 最近はじまった勉強会 Wako.R (6/8開催) dritoshiさん R界のアイドルらしい。とがっている。人によっては引く Tokyowebmining 充実した議論、主催者の自己紹介が長い Zansa ガチで意も技術も高い大学生 集合地プログラミング勉強会 tetsuroitoさん 元はPythonをやっていた。今はやってない

さくさくテキストマイニング 資料が豊富。今はやってない 社会科学研究のためのR勉強会 ネットワーク関連

さあやってみよう

cran task view 目的別に外部パッケージがまとめられている。やりたいことが無い人はとっかかりに良いかも

Julia Rに我慢なら無い人が作り始めた次世代統計言語 脅威のPython勢 pandas:RのデータフレームをPythonで Bokeh:ggplot2ライクな可視化 scikit-learn:機械学習 機械学習向け Orange:統計、機械学習 統計向け

Jubatsu ゆばたす。分散したデータを常に素早く深く分析する。元はC++のライブラリ。機械学習


Rによるやさしい統計学(分散分析) aad34210さん

分散分析

分散分析  3つ以上の平均値を比較するための統計的方法 2つの平均値を比較する方法はt検定

二元配置分散分析(二要因とも対応なし)

主効果:それぞれの要因ごとの効果 常温か、冷温か 交互作用効果:ふたつの要因が組み合わされた場合に生じる効果。単純に二つの足し算ではない

二元配置分散分析(二要因とも対応あり)

評価者によって主観が入っているのではないか?を分析

主効果:温度によって簿平均は異なるか?

   銘柄によって異なるか?

二元配置分散分析(一要因のみ対応あり)

冷蔵と常温をそれぞれ別の人たちに評価してもらったとき


seekRの中の人

seekR管理人平村さん

LinkedInのR Projectがおすすめ httpo://linkedin/

RForcecomパッケージ

Salesforce.com,Force.comに接続するパッケージ CRMにはいているデータを検索、引き出してRで分析してSalesforceに戻す


はじめよう多変量解析~主成分分析編~ sanoche16さん

多変量解析とは

多数の変量をもつデータを分析する

1変量、2変量の分析ができなければできない

平均、分散、共分散、相関係数、行列演算 微分積分、分布

主成分分析

分散を最大化させるのが一番合理的

因子分析は何が因子になっているかということを重視する アルゴリズムは主成分分析

主成分分析か、因子分析か? -> 因子分析でうまくいくかわからないようなものを分析するときは、とりあえずprcompに入れて主成分分析 -> 特徴を考えて要因分けしたい場合は因子分析

質の分析に主成分分析 -> 分散行列でやったとき、生の行列でやったとき、相関係数でやったとき -> 係数の順序は変わらないが、寄与率が変わる。寄与率が99%とかなってしまった。

相関の高い係数があると、使えるのか 相関係数の信頼区間が重要。 重回帰分析、目的変数がいかに精度を持っているかが重要

主成分分析は、どんな要素があるか、よりわかりやすく見るために使う。


R言語で学ぶマーケティング分析 - 競争ポジショニング戦略 - yokkunsさん

競争ポジショニング戦略

市場はさまざまな価値感や趣向の人たちで構成されている。ターゲットになる人を決めたい。

レコメンドエンジンはもともとあるサービスに対するもの。 戦略ポジショニングは

どんな人たちで構成されていて セグメンテーション その中で誰をターゲットにして ターゲティング どんなサービスを提供するか ポジショニング

セグメンテーション

市場を意味のあるグループに分ける

セグメント1,2,3,4

区分する方法:昔からの方法では、年代、性別、地域、職業など。 -> 趣味趣向が多様化しているので基本的な属性による区分では意味のあるグループができなくなってきている -> 同じセグメント内でも、さまざまな趣向や価値観の人が存在するようになった。

クラスタリングによるセグメンテーション

ログやアンケートで、その人の趣向や消費行動を見て本質的なグループわけをすること 職業や性別ではなく、本質的なところでグループ分けする

主成分分析を駆使して可視化する。 k-means方

fmsbパッケージのradarchart関数で実行できる

ターゲッティング

どのセグメントをターゲットにするかを決定する

こだわりデジタル層 飛びつきミーハーそう

ポジショニング

ターゲットセグメントの頭の中の自分たちのサービスと競合サービスの位置づけを理解し、彼らにどんなサービスを提供するかを決める

視覚マップを作成する ユーザにとってのサービスの位置づけマップ。マップ上で近い位置にあるサービスは競争関係になる

視覚マップ上でユーザが重視している方角を見つける

視覚マップはMDSでつくる (発表者がMDSが好きだから) 個体間の距離や非類似関係からマップを構築する

MASSパッケージのisoMDS関数で作成できる

説明変数?


R による自然言語処理入門 a_bickyさん

基礎知識

形態素解析 ざっくりというと単語分割のこと 「お酒」は「お」が接頭詞になる。ただ人によっては「お酒」で一語

「mecab」でできる mecab ハードルは高ければ高いほどくぐりやすい <- 入力する

ベクトル空間モデル 文書をベクトル空間の1点として表現する 素性(そせい feature) のとり方は色々ある

Unigram model

maxsentパッケージ New York Timesの記事のタイトルのデータ N-gram model

文字列処理はPythonでやったほうがやりやすい


ABテスト

AパターンとBパターンを実際に試して結果が良いほうを選ぶ 本当に数値が高いほうを客観的に選べる

検定 起きた結果が偶然なのかを判断する

-> ABテストだけは簡単だが、検定を加えるととたんに難しくなる

A あったらいいなを形にする B 無限の可能性をあなたに

好きなほうのキャッチコピーを選んでください -> AとBを実際に選んでもらって決める

検定 A1 B2

この結果は偶然。どちらか一方が優れているとは言い切れない。 この時点でははっきりしない

「偶然おきる」 A.3打席1安打の3割りバッター B.300打席100安打の3割バッター

Aは偶然かも、Bはすごい binom.test

で検定ができる


ZeroMQ(rzmq)つかうとRやほかの言語間で通信できる


RとPythonによるデータ解析入門

Python から R を呼び出す Webクローラを書く、データベースを操作、文字列処理が楽になる

scikit-learnが物足りない

Pandas Rで言うデータフレームが使える

Webデータ取得 -> csvに整形 -> 前処理 -> R

rpy2 で簡単にPythonとRの連携が非常に楽

pip install rpy2

これらよりjsonでzeroMQ使う方が連携しやすい?

ironpythonを使うほうが良い?

リンク

東京渋谷 “初心者向けiPhoneアプリ開発” 勉強会② (5/22)

東京渋谷 “初心者向けiPhoneアプリ開発” 勉強会② (5/22)

Xcodeを基本から勉強。前は何も知らずに画面遷移をコピペプログラムしただけだったので基本から勉強します。 バージョンは4.6.2。

プロジェクト作成

File -> New -> Project
Master-Detail-Application
Product Name : nicomoro Use Storyboards」「Use Automatic Reference Counting」の二箇所チェック createでデスクトップにフォルダを作成

左側のパネル

  • ファイルの一覧になっている
    パネルに表示されるフォルダの構造と実際のフォルダでは構造が違う
    →Xcode上では違う階層で同じ名前のファイル名も作れるが、コンパイル時にエラーになる。

  • フォルダのルールをできるだけ守る
    プログラムを入れるフォルダ、設定ファイルを入れるフォルダ等予め決められているフォルダのルールにできるだけ従う
    →変なところに作られたファイルは適切な場所に移動させる

左上の方

Runでシミュレーターを実行。横にあるメニューでシミュレーターを選択(iPhone,iPadなど)

右上の方(Editor)

左:通常表示
中:画面分割(ジェントルマンみたいなアイコン)使いっぱなしにしているとおかしくなるので作業が終わったら通常表示に戻すことを意識する
右:差分表示。あまり使わないほうが良い。ストーリーボードを開いている状態で押してしまうと差分が出まくって戻れなくなる

右上の方(View)

左:左側のパネルを出したり引っ込めたり
中:下のパネルを出したり引っ込めたり(実行ログが表示されたりするところ)
右:右側のパネルを出したり引っ込めたり(Identityとか情報が表示されたりするところ)
※ ここは色々いじってもOK

アプリの設定をする画面

左側パネルの一番上の部分をクリックした後、「TARGETS」で目的のアプリを選択
アプリのアイコンの設定とかできる。

Xcode特徴

  • 設定したら反映されるが、削除の場合は反映されないことがある
  • 削除したものを元に戻せるとは限らない(削除対象と関連するものも削除、変更されることがる)
  • 設定でエディタの色も変えられるが変になることがあるのでできるだけ変えないほうが良い

ストーリーボード

  • ビジュアル的に開発できる
  • Xcodeの新しめの機能(参考書などにはまだ載ってないものも多いかも)
  • 左側のパネルの「MainStoryboard.storyboard」をクリックすると表示される

使わないファイルなどを削除

  • ストーリーボードに表示されているものは選択してDeleteキーで消せる
    →その後「Command S」で保存する

  • 使わないmファイルやhファイルを削除
    →「Move to Trash」でゴミ箱に移動しないと、表示されなくなるだけでディレクトリ内にはファイルは残ってしまう。エラーの元になるのでちゃんと消す。

ViewControlerの追加

右下の方にあるところのリストにある「View Controler」を真ん中の画面にドラッグアンドドロップ
→AWSっぽい立方体のアイコンにチェックが入っている状態で表示される(Object library)

リソースを追加

左側のパネルにフォルダやファイルをドラッグアンドドロップ
「Choose options for adding these files」の画面の「Add to targets」で対象のプロジェクトにチェックが入っていることを確認する。

ステータスバーを消す

iPhoneで電波とか時刻とかバッテリー残量とかが表示されているところ

  • アプリの設定をする画面「Status bar」のVisibility「Hide during application launch」にチェックを入れる
  • ストリートボードで対象のView Controlerを選択し、右側のパネルの「Simulated Metrics」のStatus Barを「None」にする

画面を作ってみる

背景画像を配置

右下の方にあるリストの中にある「Image View」を対象のView Controlerにドラッグアンドドロップ
→広い画面で見ていてドラッグアンドドロップができない時は、対象のView Controlerにズームしてからやってみる
選択した状態で、右上の「Image View」のImageに、先ほどリソースを追加した中に入っている背景画像のファイル名を入力する(bg.pngなど)
サイズはGUIでも変更できるし、右上のパネル「View」でWidth,Heightを数値で指定することもできる

キャラクターなど画像を配置

先ほどと同じ要領でキャラクターの画像を配置する

ボタンを配置する

右下の方にあるリストの中にある「Round Rect Bottun」を対象のView Controlerにドラッグアンドドロップ
ダブルクリックするとボタンに表示されている文字を変更できる

もう一つ同じ画面を作ってつないでみる

同じ要領でView Controlerを右側に追加する
→吹き出しのImageや「戻る」ボタンを追加しておく

modal(画面の上に新たに画面を重ねていく画面遷移方法)で左の画面と右の画面をつなぐ

左の画面上に配置したボタンをCtrlを押しながらクリックし、右の画面にドラッグアンドドロップする
メニューが出るので「modal」を選択する

※ここでシミュレータを実行してボタンを押すと、次の画面に遷移する

クラスを作る

戻るボタンを実装するためにクラスを作る

ファイルの作成

File -> New -> File
Objective-C class を選択

  • Class : MainViewControler
  • Subclass of : UIViewControler Targeted for iPadなどのチェックボックスるが外れていることを確認する
    対象のフォルダが選択されていること、対象のプロジェクトにチェックが入っていることを確認してCreate
    同じ要領でClass SubViewControlerを作成する

MainViewControler.mの編集

以下を何処かにコピペ

1
2
3
4
- (IBAction)mainViewReturnActionForSegue:
(UIStoryboardSegue *)segue{
NSLog(@"もどってきた!");
}

MainStoryboardで設定

後の画面に設置した「戻る」ボタンをCtrlを押しながらMainViewの「exit」にドラッグアンドドロップする
→出てきたメニューで先ほど追加した

(第31回)Python Mini Hack-a-thon

おのおのが好きな事を好きなようにやるハッカソン。 実際に自分の手を動かすのは楽しいですね。

ストレージ拡張自動化システム検討

日本人のみ相手に仕事をしている場合は、わからないことがあれば話をしながら進めることができるが、 海外も視野に入れると時差も休日も言語も違い、これを話しながら進めるのは現実的ではない。

Webフォームから値を入力するとバッチ処理で自動的にストレージ(NAS)の拡張ができるシステム構築を目指す。

  • Webサーバ
    Pythonのフレームワークを利用してWebの入力フォームを作成。 NAS名やボリューム名、拡張サイズを入力する。

  • バッチサーバ
    cronなどジョブスケジューラーを利用してWebフォームで入力された値に従ってバッチ処理を行う。
    fabricを利用予定。

  • NAS管理サーバ
    既存のNASを管理しているサーバ。こちらには新たに設定を追加せず、fabricを利用して バッチサーバからssh経由で送られてきたコマンドを自動で実行するようにしたい。

  • NASサーバ
    拡張対象のNASサーバ

バッチサーバ

fabricインストール

Amazon Linuxは以下でインストール可能

1
2
3
4
5
6
sudo su
yum -y install python python-devel gcc
curl http://python-distribute.org/distribute_setup.py | python
curl https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python
pip install fabric fexpect
exit

Python自動実行スクリプト作成

まだfabricは絡んでおらず、printでコマンドを書き出しているのみ。

jsonファイル中身

NAS_param.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[
    {
        "nas": "(NAS Name)",
        "volume": "(Volume Name)",
        "size": "(Volume size)"
    },
    {
        "nas": "nas_backup01",
        "volume": "apache_log",
        "size": "+5g"
    },
    {
        "nas": "nas_backup02",
        "volume": "tomcat_log",
        "size": "+500m"
    },
    {
        "nas": "nas_ecsite01",
        "volume": "item_image",
        "size": "+10g"
    }
]

これを読み込んで処理する。

read_NAS_param.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/python
# coding: utf-8

import json # jsonを扱うため
import sys  # モジュール属性 argv を取得するため

argvs = sys.argv  # コマンドライン引数を格納したリストの取得
argc = len(argvs) # 引数の個数

f = open("NAS_param.json")  # jsonファイルを読み込む
data = json.load(f)         # jsonデータを読み込んだファイルオブジェクトからPythonデータを作成
f.close()                   # ファイルを閉じる

num = len(data)             #ファイル数をカウント

if argc == 2 and argvs[1] == "--help":
  print( "sudo ssh {obj[nas]} vol resize {obj[volume]} {obj[size]}".format(obj = data[0]) )    # ヘルプを表示

if argc == 1:
  for i in range(num)[1:]:     # 配列の2列目から実行
      print( "sudo ssh {obj[nas]} vol resize {obj[volume]} {obj[size]}".format(obj = data[i]) )

 デバッグ等コメントは削除

ハッカソン中は引数が無いとエラーになっていたが、上記のようにargc == 2 andを追加するとうまく実行できるようになった。

以下実行結果

1
2
3
4
5
6
7
fukui-no-MacBook-Air:python_json ftakao2007$ ./read_NAS_param.py --help
sudo ssh (NAS Name) vol create (Volume Name) (Volume size)

fukui-no-MacBook-Air:python_json ftakao2007$ ./read_NAS_param.py
sudo ssh nas_backup01 vol create apache_log 5g
sudo ssh nas_backup02 vol create tomcat_log 500m
sudo ssh nas_ecsite01 vol create item_image 10g

Helpも実行結果も問題なく表示された。

Webサーバ

w3mインストール

動作確認用

1
yum install w3m

Bottle インストール

Djangoが難しかったのでこっちを使ってみた

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
wget https://pypi.python.org/packages/source/b/bottle/bottle-0.11.4.tar.gz
tar zxvf cd bottle-0.11.4.tar.gz
cd bottle-0.11.4
vi hello.py
==============================
from bottle import route, run

@route('/hello')
def hello():
  return "Hello World!"

run(host='localhost', port=8080, debug=True)
==============================
python hello.py &
w3m http://localhost:8080/hello

以下のようにするとPCのWebブラウザからリモートアクセスできた。

1
2
run(host='ec2-XXX-XXX-XXX-XXX.ap-northeast-1.compute.amazonaws.com', port=80, debug=True)
sudo python hello.py  #この場合はsudoで実行

※ 以下挫折中 ※

httpdインストール

1
2
sudo yum -y update
sudo yum -y install httpd

Django インストール

1
2
3
4
5
sudo yum install mod_wsgi
sudo pip install django
sudo mkdir /var/www/html/django
cd /var/www/html/django
sudo django-admin.py startproject mysite

開発用サーバの起動と確認

SGの設定で8080ポートを開けておく

1
2
3
4
5
cd mysite
python manage.py runserver 8080 &
w3m http://127.0.0.1:8080

※ 「It worked!」が出れば成功

〜つづく〜

その他

Zaimの家計簿自動入力スクリプトの作成もやりたかった。現在は認証のとろころで詰まってます。ググって自力でできるかなぁ。 できなかったら、次回はその辺やってみて有識者の知恵を拝借できればと思います。

第17回 granpark.rb 「データ解析技術入門(R言語編)」

第17回 granpark.rb 「データ解析技術入門(R言語編)」

値代入

1
2
3
4
5
6
7
8
> a <- 5
> d <- "abc"

> a
[1] 5

> d
[1] "abc"

代入には「=」も使えるが、Rは慣例的に「<-」を使う。

ベクトル計算

「c」を使う

1
2
3
4
5
6
> a <- c(1,2,3)
> a
[1] 1 2 3
> b <- c(4,5,6)
> a+b
[1] 5 7 9

行列計算

「matrix」を使う
3行4列の行列に1から12までの数値が入っている例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
> matrix(1:12,3,4)
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12

> a <- matrix(1:12,3,4)
> a
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12

> a[1,]
[1]  1  4  7 10

> a[,1]
[1] 1 2 3

> a[1,1]
[1] 1

> a[1,1] * a[1,2]
[1] 4

> a[3,1] * a[1,2]
[1] 12

irisを使ったRの基本的利用方法

アヤメのガクヘン(蕚片)と花びらに関するデータ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
> iris
    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
1            5.1         3.5          1.4         0.2     setosa
2            4.9         3.0          1.4         0.2     setosa
...

> summary(iris)
  Sepal.Length    Sepal.Width     Petal.Length    Petal.Width  
 Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100 
 1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300 
 Median :5.800   Median :3.000   Median :4.350   Median :1.300 
 Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199 
 3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800 
 Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500 
       Species 
 setosa    :50 
 versicolor:50 
 virginica :50 


> sum(iris[,1])  合計
[1] 876.5

> mean(iris[,1]) 平均
[1] 5.843333

> sd(iris[,1])  標準偏差
[1] 0.8280661

> max(iris[,1]) 最大
[1] 7.9

> min(iris[,1]) 最小
[1] 4.3

> str(iris[,1])
 num [1:150] 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...

> str(iris) データに関する情報
'data.frame':     150 obs. of  5 variables:
 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
 $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
 $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
 $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
 $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 …

data.frame…変数の型

図形描画

1
2
3
4
5
> plot(iris[,1],iris[,3])

> plot(iris)

> pairs(iris[1:4], pch=21, bg=c("red", "green3","blue"))

相関を見る

1
2
3
4
5
6
> cor(iris[,1:4])
             Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length    1.0000000  -0.1175698    0.8717538   0.8179411
Sepal.Width    -0.1175698   1.0000000   -0.4284401  -0.3661259
Petal.Length    0.8717538  -0.4284401    1.0000000   0.9628654
Petal.Width     0.8179411  -0.3661259    0.9628654   1.0000000

同じ値は1になる

単回帰分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
> kaiki <- lm(iris$Petal.Length ~ iris$Sepal.Length)
> kaiki

Call:
lm(formula = iris$Petal.Length ~ iris$Sepal.Length)

Coefficients:
      (Intercept)  iris$Sepal.Length 
           -7.101              1.858 

単回帰直線が
y=1.858, x=-7.101
という意味 

> plot(iris$Petal.Length ~ iris$Sepal.Length)

Rの掟

  • for, if, while, repeat, 添字操作は遅くなるのでなるべくやらない

  • 添字操作は添字集合による論理判断させる
    添字一つではなく、ある条件の集合体として操作させる
    →それによってできた添字集合は逐次の論理判断と等価

問題

1
2
3
4
5
6
7
8
9
> x <- runif(1000000)

> test1 <- function() {
+ res <- numeric(1000000)
+ for (i in 1:1000000) res[i] <- exp(x[i])
+ return(res)}
> system.time(test1())
   ユーザ   システム       経過 
     2.089      0.013      2.102 

これを速くする

答え

1
2
3
4
> x <- runif(1000000)
> system.time(res <-exp(x))
   ユーザ   システム       経過 
     0.013      0.002      0.016

できるだけコードを書かずに計算する方法を考えるとだいたい正解

Rメモ

  • C++で実装されている
  • ifやforを使いすぎるとRubyやPerlより遅くなるが、ちゃんとやるとC++くらい速い
    ifやループは使わない事に喜びをおぼえてきたら立派なR使い。
    使うべきところは使ってもよい。

  • エクセルより大きなデータを扱える

  • 拡張パッケージがいろいろある
  • メモリー容量内の範囲で使える
  • 「R」は検索しにくい(Rubyとかのほうがヒットする)
  • メガ、ギガクラスの処理はRでよい →それより大きくなるとHive

  • Rstudioを入れると、WebブラウザでRが使える →エディタや描画や関数など別窓で表示させられる
    →iPadでRが使えるらしい

その他

  • 何かを計算する場合、テールの部分の情報は必要なのかを考えると良い
    データが全部必要なのか、一部あればよいのか考慮することで計算量を少なくすることができる可能性がある

Pythonプロフェッショナルプログラミング

プログラミングをしている時に気になったことを素早く本で調べられるように まとめようと思います。OSなど本書と私の環境は異なっています。

Pythonをはじめよう

Pythonの初期設定についての解説。ここではAmazonLinuxで環境を構築する。

必要パッケージのインストール

必要なものがあれば随時追加していく

1
2
3
4
5
6
7
8
sudo yum -y install python27

[ec2-user@ip-10-148-166-193 ~]$ python -V
Python 2.6.8
[ec2-user@ip-10-148-166-193 ~]$ python27 -V
Python 2.7.3

※ デフォルトは2.6系、明示的にインストールすると2.7系も入る

Zaim

zaimは無料の家計簿サービス。家で一日の収支を家計簿にまとめるのは大変な作業ですが、このサービスを利用すると買い物をした直後にスマートフォンやタブレットで家計簿をつけることができます。その場その場で収支を書き込めるので面倒くさがりの私でも継続的に家計簿をつけることができています。この様なサービスをつくれればつくりたいなと思っていたのですが、zaimという素晴らしいサービスがありましたので利用させていただいています。

固定費入力の自動化

固定費の入力ですが、正直できていません。細かく税金や給料など毎月確認したいなあとは思っているのですが、なかなか腰を据えて入力する気がどうしてもおこらないのです。

そこで、最近勉強し始めたPythonを利用して入力を自動化することを検討してます。 カード会社や銀行のデータをテキストで落としてきて、それを処理してzaimのAPIを利用して入力する方法を考えようと思います。他によい解決方法やよいソフトがあればらそちらを利用してこの開発はストップする可能性もあります。

Zaim developers β

ここにアプリケーションを登録するとConsumer KeyやConsumer Secretなどを得られる

Pythonで操作

ここがすごく参考になりそう。

やったこと

1
2
3
4
5
[mickey@ftakao2007 zaim]$ ./get_access_token.py
Traceback (most recent call last):
  File "./get_access_token.py", line 7, in <module>
    from requests.auth import OAuth1
ImportError: cannot import name OAuth1

このエラーがでていたのでrequestsのバージョンを指定してインストール

1
2
sudo pip uninstall requests
sudo pip install requests==0.14.0
1
2
3
4
5
6
7
8
[mickey@ftakao2007 zaim]$ ./get_access_token.py
Auth link:
Traceback (most recent call last):
  File "./get_access_token.py", line 40, in <module>
    print oauth_requests()
  File "./get_access_token.py", line 28, in oauth_requests
    print "%s?oauth_token=%s" % (authorize_url, request_token["oauth_token"])
KeyError: 'oauth_token'