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;