解説
10はどちらの区分?AIの件数集計で「以上・未満」をそろえよう
0〜29件の記録を三つに分類し、境目の10・20が重複しない条件を確認。範囲外と未確認を分け、区分別合計と元件数を照合する。

AIに件数を「0〜10・10〜20・20〜30」に分けてもらったら、10件の記録はどこへ入るのかな。区切りの数字だけでは、境目を二重に数えたり、どこにも入れなかったりするよ。
このページでは、整数の件数を三つの区分へ、一記録につき一つだけ分類する。紙の表だけでも試せるよ。Python 3.12で確かめるコードも用意したので、AIアカウントや実際の顧客データは必要ないんだ。
下限は含め、上限は含めない
今回の対象は0以上30未満の整数とし、次の三つに分ける。
| 区分 | 条件 | 境目の値の行き先 |
|---|---|---|
| A | 0以上10未満 | 0はA、10は含まない |
| B | 10以上20未満 | 10はB、20は含まない |
| C | 20以上30未満 | 20はC、30は含まない |
「以上」はその値を含み、「未満」はその値を含まない言い方。数式では0 <= x < 10のように書く。片方の端を含み、もう片方を含まない範囲を半開区間と呼ぶよ。
今回なら10はB、20はCだけに入る。30はどの区分にも入れず、範囲外として別に残す条件だよ。
「以下」と「超」に変えるときは全体を見る
Aを0以上10以下、Bを10以上20以下にすると、10が両方に入る。一方、Aを0以上10未満、Bを10超20未満にすると、10がどこにも入らない。
区分の表を一行ずつ読むだけでなく、隣の区分と境目がつながっているかを見ることが大切なんだ。今回の書き方がすべての集計で唯一の正解というわけではなく、目的に合う範囲を先に決めよう。
元の九記録を、分類して数える
練習には-1、0、9、10、19、20、29、30と、値のない記録を一つ使う。NoneはPythonで値がないことを表すものだよ。
values = [-1, 0, 9, 10, 19, 20, 29, 30, None]
def classify(value):
if type(value) is not int:
return '要確認'
if 0 <= value < 10:
return 'A'
if 10 <= value < 20:
return 'B'
if 20 <= value < 30:
return 'C'
return '範囲外'
counts = {name: 0 for name in ['A', 'B', 'C', '範囲外', '要確認']}
for value in values:
label = classify(value)
counts[label] += 1
print(value, label)
print(counts)
print('total', sum(counts.values()))
結果はA・B・Cが各2件、範囲外が2件、要確認が1件で、合計9件。区分の中だけを足した6件と、元の記録数9件を取り違えないでね。
このコードは、整数型の件数だけを受け付ける練習用の契約にしている。文字列の'10'や小数の10.0は要確認へ回す。実データを読み込む段階で変換するなら、どの値を変えてよいかを別に決めよう。
AIへ頼むときも、除外した理由を残す
「Aは0以上10未満、Bは10以上20未満、Cは20以上30未満。整数以外は要確認。範囲外と要確認も別に数え、元の記録IDと行き先を一対一で返す」と伝えられる。
確認では0・10・20・30のちょうどの値と、その一つ前を入れる。同じ記録が複数区分へ入っていないか、消えた記録がないか、区分外を含めた合計が元件数と一致するかを見るよ。

みんなのコメント 0
感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。
最初のコメントをどうぞ。