rcity-sampling / sample.py
levena's picture
feat: これどこにcommitされるんだ
e3fb9a3
raw
history blame
2.4 kB
import matplotlib.pyplot
import pandas as pd
import os
import random
def main():
df = readcsv(10)
if df is not None:
plt = simulate_games(df, num_games=2000)
plt.show()
def readcsv(filter: int = 10) -> pd.DataFrame | None:
# CSVファイルの存在確認
csv_file = "saka.csv"
current_dir = os.path.dirname(os.path.abspath(__file__))
csv_path = os.path.join(current_dir, csv_file)
if not os.path.isfile(csv_path):
print(f"Error: {csv_file} does not exist.")
return None
# CSVファイルの読み込み
df = pd.read_csv(csv_path)
filtered_df = df[df.iloc[:, 0] == filter]
# フィルター後のデータフレームを表示
print(filtered_df)
return filtered_df
def simulate_games(df, num_games: int = 1000, max_score: int = 20000):
results = {}
for index, row in df.iterrows():
place = row["place"]
win_score = row["win"]
lose_score = row["lose"]
draw_score = row["draw"]
win_rate = row["win_rate"]
lose_rate = row["lose_rate"]
draw_rate = row["draw_rate"]
init_score = row["init_score"]
scores = [init_score]
for _ in range(num_games):
result = random.choices([1, 2, 3], weights=[win_rate, lose_rate, draw_rate])[0]
if result == 1:
scores.append(scores[-1] + win_score)
elif result == 2:
scores.append(scores[-1] + lose_score)
else:
scores.append(scores[-1] + draw_score)
results[place] = scores
df.at[index, "reached_goal"] = any([score >= row["rank_up_score"] for score in scores])
df.at[index, "rank_down"] = any([score <= 0 for score in scores])
matplotlib.pyplot.figure(figsize=(10, 6))
for place, scores in results.items():
matplotlib.pyplot.plot(range(num_games + 1), scores, label=place)
matplotlib.pyplot.axhline(y=df.iloc[0]["init_score"], color="black", linestyle="--", label="initial score")
matplotlib.pyplot.axhline(y=df.iloc[0]["rank_up_score"], color="red", linestyle="--", label="goal")
matplotlib.pyplot.xlabel("Game")
matplotlib.pyplot.ylabel("Score")
matplotlib.pyplot.ylim(0, max_score)
matplotlib.pyplot.title("Score Transition")
matplotlib.pyplot.legend()
return matplotlib.pyplot
if __name__ == "__main__":
main()