LabTalkによる統計

概要

このチュートリアルでは、統計分析でLabTalkを使用する方法を示します。2012年の3つのセクターにおける9つの銘柄の毎日の変化率からなるデータセットを使用します。 1年間の3つの株式セクターのパフォーマンスを比較します。

学習する項目

このチュートリアルでは、LabTalk スクリプトを使用して次のことを行う方法を説明します。

  • 行の統計を実行するために、 rowstatsを使用して各セクターの平均日次データを計算
  • グループ化された列に対して統計を実行して、月次データを計算
  • 計算されたデータを使用して線+シンボルプロットおよびボックスチャートを作図
  • テーマで行列オブジェクトの記述統計を実行

ステップ

行の平均を計算

Xファンクションrowstatsを使用して特定の範囲のデータの各行に対して記述統計を実行できます。ここでは、3つのセクターについて、それぞれ同じ日の株価変動率の平均値を計算し、その結果を指定した列に入れます。

// ファイル名を定義 
string fname$ = system.path.program$ + "Samples\Statistics\Stocks.dat";
//Xファンクションimpfileを使って指定したファイルをインポート
newbook;
impASC fname:=fname$ options.ImpMode:=3 options.FileStruct.NumericSeparator:=0;

//アクティブなワークブックのショートネームを保存
string bk$=%H;

// スプレッドシートセル表記をオフ
page.xlcolname = 0;
// ショートネームを指定して4つの新しい列を追加;
wks.addcol(M);
wks.addcol(M1);
wks.addcol(M2);
wks.addcol(M3);
 
// 4つの列のロングネームを設定;
col(M)[L]$=Month;
col(M1)[L]$=Technology;
col(M2)[L]$=Electronics Manufacturer;
col(M3)[L]$=Consumer Products;

// Month列にDate列をコピー
col(M)=col(Date);
// 列11 (Month) を日付フォーマットに設定
wks.col11.format = 4; 
// 列11 (Month) の表示を "May"に設定
wks.col11.subformat = 17; 
 
//  3つのセクターの行の平均を計算
rowstats -r 1 irng:=col(2):col(4) mean:=col(M1) sd:=<optional>;
rowstats -r 1 irng:=col(5):col(7) mean:=col(M2) sd:=<optional>;
rowstats -r 1 irng:=col(8):col(10) mean:=col(M3) sd:=<optional>;

ワークブックのスプレッドシートセル表記については、FAQ-849 を参照してください。

テンプレートでボックスチャートを作成

Xファンクションplotxyでボックスチャートを作成できます。plot オプションで利用可能なすべての値は、プロットタイプIDにあります。

// "box" テンプレートでボックスチャートを作成
plotxy iy:=((1,12),(1,13),(1,14)) plot:=206 ogl:=<new template:=box>;
 
// アクティブレイヤのXラベルを30度回転
range ll = !;
ll.x.label.rotate = 30;

グループ化した列の統計

3つのセクターの株価変動率の月平均値を取得するには、アクティブシートでグループ化された列に対して記述統計を実行し、レポート シートを生成します。

列の統計は非常に複雑で、操作フレームワークと呼ばれるOrigin Cのフレームワークを通じて実装されています。操作フレームワークにより、これらの操作ベースのクラスをOrigin Cから呼び出すことができるため、操作クラスを実行するためにXファンクションxopが作成されています。

// 新しく作成されたグラフがアクティブウィンドウ
// しかし元のワークブックをアクティブにする必要がある
win -a %(bk$);

// DescStatsクラスを使用して、GUI ツリー"statGUI"を作成
tree statGUI;
xop execute:=init classname:=DescStats iotrgui:=statGUI;

// GUIツリーの入力データを指定
statGUI.GUI.InputData.Range1.X$=Col(M1:M3);
// グループ化データを指定
statGUI.GUI.InputData.Range1.F$=Col(Month);
 
// 説の統計の設定
// N合計、標準偏差、合計、最大、最小、中央値を結果で表示しない
statGUI.GUI.Quantities.moments.N=0;
statGUI.GUI.Quantities.moments.SD=0;
statGUI.GUI.Quantities.moments.Sum=0;
statGUI.GUI.Quantities.quantiles.Min=0;
statGUI.GUI.Quantities.quantiles.Median=0;
statGUI.GUI.Quantities.quantiles.Max=0;

// 準備したGUIツリーでレポートツリーを生成
xop execute:=report iotrgui:=statGUI otrresult:=statOut;

// 統計の後に操作オブジェクトをクリーンアップ
xop execute:=cleanup;

スクリプトでGUIツリー「statGUI」を作成した後

xop execute:=init classname:=DescStats iotrgui:=statGUI;

以下のスクリプトを実行して、「statGUI」ツリーの詳細設定を行えます。

statGUI.=


列のアンスタック

グラフをプロットするには、列を3つのセクター( DescStatsQuantities1シートのData列)でアンスタックします 。 スクリプトからこれを実行するには、 wunstackcol Xファンクションが最も便利な方法です。列は、入力範囲irng2で指定した特定のカテゴリによってアンスタックされます。(カテゴリーで)表示されるデータは、入力範囲 irng1で参照されます。

// Data列を使用して他のすべての列をアンスタック
// 出力シートのロングネーム行に"Data"を配置
page.active$ ="DescStatsQuantities1";
wunstackcol -r 2 irng1:=col(Mean) irng2:=col(Data) nonstack:=1 other:=col(Month) pos:=lname ow:="UnstackCols1";

線+シンボルグラフの作成

Xファンクションplotxyで線+シンボルグラフを作成できます。plot オプションで利用可能なすべての値は、プロットタイプIDにあります。

page.active$ ="UnstackCols1";
// アクティブなワークシートの列 2、3、4 で折れ線グラフを作成
plotxy iy:=((1,2),(1,3),(1,4)) plot:=202;
//凡例をソース データのロングネームで更新
legendupdate mode:=lname;

テーマで行列オブジェクトの記述統計を実行

テーマを準備します。列の統計ダイアログを開き、出力タブを開きます。

  • レポート表の設定にあるブックを<新規>に設定します。これでレポート表のために新しいワークブックがされます。
  • 値ブランチを開き、ブックを<レポート>に設定します。これで値がレポート表と同じブックに出力されます。
  • ダイアログ右上の矢印のボタンをクリックして、名前を付けて保存を選択し、reportnewbookという名前で保存します。
// DescStatsクラスを使ってテーマ"reportnewbook"でGUIツリー"statGUI"を作成
tree statGUI;
xop execute:=init classname:=DescStats iotrgui:=statGUI theme:=reportnewbook;

// 入力データを設定
statGUI.GUI.InputData.Range1.X$=[MBook1]MSheet1!1:0; //1:0 は全行列オブジェクト

// レポート出力をBook1に変更。これはテーマ"reportnewbook"で<new>に設定されている
statGUI.GUI.Output.Report.Book$ = "Book1";

// 準備されたGUI ツリーでレポートを生成し、操作オブジェクトをクリーンアップ
xop execute:=report iotrgui:=statGUI;
xop execute:=cleanup;