遅行スパンクラス
遅行スパンクラスファイル作成 その2
遅行スパンクラスファイル delay_dif-cla-gra.php
の各メソッドを作り込んでいきます。
作成ファイル内容は、
63Pear Village に戻り
左サイドナビ「遅行スパンクラス」の中の
遅行スパンクラス PHP ファイル
から見てください。
遅行スパンクラスファイル各メソッドの作成の流れについてはフロ-チャ-トを
遅行スパンクラスファイル作成
から見てください。
位相比較処理メソッド function dif_arry 作成
本クラスの中心となる位相比較処理メソッド function dif_arry を作成していきます。
まずは、必要変数を定義します。
これらの変数は後で他のメソッドにも使用されるので、public ではなく global 設定にする必要があります。
global $owa100;
→ 最新値:$owa100[1]
global $last_l;
→ デ-タ数
global $newday;
→ 最新日付
global $mi;
→ 最小σ
global $mi_j;
→ 最小となる遅行数
global $mi_n;
→ 最小となる比較期間
global $mi_DA;
→ 最小となるΔAvg
global $mi_Avg;
→ 最小となる基本Avg
global $mi_Avg_m;
→ 最小となるh期間の比較平均値
global $mi_nl;
→ 最終比較足(デ-タ数-期間)
デ-タ準備
次ぎに解析する値動のデ-タが必要です。
CSV ファイルを読込んで、遅行スパンクラスファイル用デ-タを準備します。
ここで、使用する
CSV ファイル delay_CHART-1809-test.csv
はファイル名をクリックすると CSV,XLSX ファイルを開いたり、保存したりすることができます。
なお、Chrome で見ている方は左下隅にファイル名が表示されますのでこれをクリックするとファイルが開きます。
私は、CSV ファイルはエクセルファイルから作成しています。
エクセルの方が人間にはわかりやすいからです。
ちなみに、エクセルファイルも添付します。
エクセルファイル delay_CHART-1809-test.xlsx
CSV ファイルからデータを読込む
CSV ファイルからデータを読み込む方法は、
63Pear Village に戻り
左サイドナビ「Pear::Image_Graph その2」の中の
Image_Graph その2 グラフ値表示ファイル作成
と基本的には同じです。
PHP 5.1 以降で使用可能な PHP 標準クラスを利用します。
最初に CSV ファイルを読み込みます。
$filepath = "file/delay_CHART-1809-test.csv";
ファイルのあるフォルダ名とファイル名を設定します。
インスタンスを定義します。
$file = new SplFileObject($filepath);
次ぎに、CSV 列として行を読み込みができるようにフラグをセットします。
$file -> setFlags(SplFileObject::READ_CSV);
これで指定した CSV ファイルからのデ-タが取得可能となります。
$file の中にはオブジェクトとして CSV ファイルからのデ-タが格納されますので
ここから配列として読み出します。
foreach は、配列を反復処理するための便利な方法です。
foreach が使えるのは配列とオブジェクトだけであり、
別のデータ型や初期化前の変数に対して使うとエラーになります。
foreach ($file as $key => $line)
と書くと各反復において現在の要素の値が $line に代入され、
さらに現在の要素のキーを変数 $keyに代入します。
そして、 内部配列ポインタが一つ前に進められます。
よって、次の反復では次の要素を見ることになります。
もし、
foreach($line as $str)
と書くと各反復において現在の要素の値が $strに代入され、
内部配列ポインタが一つ前に進められます。
foreach($file as $key => $line){
foreach($line as $str){
$records[$key][] = $str;
}
}
具体的には $key は 0~1~2~3~ のように変化していきます。
今回の例ならば、例えば $key = 1 のとき
$records[$key][1] = 2018/9/10
$records[$key][5] = 79.043
となります。
文字化け防止-必要なし
前項 CSV ファイルの読み込み過程で
$str1 = mb_convert_encoding
($str,"UTF-8","sjis-win");
なる命令は必要ありません。
必要なデ-タは全て半角数字だからです。
エクセルで CSV ファイルを作成すると文字コ-ドは SHIFT-JIS で保存されています。
正確に言うと sjis-win で保存されているようです。
でも、半角数字は SHIFT-JIS も UTF-8 も同じコ-ドなので、変換は必要ありません。
本当は、$records[0][1]~$records[0][5] には日本語も入力されているのですが、
これらの値は利用していないので問題が起こらないのです。
必要なデ-タを for 文で抜取る準備
CSV ファイルから必要と思われるデ-タを取出しました。
さらにデ-タを並替え必要なものだけに絞込む準備をします。
- 総デ-タ数(何日分) $last_l
何日分のデ-タがあるか調べます。
$records 数から
表題、最後の0、改行の3行を取除いたものがデ-タ行数 $last_l となります。
$last_l = count($records) - 3; - 最新日付 $newday
確認のための最新日付も個別に準備します。
$newday = $records[$last_l][1];
必要なデ-タを for 文で抜取る
必要なグラフ値デ-タを読み出した CSV デ-タ $records[ ][ ] から抜出します。
CSV デ-タの構成は、
![xlsx ファイル delay_CHART-1809-test.xlsx 内容](img/delay_xls_data_disp.png)
のようになっていますので、本クラスに必要なデ-タは
[1][1] = 2018/9/10 ~ [11][5] = 81.819
の 5×11 = 55個のデ-タ
であることがわかります。
よって、これらのデ-タを for 文で抜き出して
owa100[1]~[11] の配列デ-タに入れます。
この時、最新のデ-タが owa100[1] に格納されるように並替えも行います。
ちなみに、最新のデ-タは、$records[$last_l] にあります。
これをファイル化すると以下のようになります。
for($k1=1;$k1<= $last_l;$k1++){ for($j1=1;$j1<6;$j1++){ $owa100[$k1][$j1] = $records[$last_l-$k1+1][$j1]; //日付、始値、高値、安値、終値を取得 } }
これからが佳境です。
引き続き、遅行スパンクラス メソッドを作成します。
遅行スパンクラスファイル作成 その3 に進む
遅行スパンクラスファイル作成 に戻る
遅行スパンクラス概要 に戻る