※このプログラムはお遊びで作った予想プログラムです。実際に何の数字が抽選されるかなんてわかりません。このプログラムで予測して当たらなかったとしてもクレームは一切受け付けません。
公開して早速ver.2にアップデートしました。予想される数字を3つ選出するプログラムです。
ロト6の予想プログラムver.1
import pandas as pd
import numpy as np
from sklearn.ensemble import RandomForestClassifier
# 過去の抽選結果データ
data = [
[2,16,23,38,40,43],
[7,8,9,19,22,38],
[25,31,33,35,37,42],
[19,29,36,37,41,42],
[6,18,29,33,35,40],
[5,12,15,16,28,40],
[7,23,27,30,34,36],
[5,19,23,26,31,42],
[2,4,9,19,33,36],
[3,9,29,30,39,42],
#上記の数字は一部です。実際の過去の数字全て入力する場合はご自身で入力してください。
]
# データフレームに変換
df = pd.DataFrame(data, columns=[f'num_{i+1}' for i in range(6)])
# 各数字の出現頻度を計算
freq = pd.Series(np.concatenate(df.values)).value_counts().sort_index()
# 特徴量の作成
X = []
y = []
for i in range(len(data) - 1):
current_numbers = data[i]
next_numbers = data[i + 1]
features = [freq[num] for num in current_numbers]
X.append(features)
y.append(next_numbers)
X = np.array(X)
y = np.array(y)
# モデルの訓練
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X, y)
# 最新の抽選結果
latest_numbers = data[-1]
latest_features = np.array([freq[num] for num in latest_numbers]).reshape(1, -1)
# 重複しない6個の数字を予測
next_pred = model.predict(latest_features)
# 重複を避けるための処理
predicted_numbers = list(next_pred)
available_numbers = set(range(1, 44)) - set(latest_numbers) # 1から43までの数字から最新の抽選結果を除外
predicted_numbers = np.array(predicted_numbers)
while len(predicted_numbers) < 6:
additional_number = np.random.choice(list(available_numbers))
predicted_numbers = np.append(predicted_numbers, additional_number)
predicted_numbers = predicted_numbers[:6] # 必要なだけ6つに切り詰める
print(f'Next predicted numbers: {predicted_numbers}')
ロト7の予想プログラムver.1
import pandas as pd
import numpy as np
from sklearn.ensemble import RandomForestClassifier
# データの読み込み
data = [
[1,3,9,12,25,26,35],
[13,26,27,29,30,34,37],
[1,2,4,19,21,26,28],
[11,12,18,19,23,26,31],
[4,5,13,16,22,23,35],
[2,12,18,20,25,28,30],
[11,13,14,18,19,23,31],
[11,13,19,25,29,36,37],
[2,15,19,20,22,31,36],
[7,19,23,33,34,35,36],
[4,13,14,15,17,27,33],
#上記の数字は一部です。実際の過去の数字全て入力する場合はご自身で入力してください。
]
# データフレームに変換
df = pd.DataFrame(data, columns=[f'num_{i+1}' for i in range(7)])
# 各数字の出現頻度を計算
freq = pd.Series(np.concatenate(df.values)).value_counts().sort_index()
# 特徴量の作成
X = []
y = []
for i in range(len(data) - 1):
current_numbers = data[i]
next_numbers = data[i + 1]
features = [freq[num] for num in current_numbers]
X.append(features)
y.append(next_numbers)
X = np.array(X)
y = np.array(y)
# モデルの訓練
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X, y)
# 最新の抽選結果
latest_numbers = data[-1]
latest_features = np.array([freq[num] for num in latest_numbers]).reshape(1, -1)
# 重複しない7個の数字を予測
next_pred = model.predict(latest_features)
print(f'Next predicted numbers: {next_pred}')
ロト6の予想プログラムver.2
import pandas as pd
import numpy as np
from sklearn.ensemble import RandomForestClassifier
# 過去の抽選結果データ
data = [
[7, 10, 12, 17, 23, 28],
[20, 24, 29, 31, 33, 35],
[2, 7, 8, 11, 23, 31],
[12, 13, 23, 24, 28, 29],
[3, 4, 5, 16, 21, 28],
[5, 15, 23, 30, 34, 35],
#上記の数字は一部です。実際の過去の数字全て入力する場合はご自身で入力してください。
]
# データフレームに変換
df = pd.DataFrame(data, columns=[f'num_{i+1}' for i in range(6)])
# 各数字の出現頻度を計算
freq = pd.Series(np.concatenate(df.values)).value_counts().sort_index()
# 特徴量の作成
X = []
y = []
for i in range(len(data) - 1):
current_numbers = data[i]
next_numbers = data[i + 1]
features = [freq[num] for num in current_numbers]
X.append(features)
y.append(next_numbers)
X = np.array(X)
y = np.array(y)
# モデルの訓練と予測
def train_and_predict(random_state):
model = RandomForestClassifier(n_estimators=100, random_state=random_state)
model.fit(X, y)
latest_numbers = data[-1]
latest_features = np.array([freq[num] for num in latest_numbers]).reshape(1, -1)
next_pred = model.predict(latest_features)
# 重複を避けるための処理
predicted_numbers = list(next_pred[0])
available_numbers = set(range(1, 44)) - set(latest_numbers) # 1から43までの数字から最新の抽選結果を除外
while len(predicted_numbers) < 6:
additional_number = np.random.choice(list(available_numbers))
if additional_number not in predicted_numbers:
predicted_numbers.append(additional_number)
return np.array(predicted_numbers[:6]) # 必要なだけ6つに切り詰める
# 予測結果を3パターン生成
predictions = []
random_states = [42, 100, 200] # 異なるシードを設定
for state in random_states:
pred = train_and_predict(state)
predictions.append(pred)
print('Next predicted numbers (3 patterns):')
for i, pred in enumerate(predictions, start=1):
print(f'Pattern {i}: {pred}')
ロト7の予想プログラムver.2
import pandas as pd
import numpy as np
from sklearn.ensemble import RandomForestClassifier
# 過去の抽選結果データ
data = [
[7, 10, 12, 17, 23, 28, 34],
[11, 13, 14, 18, 19, 23, 31],
[11, 13, 19, 25, 29, 36, 37],
[2, 15, 19, 20, 22, 31, 36],
[7, 19, 23, 33, 34, 35, 36],
[4, 13, 14, 15, 17, 27, 33],
#上記の数字は一部です。実際の過去の数字全て入力する場合はご自身で入力してください。
]
# データフレームに変換
df = pd.DataFrame(data, columns=[f'num_{i+1}' for i in range(7)])
# 各数字の出現頻度を計算
freq = pd.Series(np.concatenate(df.values)).value_counts().sort_index()
# 特徴量の作成
X = []
y = []
for i in range(len(data) - 1):
current_numbers = data[i]
next_numbers = data[i + 1]
features = [freq[num] for num in current_numbers]
X.append(features)
y.append(next_numbers)
X = np.array(X)
y = np.array(y)
# モデルの訓練と予測
def train_and_predict(random_state):
model = RandomForestClassifier(n_estimators=100, random_state=random_state)
model.fit(X, y)
latest_numbers = data[-1]
latest_features = np.array([freq[num] for num in latest_numbers]).reshape(1, -1)
next_pred = model.predict(latest_features)
return next_pred[0]
# 予測結果を3パターン生成
predictions = []
random_states = [42, 100, 200] # 異なるシードを設定
for state in random_states:
pred = train_and_predict(state)
predictions.append(pred)
print('Next predicted numbers (3 patterns):')
for i, pred in enumerate(predictions, start=1):
print(f'Pattern {i}: {pred}')
一言
数字を選択するのに悩んだ時に、そのまま使うか目安に使うか程度のお遊びと思っていてください。
追記 一つだけ予想を選出するプログラム三つ選出するプログラム、お好きな方を使うか組み合わせるかして出た結果で遊んでみてください。