相関係数は、Excelでやりましたが、まあ一応。
<?php require_once 'vendor/autoload.php'; use Phpml\Math\Statistic\Correlation; $x = [43, 21, 25, 42, 57, 59]; $y = [99, 65, 79, 75, 87, 82]; $pearson = Correlation::pearson($x, $y); echo $pearson; ?>

随机应变 ABCD: Always Be Coding and … : хороший
相関係数は、Excelでやりましたが、まあ一応。
<?php require_once 'vendor/autoload.php'; use Phpml\Math\Statistic\Correlation; $x = [43, 21, 25, 42, 57, 59]; $y = [99, 65, 79, 75, 87, 82]; $pearson = Correlation::pearson($x, $y); echo $pearson; ?>

伊藤忠商事(8001)の適正PERを、競合の売上、純利益との相関から、linear regressionで計算したいと思います。
まず、データセット。
銘柄名,売上,純利益,PER ※単位:10億円
丸紅:8002,7100,155, 6.79%
三菱商事:8058, 6400,440, 9.73%
三井物産:8031, 4300, 306,7.63%
双日:2768, 1500, 40, 7.76%
伊藤忠商事:8001, 4800, 352, ?(実際は7.7%)
<?php
require_once 'vendor/autoload.php';
use Phpml\Regression\LeastSquares;
$samples = [[7100, 155],
[6400, 440],
[4300,306],
[1500, 40],
];
$targets = [6.79,
9.73,
7.63,
7.76];
$regression = new LeastSquares();
$regression->train($samples, $targets);
echo $regression->predict([4800, 352]);
?>

8.8ぐらいあってもいいと言ってますね。実際は、本日時点で7.7%なので、割安ということです。。
なにこれ?
まずはチュートリアル。値の距離を計算するロジックですね。これは好きです。
<?php require_once 'vendor/autoload.php'; use Phpml\Regression\LeastSquares; $samples = [[73676, 1996], [77006, 1998], [10565, 2000], [146088, 1995], [15000, 2001], [65940, 2000], [9300, 2000], [93739, 1996], [153260, 1994], [17764, 2002], [57000, 1998], [15000, 2000]]; $targets = [2000, 2750, 15500, 960, 4400, 8800, 7100, 2550, 1025, 5900, 4600, 4400]; $regression = new LeastSquares(); $regression->train($samples, $targets); echo $regression->predict([60000, 1996]); ?>

NYダウとドル円の前日比の動きを受けて、翌日の日経がどのように変化したかを見たいと思います。
ダウ、ドル円、日経の前日比の時系列データを用意します。
ここでは、2/1から、2/9まで。
ダウ
日付、始値、高値、安値、終値、前日比、前日比%
2018年2月10日 24,190.9 330.44 +1.38% 23,360.289 24,382.138 735,033,934
2018年2月9日 23,860.458 – -4.15% 23,849.228 24,903.679 657,504,273
2018年2月8日 24,893.349 -19.42 -0.08% 24,785.439 25,293.96 504,623,230
2018年2月7日 24,912.771 567.02 +2.33% 23,778.738 24,946.23 823,936,440
2018年2月6日 24,345.751 – -4.6% 23,923.88 25,520.531 714,449,396
2018年2月3日 25,520.96 -665.75 -2.54% 25,490.66 26,061.791 522,877,741
2018年2月2日 26,186.708 37.32 +0.14% 26,014.439 26,306.701 410,622,631
2018年2月1日 26,149.39 72.50 +0.28% 26,050.978 26,338.029 471,203,651
ドル円
日付、始値、高値、安値、終値、前日比、前日比%
18/02/13 108.60 108.79 107.42 107.80 -0.99 -0.9 0
18/02/09 108.75 109.30 108.05 108.79 +0.06 +0.1 0
18/02/08 109.59 109.78 108.59 108.73 -0.88 -0.8 0
18/02/07 109.55 109.72 108.92 109.61 +0.04 0.0 0
18/02/06 109.23 109.65 108.45 109.57 +0.27 +0.2 0
18/02/05 110.10 110.29 109.14 109.30 -0.83 -0.8 0
18/02/02 109.29 110.48 109.25 110.13 +0.86 +0.8 0
18/02/01 109.17 109.75 109.11 109.27 +0.10 +0.1 0
日経平均
日付、始値、高値、安値、終値、前日比、前日比%
18/02/13 21,633.34 21,679.20 21,211.53 21,244.68 -137.94 -0.6 1,962,390,000
18/02/09 21,507.74 21,510.30 21,119.01 21,382.62 -508.24 -2.3 2,137,480,000
18/02/08 21,721.57 21,977.03 21,649.70 21,890.86 +245.49 +1.1 1,820,420,000
18/02/07 22,001.29 22,353.87 21,627.13 21,645.37 +35.13 +0.2 2,336,290,000
18/02/06 22,267.00 22,277.45 21,078.71 21,610.24 -1,071.84 -4.7 3,155,710,000
18/02/05 22,921.16 22,967.69 22,659.43 22,682.08 -592.45 -2.5 1,881,890,000
18/02/02 23,361.67 23,367.96 23,122.45 23,274.53 -211.58 -0.9 1,702,440,000
18/02/01 23,276.10 23,492.77 23,211.12 23,486.11 +387.82 +1.7
それで、NYダウが+1.38%、ドル円が-0.9動いたときに、翌日nikkeiがどうなるかKNearestNeighborsで算出
<?php require_once 'vendor/autoload.php'; use Phpml\Classification\KNearestNeighbors; /* ダウ 2018年2月10日 24,190.9 330.44 +1.38% 23,360.289 24,382.138 735,033,934 2018年2月9日 23,860.458 - -4.15% 23,849.228 24,903.679 657,504,273 2018年2月8日 24,893.349 -19.42 -0.08% 24,785.439 25,293.96 504,623,230 2018年2月7日 24,912.771 567.02 +2.33% 23,778.738 24,946.23 823,936,440 2018年2月6日 24,345.751 - -4.6% 23,923.88 25,520.531 714,449,396 2018年2月3日 25,520.96 -665.75 -2.54% 25,490.66 26,061.791 522,877,741 2018年2月2日 26,186.708 37.32 +0.14% 26,014.439 26,306.701 410,622,631 2018年2月1日 26,149.39 72.50 +0.28% 26,050.978 26,338.029 471,203,651 ドル円 日付、始値、高値、安値、終値、前日比、前日比% 18/02/13 108.60 108.79 107.42 107.80 -0.99 -0.9 0 18/02/09 108.75 109.30 108.05 108.79 +0.06 +0.1 0 18/02/08 109.59 109.78 108.59 108.73 -0.88 -0.8 0 18/02/07 109.55 109.72 108.92 109.61 +0.04 0.0 0 18/02/06 109.23 109.65 108.45 109.57 +0.27 +0.2 0 18/02/05 110.10 110.29 109.14 109.30 -0.83 -0.8 0 18/02/02 109.29 110.48 109.25 110.13 +0.86 +0.8 0 18/02/01 109.17 109.75 109.11 109.27 +0.10 +0.1 0 日経平均 日付、始値、高値、安値、終値、前日比、前日比% 18/02/13 21,633.34 21,679.20 21,211.53 21,244.68 -137.94 -0.6 1,962,390,000 18/02/09 21,507.74 21,510.30 21,119.01 21,382.62 -508.24 -2.3 2,137,480,000 18/02/08 21,721.57 21,977.03 21,649.70 21,890.86 +245.49 +1.1 1,820,420,000 18/02/07 22,001.29 22,353.87 21,627.13 21,645.37 +35.13 +0.2 2,336,290,000 18/02/06 22,267.00 22,277.45 21,078.71 21,610.24 -1,071.84 -4.7 3,155,710,000 18/02/05 22,921.16 22,967.69 22,659.43 22,682.08 -592.45 -2.5 1,881,890,000 18/02/02 23,361.67 23,367.96 23,122.45 23,274.53 -211.58 -0.9 1,702,440,000 18/02/01 23,276.10 23,492.77 23,211.12 23,486.11 +387.82 +1.7 */ $dow_usyen = [[0.28, 0.1],[0.14, 0.86],[-2.54, -0.8],[-4.6, 0.2],[2.33, 0],[-0.08, 0.8],[4.15,0.1]]; $nikkei = ['-0.9', '-2.5', '-4.7', '0.2', '1.1', '-2.3','-0.6']; $classifier = new KNearestNeighbors(); $classifier->train($dow_usyen, $nikkei); echo $classifier->predict([1.38, -0.9]);

アルゴリズムでは、-0.9が近いと言っています。。。
なにこれ!
まずはチュートリアルから。
<?php require_once 'vendor/autoload.php'; use Phpml\Classification\KNearestNeighbors; $sample = [[1, 3],[1, 4],[2, 4],[3, 1], [4,1], [4, 2]]; $labels = ['a', 'a', 'a', 'b', 'b', 'b']; $classifier = new KNearestNeighbors(); $classifier->train($sample, $labels); echo $classifier->predict([3, 2]);

これ、ほんまかいな?
composerでphp-ai/php-mlをインストール。
ちなみに、php-ai/php-mlはphp7.1でないと入れられないようです。
[vagrant@localhost ml]$ composer require php-ai/php-ml Using version ^0.6.2 for php-ai/php-ml ./composer.json has been created Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 1 install, 0 updates, 0 removals - Installing php-ai/php-ml (0.6.2): Downloading (100%) Writing lock file Generating autoload files
これは。。。興奮しますね。

EPELリポジトリとは、Centos標準のリポジトリでは提供されていないパッケージをyumコマンドでインストールすることを可能にするリポジトリのこと。EPELはエンタープライズ向けリポジトリ。
EPELリポジトリをインストール
yum install epel-release
続いて、php7.1をインストール
yum install –enablerepo=remi,remi-php71 php php-devel php-mbstring php-pdo php-gd php-xml php-mcrypt

久しぶりにValueCommerceにログインしました(笑)
<!DOCTYPE html>
<html lang='ja'>
<head>
<title>API</title>
<meta charset='utf-8'>
</head>
<body>
<?php
$yahoo_result = getYahooResult('ヴィトン');
foreach ($yahoo_result as $item) :
?>
<div style='margin-bottom: 20px; padding: 30px; border: 1px solid #000; overflow:hidden;'>
<div style='float: left;'><img src='<?php echo $item['img']; ?>'></div>
<div style='float: left; padding: 20px;'>
<div><?php echo $item['name']; ?></div>
<div><a href='<?php echo $item['url']; ?>' target="_blank"><?php echo $item['url']; ?></a></div>
<div><?php echo $item['price']; ?>円</div>
</div>
</div>
<?php
endforeach;
?>
</body>
</html>
<?php
function getYahooResult($keyword){
$baseurl = "http://shopping.yahooapis.jp/ShoppingWebService/V1/itemSearch";
$params = array();
$params["appid"] = "***";
$params["query"] = urlencode_rfc3986($keyword);
$params["sort"] = urlencode_rfc3986("+price");
$params["affiliate_type"] = "vc";
$params["affiliate_id"] = urlencode_rfc3986("***");
$canonical_string = "";
foreach ($params as $k => $v){
$canonical_string .= "&" . $k . "=" . $v;
}
$canonical_string = substr($canonical_string, 1);
$url = $baseurl . "?" . $canonical_string;
// echo $url . "<br>";
$yahoo_xml = simplexml_load_string(@file_get_contents($url));
// print_r('<pre>');
// var_dump($yahoo_xml);
// print_r('</pre>');
$items = array();
foreach($yahoo_xml->Result->Hit as $item){
$items[] = array(
'name' => (string)$item->Name,
'url' => (string)$item->Url,
'img' => (string)$item->Image->Medium,
'price' => (string)$item->Price,
);
}
var_dump($items);
return $items;
}
function urlencode_rfc3986($str){
return str_replace("%7E", "~", rawurlencode($str));
}
?>

foreach文は、{}を:、endforeachに変更できる。
連想配列のforeach入れ子でも同じですね。
<?php
$investment = array(
'us' => array('ADARA','BIRDEYE','ClearMotion'),
'japan' => array('ombie', 'caster', 'Cloud Ace', 'GHELIA')
);
foreach($investment as $contry => $company) :
foreach ($company as $value) :
echo $contry .' : '. $value. '<br>';
endforeach;
endforeach;
?>
us : ADARA
us : BIRDEYE
us : ClearMotion
japan : ombie
japan : caster
japan : Cloud Ace
japan : GHELIA
以下のように、endforeach;が1回だとエラーになります。
<?php
$investment = array(
'us' => array('ADARA','BIRDEYE','ClearMotion'),
'japan' => array('ombie', 'caster', 'Cloud Ace', 'GHELIA')
);
foreach($investment as $contry => $company) :
foreach ($company as $value) :
echo $contry .' : '. $value. '<br>';
endforeach;
echo 'endforeachを1回';
色々できそうですね♪
<!DOCTYPE html>
<html lang='ja'>
<head>
<title>api</title>
<meta charset='utf-8'>
</head>
<body>
<?php
$rakuten_result = getRakutenResult('adidas', 1000);
foreach ($rakuten_result as $item):
?>
<div style='margin-bottom:20px; padding:30px; border:1px solid #000; overflow:hidden;'>
<div style='float: left;'><img src='<?php echo $item['img']; ?>'></div>
<div style='float: left; padding: 20px;'>
<div><?php echo $item['name']; ?></div>
<div><a href='<?php echo $item['url']; ?>' target_"blank"><?php echo $item['url']; ?></a></div>
<div><?php echo $item['price']; ?>円</div>
<div><?php echo $item['shop']; ?></div>
</div>
</div>
<?php
endforeach;
?>
</body>
</html>
<?php
function getRakutenResult($keyword, $min_price){
$baseurl = 'https://app.rakuten.co.jp/services/api/IchibaItem/Search/20170706';
function urlencode_rfc3986($str){
return str_replace('%7E','~', rawurlencode($str));
}
$params = array();
$params['applicationId'] = '***';
$params['keyword'] = urlencode_rfc3986($keyword);
$params['sort'] = urlencode_rfc3986('+itemPrice');
$params['minPrice'] = $min_price;
$params['genreId'] = '509057';
$canonical_string='';
foreach($params as $k => $v){
$canonical_string .= '&' .$k. '=' .$v;
}
$canonical_string = substr($canonical_string, 1);
$url = $baseurl . '?' . $canonical_string;
$rakuten_json=json_decode(@file_get_contents($url, true));
print_r('<pre>');
var_dump($rakuten_json);
print_r('</pre>');
$items = array();
foreach($rakuten_json->Items as $item) {
$items[] = array(
'name' => (string)$item->Item->itemName,
'url' => (string)$item->Item->itemUrl,
'img' => isset($item->Item->mediumImageUrls[0]->imageUrl) ? (string)$item->Item->mediumImageUrls[0]->imageUrl : '',
'price' => (string)$item->Item->itemPrice,
'shop' => (string)$item->Item->shopName,
);
}
return $items;
}
?>
