Python學習手札(十)寶可夢資料分析

2021-10-09 12:39:43 字數 4079 閱讀 7291

然後import我們最常用的三大件:pandas, seaborn, matplotlib, 並且讀取資料

import pandas as pd

import seaborn as sns

import matplotlib.pyplot as plt

df = pd.read_csv(

"./pokemon_data.csv"

)

根據資料的尺寸看出,可以通過 df.shape 這個來實現。當然 df.info() 能夠給我們更加詳細的每個列的資訊。這裡我們通過這個方式,可以發現這個資料集一共收錄了801行,41列的資料。說明一共有801隻寶可夢,每隻寶可夢我們有41個特徵來描述它們。然後就迎來了我們的第乙個問題:這麼多特徵,是否會有資料缺失呢?畢竟有些寶可夢比較神秘感,就連大木博士都不一定知道。這裡我們可以通過如下**來觀察每個特徵的缺失情況:

# 計算出每個特徵有多少百分比是缺失的

percent_missing = df.isnull().

sum()*

100/

len(df)

missing_value_df = pd.dataframe(

)# 檢視top10缺失的

missing_value_df.sort_values(by=

'percent_missing'

, ascending=

false

).head(

10)

通過檢視以上資料,我們可以發現,type2 這個字段缺失的比率最高,達到了 48% 左右。說明超過半數的寶可夢還是單純的只有乙個屬性,剩下一般的則具有兩種屬性。

然後第二個問題就是:這麼多寶可夢,每代分別有幾隻?這裡我們可以通過簡單的 df[『generation』].value_counts() 來得到。但是為了更加直觀的表現出不同代的寶可夢的數量差別,這裡我們可以用pandas自帶的畫圖的功能來繪製乙個柱狀圖:通過檢視以上資料,我們可以發現,type2 這個字段缺失的比率最高,達到了 48% 左右。說明超過半數的寶可夢還是單純的只有乙個屬性,剩下一般的則具有兩種屬性。

然後第二個問題就是:這麼多寶可夢,每代分別有幾隻?這裡我們可以通過簡單的 df[『generation』].value_counts() 來得到。但是為了更加直觀的表現出不同代的寶可夢的數量差別,這裡我們可以用pandas自帶的畫圖的功能來繪製乙個柱狀圖:

# 檢視各代口袋妖怪的數量

df['generation'

].value_counts(

).plot.bar(

)

不難發現,寶可夢數量最多的是在第5代,最少的是在第6代。然後我們再來看不同的主屬性的分布。這裡我們可以先做一些簡單的假設,比如蟲屬性的寶可夢種模擬較多因為在劇**現的頻率相當高,而且有很多種進化。

# 檢視每個系口袋妖怪的數量

df['type1'

].value_counts(

).sort_values(ascending=

true

).plot.barh(

)

這裡我們將之前的柱狀圖橫過來了,更便於觀察。這裡我們可以看到,數量最多的寶可夢是水系,然後是普通,然後是草系。蟲系只排在了第四,並沒有和預期中那樣那麼多。

看完了基礎的一些分布,接下來我會想做一些簡單的相關性分析。我們可以通過以下的**生成相關性圖。

# 相關性熱力圖分析

plt.subplots(figsize=(20

,15))

ax = plt.axes(

)ax.set_title(

"correlation heatmap"

)corr = df.corr(

)sns.heatmap(corr,

xticklabels=corr.columns.values,

yticklabels=corr.columns.values)

接下來我們從寶可夢在實戰中的角度來分析這組資料。這裡我們只關注六個基礎值:血量,攻擊力,防禦力,特攻,特防,速度。因為只有這六個基礎值決定了乙隻寶可夢的戰鬥力在不考慮派系克制的情況下。

interested =

['hp'

,'attack'

,'defense'

,'sp_attack'

,'sp_defense'

,'speed'

]sns.pairplot(df[interested]

)

這裡我們可以看到大部分都是成正比例的,乙個值的提高往往會拉高另外乙個值。這點我們通過相關性熱力圖也可以看到

# 通過相關性分析heatmap分析五個基礎屬性

plt.subplots(figsize=(10

,8))

ax = plt.axes(

)ax.set_title(

"correlation heatmap"

)corr = df[interested]

.corr(

)sns.heatmap(corr,

xticklabels=corr.columns.values,

yticklabels=corr.columns.values,

annot=

true

, fmt=

"f",cmap=

"ylgnbu"

)

看完這些以後,我們就可以開始計算種族值然後來選取我們的平民神獸了。畢竟不是每個人都能收服代歐奇希斯,超夢,夢幻這種傳說級別的寶可夢。這裡我們可以通過如下方式,先做乙個特徵型別轉化,然後再計算

for c in interested:

df[c]

= df[c]

.astype(

float

)df = df.assign(total_stats = df[interested]

.sum

(axis=1)

)

這樣我們就完成了用 total_stats 這個欄位來儲存種族值這一特徵。我們可以做個柱狀圖視覺化來看看種族值的分布是什麼樣的:

# 種族值分布

total_stats = df.total_stats

plt.hist(total_stats,bins=35)

plt.xlabel(

'total_stats'

)plt.ylabel(

'frequency'

)

同時我們還可以根據不同的屬性來看:

# 不同屬性的種族值分布

plt.subplots(figsize=(20

,12))

ax = sns.violinplot(x=

"type1"

, y=

"total_stats"

, data=df, palette=

"muted"

)

找到非傳說寶可夢但是種族值達到了的傳說寶可夢級別的

最後我們就可以通過簡單的過濾和排序來找到我們應該去捕捉的寶可夢了:

df[

(df.total_stats >=

570)

&(df.is_legendary ==0)

]['name'

].head(

10)

從結果上來看,我們平民寶可夢訓練師應該考慮的top10寶可夢應該是:妙蛙花,噴火龍,水箭龜,比雕,胡地,呆河馬,耿鬼,袋獸,大甲,暴鯉龍。這樣,我們就通過簡單的資料分析,完成了大多數寶可夢動漫中的訓練師不可能完成的任務。這麼想想,公升職加薪,出任ceo,贏取白富美,當上研究所所長的日子簡直指日可待呀!

不過要不是有dsw 探索者版這麼方便的工具,這真是乙個無法完成的任務。現在,這份寶可夢分析已經放在了這裡,希望讀到這篇文章的你也能像我一樣,通過資料分析成為乙個偉大的寶可夢訓練師。大功告成衝衝衝!

Python之資料分析(寶可夢資料分析)

在此感謝阿里雲天池平台提供的學習平台,並提供相應的教程供小白們學習資料分析。seaborn庫 seaborn 是基於 python 且非常受歡迎的圖形視覺化庫,在 matplotlib 的基礎上,進行了更高階的封裝,使得作圖更加方便快捷。即便是沒有什麼基礎的人,也能通過極簡的 做出具有分析價值而又十...

龍良曲pytorch學習筆記 載入寶可夢資料集

1 import torch 2import os,glob 3import random,csv45 from torch.utils.data import dataset,dataloader67 from torchvision import transforms 8from pil imp...

python爬蟲學習(十)bs4解析資料

lxml安裝是個坑 coding utf 8 import lxml import requests from bs4 import beautifulsoup if name main ua偽裝 將對應的user agent封裝到字典中 headers url 對指定url發起請求,對應的url是...