Enviar pesquisa
Carregar
Listを串刺し
•
4 gostaram
•
1,065 visualizações
Yoshiteru Kamiyama
Seguir
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 42
Baixar agora
Baixar para ler offline
Recomendados
Monadicプログラミング マニアックス
Monadicプログラミング マニアックス
Tomoharu ASAMI
20140920 tokyo r43
20140920 tokyo r43
Takashi Kitano
Tritonn から Elasticsearch への移行話
Tritonn から Elasticsearch への移行話
do_aki
DHT Kademlia
DHT Kademlia
Ryo Yoneyama
Operations research yonezawa_no2
Operations research yonezawa_no2
ssuser0bebd2
Operations research yonezawa_no1
Operations research yonezawa_no1
ssuser0bebd2
헬스로그 상품
헬스로그 상품
Kwangmo Yang
第8回 大規模データを用いたデータフレーム操作実習(2)
第8回 大規模データを用いたデータフレーム操作実習(2)
Wataru Shito
Recomendados
Monadicプログラミング マニアックス
Monadicプログラミング マニアックス
Tomoharu ASAMI
20140920 tokyo r43
20140920 tokyo r43
Takashi Kitano
Tritonn から Elasticsearch への移行話
Tritonn から Elasticsearch への移行話
do_aki
DHT Kademlia
DHT Kademlia
Ryo Yoneyama
Operations research yonezawa_no2
Operations research yonezawa_no2
ssuser0bebd2
Operations research yonezawa_no1
Operations research yonezawa_no1
ssuser0bebd2
헬스로그 상품
헬스로그 상품
Kwangmo Yang
第8回 大規模データを用いたデータフレーム操作実習(2)
第8回 大規模データを用いたデータフレーム操作実習(2)
Wataru Shito
Japan r.3
Japan r.3
Hiroki Matsui
Rによる分類木 入門
Rによる分類木 入門
Hiro47
Rで触れる日本経済~RでVAR編~
Rで触れる日本経済~RでVAR編~
Kazuya Wada
Bee Style:vol.039
Bee Style:vol.039
Tsuyoshi Horigome
Gurobi python
Gurobi python
Mikio Kubo
Tokyo r27
Tokyo r27
Takashi Minoda
Code iq×japanr 公開用
Code iq×japanr 公開用
Nobuaki Oshiro
LLVM最適化のこつ
LLVM最適化のこつ
MITSUNARI Shigeo
how to defend DNS authoritative server against DNS WaterTorture
how to defend DNS authoritative server against DNS WaterTorture
@ otsuka752
RでGIS
RでGIS
Hoshida Yukihisa
R's anti sparseness
R's anti sparseness
ybenjo
[CEDEC2017] LINEゲームのセキュリティ診断手法
[CEDEC2017] LINEゲームのセキュリティ診断手法
LINE Corporation
計算機理論入門09
計算機理論入門09
Tomoyuki Tarumi
10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920
Nobuaki Oshiro
10分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 1101
Nobuaki Oshiro
データ処理
データ処理
Ryunosuke Iwai
姫路 IT 系勉強会 Vol.6 プログラミングコンテストという名のオンラインゲームがあるらしい
姫路 IT 系勉強会 Vol.6 プログラミングコンテストという名のオンラインゲームがあるらしい
Kazkuki Oakamoto
文字列曖昧検索によるマルウェアバイナリ解析
文字列曖昧検索によるマルウェアバイナリ解析
Preferred Networks
Verilog-HDL Tutorial (4)
Verilog-HDL Tutorial (4)
Hiroki Nakahara
[db tech showcase Tokyo 2015] A14:Amazon Redshiftの元となったスケールアウト型カラムナーDB徹底解説 その...
[db tech showcase Tokyo 2015] A14:Amazon Redshiftの元となったスケールアウト型カラムナーDB徹底解説 その...
Insight Technology, Inc.
オイラーの公式で感じる次元の呪い
オイラーの公式で感じる次元の呪い
Yoshiteru Kamiyama
Tokyo.rの輪
Tokyo.rの輪
Yoshiteru Kamiyama
Mais conteúdo relacionado
Semelhante a Listを串刺し
Japan r.3
Japan r.3
Hiroki Matsui
Rによる分類木 入門
Rによる分類木 入門
Hiro47
Rで触れる日本経済~RでVAR編~
Rで触れる日本経済~RでVAR編~
Kazuya Wada
Bee Style:vol.039
Bee Style:vol.039
Tsuyoshi Horigome
Gurobi python
Gurobi python
Mikio Kubo
Tokyo r27
Tokyo r27
Takashi Minoda
Code iq×japanr 公開用
Code iq×japanr 公開用
Nobuaki Oshiro
LLVM最適化のこつ
LLVM最適化のこつ
MITSUNARI Shigeo
how to defend DNS authoritative server against DNS WaterTorture
how to defend DNS authoritative server against DNS WaterTorture
@ otsuka752
RでGIS
RでGIS
Hoshida Yukihisa
R's anti sparseness
R's anti sparseness
ybenjo
[CEDEC2017] LINEゲームのセキュリティ診断手法
[CEDEC2017] LINEゲームのセキュリティ診断手法
LINE Corporation
計算機理論入門09
計算機理論入門09
Tomoyuki Tarumi
10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920
Nobuaki Oshiro
10分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 1101
Nobuaki Oshiro
データ処理
データ処理
Ryunosuke Iwai
姫路 IT 系勉強会 Vol.6 プログラミングコンテストという名のオンラインゲームがあるらしい
姫路 IT 系勉強会 Vol.6 プログラミングコンテストという名のオンラインゲームがあるらしい
Kazkuki Oakamoto
文字列曖昧検索によるマルウェアバイナリ解析
文字列曖昧検索によるマルウェアバイナリ解析
Preferred Networks
Verilog-HDL Tutorial (4)
Verilog-HDL Tutorial (4)
Hiroki Nakahara
[db tech showcase Tokyo 2015] A14:Amazon Redshiftの元となったスケールアウト型カラムナーDB徹底解説 その...
[db tech showcase Tokyo 2015] A14:Amazon Redshiftの元となったスケールアウト型カラムナーDB徹底解説 その...
Insight Technology, Inc.
Semelhante a Listを串刺し
(20)
Japan r.3
Japan r.3
Rによる分類木 入門
Rによる分類木 入門
Rで触れる日本経済~RでVAR編~
Rで触れる日本経済~RでVAR編~
Bee Style:vol.039
Bee Style:vol.039
Gurobi python
Gurobi python
Tokyo r27
Tokyo r27
Code iq×japanr 公開用
Code iq×japanr 公開用
LLVM最適化のこつ
LLVM最適化のこつ
how to defend DNS authoritative server against DNS WaterTorture
how to defend DNS authoritative server against DNS WaterTorture
RでGIS
RでGIS
R's anti sparseness
R's anti sparseness
[CEDEC2017] LINEゲームのセキュリティ診断手法
[CEDEC2017] LINEゲームのセキュリティ診断手法
計算機理論入門09
計算機理論入門09
10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 1101
データ処理
データ処理
姫路 IT 系勉強会 Vol.6 プログラミングコンテストという名のオンラインゲームがあるらしい
姫路 IT 系勉強会 Vol.6 プログラミングコンテストという名のオンラインゲームがあるらしい
文字列曖昧検索によるマルウェアバイナリ解析
文字列曖昧検索によるマルウェアバイナリ解析
Verilog-HDL Tutorial (4)
Verilog-HDL Tutorial (4)
[db tech showcase Tokyo 2015] A14:Amazon Redshiftの元となったスケールアウト型カラムナーDB徹底解説 その...
[db tech showcase Tokyo 2015] A14:Amazon Redshiftの元となったスケールアウト型カラムナーDB徹底解説 その...
Mais de Yoshiteru Kamiyama
オイラーの公式で感じる次元の呪い
オイラーの公式で感じる次元の呪い
Yoshiteru Kamiyama
Tokyo.rの輪
Tokyo.rの輪
Yoshiteru Kamiyama
R language definition3.1_3.2
R language definition3.1_3.2
Yoshiteru Kamiyama
rで踊るパスタ
rで踊るパスタ
Yoshiteru Kamiyama
Rでマンデルブロ集合
Rでマンデルブロ集合
Yoshiteru Kamiyama
黄金比.再帰
黄金比.再帰
Yoshiteru Kamiyama
医療費ts
医療費ts
Yoshiteru Kamiyama
Mais de Yoshiteru Kamiyama
(7)
オイラーの公式で感じる次元の呪い
オイラーの公式で感じる次元の呪い
Tokyo.rの輪
Tokyo.rの輪
R language definition3.1_3.2
R language definition3.1_3.2
rで踊るパスタ
rで踊るパスタ
Rでマンデルブロ集合
Rでマンデルブロ集合
黄金比.再帰
黄金比.再帰
医療費ts
医療費ts
Listを串刺し
1.
listを串刺し
manozo Tokyo.R#25 LT 2012.8.4 付け⾜し2012.8.19(@dichika⽒に感謝) さらに付け⾜し2012.8.21(@kos59125⽒に感謝)
2.
リストを串刺したい • ネットで検索するも⾒つからず –
「Rのリストを串刺し」 • RjpWikiに質問しようとしたが... • 考えてみた 2
3.
リストを串刺したい • 材料(順不同) –
unlist() リストをベクトル化 – apply() 要素に対して関数を適⽤ – NROW() ⾏数を得る – lapply() リストのapply – index() xtsから⽇付 – dim() ディメンジョン – dimnames() 名前をつける 3
4.
リストのapply ×
apply(list, 1:2, sum) •リストは何でも詰められる •vector,data.frame,matrix,list何でも •ファイリングみたいなもの •しかし、いきなりapplyはダメだった。 4
5.
リストのapply • リストを串刺しにしてやりたい
5
6.
練 習
> a , , z1 > (a<‐1:12) #①ベクトル [1] 1 2 3 4 5 6 7 8 9 10 11 12 y1 y2 > dim(a)<‐c(2, 2, 3) #②ディメンジョン x1 1 3 > dimnames(a)<‐list(c("x1", "x2"), #③名札をつける x2 2 4 c("y1", "y2"), c("z1", "z2", "z3")) , , z2 y1 y2 > apply(a, 1:2, sum) #x:1, y:2, z:3 x1 5 7 z x2 6 8 y1 y2 2:3 x1 15 21 , , z3 x2 18 24 串刺し! x 1:2 y1 y2 x1 9 11 c(1,3) 6 x2 10 12 y
7.
戦 略 1. unlist()
– リストをベクター化 2. dim() – オブジェクトの次元を設定 3. dimnames() – オブジェクトの次元名を設定 7
8.
実 際 • library(RFinanceYJ)を使う
– Tokyo.R勉強会の主催者作 – 某サイトから株価を抜くすばらしい ライブラリ • library(quantmod) – ロウソク⾜とか描けるライブラリ • 医薬品銘柄の株価を抜いてscaleして a[, , x["持田製薬"]] Last 891 [2012-01-04/2012-07-18] sumしてみる 950 900 850 25 Volume (10,000s): 20 188,000 15 10 5 1 04 2012 1 31 2012 2 21 2012 3 13 2012 4 03 2012 4 24 2012 5 22 2012 8 6 12 2012 7 03 2012
9.
準 備 • 東証のコードは? –
東証上場銘柄⼀覧 • http://www.tse.or.jp/market/data/listed_companies/ – エクセルで⼿に⼊る 9
10.
東証上場銘柄⼀覧 • コードと社名の対をゲット ⽇付 コード 銘柄名 33業種コード 33業種区分 17業種コード 17業種区分 規模コード 規模区分
10
11.
東証コードの読み込み • エクセルからコピーして code <‐ read.delim("clipboard")
# windowsの⽅ 秘密:コードには".t"をつけないとダメ code[,1] <‐ paste(code[,1], ".t", sep="") 11
12.
例「医薬品」 > code
コード 銘柄名 1 4151.t 協和発酵キリン 2 4502.t 武⽥薬品⼯業 3 4503.t アステラス製薬 4 4506.t ⼤⽇本住友製薬 5 4507.t 塩野義製薬 6 4508.t ⽥辺三菱製薬 7 4512.t わかもと製薬 8 4514.t あすか製薬 9 4516.t ⽇本新薬 10 4519.t 中外製薬 > NROW(code) [1] 36 12
13.
⼀気にいただく • リストに格納 library(RFinanceYJ) drug<‐list()
#リストにxtsオブジェクトを for(i in code[,1]) drug[[i]]<‐quoteStockXtsData(i, '2012‐01‐01') # これだけで1/1から今⽇までの株価をいただける リストdrugに医薬品銘柄37社の株価を詰める 13
14.
想像してください > head(drug[[1]])
Open High Low Close Volume Adjusted 2012‐01‐04 944 953 942 945 1100000 945 2012‐01‐05 945 948 933 940 1200000 940 2012‐01‐06 938 940 921 928 971000 928 2012‐01‐10 927 936 915 918 1075000 918 2012‐01‐11 915 915 904 912 1770000 912 2012‐01‐12 912 913 902 907 1273000 907 ... > class(drug[[1]]) [1] "xts" "zoo" 東証医薬品銘柄のリスト 14
15.
条 件 • みな同じサイズでなくてはならない
– ベクターにしてdimするので • 「練習」を思い出してください > table(unlist(lapply(drug, NROW))) 127 133 134 135 ⾏数が揃っていない 1 1 1 34 cnd<‐unlist(lapply(drug, NROW)==135 drug2<‐drug[cnd] 135×6だけのテーブルを選ぶ(34銘柄) x:135,y:6,z:34 覚えておいて下さい 15
16.
unlistしてベクトル化 drug.un<‐unlist(drug2)
16
17.
dim()を設定 dim(drug.un) <‐ c(135, 6, 34)
17
18.
dimnames()の準備 • ⽇付(x)
date<‐index(drug[[1]]) x<‐as.character(date) • カラム名(y) y<‐colnames(drug[[1]]) names(y)[6]<‐"Adjusted" • 銘柄名(z) z<‐names(code[,2][cnd]) 18
19.
dimnames()の設定 • まとめて名札つけ dimnames(drug.un)<‐list(x, y, z)
19
20.
串刺し! apply(drug.un, 1:2, sum)
20
21.
34銘柄を串刺し(合計) > head(apply(drug.un,1:2,sum))
Open High Low Close Volume Adjusted 2012‐01‐04 62854 63544 62272 62875 20776300 62875 2012‐01‐05 62776 63002 62244 62506 16002200 62506 2012‐01‐06 62465 62697 61728 61941 18870100 61941 2012‐01‐10 62196 62901 61773 62100 18066600 62100 2012‐01‐11 62166 62385 61595 62016 18269400 62016 2012‐01‐12 61776 61981 60980 61298 18377500 61298 ... 21
22.
グラフ library(quantmod) candleChart(apply(drug.un, 1:2, sum))
22
23.
apply(apply(a, 1:2, sum),
1:2, sum) [2012-01-04/2012-07-18] Last 68741 68000 66000 64000 62000 50 Volume (millions): 40 22,635,200 30 20 23 1 04 2012 1 31 2012 2 21 2012 3 13 2012 4 03 2012 4 24 2012 5 22 2012 6 12 2012 7 03 2012
24.
お断り • 株についてはド素⼈ –
合計してどんな意味があるか知らない – あくまでも練習 – 経済学は学んだことがない 24
25.
まとめ • リストにガンガンデータ格納 –
プログラミングの幅が広がる – 操作はその後からで⼤丈夫そう • ベクトルにしてからお好きなように • 勘で何となくできるようになるみたい 25
26.
終わって... 「plyrでできるんじゃね?」
ご⽰唆いただく 2012.8.19追加 26
27.
考えた • 正確には指を動かした • やっと思いついたのが
– laply(list, "[") 27
28.
結 論 • できた
28
29.
こんな感じ • リストに行列を入れる
> lst [[1]] [,1] [,2] [,3] [1,] 1 4 7 lst <‐ list() [2,] 2 5 8 [3,] 3 6 9 mat<‐matrix(1:9, 3) [[2]] [,1] [,2] [,3] for(i in 1:3) [1,] 1 4 7 [2,] 2 5 8 lst[[i]] <‐ mat [3,] 3 6 9 [[3]] [,1] [,2] [,3] [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9 29
30.
こいつにlaply() • 配列にする
> laply(lst,"[") , , 1 laply(lst, "[") 1 2 3 [1,] 1 2 3 [2,] 1 2 3 [3,] 1 2 3 , , 2 1 2 3 [1,] 4 5 6 [2,] 4 5 6 [3,] 4 5 6 , , 3 1 2 3 [1,] 7 8 9 [2,] 7 8 9 [3,] 7 8 9 30
31.
apply()で串刺し > apply(laply(lst, "["), 2:3, sum) 1 2 3
> lst [[1]] 1 3 12 21 [,1] [,2] [,3] [1,] 1 4 7 2 6 15 24 [2,] 2 5 8 [3,] 3 6 9 3 9 18 27 [[2]] [,1] [,2] [,3] [1,] 1 4 7 [2,] 2 5 8 めでたくsumになっている [3,] 3 6 9 [[3]] [,1] [,2] [,3] [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9 31
32.
laplyを使ってもう⼀度 #ライブラリーのロード library(RFinanceYJ) library(quantmod) # 銘柄コードで株価をget! for(i in code[,1]) drug[[i]] <‐
quoteStockXtsData(i, '2012‐01‐01') cnd <‐ lapply(drug,NROW)#条件 drug2 <‐ drug[cnd == max(unlist(cnd))]# ⾏数すなわち⽇数が同じもので揃える(155⽇分) drug.sc<‐lapply(drug2,scale)# scaleする(基準化)mean=0, SD=1 drug3 <‐ laply(drug.sc, "[") tmp <‐ drug[[1]] # dimnamesをつけるため0の⾏列を⽤意 スッキリ! tmp[] <‐ 0 drug4 <‐ tmp + apply(drug3, c(2, 3), sum) 32
33.
drug4 > head(drug4)
Open High Low Close Volume AdjClose 2012‐01‐04 ‐11.11693 ‐8.891408 ‐10.94261 ‐9.86077 0.2462292 ‐9.86077 2012‐01‐05 ‐10.86592 ‐13.342024 ‐11.06719 ‐13.14939 ‐18.8736414 ‐13.14939 2012‐01‐06 ‐13.80675 ‐16.476652 ‐16.55394 ‐18.72217 ‐13.2619929 ‐18.72217 2012‐01‐10 ‐16.88440 ‐15.568659 ‐16.44554 ‐17.52046 ‐12.5594417 ‐17.52046 2012‐01‐11 ‐16.64755 ‐19.320562 ‐16.82423 ‐17.96469 ‐18.4883136 ‐17.96469 2012‐01‐12 ‐20.46076 ‐23.494666 ‐24.94043 ‐26.42570 ‐10.0137024 ‐26.42570 > names(drug4)[6] [1] "AdjClose" > names(drug4)[6]<‐"Adjusted" > candleChart(drug4) 4⽉に薬価引き下げが あるものの6⽉には復帰 33
34.
Height
0 5 10 15 20 大塚ホールディングス 生化学工業 キョ ン製薬ホールディ ーリ ングス あすか製薬 キッ 薬品工業 セイ ゼリア新薬工業 大幸薬品 日医工 ツムラ 協和発酵キリン 大日本住友製薬 科研製薬 エーザイ 東和薬品 第一三共 日水製薬 小野薬品工業 鳥居薬品 dist(drug3[, , 1]) 富士製薬工業 hclust (*, "complete") 日本ケミ ァ フ 樹形図 Cluster Dendrogram 中外製薬 ダ ト イ 栄研化学 沢井製薬 日本新薬 持田製薬 3つぐらいのクラスタになっているようだ。 田辺三菱製薬 武田薬品工業 塩野義製薬 大正製薬ホールディングス 同じような株価の動きをするものがクラスタをつくる アステラス製薬 久光製薬 扶桑薬品工業 34
35.
樹形図スクリプト # 名前をつける > dimnames(drug3)[[1]] <‐ names(drug2) > dimnames(drug3)[[2]] <‐ as.character(index(drug2[[1]])) # 樹形図を描く > plot(hclust(dist(drug3[,,1])))
#↑Open > dimnames(drug3)[[3]] [1] "Open" "High" "Low" "Close" "Volume" "AdjClose" 株価に関係なく値動きだけが近いものがクラスタをつくる (近いクラスタのものはどちらか売るとリスクヘッジ?) 35
36.
おまけ • xtsExtraライブラリを使って # 画⾯に表⽰しきれないのでpdfに pdf("open.pdf", w=8, h=20, family="Japan1GothicBBB") plot.xts(t(drug3[,,1])) dev.off() • 株価のヒストグラム # 株価は正規分布する? hist(drug3[,,1], freq=F, ylim=c(0, 0.4)) plot(dnorm, xlim=c(‐3, 3), add=T, col=2)
36
37.
さらに パッケージ使わなくても Reduce("+", lst, 0) でいけるんじゃないかと。
2012.8.21追加 37
38.
さらにさらに • kos59125 思いついちゃいました。微妙な違いですが演算
⼦を与える場合は普通の⽂字列 ("+") じゃなく てバッククォート (`+`) の⽅が良いみたいですね。 ⽂字列を与えると対応する関数 (+) を探すのに 微妙に時間がかかるようなので。 • 0 は初期値です。省略したら最初の要素になる みたいですね。この場合は省略できます。 38
39.
Reduceで⼀発! drug.sc <‐ lapply(drug2, scale)# scaleする(基準化)mean=0, SD=1 drug3 <‐ laply(drug.sc, "[") tmp <‐
drug[[1]] # dimnamesをつけるため0の⾏列を⽤意 tmp[] <‐ 0 drug4 <‐ tmp + apply(drug3, c(2, 3), sum) ↑これが1⾏になりました Reduce(`+`, lapply(drug2, scale)) エレガンツ! 39 dimnamesもとれない
40.
Reduceのイメージ • Rubyでいうとinject –
reduceはinjectのエイリアス – [1, 2, 3, 4, 5].inject(:+) # => 15 + + + + 間に差し込む感じ •R pstp <‐ function(x, y)paste(x, y, sep="+") Reduce(pstp, 1:5) [1] "1+2+3+4+5" pasteして eval(parse(text=Reduce(pstp, 1:5))) [1] 15 エバっみる 40
41.
とりあえずの総括 • リストの勉強になった • plyrを使ってリストを配列にできた
– 切り出しができるようになった – @dichika⽒に感謝 • リストの串刺しにはReduceで⼗分だった – ⼆項演算⼦が使える – @kos59125⽒に感謝 41
42.
参 考 • Rパッケージガイドブック
– RfinanceYJ, plyrパッケージの解説あり – http://www.tokyo‐tosho.co.jp/books/ISBN978‐4‐489‐02097‐1.html • RfinanceYJ – http://www.okada.jp.org/RWiki/?RFinanceYJ%A5%B5%A5%F3%A5%D7%A5%EB – http://d.hatena.ne.jp/yokkuns/20110324/1300922162 • plyrパッケージの使い⽅メモ – http://d.hatena.ne.jp/teramonagi/20120806/1344255419 • quantmod – youtubeあり – http://www.youtube.com/watch?v=byymvwQye7E 42 以上
Baixar agora