第 9 章 時系列解析 Time Series 173
B.7 plot
関数型と明示型の共存 明示型の中で関数型を使うことができる。無理に全部を関 数型で作る必要はない。
282 付録B J言語超入門
0
1
2
3
4 0 5
10 15 0
20 40 60 80
図B.2 cos sin
’surface’ plot 5 20 $ 100?100 pd ’eps temp_append_sin1.eps’
0 1 2 3 4 5 6 7 8 9 10
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1
cos sin
図B.3 cos sin
plot_test =:3 : 0
NB. ---pd ’reset’
pd ’sub 0 0 1000 _40’
pd ’sub 2 1 ’
NB. ---0 0---pd ’new’
pd ’keypos ib’
pd ’keystyle lho’
pd ’key cos sine’
pd ’color navy,green’
pd a; sin a=. steps 0 10 100 NB. ---0 1---pd ’new’
pd ’type surface’
pd 5 20 $ 100$100 pd ’show’
)
第 C 章
データの入出力
C.1 CSV ファイル
最近配布されているファイルはEXCELかCSV形式が大半である。EXCELは窓 やMACとの連携はよくできているが、他のプラットフォームでは扱えない。最近
はMS-OFFICEのクローンも増えてきた。
CSV(Camma Separated Values)とは、カンマで区切られたファイルで、永い伝統を 持ったファイル形式である。筆者は20万件のデータ程度はCSV形式で取り扱っ ており、手軽で便利である。
C.1.1 EXCEL
から
CSVへの出力
著者はファイルはEXCELで管理し、数値部分のみEXCELからCSVに出力して いる。CSVへの出力は、ファイルをセーブするときに、[名前を付けて保存]を指 定し、ダイアログボックスで保存するファイル形式をCSVと指定すればよく、元 のファイルは変更されない。
ここでの約束は
カンマ カンマはつけない。(データがカンマで分離されることが多い)出力する 数値の範囲を先にマウスなどで選んで、書式→セル→数値でカンマのチェッ クを外しておく。
空白 空白は0や99999などで埋めておく(その行のみ左詰めになることがある。)
下部の余白に付くゴミ csvファイルの最下行の下にゴミの行ができたならばノー トパッドなどで削除しておく(そのままだと空白のボックスが入ることがある)
アクセスなどのデータベースもCSV出力機能を持っている。ファイル出力でcsv を選べばよい。
C.1.2 csv
ファイルの読み込み
データの読み込みはcsvが便利である。20万件程度のファイルはメモリが確保で きれば一度に読み込める。
最初に ファイルを取り扱うライブラリを読み込む。
require ’files csv’
284 付録C データの入出力
図C.1 カンマを外す
読み込み パスを指定する。
DAT=: ".@> readcsv ’user/classes/numeric_recipe/data/csv/foo.csv’
DIRCSVなどとパスを定義しておくと簡易になる。
DIRCSV=: jpath ’˜user/classes/numeric_recipe/data/csv/’
jpath はj602-userのuserを探してくれる。チルド(˜)を付ける。
数値化 csvファイルはテキストファイルでboxに入っている。
DAT=. ".@> readcsv DIRCSV,’foo.csv’
CSVファイルの中身は数字の形をしていても文字である。Jから読み込んだと きは一つずつボックスに入っている。
数値の部分のみをCSV ファイルにしてある場合は上記のように".@>で数 値化して、ボックスを開いておく。
マトリクスの構成如何で".@>で開いたときに崩れることがある。
文字列と混在のファイルでは文字列を落としてから数値化を行う。
確認 以上で名詞DAT に数値データが入った。先ずDAT と打ってデータがざっ と出れば次に+/ DATとして、縦に合計ができれば数値化もできている。
文字列も入ったBOX ボックスの混合配列はそのままでは数値化できない。文 字列の部分を切り出し数値化を行う。
C.1.3 CSV
ファイルへの出力
require ’files csv’が必要
(i.5 5) writecsv ’/temp/test.csv’
120
複雑な計算の場合は予め済ませておき、 writecsvの左引数は名詞(a=. ....)を用 いる。
J602はパスが複雑になったので出力先は各自のtemp等を用いた方がよい