Open( "$SAMPLE_IMPORT_DATA/Bigclass.xlsx" ); // Microsoft Excelファイル
Open( "$SAMPLE_IMPORT_DATA/Bigclass.txt" ); // テキストファイル
Open( "$SAMPLE_IMPORT_DATA/Carpoll.xpt" ); // SAS移送ファイル
Open( "$SAMPLE_IMPORT_DATA/Bigclass.txt", text );
読み込みオプションの詳細については、『スクリプト構文リファレンス』の「JSL関数」章を参照してください。
[テキストデータファイル]の環境設定にある[読み込みの設定]では、テキストファイルの読み込み方法を指定します。たとえば、1行目を列名、2行目以降をデータとするのがデフォルトの設定です。別の設定を使用するには、Open()のオプションとして読み込みの設定を記述します。
Open()には、次のようなオプションがあります。
CharSet("option")
// "Best Guess"、"utf-8"、"utf-16"、"us-ascii"、"windows-1252"、"x-max-roman"、"x-mac-japanese"、"shift-jis"、"euc-jp"、"utf-16be"、"gb2312"
Number of Columns(Number)
Columns(colName=colType(colWidth),... )
// colTypeはCharacter|Numeric
// colWidthは列幅を指定する整数
Treat Empty Columns as Numeric(Boolean)
Scan Whole File(Boolean)
End Of Field(Tab|Space|Comma|Semicolon|Other|None)
EOF Other("char")
End Of Line(CRLF|CR|LF|Semicolon|Other)
EOL Other("Char")
Strip Quotes|Strip Enclosing Quotes(Boolean)
Labels | Table Contains Column Headers(Boolean)
Year Rule | Two digit year rule ("Decade Start")
Column Names Start | Column Names are on line(Number)
Data Starts | Data Starts on Line(Number)
Lines to Read(Number)
Use Apostrophe as Quotation Mark
CompressNumericColumns(Boolean)
CompressCharacterColumns(Boolean)
CompressAllowListCheck(Boolean)
Open(
"$SAMPLE_IMPORT_DATA/EOF_comma.txt",
End of Field( comma ),
Labels( 0 ),
Columns(
name = Character( 12 ),
age = Numeric( 5 ),
sex = Character( 5 ),
height = Numeric( 3 ),
weight = Numeric( 3 )
)
);
Open(
"$SAMPLE_IMPORT_DATA/EOF_space.txt",
Labels( 0 ),
End of Field( Space )
);
Open(
"$SAMPLE_IMPORT_DATA/EOF_space.txt",
Import Settings( Guess File Format() )
);
読み込みオプションを対話式に設定するには、Text Wizard引数を指定します。テキスト読み込みウィンドウにテキストファイルのプレビューが開きます。
Open( "$SAMPLE_IMPORT_DATA/EOF_space.txt", "Text Wizard" );
以下の節で、各引数について詳しく説明します。読み込みオプションの詳細については、『スクリプト構文リファレンス』の「JSL関数」章を参照してください。
これまでの例にあったように、Columns引数を使って列名、列の種類、列の幅を指定します。
ファイルの2列目以降に対して設定を行う場合は、それより前にある列もすべて設定する必要があります。たとえば、「名前」、「性別」、「年齢」、「ID」という4つの列がこの順番にあるテキストファイルを開きたいとします。「年齢」は数値列で、幅を5に設定します。その場合は、「名前」と「性別」の列についても種類と幅を設定し、同じ順番でリストする必要があります。
Columns(
名前 = Character( 15 ),
性別 = Character( 5 ),
年齢 = Numeric( 5 )
);
後続の列(この例では「ID」)に対しては、設定を行う必要はありません。
•
|
•
|
「"John Doe"」は1つの文字列と解釈されます。JMPを始めとする多くのプログラムは、引用符は読みますが、2つ目の引用符が現れるまでにある他の区切り文字は無視します。
|
•
|
行の区切り文字を別の文字にするには、その他(Other)オプションを使用し、EOLOther引数を使って具体的に文字を指定します。JMPは、この文字とデフォルトの文字のいずれかを行の区切り文字と解釈します。
•
|
デフォルトのフィールド区切り文字はタブ(Tab)です。
|
•
|
•
|
Spaceオプションは1つのスペースを区切り文字として使用し、
|
•
|
Spacesオプションは複数のスペースを区切り文字として使用します。
|
フィールドまたは行の区切り文字を指定します。たとえば、EOLOther("*")は、テキストファイル内の行がアスタリスク(*)で区切られていることを示します。
Open(
"$SAMPLE_IMPORT_DATA/Animals_line3.txt",
Columns(
Column( "species", Character, "Nominal" ),
Column( "subject", Numeric, "Continuous", Format( "Best", 10 ) ),
Column( "miles", Numeric, "Continuous", Format( "Best", 10 ) ),
Column( "season", Character, "Nominal" )
),
Column Names Start( 3 )
);
Open(
"$SAMPLE_IMPORT_DATA/Bigclass_L.txt",
Columns(
Column( "name", Character, "Nominal" ),
Column( "age", Numeric, "Continuous", Format( "Best", 10 ) ),
Column( "sex", Character, "Nominal" ),
Column( "height", Numeric, "Continuous", Format( "Best", 10 ) ),
Column( "weight", Numeric, "Continuous", Format( "Best", 10 ) )
),
Data Starts( 5 )
);
Open(
"$SAMPLE_IMPORT_DATA/Bigclass_L.txt",
Columns(
Column( "name", Character, "Nominal"),
Column( "age", Numeric, "Continuous", Format( "Best", 10 ) ),
Column( "sex", Character, "Nominal" ),
Column( "height", Numeric, "Continuous", Format( "Best", 10 ) ),
Column( "weight", Numeric, "Continuous", Format( "Best", 10 ) )
),
Lines To Read( 10 )
);
テキストを読み込むための環境設定を指定したい場合は、最初にすべての環境設定のリストを見ることができると便利です。そのためにはShow Preferences (All)関数を使用します。
Preferences(
Import Settings(
End Of Field( Tab, Spaces, Comma )
)
);
JMPでExcelブックを開くと、自動的にデータテーブルに変換されます。JMPは、.xls、.xlsm、.xlsx 形式のファイルに対応しています。Microsoft Excelのサポートの詳細については、『JMPの使用法』の「データの読み込み」章を参照してください。
•
|
[Excelファイルを開く方法]は、標準のOpenステートメントを使ってMicrosoft Excelファイルを開く際の、デフォルトの方法です。
|
–
|
[Excelウィザードを使用]に設定すると、ファイルの読み込み時にExcel読み込みウィザードが開きます。これがデフォルトの設定です。
|
–
|
[すべてのシートを開く]に設定すると、Microsoft Excelファイルに含まれるすべてのシートが開きます。
|
–
|
[個々のExcelシートを選択]に設定すると、ユーザがファイルを開く際、1つまたは複数のワークシートを選択するよう促されます。
|
•
|
[Excelのラベルを列名として使用]は、ワークシートの最初の行にあるテキストを、データテーブルの列名に変換するかどうかを指定します。
|
デフォルトでは、自動識別が行われます。最初の行のすべてのセルに名前が定義されている場合は、それらのセル内のテキストが列名に変換されます。名前が定義されていないセルがある場合は、「列1」、「列2」・・・という列名が使用されます。
Open()関数を引数なしで使用してExcelファイルを開くと、状況に応じて異なった動作となります。
•
|
Open()関数がスクリプトの一部として直接実行される場合、Excel ファイルはユーザが指定したExcel読み込みの環境設定を使用して、データテーブル内に表示されます。次の例は、ウィザードを使用せずに、両ワークシートをデータテーブル内に開きます。
|
Path = Convert File Path( "$SAMPLE_IMPORT_DATA/Team Results.xlsx", absolute );
dt = Open( Path );
メモ: Excel Wizardを使うには、引数に[Excel Wizard]オプションを指定しなければなりません。Open( "$SAMPLE_IMPORT_DATA/Team Results.xlsx", "Excel Wizard" );.
•
|
ただし、Open()関数がボタンをクリックすることによって実行されるスクリプトの一部である場合、プレビューウィンドウが開き、ユーザはそれを操作する必要があります。次の例を実行し、ボタンをクリックして、Excel読み込みウィザードを確認してみましょう。
|
Path = Convert File Path( "$SAMPLE_IMPORT_DATA/Team Results.xlsx", absolute );
New Window( "button", Button Box( "Open", dt = Open( Path ) ) );
•
|
このスクリプトにより、Excel ファイルを読み込むためのプレビューウィンドウが開かないようにするには、Open()関数に引数を追加します。例を実行し、ボタンをクリックします。2つのワークシートが、Excel読み込みウィザードを介さずにデータテーブル内に開きます。
|
Path = Convert File Path( "$SAMPLE_IMPORT_DATA/Team Results.xlsx", absolute );
New Window( "button", Button Box( "Open", dt = Open( Path, Use for all sheets(1) ) ) );
Preference(Excel Open Method( "Open All Sheets" ));
Path = Convert File Path( "$SAMPLE_IMPORT_DATA/Team Results.xlsx", absolute );
New Window( "button", Button Box( "Open", dt = Open( Path ) ) );
Excel読み込みウィザードでは、データを読み込む前にデータのプレビューを表示し、設定に変更を加えることができます。次のように、引数として"Excel Wizard"を指定します。
dt = Open( "$SAMPLE_IMPORT_DATA/Team Results.xlsx", "Excel Wizard" );
dt = Open(
"$SAMPLE_IMPORT_DATA/Bigclass.xls",
Worksheets( "Bigclass" ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 2 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
), "Excel Wizard"
);
Preference( Excel Open Method( "Open All Sheets" ) );
ブックにある特定のワークシートからデータを読み込みたいとしましょう。その場合は、Worksheetsという引数を使ってワークシートを指定します。次の例は、「小」という名前のワークシートを読み込みます。
Open( "C:\My Data\cars.xlsx", Worksheets( "小" ) );
Open( "C:\My Data\cars.xlsx", Worksheets( "3" ) );
Open( "C:\My Data\cars.xlsx", Worksheets( {"小", "中", "大"} ) );
Open(
"C:/Data/MultipleWorksheets.xlsx", Excel Wizard,
Worksheets( "惑星" ) // ワークシートの強調表示
);
sasxpt = Open( "$SAMPLE_IMPORT_DATA/carpoll.xpt" );
ラベルを列名に変換するには、Use Labels for Var Namesという引数を使用します。
sasdbf = Open( "$SAMPLE_IMPORT_DATA/Bigclass.sas7bdat", Use Labels for Var Names( 1 ));
.xptおよび.stx形式のファイルも使用できます。
Webサイトにあるファイルを開くには、Open()コマンドの中でURLを指定します。その際、URLを引用符で囲んでください。JMPのデータテーブルほか、JMPで使用できる種類のファイルはこの方法で開くことができます。
Open( "http://company1.com/Repairs.jmp" );
Open( "http://company1.com/My Data.txt", text); // Macintosh上のテキストファイルを指定
Open( "http://company1.com", HTML Table( n ) );
nは、読み込みたい表を表します。たとえば、ページ上にある4つ目の表を読み込むには、HTML Table(4)と指定します。値を省略した場合、ページ上の最初の表だけが読み込まれます。
JMPは、HTMLタグの<th>で定義されているテーブル見出しを保持しようとします。これらのテーブル見出しはデータテーブル内の列名に変換されます。<th>タグが間違っている場合やない場合には、ColumnNames(n)を使用してn番目の行を指定してください。デフォルトでは、DataStarts(n)が次の行になりますが、DataStartsで行を指定することもできます。
Multiple File Import()と[イベントハンドラー]スクリプトを用いて、フルサイズの写真のディレクトリにリンクするサムネイル画像のデータテーブルを作成できます。この例は、セルの高さを設定して、一番高さのあるサムネイルに合うようにしています。
path = "$SAMPLE_IMAGES/"; //画像はこのディレクトリにある
{dtx} = Multiple File Import(
<<Set Folder( path ),
<<Set Name Filter( "*.jpg; " ),
<<Set Name Enable( 1 ), // 名前によるフィルタリングを可能にする
// この例では拡張子.jpgをもつファイル
<<Set Add File Name Column( 1 ), // ファイル名を含む列を追加
<<Set Add File Size Column( 1 ) //ファイルサイズの列を追加
) << Import Data;
dtx:ファイル名 << Hide; // ファイル名の列を非表示にする
// 列は画像のリンクのために必要だが、
// 表示されていなくてもよい
maxheight = 0;
For Each Row( // データテーブルのサイズを最小にするために各画像を作成し直す
x = Eval( dtx:画像 );
x << Scale( .1 ); // 画像を10%に縮小する
m = x << Get Pixels; //画像を圧縮して作成し直す
dtx:画像 = New Image( m );
maxheight = Max( maxheight, (dtx:画像[] << Get Size)[2] );
// 幅×高さが返され、[2]により高さを取得する
);
Eval( /* path変数の値をクリックハンドラーに挿入する。path変数は後で使用できなくなるが、この変数の値をファイル名の列の値と連結して画像へのリンクを作成する */
Eval Expr(
dtx:画像 << Set Property(
"Event Handler",
Event Handler( // 列のイベントハンドラープロパティ
Click( JSL Quote( Function( {thisTable, thisColumn, iRow},
Open( Expr( path )||Char( thisTable:FileName[ iRow ] ) ); ); ) ),
// 画像へのリンクを挿入
Tip( JSL Quote( Function( {thisTable, thisColumn, iRow}, Char( thisTable:FileName[ iRow ] ) || "をビューアーで開く"; ); ) ),
// 「ヒント」イベントハンドラーのツールヒントは
// 「クリック」イベントハンドラーに挿入されたツールヒントより短い
Color( JSL Quote( Function( {thisTable, thisColumn, iRow}, 5; );) )
) // リンクの色--青
)
)
);
dtx << Set Cell Height( maxheight + 2 );
// 最大の高さに2ピクセル追加する
dtx << Save( "$TEMP/Sample Images.jmp" );
Show( File Size( "$TEMP/Sample Images.jmp" ), Col Sum( dtx:ファイルサイズ ) );
// データを保存して
// データテーブルのサイズがオリジナルファイルのものよりかなり小さいことを示す
JMPでは、共有している別のコンピュータやネットワークドライブに保存されたファイルを読み込むことができます。ファイルパスとしては、絶対パスと相対パスの両方が使えます。次の例では、Dataという名前の共有コンピュータにあるファイルを開きます。スクリプトを共有する予定がある場合は、マップしたドライブではなく、コンピュータへの相対パスを使用するようにしてください。
Open( "\\Data\Repairs.jmp" );
Open( "\\Data\My Data.txt" );
"[ { \!"key1\!": \!"a\!", \!"key2\!": \!"b\!"}, {\!"key1\!": \!"c\!", \!"key2\!": \!"d\!" }, {\!"key2\!": \!"f\!", \!"key1\!":\!"e\!", \!"key3\!": \!"g\!"}]";
JSON To Data Table()を用いて、JSONをデータテーブルに変換します。
js = "[ { \!"key1\!": \!"a\!", \!"key2\!": \!"b\!"}, {\!"key1\!": \!"c\!", \!"key2\!": \!"d\!" }, {\!"key2\!": \!"f\!", \!"key1\!":\!"e\!", \!"key3\!": \!"g\!"}]";
d = JSON To Data Table( js ); //JSONをデータテーブルに変換
d << New Data View; // データテーブルの表示
図9.1 読み込まれたJSONデータ
JSON To List()を用いて、JSONを含む文字列をリストにすることもできます。
list = JSON To List(
"[ { \!"name\!": \!"KATIE\!", \!"age\!": 12, \!"sex\!": \!"F\!", \!"height\!": 59, \!"weight\!": 95 }, { \!"name\!": \!"LOUISE\!", \!"age\!": 12, \!"sex\!": \!"F\!", \!"height\!": 61, \!"weight\!": 123 }, { \!"name\!": \!"JANE\!", \!"age\!": 12, \!"sex\!": \!"F\!", \!"height\!": 55, \!"weight\!": 74 } ]"
);
Show( list );
// returns list = {{{"name", "KATIE"}, {"age", 12}, {"sex", "F"}, {"height", 59}, {"weight", 95}}, ...}}};
As JSON Expr()は連想配列をJSON文字列に変換します。これにより、データをJSONドキュメントとして書き出すことができます。
list_of_associative_arrays = {["key1" => "a", "key2" => "b"], ["key1" => "c",
"key2" => "d"], ["key2" => "f", "key1" => "e", "key3" => "g"]};
jx = As JSON Expr( list_of_associative_arrays );
/* 次を戻します。
"[{\!"key1\!":\!"a\!",\!"key2\!":\!"b\!"}..."[{\!"key1\!":\!"a\!",\!"key2\!":
\!"b\!"}
*/
Open( "filename.h5", {"list_of", "dataset_names"});
ESRIシェープファイルは、地図の作成に使用される地理空間ベクトルデータの一形式です。JMPは、シェープファイルをデータテーブルとして読み込みます。.shpシェープファイルは、各シェープの座標で構成されます。.dbfシェープファイルには、地域を表す値が含まれます。JMPで地図を作成するには、データの構造を調整し、ファイルに専用の接尾辞をつけて保存します。
dt = Open( "$SAMPLE_IMPORT_DATA/Parishes.shp",
:X << Format( "Longitude DDD", 14, 4 );
:Y << Format( "Latitude DDD", 14, 4 ) );
dt << Save( "c:/Parishes-XY.jmp" );
.dbfファイルを-Nameという接尾辞をつけて保存します。
dt = Open( "$SAMPLE_IMPORT_DATA/Parishes.dbf" );
dt << Save( "c:/Parishes-Name.jmp" );
データの構造を調整するには、-Name.jmpファイル内の名前に「地図の役割」列プロパティを追加するなど、いくつかの手順が必要となります。詳細については、『グラフ機能』の「地図の作成」章を参照してください。
Open Database()は、ODBC(Open Database Connectivity)を使ってデータベースを開き、データを抽出し、JMPデータテーブルに読み込みます。詳細については、「JMPの拡張」章の「データベースアクセス」(694ページ)を参照してください。
JMPは、データベースファイル(.dbf)ファイルもデータテーブル形式に変換します。
sasdbf = Open( "$SAMPLE_IMPORT_DATA/Bigclass.dbf",
Use Labels for Var Names( 1 )
);