예제 #1
0
#          Copyright Rein Halbersma 2018-2021.
# Distributed under the Boost Software License, Version 1.0.
#    (See accompanying file LICENSE_1_0.txt or copy at
#          http://www.boost.org/LICENSE_1_0.txt)

# http://forum.stratego.com/topic/360085-data-science-tools-for-the-gravon-archive-of-stratego-games/?p=481081

import pandas as pd

from gravon import pieces, tidy

games = pd.read_csv("../data/classic.csv").query('game_fmt == ".xml"')
setups = tidy.setups(games.copy())
setups = tidy.add_board(setups)
setups = tidy.add_WLD_score(setups)

colonel = pieces.names().index('colonel')

setups['side_balanced_colonels'] = setups['board'].apply(
    lambda x: x.side_sums(colonel).max() == 1)
print('{}\n'.format(setups['side_balanced_colonels'].value_counts(
    normalize=True, sort=False)))
print('{}\n'.format(
    setups.groupby('side_balanced_colonels')['score'].agg(['count', 'mean'])))

major = pieces.names().index('major')

setups['lane_balanced_majors'] = setups['board'].apply(
    lambda x: x.lane_sums(major).max() == 1)
print('{}\n'.format(setups['lane_balanced_majors'].value_counts(normalize=True,
                                                                sort=False)))
예제 #2
0
#          Copyright Rein Halbersma 2018-2021.
# Distributed under the Boost Software License, Version 1.0.
#    (See accompanying file LICENSE_1_0.txt or copy at
#          http://www.boost.org/LICENSE_1_0.txt)

# http://forum.stratego.com/topic/4470-top-20-common-game-setups-at-gravon-site/?p=67241

import pandas as pd

from gravon import stratego, tidy

games = pd.read_csv("../data/classic.csv").query('game_fmt == ".xml"')
piece_fmt = 'US'
setups = tidy.setups(games.copy(), piece_fmt)
setups = tidy.add_WLD_score(setups)

df = setups.groupby('setup_str').agg({
    'W': ['sum'],
    'L': ['sum'],
    'D': ['sum'],
    'score': ['count', 'mean']
})
df.reset_index(inplace=True)
df.columns = ['_'.join(col) for col in df.columns.values]
df.columns = df.columns.str.rstrip('_')
df.columns = df.columns.str.replace(r'_sum$', '')
df.columns = df.columns.str.replace(r'^score_', '')
atleast10 = df.query('count >= 10').sort_values(by=['count'], ascending=False)
atleast10.reset_index(drop=True, inplace=True)
frequent20 = atleast10.head(20)