データの入出力


パス名の指定とデータの入力[top]

パス名の指定

データファイルやプログラムがMathematica 本体が入っているフォルダに入っている場合は特に気にすることはないが,データファイルがMathematica 本体と別のフォルダに入れてある場合は,最初にパス名を指定してから実行する.パス名を指定するときのポイントは,読み込むファイルが直接含まれているフォルダまでのパス名を指定しなければならない.次の例では,Macintosh HD という名前のハードディスクのArticles というフォルダの中のChaos というフォルダの中にデータが入っている場合.
  $Path = Append[$Path, " ボリューム名: フォルダ名: サブフォルダ名: " ]

このようにパス名を最初に指定しておくと,プログラム中で一々パス名を指定する必要がないので便利.
(注意1)パスの最初は必ずボリューム名から始めなければならない.
    ボリューム名とはハードディスクに付けてある名前でルートディレクトリともいう.
Mathematica を一度終了させるとパス名の指定は解除されるので,次回立ち上げるときは再びパス名を指定しなければならない.

(注意2)フォルダ名の区切り記号は : (コロン)を使う.unixマシンでは / (スラッシュ)
     !! Macintosh HD:Mathematica : Articles:Chaos:sample1.dat

(注意3)!! でファイルを読み込む場合はボリューム名から始めてすべてのフォルダ名のパスを指定しなければならないが,$Path でファイルが直接含まれているフォルダのディレクトリまで指定してあれば,ReadList関数を使う場合は最後のファイル名だけを指定すればよい.ReadList関数は$Path で指定された検索パスに従って検索する.なお,ReadList関数でもすべてのパスを指定しても構わない.

エクセルのデータを読み取る[top]

エクセルからデータを読み取る方法.

(1)表計算のデータをリスト形式のデータに変換する
表計算のデータは縦1列に並んでいることが多い.Mathematica の標準形式は { } でくくられたリスト形式.大量のデータのときは,縦1列に並べるよりも,リスト形式にした方がコンパクトになる.リスト形式にするには,表計算で作成した縦1列のデータをReadList で読み込み,リスト形式で出力して,その部分だけを保存すればよい.このときセルスタイルは Input で Attributes の Initialization Cell にチェックを入れること.

エクセルのデータをMathematica に読み込む手順.
1)エクセルで1列にデータを入力
2)テキスト形式で保存
3)Mathematica をスタートさせ,2)をオープン.Mathematica 上では縦1列にデータだけが並ぶ.
4)名前をつけてMathematica のファイルとして保存(Save Asを選ぶ).
5)ReadList関数でリスト形式に読み込む.
     ReadList["filename", type]
  type は通常は Numberを指定する.

(注意)データファイルの作り方に問題があるときは,ReadList で正しくタイプしても,syntax error がでることがある.この場合は,上の手順に従ってデータを作り直す.あるいは,データファイルを開いて,データのブラケットを選んでから,Style メニューの Attributes から Initialization Cell を選んでチェックを入れる.

データファイルの中身を見たい場合は,!!filename

6)読み込んだデータに名前をつけてそれ以降の計算に備える.

    データの名前 = ReadList["filename", Number]

    データの名前 = N[ReadList["filename", Number]]

(注意)ファイルが読み込めない場合の原因としては,パス名の指定が考えられる.「ファイルの読み込み」の項を参照.以下の例では,$Path がパス名の指定.

以下の例は,エクセルで縦1列に並んでいる為替レートのデータと購買力平価のデータ(1985年から94年までの年平均データ)をMathematica のリスト形式のデータに変換する.

エクセルのテキストデータファイル名:yen.txt , ppp.txt

Mathematica で保存したファイル名:yen.txtm , ppp.txtm

(参考)表計算のデータを読み込む場合は ReadList でよいが,すでにリスト形式になっているデータファイルを読み込む場合は Get 関数を使う.
       Get["Yen91h"]
ここで,Yen91h はリスト形式のデータ.{ , , } の形で保存されている.

エクセルにデータを出力[top]

Mathematica の計算結果をエクセルで読めるように出力する.Mathematica でもかなりの種類のグラフは作成できるが,エクセルでなければできないグラフもある.このようなときは,Mathematica で計算した計算結果をエクセルで読み込めるファイル形式に出力することが必要.

Mathematica はリスト形式でデータを扱うのが基本であるから,リスト形式(Table 形式)で出力したデータを表計算ソフトで扱いやすいように,縦1列のデータ形式に変換すればよい.そのためには,次のように,TableForm 関数を使う.

TableForm[list] :リストを行列の形で出力する.深さ1のリスト,{r1, r2, r3, ... } は縦1列に並べられるので,表計算ソフトで扱いやすい.

深さ2のリストは,{ {r11, r12}, {r21, r22} } は行方向,列方向の順に並べられる.この例は2行2列の形.

1)出力データが1種類であれば,エクセルに出力する最も簡単な方法は,深さ1のリストをTableFormで1列に出力し,テキスト形式で保存すること.これをエクセルで直接読み取る.

2)出力データが2種類以上で,行列形式になる場合は,CSV形式(comma separated value)かTabで区切られたデータ形式に変換してテキストファイルとして保存する.

ファイルの書き出しは,OpenWrite["ファイル名.dat"] でまず保存するファイル名を指定し,WriteString でカンマやタブを挿入する..datテキスト形式であることを示すための拡張子.

OpenWrite["ファイル名"]

WriteString[ストリーム,exp1,exp2,... ]  式を文字列に変換して,それらを順に指定された出力ストリームに書き出す.ストリームとは,書き出した式を保存する名前のこと.ストリームはチャンネルともいう.

ToString[expr] は式の出力形式と同じ文字列を返す.

WriteString[ストリーム,ToString[expr, " , ", ]] でデータとデータの区切りにコンマを入れる.

Write[ストリーム,式1,式2,... ]  指定されたストリームに式を順に改行で区切って出力する.

1列に出力するためには,リストをばらす必要がある.このために,Do関数を使う.

Do[exp, {imax}] は式exp をimax 回繰り返す.

Close[stream] は stream を閉じる.

狙い通り正しく保存されたかどうかは,!!ファイル を実行することで確認することができる.

最初の例は,1から20の範囲で整数の乱数を10個発生させて,それをPart関数で1つずつとりだし,Write関数で縦1列に書き出す.Part関数は t[[j]] で示されている.テキスト形式でファイル出力される.保存されるファイル名は random.dat .このファイルに,myout という名前のストリームにデータが作られる.ファイルが保存されるのは,Mathematica の本体プログラムと同じフォルダ内.パス名を指定すれば,そのフォルダに保存される.パス名の指定は,エクセルのデータを読み取るの項を参照.

2つ目の例は,4×4の行列形式のデータについてCSVデータに変換した例,3つ目はTABで区切ったデータに変換した例.

Shaw,W.T. and Tigg, J.(1994), Applied Mathematica, Addison-Wesley, 172-73. 参照.

[top] [Mathematicaへ戻る]


Mail to: sasayama@kumagaku.ac.jp
Copyright(C) Kumamoto Gakuen University