LabTalkによる統計Tutorial-Statistics
概要
このチュートリアルでは、統計分析で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>;
テンプレートでボックスチャートを作成
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;
|