2008年12月27日土曜日

Power Law:(38)STOCK:Scripts by R

(2008/12/18-)

[0]前提, Precondition
Excelによる手作業で、業界内株価のべき乗傾向を探っていた作業を
Rにより自動化に近づける。
基本的に、Excelを使用しないで、処理を行う。
In the hand work by Excel, work to search for the Power Law tendency
to stock prices in the industry is brought close to the automation by R.
Basically, it processes it without using Excel.

~~~
[1]処理の流れ, Flow of processing

1)日単位の株価をネットから入手する。
Stock prices each every day are obtained from the net.

2)対象とする業界の銘柄のみを抜き出す。
:今回、終値を使用する。
Only the brand of the industry that targets it is pulled out.
:This time, the closing share price is used.

3)銘柄の時価総額を計算するために、発行済み株式総数を用意する。
To calculate the aggregate market value of the brand, the all issued stocks are prepared.

4)終値の時価総額を計算し、時価総額の大きい順番に並べ替える。
:後から順位の推移をチェックするために、ファイル出力する。
The aggregate market value of the closing share price is calculated, and
aggregate market value permutes it in large the order.
:To check the transition of the order later, the file output is done.

5)線形近似で、R^2の最大となる順位を求める。
The order that becomes the maximum of R^2 is requested by a linear approximation.

6)求めた順位での線形近似式から、べき乗傾向のA,B値を求める。
A and B value of the Power Law tendency are requested from the linear
approximation type in the requested order.

7)対象期間の日ごとに、上記の処理を繰り返す。
The above-mentioned processing is repeated day in and day out in the period covered.

~~~
[2]詳細処理内容, Content of detailed processing

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[2-1]日単位の株価をネットから入手する。
Stock prices each every day are obtained from the net.

:以下のサイトから入手する。
It obtains it from the following sites.

STOCK:(6)Data in NET
http://humanbeing-etcman.blogspot.com/2008/12/stock6data-in-net.html


[株価データ倉庫]
http://www.geocities.co.jp/WallStreet-Stock/9256/data.html

日足株価データ
2008年株価データ
http://www.geocities.co.jp/WallStreet-Stock/9256/data2008.htm

:2008/12/12のデータは、ファイル:y081212.txt になる。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[2-2]対象とする業界の銘柄のみを抜き出す。
:今回、終値を使用する。
Only the brand of the industry that targets it is pulled out.
:This time, the closing share price is used.

:[2-1]のファイルから、grepを使用して抜き出す。
Grep is used and pulled out from the file of 2-1.

STOCK:(6)Data in NET
http://humanbeing-etcman.blogspot.com/2008/12/stock6data-in-net.html

[食品の場合, For Foods]
grep-foods-69.bat stock-price-file-targeted-date
Ex) grep-foods-69 y081212.txt
:ファイル:output-foods-y081212.txt.txt を出力する。

[電機の場合, For Electric Appliances]
grep-denki-161.bat stock-price-file-targeted-date
Ex) grep-denki-161 y081212.txt
:ファイル:output-denki-y081212.txt.txt を出力する。

---
[ファイル変換, File translation]
1)見出しを挿入する。Finding is inserted.

code,name,hajimene,takane,yasune,owarine,dekidaka

===
番外メモ)
銘柄コード,名称,始値,高値,安値,終値,出来高
===

2)区切り文字をタグからカンマに切り替える。
The delimiter is switched from tag to the comma.

[前, before]
2001 日本製粉 469 473 450 461 690

[後, after]
2001,日本製粉,469,473,450,461,690

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[2-3]銘柄の時価総額を計算するために、発行済み株式総数を用意する。
To calculate the aggregate market value of the brand, the all issued stocks are prepared.
---
:以下のデータを使用する。
The following data is used.

Power Law:(34)STOCK,Aggregate market value,時価総額
http://humanbeing-etcman.blogspot.com/2008/12/power-law34stockaggregate-market-value.html

:データを以下のファイルに保存するものとする。
Preserve data in the following files.

[発行済み株式数:食品の場合, Issued shares for Foods]
file:Issued_shares_for_foods-20081217.txt
===
code,name,issued_shares,unit
2001,日本製粉,174148,1000
2002,日清製粉,251535,500
2003,日東製粉,46924,1000
...
===

[発行済み株式数:電機の場合, Issued shares for Electric Appliances]
file:Issued_shares_for_denki-20081217.txt
===
code,name,issued_shares,unit
4062,イビデン,150852,100
...
===
---
「R,Tips]
発行済み株式総数をファイルから読み込み、テーブルで保持。テーブル内検索する。
例)食品、銘柄=2002の発行済み株式総数を得る。

> Issued_Shares = read.csv("Issued_shares_for_foods-20081217.txt")
> Issued_Shares$issued_shares[Issued_Shares$code == 2002]
[1] 251535
>

---
ネットから最新の発行済み株式総数をまとめて得る手段をチェック要!TODO)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[2-4]終値の時価総額を計算し、時価総額の大きい順番に並べ替える。
:後から順位の推移をチェックするために、ファイル出力する。
The aggregate market value of the closing share price is calculated, and
aggregate market value permutes it in large the order.
:To check the transition of the order later, the file output is done.

---
[2-4-1]時価総額の計算, Calculation of aggregate market value

Issued_Shares = read.csv("Issued_shares_for_foods-20081217.txt")
Stock = read.csv("output-foods-y081212.txt.txt")

jika = c()
for(i in 1:length(Stock$code)){
jika[i] = Stock$owarine[i] * as.numeric(Issued_Shares$issued_shares[Issued_Shares$code == Stock$code[i]])
}
jika

> jika
[1] 80282228 271154730 13467188 53472400 19787360 22241320
[7] 10503596 15895064 6181422 95420000 5183200 37394464
[13] 50150118 51209361 157298280 30060286 146308600 40063260
[19] 23130863 282843372 4468464 11007600 153616434 101773670
[25] 87622065 308194320 38371203 274590890 66302145 6326100
[31] 35517504 32670540 22942548 199743297 747623956 1065237656
[37] 106237600 14297748 24465087 27720000 45683268 20560880
[43] 215806692 58860000 39351375 114927120 34909056 7679542
[49] 3524100 81642669 108760698 56126570 205754574 659431086
[55] 184692420 175854094 148728181 14056000 44587431 122475294
[61] 293280245 419356560 32803389 39191040 15617404 3110000000
[67] 25953186 11012188 10306875
>

---
[2-4-2]時価総額の降順ソート, Descending order sorting of aggregate market value
:ソート前の配列位置を記憶。The position where it arranges before it sorts it is memorized.
:降順がないので、昇順にして反転した。
Because there was no descending order, it made in ascending order and it reversed.

jika_new = rev(sort(jika))
jika_old = rev(order(jika))

> jika_new
[1] 3110000000 1065237656 747623956 659431086 419356560 308194320
[7] 293280245 282843372 274590890 271154730 215806692 205754574
[13] 199743297 184692420 175854094 157298280 153616434 148728181
[19] 146308600 122475294 114927120 108760698 106237600 101773670
[25] 95420000 87622065 81642669 80282228 66302145 58860000
[31] 56126570 53472400 51209361 50150118 45683268 44587431
[37] 40063260 39351375 39191040 38371203 37394464 35517504
[43] 34909056 32803389 32670540 30060286 27720000 25953186
[49] 24465087 23130863 22942548 22241320 20560880 19787360
[55] 15895064 15617404 14297748 14056000 13467188 11012188
[61] 11007600 10503596 10306875 7679542 6326100 6181422
[67] 5183200 4468464 3524100
> jika_old
[1] 66 36 35 54 62 26 61 20 28 2 43 53 34 55 56 15 23 57 17 60 46 51 37
[24] 24 10 25 50 1 29 44 52 4 14 13 41 59 18 45 64 27 12 31 47 63 32 16
[47] 40 67 39 19 33 6 42 5 8 65 38 58 3 68 22 7 69 48 30 9 11 21 49
>

---
[2-4-3]以下のデータセットを作成。The following data sets are made.
:code,date,name,order,jika
:銘柄コード,日付,名称,時価総額の降順,時価総額
:"Brand code","date","name","Descending order of aggregate market value","Aggregate market value"

code_new = c()
name_new = c()
order_new = c()

# 銘柄の順位推移をチェックするために、日付を埋め込む。
# To check the order transition of the brand, the date is buried.
yyyymmdd = "20081212"

for(i in 1:length(jika_new)){
code_new[i] = Stock$code[jika_old[i]]
name_new[i] = as.character(Stock$name[jika_old[i]])
order_new[i] = i
}
Stock_new = data.frame(code=code_new, date=yyyymmdd, name=name_new, order=order_new, jika=jika_new)
Stock_new

> Stock_new
code date name order jika
1 2914 20081212 JT 1 3110000000
2 2503 20081212 キリン 2 1065237656
3 2502 20081212 アサヒ 3 747623956
4 2802 20081212 味の素 4 659431086
5 2897 20081212 日清食品 5 419356560
6 2267 20081212 ヤクルト 6 308194320
7 2875 20081212 東洋水産 7 293280245
8 2212 20081212 山崎製パン 8 282843372
9 2282 20081212 日本ハム 9 274590890
10 2002 20081212 日清製粉 10 271154730
11 2579 20081212 北九州コカ 11 215806692
12 2801 20081212 キッコマン 12 205754574
13 2501 20081212 サッポロ 13 199743297
14 2809 20081212 キユーピー 14 184692420
15 2810 20081212 ハウス食品 15 175854094
16 2202 20081212 明治製菓 16 157298280
17 2261 20081212 明治乳業 17 153616434
18 2811 20081212 カゴメ 18 148728181
19 2206 20081212 江崎グリコ 19 146308600
20 2871 20081212 ニチレイ 20 122475294
21 2593 20081212 伊藤園 21 114927120
22 2607 20081212 不二製油 22 108760698
23 2531 20081212 宝ホールディ 23 106237600
24 2262 20081212 雪印乳業 24 101773670
25 2059 20081212 ユニチャーム 25 95420000
26 2264 20081212 森永乳業 26 87622065
27 2602 20081212 日清オイリオ 27 81642669
28 2001 20081212 日本製粉 28 80282228
29 2284 20081212 伊藤ハム 29 66302145
30 2580 20081212 コカコーラセ 30 58860000
31 2613 20081212 J-オイルミ 31 56126570
32 2004 20081212 昭和産業 32 53472400
33 2201 20081212 森永製菓 33 51209361
34 2109 20081212 三井製糖 34 50150118
35 2572 20081212 三国コカ 35 45683268
36 2815 20081212 アリアケ 36 44587431
37 2207 20081212 名糖産業 37 40063260
38 2590 20081212 ダイドードリ 38 39351375
39 2908 20081212 フジッコ 39 39191040
40 2281 20081212 プリマハム 40 38371203
41 2108 20081212 日本甜菜糖 41 37394464
42 2288 20081212 丸大食品 42 35517504
43 2594 20081212 キーコーヒ 43 34909056
44 2899 20081212 永谷園 44 32803389
45 2290 20081212 米久 45 32670540
46 2204 20081212 中村屋 46 30060286
47 2540 20081212 養命酒製造 47 27720000
48 2918 20081212 わらべや日洋 48 25953186
49 2536 20081212 メルシャン 49 24465087
50 2211 20081212 不二家 50 23130863
51 2292 20081212 SFOODS 51 22942548
52 2051 20081212 日本農産工 52 22241320
53 2578 20081212 四国コカ 53 20560880
54 2009 20081212 鳥越製粉 54 19787360
55 2053 20081212 中部飼料 55 15895064
56 2910 20081212 ロックフィ 56 15617404
57 2533 20081212 オエノンホー 57 14297748
58 2812 20081212 焼津水産化学 58 14056000
59 2003 20081212 日東製粉 59 13467188
60 2922 20081212 なとり 60 11012188
61 2217 20081212 モロゾフ 61 11007600
62 2052 20081212 協同飼料 62 10503596
63 4404 20081212 ミヨシ油脂 63 10306875
64 2597 20081212 ユニカフェ 64 7679542
65 2286 20081212 林兼産業 65 6326100
66 2056 20081212 日配合飼料 66 6181422
67 2107 20081212 東洋精糖 67 5183200
68 2215 20081212 第一パン 68 4468464
69 2599 20081212 ジャパンフー 69 3524100
>

---
[2-4-4]ファイル出力, File output
:データセット:Stock_new をcsvファイルに出力する。
The data set: Stock_new is output to the csv file.

write.table(Stock_new, "stock_output.txt", quote=F, col.names=T, append=F, sep=",", row.names=FALSE)

file:stock_output.txt
===
code,date,name,order,jika
2914,20081212,JT,1,3.11e+09
2503,20081212,キリン,2,1065237656
2502,20081212,アサヒ,3,747623956
2802,20081212,味の素,4,659431086
2897,20081212,日清食品,5,419356560
2267,20081212,ヤクルト,6,308194320
...
===

---
[2-4-5][2-4]のスクリプトを整理する。The script of 2-4 is arranged.

# files
FILE_PATH_BASE = "C:/PowerLaw38"
FILE_Issued_Shares = paste(FILE_PATH_BASE, "Issued_shares_for_foods-20081217.txt", sep = "/")
FILE_Stock = paste(FILE_PATH_BASE, "output-foods-y081212.txt.txt", sep = "/")
FILE_Output = paste(FILE_PATH_BASE, "output-foods-jika-20081212.txt", sep = "/")
yyyymmdd = "20081212"

# Calculation of aggregate market value
Issued_Shares = read.csv(FILE_Issued_Shares)
Stock = read.csv(FILE_Stock)

jika = c()
for(i in 1:length(Stock$code)){
jika[i] = Stock$owarine[i] * as.numeric(Issued_Shares$issued_shares[Issued_Shares$code == Stock$code[i]])
}

# Descending order sorting of aggregate market value
jika_new = rev(sort(jika))
jika_old = rev(order(jika))

# data sets:Stock_new are made.
code_new = c()
name_new = c()
order_new = c()

for(i in 1:length(jika_new)){
code_new[i] = Stock$code[jika_old[i]]
name_new[i] = as.character(Stock$name[jika_old[i]])
order_new[i] = i
}
Stock_new = data.frame(code=code_new, date=yyyymmdd, name=name_new, order=order_new, jika=jika_new)

# File output
write.table(Stock_new, FILE_Output, quote=F, col.names=T, append=F, sep=",", row.names=FALSE)

---
[R,Tips]
1)型変換:as.numeric
http://cse.naro.affrc.go.jp/takezawa/r-tips/r/25.html

2)sort
http://www.is.titech.ac.jp/~shimo/class/doc/r-tips.pdf
p.34)
rev() 要素を逆順
sort() 昇順整列

3)ファイル出力
http://cse.naro.affrc.go.jp/takezawa/r-tips/r/45.html
> x <- read.csv("input.txt")
> x
name num date
1 aa1 100 20081225
2 aa2 200 20081226
> write.table(x, "output.txt", quote=F, col.names=F, append=T)
>
output.txt
===
1 aa1 100 20081225
2 aa2 200 20081226
===
> write.table(x, "output.txt", quote=F, col.names=T, append=F, sep=",")
output.txt
===
name,num,date
1,aa1,100,20081225
2,aa2,200,20081226
===
http://pbil.univ-lyon1.fr/library/base/html/write.table.html
> write.table(x, "output.txt", quote=F, col.names=T, append=F, sep=",", row.names=FALSE)
output.txt
===
name,num,date
aa1,100,20081225
aa2,200,20081226
===

4)文字列連結
http://cse.naro.affrc.go.jp/takezawa/r-tips/r/17.html

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[2-5]線形近似で、R^2の最大となる順位を求める。
The order that becomes the maximum of R^2 is requested by a linear approximation.

:以下を参照。Refer to the following.
Power Law:(36)R,Linear approximation,線形近似(2)
http://humanbeing-etcman.blogspot.com/2008/12/power-law36rlinear-approximation2.html

kinji_r2 = c()
kinji_a = c()
kinji_b = c()

for (i in 3:length(Stock_new$order)){

stock_log_order = log(Stock_new$order[1:i])
stock_log_jika = log(Stock_new$jika[1:i])
stock_loglog = data.frame(LN_order=stock_log_order, LN_jika=stock_log_jika)

result = summary(result <- lm(LN_jika ~ LN_order, data = stock_loglog))

kinji_r2[i] = result$r.squared
kinji_b[i] = result$coefficients[1]
kinji_a[i] = result$coefficients[2]
}
kinji_ALL = data.frame(KINJI_A=kinji_a, KINJI_B=kinji_b, KINJI_R2=kinji_r2)

---
:R^2の最大値の取得は、以下を参照。
:Refer to the acquisition of the maximum value of R^2 as follows.
Power Law:(37)R,Linear approximation,線形近似(3)
http://humanbeing-etcman.blogspot.com/2008/12/power-law37rlinear-approximation3.html

base_order = 2
start_order = 3
end_order = length(kinji_ALL$KINJI_R2)
max_order = which.max(kinji_ALL$KINJI_R2[start_order:end_order]) + base_order
max_r2 = kinji_ALL$KINJI_R2[max_order]
max_order
max_r2

> max_order
[1] 28
> max_r2
[1] 0.984492
>

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[2-6]求めた順位での線形近似式から、べき乗傾向のA,B値を求める。
A and B value of the Power Law tendency are requested from the linear
approximation type in the requested order.

getAB = function(cnt){
ret_a = c()
ret_b = c()

x0 = 1
y0 = exp(kinji_ALL$KINJI_B[cnt])

x1 = cnt
y1 = exp(kinji_ALL$KINJI_A[cnt] * log(cnt) + kinji_ALL$KINJI_B[cnt])

B = y0 / y1
A = -log10(B) / log10(x1)

ret_a[1] = A
ret_b[1] = B

ret_val = data.frame(A=ret_a, B=ret_b)

return(ret_val)
}

> getAB(28)
A B
1 -0.9994923 27.95267
>

---
:検算してみる。Answer is checked.

> kinji_ALL
KINJI_A KINJI_B KINJI_R2
28 -0.9994923 21.60502 0.9844921

LN(y) = -0.9994923*LN(x) + 21.60502, R^2=0.9844921

LN
(x, y)=(1, exp(21.60502))(28, exp(-0.9994923*LN(28) + 21.60502))
=(1, 2415132529)(28, 86400779)
Relative value)
=(1, 2415132529/86400779)(28, 1)
=(1, 27.952670762378195687332865366874)(28, 1)

:OK! Aは1に近かった、、、:A was near one.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[2-7]対象期間の日ごとに、上記の処理を繰り返す。
The above-mentioned processing is repeated day in and day out in the period covered.

---
[2-7-0]前提, Precondition
1)各ファイルは、ベースディレクトリから以下にあるものとする。
Each file assumed to be in the following from the base directory.

発行済み株式総数(input), All issued stocks
:is/Issued_shares_for_foods-20081217.txt

日別株価データ(input), Stock prices data according to day
:stock/stock-yyyymmdd.txt

日別時価総額データ(output), Aggregate market value data according to day
:jika/jika-yyyymmdd.txt

2)処理する日は、ベースディレクトリにある以下のファイルから読み込む。
The processed day is read from the following files that exist in the base directory.

yyyymmdd.txt
===
date,week
20081211,Thu
20081212,Fri
20081215,Mon
...
===

---
###########
# getAB()
###########
getAB = function(cnt, kinji_a, kinji_b){
x0 = 1
y0 = exp(kinji_b)

x1 = cnt
y1 = exp(kinji_a * log(cnt) + kinji_b)

B = y0 / y1
A = -log10(B) / log10(x1)

ret_val = data.frame(A=A, B=B)
return(ret_val)
}

###########
# getR2Max()
###########
getR2Max = function(Stock_Jika){

kinji_r2 = c()
kinji_a = c()
kinji_b = c()

for (i in 3:length(Stock_Jika$order)){

stock_log_order = log(Stock_Jika$order[1:i])
stock_log_jika = log(Stock_Jika$jika[1:i])
stock_loglog = data.frame(LN_order=stock_log_order, LN_jika=stock_log_jika)

result = summary(result <- lm(LN_jika ~ LN_order, data = stock_loglog))

kinji_r2[i] = result$r.squared
kinji_b[i] = result$coefficients[1]
kinji_a[i] = result$coefficients[2]
}
kinji_ALL = data.frame(KINJI_A=kinji_a, KINJI_B=kinji_b, KINJI_R2=kinji_r2)

###
base_order = 2
start_order = 3
end_order = length(kinji_ALL$KINJI_R2)
max_order = which.max(kinji_ALL$KINJI_R2[start_order:end_order]) + base_order
max_r2 = kinji_ALL$KINJI_R2[max_order]

###
ret_val = data.frame(order=max_order,
kinji_a=kinji_ALL$KINJI_A[max_order], kinji_b=kinji_ALL$KINJI_B[max_order], kinji_r2=max_r2 )
return(ret_val)
}

###########
# outputTable2CSVFile()
###########
outputTable2CSVFile = function(tablename, filename){
write.table(tablename, filename, quote=F, col.names=T, append=F, sep=",", row.names=FALSE)
}

###########
# getStock_Jika()
###########
getStock_Jika = function(Issued_Shares, Stock){

jika = c()
for(i in 1:length(Stock$code)){
jika[i] = Stock$owarine[i] * as.numeric(Issued_Shares$issued_shares[Issued_Shares$code == Stock$code[i]])
}

# Descending order sorting of aggregate market value
jika_new = rev(sort(jika))
jika_old = rev(order(jika))

# data sets:Stock_new are made.
code_new = c()
name_new = c()
order_new = c()

for(i in 1:length(jika_new)){
code_new[i] = Stock$code[jika_old[i]]
name_new[i] = as.character(Stock$name[jika_old[i]])
order_new[i] = i
}
Stock_new = data.frame(code=code_new, date=yyyymmdd, name=name_new, order=order_new, jika=jika_new)

return(Stock_new)
}

###########
# main()
###########

# files
FILE_PATH_BASE = "C:/PowerLaw38/"
FILE_Issued_Shares = paste(FILE_PATH_BASE, "is/", "Issued_shares_for_foods-20081217.txt", sep="")
FILE_YYYYMMDD = paste(FILE_PATH_BASE, "yyyymmdd.txt", sep="")
FILE_PowerLaw = paste(FILE_PATH_BASE, "powerlaw.txt", sep="")

###
powerlaw_a = c()
powerlaw_b = c()
powerlaw_date = c()
powerlaw_week = c()
powerlaw_order = c()
powerlaw_r2 = c()

###
YYYYMMDD = read.csv(FILE_YYYYMMDD)
for(i in 1:length(YYYYMMDD$date)){
yyyymmdd = YYYYMMDD$date[i]
FILE_Stock = paste(FILE_PATH_BASE, "stock/stock-", yyyymmdd, ".txt", sep = "")
FILE_Jika = paste(FILE_PATH_BASE, "jika/jika-", yyyymmdd, ".txt", sep = "")

Issued_Shares = read.csv(FILE_Issued_Shares)
Stock = read.csv(FILE_Stock)

Stock_Jika = getStock_Jika(Issued_Shares, Stock)
outputTable2CSVFile(Stock_Jika, FILE_Jika)
ret_getR2Max = getR2Max(Stock_Jika)
ret_getAB =getAB(ret_getR2Max$order[1], ret_getR2Max$kinji_a[1], ret_getR2Max$kinji_b[1])

###
powerlaw_a[i] = ret_getAB$A[1]
powerlaw_b[i] = ret_getAB$B[1]
powerlaw_date[i] = YYYYMMDD$date[i]
powerlaw_week[i] = as.character(YYYYMMDD$week[i])
powerlaw_order[i] = ret_getR2Max$order[1]
powerlaw_r2[i] = ret_getR2Max$kinji_r2[1]
}
PowerLaw = data.frame(a=powerlaw_a, b=powerlaw_b, date=powerlaw_date, week=powerlaw_week, order=powerlaw_order, r2=powerlaw_r2)

###
outputTable2CSVFile(PowerLaw, FILE_PowerLaw)

---
:出力ファイルの例は以下。The example of the output file is the following.
powerlaw.txt
===
a,b,date,week,order,r2
-0.999492282169319,27.9526690988954,20081212,Fri,28,0.98449209376968
===
~~~
end

0 件のコメント: