データサイエンスでDota2強くなるかも説(4)～ミディアムとハード試合データをプロットしてみたら驚愕の事実が～

## はじめに


最近，Dota2を始めましたが全く勝てません
ハードボットにボコボコにされます．

色々と調べても「死ぬな」くらいのことしか分らず苦戦しています．

### データサイエンスでDota2強くなるかも説

そこで，データサイエンスの力を借りて，どのような状況なら勝っているか？や前回に比べてどのように振舞ったから勝てたのか？ということを数値化して分析していけば強くなるのでは！と考えました．本企画はその仮説を検証していく企画です．

![file](https://hamaruki.com/wp-content/uploads/2022/09/image-1662048158424.png)

### 前回までのあらすじ

#### 環境構築編
Dota2の情報をPythonで取得できるような環境を作成し[<sup>*1</sup>](https://hamaruki.com/2022/09/04/data-science_with_dota2_04/#参考サイト)，データを取得＋定期的に保存する機構を作りました[<sup>*2</sup>](https://hamaruki.com/2022/09/04/data-science_with_dota2_04/#参考サイト)．

#### データ解析編

実際にBotとの対戦をプロットしてみて客観的に解析してみました[<sup>*3</sup>](https://hamaruki.com/2022/09/04/data-science_with_dota2_04/#参考サイト)．


### 今回の概要

ミディアムとハード試合データをプロットして解析してみたいと思います．

## 必要なもの

### Dota2

![](https://hamaruki.com/wp-content/uploads/2022/09/DOTA-2_1920x1080.jpg)

### Dota2解析環境

https://hamaruki.com/2022/09/02/data-science_with_dota2_03/


## Dota2 解析プログラム


### 使用データセット

- bot戦（ミディアム）：Chaos Knight【勝利】
- bot戦（ミディアム）：Chaos Knight【勝利】
- bot戦（ハード）：Chaos Knight【敗北】
- bot戦（ハード）：Chaos Knight【敗北】

4試合のデータセットを使います．2つとも`Chaos Knight`を使用しました．
僕的にはこいつが使いやすいかなと初心者ながら感じでいます．

![file](https://hamaruki.com/wp-content/uploads/2022/09/image-1662047328994.png)

### Import package


```python
import dota2gsi
import glob
import pandas as pd

import seaborn as sns
from matplotlib import pyplot as plt
import matplotlib as mpl
```

### figure style


```python

#sns.palplot(sns.color_palette("RdBu_r", 24))
#sns.set_palette("RdBu_r")
#sns.set(style='darkgrid')
#sns.set_style('whitegrid')
mpl.style.use('fivethirtyeight')
```

### Read csv file


```python
target_log_file_list = ["log_20220901-160140_BM_W.csv", "log_20220901-204148_BM_W.csv", "log_20220902-010822_BH_L.csv", "log_20220904-035245_BH_L.csv"]
```


```python
df_list = []
for file_path in target_log_file_list:
    df_list.append(pd.read_csv(file_path))
```

```python
df_list[0].head(5)
```




```python
df_list[0].columns
```



```bash
    Index(['Unnamed: 0', 'alive', 'break', 'buyback_cost', 'buyback_cooldown',
           'disarmed', 'has_debuff', 'health', 'health_percent', 'hexed', 'id',
           'level', 'magicimmune', 'mana', 'mana_percent', 'max_health',
           'max_mana', 'muted', 'name', 'respawn_seconds', 'selected_unit',
           'silenced', 'stunned', 'talent_1', 'talent_2', 'talent_3', 'talent_4',
           'talent_5', 'talent_6', 'talent_7', 'talent_8', 'xpos', 'ypos',
           'clock_time', 'daytime', 'dire_ward_purchase_cooldown', 'game_state',
           'game_time', 'name.1', 'matchid', 'radiant_ward_purchase_cooldown',
           'nightstalker_night', 'roshan_state', 'roshan_state_end_seconds',
           'win_team', 'customgamename', 'assists', 'camps_stacked', 'deaths',
           'denies', 'gold', 'gold_reliable', 'gold_unreliable', 'gpm',
           'hero_damage', 'kill_list:victimid_#', 'kill_streak', 'kills',
           'last_hits', 'net_worth', 'pro_name', 'runes_activated',
           'support_gold_spent', 'wards_destroyed', 'wards_placed',
           'wards_purchased', 'xpm'],
          dtype='object')
```


### Plot level section

#### Extract level data


```python
df_ex_data_list = []
for i, df in enumerate(df_list):
    target_name = 'level'
    plot_name = '{}_try{}'.format(target_name, i)
    df[plot_name] = df[target_name]
    df_ex_data_list.append(df[plot_name])

df_ex_merge = pd.concat(df_ex_data_list, axis=1)
```


```python
df_ex_merge
```



#### Plot level data

ヒーローのレベルをプロットした結果がこちらです．
これを見るとtry0とtry1とtry2が似たような繊維になっていることが分かります．try1は後半ではややズレた波形になってしまっていますが，
try0とtry2に関しては終始似たような遷移になっています．

```python
plt.figure(figsize=(20,8))
sns.lineplot(data=df_ex_merge, lw=2)
#sns.lineplot(data=df_data, x='clock_time', y='level', lw=2)
```

![](https://hamaruki.com/wp-content/uploads/2022/09/output_15_1-1.png)


### Plot health section

#### Extract health data


```python
df_ex_data_list = []
for i, df in enumerate(df_list):
    target_name = 'health_percent'
    plot_name = '{}_try{}'.format(target_name, i)
    df[plot_name] = df[target_name]
    df_ex_data_list.append(df[plot_name])

df_ex_merge = pd.concat(df_ex_data_list, axis=1)
```

#### Plot health data

正直とてもみにくいので何か工夫する必要があると思います．


```python
plt.figure(figsize=(20,5))
sns.lineplot(data=df_ex_merge, lw=2)
```


![](https://hamaruki.com/wp-content/uploads/2022/09/output_20_1.png)


### Plot gold data

#### Extract gold data


```python
df_ex_data_list = []
for i, df in enumerate(df_list):
    target_name = 'gold'
    plot_name = '{}_try{}'.format(target_name, i)
    df[plot_name] = df[target_name]
    df_ex_data_list.append(df[plot_name])

df_ex_merge = pd.concat(df_ex_data_list, axis=1)
```



#### Plot gold data

try1, try2, try3はこまめにアイテムを購入して様子が伺えます．

```python
plt.figure(figsize=(20,5))
sns.lineplot(data=df_ex_merge, lw=2)
```

![](https://hamaruki.com/wp-content/uploads/2022/09/output_25_1.png)

#### Plot reliable gold data


```python
df_ex_data_list = []
for i, df in enumerate(df_list):
    target_name = 'gold_reliable'
    plot_name = '{}_try{}'.format(target_name, i)
    df[plot_name] = df[target_name]
    df_ex_data_list.append(df[plot_name])

df_ex_merge = pd.concat(df_ex_data_list, axis=1)
```


```python
plt.figure(figsize=(20,5))
sns.lineplot(data=df_ex_merge, lw=2)
```

![](https://hamaruki.com/wp-content/uploads/2022/09/output_28_1.png)

## 考察

try0, try1はミディアム，try2, try3はハードボットと対戦しており，ミディアムボットには全勝，ハードボットとは全敗という結果です．

これを踏まえてレベルの波形を見るととても面白いことが分かります．レベルは全勝したミディアムボットと同じような遷移をしているにもかかわらずハードボットとは勝つことができませんでした．これより，ミディアムボットとハードボットとの対戦での振る舞いは全く異なるということが分かります．

レベルだけでなく，所持金の遷移を見ても同じようなことが言えます．つまり，ミディアムボットとの対戦でいくらスキル（立ち振る舞いなど）を磨いてもハードボットとの対戦では効果は薄い可能性があるということが分かりました．

恐らく試合の質が結構異なると思われます．


## プログラム

コードはこちらです．

https://github.com/HamaruKi0303/Dota2-GSI-Science/blob/main/Dota2Analysis04.ipynb

## おわりに

今回はミディアムボットとハードボットとの対戦ログを解析してみた結果．
ミディアムボットで数をこなしていれば成長すると思っていたので結構ショックな結果になりました．．．．
なので，今後はハードボットとの対戦を中心に解析/考察を進めていきたいと思います．


<h2 id="参考サイト">参考サイト</h2>

- *1：[データサイエンスでDota2強くなるかも説(1)～環境設定～](https://hamaruki.com/2022/09/01/data-science_with_dota2_01/)
- *2：[データサイエンスでDota2強くなるかも説(2)～ビッグデータ取得&定期保存～](https://hamaruki.com/2022/09/01/data-science_with_dota2_02/)
- *2：[データサイエンスでDota2強くなるかも説(3)～試合データをプロットしてみた～](https://hamaruki.com/2022/09/02/data-science_with_dota2_03/)

## 最新情報

速報はTwitterやブログにて

https://hamaruki.com/category/dota2%e3%83%87%e3%83%bc%e3%82%bf%e3%82%b5%e3%82%a4%e3%82%a8%e3%83%b3%e3%82%b9/


https://twitter.com/hAru_mAki_ch/status/1569690537917140994