CakePHP5入門【WebAPI編⑧】統計情報を取得①
A子
…ってなわけで、曜日(七曜)ごとや六曜ごとの出現数字の偏りを調査するよ
C菜
| mysql -u root -p numbersdb[Enter] |
「MATE端末」上で実行しますね~
A子
B美
|
select num3_place1,count(*)
from numbers where lottery_week_int=1 group by num3_place1 order by num3_place1;[Enter] |
上記の例は、ナンバーズ3の「一の位(num3_place1)」の数字の個数(count(*))を月曜日に絞って(lottery_week_int=1)数えたものね
(「group by」句がポイントよ)
A子
てか、本当に正しいの?
B美
|
select num3_place1,count(*)
from numbers where lottery_week_int=1 and lottery_time between 6915 and 6929 group by num3_place1 order by num3_place1;[Enter] |
これで2026年2月9日から2026年2月27日までの三週間分が集計されるわ
C菜
確かに、この範囲内において、月曜日のナンバーズ3の「一の位」の数字の出現回数は合ってました~
(「3」と「6」と「8」が一個ずつ出てます~)
A子
|
select num3_place1,count(*)
from numbers where lottery_time between 6915 and 6929 group by num3_place1 order by num3_place1;[Enter] |
C菜
合計で15回分の当選番号の「一の位」の数字の出現回数は、手作業で集計したものと全く同じでした~
A子
んじゃ、六曜についても同様だね
|
select num3_place1,count(*)
from numbers where lottery_rokuyo_int=0 group by num3_place1 order by num3_place1;[Enter] |
これは「大安(lottery_rokuyo_int=0)」である日の出現数字の傾向ね
「8」が突出してて、「2」と「9」もよく出てるってことだね
C菜
例えば、2026年3月31日は(カレンダーによると)「火曜日(lottery_week_int=2)」で「友引(lottery_rokuyo_int=3)」なんですけど~
|
select num3_place1,count(*)
from numbers where lottery_week_int=2 and lottery_rokuyo_int=3 group by num3_place1 order by num3_place1;[Enter] |
うーん、たしかに数字の偏りは見受けられますけど、サンプルが少なすぎて統計的に意味のある結果とは言えないかもしれませんね~
A子
|
select num3_place10,count(*)
from numbers where lottery_week_int=2 and lottery_rokuyo_int=3 group by num3_place10 order by num3_place10;[Enter] |
|
select num3_place100,count(*)
from numbers where lottery_week_int=2 and lottery_rokuyo_int=3 group by num3_place100 order by num3_place100;[Enter] |
A子
「013」または「053」ってことになるね
少なくとも左端の数字(百の位)に「7」は出ないし、真ん中の数字(十の位)に「2」は無いな
B美
まぁ、ある程度の目安にはなるでしょうけど…
C菜
そういう意味では、最も出現回数が少ない数字が出るんじゃないですか~?
予想数字としては「726」か「727」ってことですね~
B美
(多分、二人とも当たらないと思うけど…(苦笑))
ちなみに、各桁の数字は10通りあるから、十分に収束するためには1000回程度の試行回数が必要なのよね
(10通りの100倍ってこと)
つまり、これらの結果は全く収束状態には至っていないってことよ
「七曜」だけ、「六曜」だけって場合は(見かけ上は偏っているようにも見えるけど)収束していると言っていいんじゃないかな
(数学は得意じゃないから、間違ってるかもしれないけど…(苦笑))
A子
ということは、ナンバーズ3の(各桁ではなくストレートの)確率が収束するためには100,000回、ナンバーズ4だと1,000,000回の試行が必要ってこと?
B美
(数学的には)組み合わせの数の100倍って、一般的には言われてるからね
うーん、そうねぇ
約7,000回抽選されているナンバーズ3って、(ストレートで)1,000通りあるそれぞれの当選番号の出現回数ってどのくらいだと思う?
C菜
少しは偏りがあるとしても、少ないのが5回、多いものでも9回というところじゃないですか~?
A子
6回から8回くらいだと思うけどね
B美
しかも、1回しか出現していない当選番号って9個もあるの
(当選番号は「056」「083」「120」「248」「255」「285」「380」「467」「541」)
さすがに18回というのは突出していて、一つだけ(当選番号は「355」)しかないけどね
(次が15回で、やはり1個だけ…当選番号は「638」)
でも、14回出現したものについては、こちらも9個ほどあるのよ
(当選番号は「199」「271」「372」「458」「461」「589」「802」「928」「943」)
【2026年3月13日までの集計】
C菜
A子
B美
ところが、実態はこうよ
出現回数の最も多いものは、驚きの6回なの
(もちろん、一度も出ていない番号もかなり多い…)
まぁ、6回出現したものはさすがに1個だけ(当選番号は「1564」)なんだけど、5回出現したものは4個もあるわ
さらに、4回出現の当選番号については、なんと47個もあるという…
【2026年3月13日までの集計】
A子
C菜
A子
…ってなわけで、『WebAPI』と『JSON』を設計していこう
C菜
で、それぞれごとに「曜日(七曜)のみ」「六曜のみ」「七曜と六曜の組み合わせ」の三つに関して、各桁の数字の出現回数を取得できるようにしたいです~
(指定した「年月日」の集計データとして~)
A子
…ってことは
| WebAPI | メソッド名 | 機能 | |
|---|---|---|---|
| ナンバーズ3 | get3_week_ymd/Y-m-d | get3WeekYmd($ymd) | 年月日を引数に「曜日(七曜)」ごとの集計を行う |
| get3_rokuyo_ymd/Y-m-d | get3RokuyoYmd($ymd) | 年月日を引数に「六曜」ごとの集計を行う | |
| get3_six_seven_ymd/Y-m-d | get3SixSevenYmd($ymd) | 年月日を引数に「七曜」と「六曜」の組み合わせで集計を行う | |
| ナンバーズ4 | get4_week_ymd/Y-m-d | get4WeekYmd($ymd) | 年月日を引数に「曜日(七曜)」ごとの集計を行う |
| get4_rokuyo_ymd/Y-m-d | get4RokuyoYmd($ymd) | 年月日を引数に「六曜」ごとの集計を行う | |
| get4_six_seven_ymd/Y-m-d | get4SixSevenYmd($ymd) | 年月日を引数に「七曜」と「六曜」の組み合わせで集計を行う |
これでどう?
あ、引数については「年-月-日」一つだけで良いよね?
(日付選択のフォーム部品から使いやすいし…)
B美
それじゃ、次は『JSON』設計ね
C菜
(2026年3月31日の場合)
| ・・・/get3_six_seven_ymd/2026-03-31 |
そのときの(成功時の)JSONって、こんな感じでいかがでしょうか~?
|
{
"status":{ "code":200, "message":"Success" }, "result":{ "lottery_date_str":"2026年3月31日", "lottery_week_str1":"火曜日", "lottery_week_str2":"火", "lottery_rokuyo_str":"友引", "num3_place1":[22,17,25,35,17,24,14,14,16,21], "num3_place10":[21,27,11,21,20,27,16,17,21,24], "num3_place100":[28,22,25,21,25,16,18,13,21,16] } } |
集計結果である「num3_place1」(「一の位」の数字)等の内容を配列にして、インデックス(添字)がその桁の数字に対応しているわけです~
(例えば、「十の位(num3_place10)」に「4」の数字が出現した回数は(num3_place10[4]で)20回という感じですね~)
A子
(「平日ではない」というエラーね)
|
{
"status":{ "code":500, "message":"Not a Weekday" }, "result":null } |
なぜって、平日には抽選が無いから…
C菜
それでは、「ApiController」クラスに六つのメソッドを実装していきましょう~
B美
少し疲れたわ
A子
(頭を使いすぎた…(苦笑))


