如何在PHP中整合一系列预测数据?

时间:2017-05-25 12:34:49

标签: php arrays design-patterns similarity

设置

我有一系列降雨概率,我将其作为预测输出:

$rain_probability = array(
  '7am'  => '33',
  '8am'  => '0',
  '9am'  => '8',
  '10am' => '7',
  '11am' => '8',
  '12pm' => '19',
  '1pm'  => '8',
  '2pm'  => '13',
  '3pm'  => '50',
  '4pm'  => '50',
  '5pm'  => '60',
  '6pm'  => '60',
  '7pm'  => '7',
  '8pm'  => '5',
  '9pm'  => '0'
);

$forecast = 'The likelihood of rain is: ';

foreach( $rain_probability as $hour => $percentage )
{
  $forecast .= "$hour: $percentage%. \n";
}

echo $forecast;

结果

  

下雨的可能性是:
  早上7点33%   早上8点0%   上午9点8%   上午10点7%   上午11点8%   中午12点19%   下午1点8%。
  下午2点13%。
  下午3点50%   下午4点50%   下午5点60%   下午6点60%   晚上7点7%   晚上8点5%   晚上9点0%。

期望的结果

我希望这样做更加人性化,就像这样:

  

下雨的可能性是:
  早上7点:33%   上午8点至11点:不到10%   中午12点:19%   下午1点:8%   下午2点:13%   下午3点至4点:50%   下午5点至下午6点:60%   晚上7点至晚上9点:不到10%。

我尝试了什么

认为这很简单,所以我开始写一个循环,检查前一小时的概率是否与当前小时相同。然后需要特殊情况下小于10%的数字。然后必须特殊情况下的第一个和最后一个数组元素。很快我就在很多条件语句中,并且(请原谅双关语)代码不再是非常干燥。并且不确定是否存在某些组合或概率序列的错误,并且可以为此设置测试。但整体上开始感觉我可能正在重新发明轮子,也许有更好的方法。

问题

我的问题不是"我怎样才能完成这项工作" - 但是,是否存在经典的方法,模式,甚至是用于解决此问题的类或库? (有点像计算机科学家庭作业)

2 个答案:

答案 0 :(得分:2)

它似乎不太复杂,只需要一点点爱......

输入:

$rain_probability = array(
  '7am'  => '33',
  '8am'  => '0',
  '9am'  => '8',
  '10am' => '7',
  '11am' => '8',
  '12pm' => '19',
  '1pm'  => '8',
  '2pm'  => '13',
  '3pm'  => '50',
  '4pm'  => '50',
  '5pm'  => '60',
  '6pm'  => '60',
  '7pm'  => '7',
  '8pm'  => '5',
  '9pm'  => '0'
);

方法(Demo):

array_walk($rain_probability,function(&$v){$v=($v<10)?'Less than 10%.':"$v%.";}); // prep %

$forecast="The likelihood of rain is:\n";
$start=$end=$perc='';
foreach($rain_probability as $hour=>$percent){
    if($perc==$percent){                               // merge forecast line
        $end="-{$hour}";
        $perc=$percent;
    }else{                                             // start new forecast line
        if($start){$forecast.="$start$end: $perc\n";}  // skip on first iteration
        $start=$hour;
        $end='';
        $perc=$percent;
    }
}
$forecast.="$start$end: $perc";                        // add final forecast line
echo $forecast;

输出:

The likelihood of rain is:
7am: 33%.
8am-11am: Less than 10%.
12pm: 19%.
1pm: Less than 10%.
2pm: 13%.
3pm-4pm: 50%.
5pm-6pm: 60%.
7pm-9pm: Less than 10%.

答案 1 :(得分:1)

也许这会有所帮助https://github.com/php-ai/php-ml 如果我理解正确,您需要k-means