Jmp へのデータのインポートこんにちは、
定期的にデータを取得するための JMP 分析を開発しています。 特定のフォルダーに毎週新しい CSV を生成する Excel マクロがあります。 私はまだ JMP の非常に基礎的なプレイヤーなので、このアクティビティを実行するスクリプトを作成するのに役立つコミュニティのサポートを無駄にしました。 いろいろ調べてみましたが、解決策が見つかりませんでした。 CSV ファイルにはヘッダー付きの 19 列があります。 問題がある場合は、CSV からヘッダー行を削除できます。 ファイルをJMPの親データテーブルに自動的にインポートして、データを評価するだけの他のスクリプトを実行できるようにするスクリプトのコードソリューションを手伝ってくれる人はいますか。
Re: Jmp へのデータのインポートtxnelsonさん、返信ありがとうございます。 これは、「オンライン トレンド データ集約」のログ ファイルに含まれる内容です。 (これはスクリプトを実行すると開くファイルです)
/*:
//:*/
// This script will concatenate cleaned online data files from APPLIKON controllers to a master table.
// Define function to open .xlsx files
DataUpdate = Function({filepath},
Open(
filepath,
Worksheets( "Data" ),
Use for all sheets( 0 ),
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( "-" )
)
)
);
//Define path to where .xlsx files are stored (location where this script is stored)
path = get default directory();
//Open Running Table (Online Trend Data Aggregated.jmp) - assuming in same directory as .xlsx files (could change path to wherever)
dt_running = Open(path||"Online Trend Data Aggregated.jmp");
//Get List of Files in Directory
files = Files In Directory(path);
//Remove any files from the list that are not .xlsx or do not contain "APPLIKON" in file name
for(i=N Items(files),i>=1,i--,
If(contains(files[i],".xlsx") == 0 | contains(files[i],"APPLIKON") == 0, Remove From(files,i));
);
//Get max(File Date) in running table to determine which files need to be appended
max_date = max(dt_running:File Date << Get Values);
//Extract Dates from File Names and determine if date is > max_date from running table
dates = {};
update_files = {};
for(i=1, i<=N Items(files),i++,
word_list = Words(files[i],"-"); //breaks out file name into words delimited by hyphens
temp_date = informat(trim(word_list[1]||"/"||word_list[2]||"/"||word_list[3]),"m/d/y"); //first 3 words are month, day, year - concatenat them separated by "/"
if(temp_date > max_date,
Insert Into(dates,temp_date);
Insert Into(update_files,files[i])
)
);
//Import selected files, add File Date column, and concatenate to running table
for(i=1,i<=N Items(update_files),i++,
dt_temp = DataUpdate(path||update_files[i]);
dt_temp << New Column("File Date", format("m/d/y"), Set Values(J(N Row(dt_temp),1,dates[i])));
dt_temp << Go To(:File Date) << Move Selected Column(To first);
dt_running << Concatenate( dt_temp, Append to First Table(1));
Close(dt_temp,nosave);
);
dt_running << Clear Column Selection;
/*:
Scriptable[]Re: Jmp へのデータのインポートデバッガーを使用せずにファイルを実行するだけの場合、ログにはどのようなステートメントが記録されますか?Re: Jmp へのデータのインポートこんにちは、
元の投稿者と同じ解決策を探しています。
そのスクリプトをコピーし、ニーズに合わせて変更しました (元のソリューションが提供するものではなく、JMP 自体からインポート スクリプトをコピーして貼り付けるという上記の提案も含まれます)。
……しかし、なぜかうまくいきません。
スクリプトは、JMP ファイル「Online Trend Data Aggregated」を開いた後、停止し、何も実行しません。 その後は何が起こるのでしょうか?
デバッガーは全体を実行しますが、右上隅に「プログラムの実行が終了しました」というメッセージだけが表示されます。
ご洞察をいただければ幸いです。 以下のスクリプト:
// This script will concatenate cleaned online data files from APPLIKON controllers to a master table.
// Define function to open .xlsx files
DataUpdate = Function({filepath},
Open(
filepath,
Worksheets( "Data" ),
Use for all sheets( 0 ),
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( "-" )
)
)
);
//Define path to where .xlsx files are stored (location where this script is stored on a network drive)
path = get default directory();
//Open Running Table (Online Trend Data Aggregated.jmp) - assuming in same directory as .xlsx files (could change path to wherever)
dt_running = Open(path||"Online Trend Data Aggregated.jmp");
//Get List of Files in Directory
files = Files In Directory(path);
//Remove any files from the list that are not .xlsx or do not contain "APPLIKON" in file name
for(i=N Items(files),i>=1,i--,
If(contains(files[i],".xlsx") == 0 | contains(files[i],"APPLIKON") == 0, Remove From(files,i));
);
//Get max(File Date) in running table to determine which files need to be appended
max_date = max(dt_running:File Date << Get Values);
//Extract Dates from File Names and determine if date is > max_date from running table
dates = {};
update_files = {};
for(i=1, i<=N Items(files),i++,
word_list = Words(files[i],"-"); //breaks out file name into words delimited by hyphens
temp_date = informat(trim(word_list[1]||"/"||word_list[2]||"/"||word_list[3]),"m/d/y"); //first 3 words are month, day, year - concatenat them separated by "/"
if(temp_date > max_date,
Insert Into(dates,temp_date);
Insert Into(update_files,files[i])
)
);
//Import selected files, add File Date column, and concatenate to running table
for(i=1,i<=N Items(update_files),i++,
dt_temp = DataUpdate(path||update_files[i]);
dt_temp << New Column("File Date", format("m/d/y"), Set Values(J(N Row(dt_temp),1,dates[i])));
dt_temp << Go To(:File Date) << Move Selected Column(To first);
dt_running << Concatenate( dt_temp, Append to First Table(1));
Close(dt_temp,nosave);
);
dt_running << Clear Column Selection;
Re: Jmp へのデータのインポート@cwillden
これは本当にうまくいきました。ご支援に本当に感謝しています。 これにより、一意の CSV ファイルにある数十万行を数秒以内に処理できました。ありがとうございます。Re: Jmp へのデータのインポートこれを行う方法の例を次に示します。CSV ファイルに X1 と X2 の 2 つの列があるとします。2 つのサンプル csv ファイル (「3-29-18 - My Data.csv」と「4-5-18 - My Data.csv」) を作成します。また、CSV ファイルと同じディレクトリに保存した実行中の jmp テーブルもあります。
次のスクリプトは、ディレクトリ内のすべてのファイルを検索し、CSV 以外のファイルとファイル名に「My Data」を含まないファイルを除外します。次に、実行テーブルに既にインポートされているファイルの最新の日付を取得します。次に、前の基準を満たすファイルのリストをループし、ファイル名から日付を抽出します。日付が実行テーブルの最大日付より大きい場合は、そのファイルをファイルのリストに入れて実行テーブルに追加します。
その後、追加する必要があると判断したファイルをループして、最初にファイルを開き、次にファイル日付列を追加し、次にファイルを実行テーブルに連結します。
//Define function to open up your CSV files - will need to be modified for your own CSV file
MyCSVImporter = Function({filepath},
Open(
filepath,
columns(
New Column( "X1", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "X2", Numeric, "Continuous", Format( "Best", 12 ) )
),
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Comma, CSV( 0 ) ),
Strip Quotes( 1 ),
Use Apostrophe as Quotation Mark( 0 ),
Use Regional Settings( 0 ),
Scan Whole File( 1 ),
Treat empty columns as numeric( 0 ),
CompressNumericColumns( 0 ),
CompressCharacterColumns( 0 ),
CompressAllowListCheck( 0 ),
Labels( 1 ),
Column Names Start( 1 ),
Data Starts( 2 ),
Lines To Read( "All" ),
Year Rule( "20xx" )
)
)
);
//Define path to where csv files are stored
path = "$DOCUMENTS/temp/";
//Open Running Table (RunningTable.jmp) - assuming in same directory as CSV files (could change path to wherever)
dt_running = Open(path||"RunningTable.jmp");
//Get List of Files in Directory
files = Files In Directory(path);
//Remove any files from the list that are not .csv or do not contain "My Data" in file name
for(i=N Items(files),i>=1,i--,
If(contains(files[i],".csv") == 0 | contains(files[i],"My Data") == 0, Remove From(files,i));
);
//Get max(File Date) in running table to determine which files need to be appended
max_date = max(dt_running:File Date << Get Values);
//Extract Dates from File Names and determine if date is > max_date from running table
dates = {};
update_files = {};
for(i=1, i<=N Items(files),i++,
word_list = Words(files[i],"-"); //breaks out file name into words delimited by hyphens
temp_date = informat(trim(word_list[1]||"/"||word_list[2]||"/"||word_list[3]),"m/d/y"); //first 3 words are month, day, year - concatenat them separated by "/"<BR />
if(temp_date > max_date,
Insert Into(dates,temp_date);
Insert Into(update_files,files[i])
)
);
<BR />//Import selected files, add File Date column, and concatenate to running table
for(i=1,i<=N Items(update_files),i++,
dt_temp = MyCSVImporter(path||update_files[i]);
dt_temp << New Column("File Date", format("m/d/y"), Set Values(J(N Row(dt_temp),1,dates[i])));
dt_temp << Go To(:File Date) << Move Selected Column(To first);
dt_running << Concatenate( dt_temp, Append to First Table(1));
Close(dt_temp,nosave);
);
dt_running << Clear Column Selection;
この例では、RunningTable にはすでに 3-29-18 データが含まれているため、4-5-18 データのみを追加します。
Re: Jmp へのデータのインポートありがとう!
@uday_guntupalliはい、データは常に同じ形式、同じ列数、同じヘッダーになります。
すでにデータを JMP に一度インポートしています。 問題は、生成される新しい CSV ファイルから毎週自動的に更新されるこのデータを取得することです。 毎週、「<日付> - My Data」というファイル名で新しい CSV ファイルが生成されます。 毎回、JMP にこのデータを親ファイルにインポートさせたいと考えています。 JMP が自動的にフォルダー ディレクトリに移動し、リストから最新のファイルを選択し、そのデータをインポートして実行テーブルに修正するコマンドを作成するにはどうすればよいですか。
Re: Jmp へのデータのインポート一点だけ説明させていただきますと、 @uday_guntupalli応答:
このようなインターフェイスを提供します。 「プレビュー付きデータ」を選択すると、何をインポートしているのかを把握し、カスタマイズできるようになります。 インポートが完了したら、インポートされたデータ テーブルに移動します。データテーブル表示の左側にあるテーブルパネルを見てください。 「ソース」項目の前にある緑色の三角形を右クリックすると、「編集」オプションが表示され、JMP が生成したスクリプトを確認できます。その後、そのスクリプトをカット アンド ペーストして、毎週のスクリプトの作成の冒頭に貼り付けることができます。
Re: Jmp へのデータのインポートこんにちは@NilD 、
初めて手動でインポートできる場合、JMP はスクリプトを生成します。結果のテーブルには、JSL を使用してデータをインポートする方法を正確に示すスクリプト「ソース」が含まれます。
JMP が .csv ファイルを正しくインポートしない場合は、次の手順を実行します。通常どおり [ファイル] > [開く] (または Ctrl + O) を実行し (必要に応じて、[データ ファイルを開く] ウィンドウでファイルの種類を [テキスト ファイル] に変更します)、.csv ファイルに移動して選択します。.csv を開く前に、ファイルを開くためのさまざまなオプションを提供するいくつかのラジオ ボタンが表示されるはずです。1つは「プレビュー付きデータ」です。これを選択すると、データを JMP に取り込む前にインポート設定を変更できます。

Re: Jmp へのデータのインポート@NilD 、
ファイルは常に同じ形式になりますか?つまり、同じ列名とその中の同じタイプのデータですか?
最も簡単な方法は、ファイルをインポートするためのスクリプトを JMP に提供させることです。これにより、選択内容をカスタマイズしてスクリプトを再利用できます。
ファイル ==> 開く ==> 必要なファイルを選択します
このようなインターフェイスを提供します。 「プレビュー付きデータ」を選択すると、何をインポートしているのかを把握し、カスタマイズできるようになります。 完了したら、緑色の三角形をクリックすると、「編集」オプションが表示され、JMP が生成したスクリプトが表示されます。
