案例:FIFA2018球員數據分析

對FIFA2018球員做數據分析

整體思路:

1、確定分析目標
2、導入數據文件
3、查看數據
4、確定分析維度和指標
5、清理需要的數據
6、利用數據做分析
7、根據需要做圖

首先要對FIFA_2018中球員信息做個總體瞭解

1. 導入所需要的庫/包:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
2. 加載數據文件(FIFA_2018_player.csv)
df = pd.read_csv('./FIFA_2018_player.csv')
3. 簡單查看數據,有哪些列,都是什麼類型的值
df.head()

在這裏插入圖片描述
有哪些列:

name:球員姓名
full_name:球員姓名全稱
nationality:國家
league:聯賽
club:俱樂部
age:年齡
birth_date:出生日期
height_cm:身高
weight_kg:體重
eur_value:身價
eur_wage:工資

4. 看下數據的整體信息 (包括count、mean、min、max等)
df.describe()

在這裏插入圖片描述
在數據的整體信息中,也可以看出哪些數據是不太正常的。
像身價eur_value最小值爲0,可以後續查看是否異常。
年齡age最小值是16歲,也可以查看是否正常等。

5. 開始數據清理

所有需要分析的數據都需要查看,是否有缺失或者不正常的數據。
對於數值型,可以看下describe⽅法輸出的信息,重點關注最⼤值、最⼩值、平均值、⾏數等數據。

6.查看name是否有null值
df[df.name.isnull()]
#df.name.isnull()

isnull返回的是布爾類型的值,如果沒有null值返回的就是False
在這裏插入圖片描述
name沒有null值

7.full_name是否有null值
df[df.full_name.isnull()]
8.nationality是否有null值
df[df.nationality.isnull()]
9. league是否有null值
df[df.league.isnull()]
10.可以通過count查看總數(非null數量)以及查看對應列有沒有null值。
df.count()

在這裏插入圖片描述
總數是17994條,可以看到 league和club 中有null值。

11.查看league和club的null值
df[df.league.isnull()]

在這裏插入圖片描述
可以看到league列中有253條null值。
此時我們可以對存在的null值做處理。
①如果不需要聯賽league或者俱樂部club的信息那麼我們可以刪掉,因爲null值的數量也不是很多;
②如果我們做分析時需要用到league或者club的值,在數據量小的情況下可以在瞭解真實數據後進行重新賦值。
253條數據對於⼀萬多條數據來說影響還好,可以刪掉,那麼我們要把league和club中的null值刪掉。

12.刪除league聯賽缺失的數據
df.drop(df[df.league.isnull()].index,inplace=True)

查看是否刪除成功:df[df.league.isnull()]
club俱樂部的缺失值也可以刪除,方法和刪除聯賽league一樣。
刪除:df.drop(df[df.club.isnull()].index,inplace=True)
查看:df[df.club.isnull()]

13.根據4.查看數據的描述性信息describe可知,如果覺得age列最⼩值有問題,可以輸出查看下,其他的類似
df[df['age'] == 16]

在這裏插入圖片描述
可以看出age年齡最小的16的數據沒有問題。

14.身價eur_value列最⼩值是0,也需要看一下
df[df['eur_value'] < 1000]
#df[df['eur_value'] == 0]

在這裏插入圖片描述
eur_value爲0的列可以使⽤平均值填充(只有⼏條數據,也可以刪除)

df['eur_value'].replace(0,df['eur_value'].mean(),inplace=True)

填充完查看是否填充成功

df[df['eur_value']<1000]
# df.loc[7734]  #通過索引查看
# df[df.ID==148745]  #通過ID查看

填充成功,eur_value爲0的數據已經沒有了。
eur_wage列最⼩值是0,也需要看下
df[df['eur_wage'] < 1000]

df[df['eur_wage'] == 0] 查看,處理方法類似。

15.最後看下有⽆重複值(如果有可以⽤drop_duplicates處理)
df[df.duplicated()]
16.對指定的列判斷是否有重複值
df[df.loc[:,['full_name', 'nationality', 'league', 'club','birth_date']].duplicated()]
17.我們還可以查看下name姓名、全稱full_name以及出生日期等有沒有重複的值,對應數據查看有沒有一樣的數據,如果有的話可以進行刪除操作。
df[df.full_name.duplicated()]

在這裏插入圖片描述
可以看到有102條全稱的名字有重複值
我們可以隨便找一條重複記錄看一下:

df[df['full_name'] == 'Carlos Sánchez']

在這裏插入圖片描述
可以看到雖然全稱名字一樣,但是國家、俱樂部,出生日期等都不一樣,所以就是簡單的重名而已。

數據清洗完畢,可以開始分析

1.查看樣本總數
df.count()

在這裏插入圖片描述

2.數值類型列的⼀些常⻅的統計學指標
df.describe()

在這裏插入圖片描述

分析最主要的就是確定維度和指標
什麼是維度和指標呢?
維度指的就是一列或者多列,指標就是統計值或者數據

3.統計不同國家的人數
nationality_data = df.groupby('nationality', as_index=False).count()[['nationality', 'ID']]
nationality_data

我們不需要將國家作爲索引,所以要加 as_index=False
在這裏插入圖片描述
這樣也不利於查看,我們一般將統計後的數據要進行排序,方便我們查看,升序或者降序排列要根據需求定。(查看下面的4.小題)
現在顯示的是ID,我們其實求出來的是人員數量,我們需要給其重命名一下:

nationality_data.rename(columns={'ID':'player_count'}, inplace=True)
nationality_data

在這裏插入圖片描述

4.按照運動員數量排名,sort_values排序
nationality_sorted_data = nationality_data.sort_values('player_count',ascending=False)
nationality_sorted_data

ascending=False 從大到小排序

在這裏插入圖片描述

5.運動員數量⼤於100的國家列表
nationality_sorted_data[nationality_sorted_data.player_count > 100]
6.各⼤聯賽得運動員數量

要根據聯賽league分組

league_data = df.groupby('league', as_index=False).count()[['league','ID']].sort_values('ID', ascending=False)
league_data.rename(columns={'ID':'people_count'},inplace=True)
league_data

分組groupby,排序sort_values,重命名rename

7.計算各俱樂部平均週薪(工資)

根據club分組,計算工資的平均值

df.groupby('club', as_index=False).mean()[['club','eur_wage']].sort_values('eur_wage', ascending=False).head(10)
#head(10)查看前10行

在這裏插入圖片描述

8.計算英超聯賽English Premier League各個俱樂部球員的平均⽉薪
df[df.league == 'English Premier League'].groupby('club',as_index=False).mean()[['club', 'eur_wage']].sort_values('eur_wage',
ascending=False)

在這裏插入圖片描述

9.計算球員年齡段分佈

我們要使用numpy的arange進行分段
使用cut進行區間劃分,相關於分組,在arange的基礎上

bins = np.arange(15, 50, 5)
bins_data = pd.cut(df['age'], bins)
bin_counts = df['age'].groupby(bins_data).count()
bin_counts

以年齡爲維度,最小值15,最大值50,每5個劃分一個區間
在這裏插入圖片描述
可以看出15-20歲的球員有3300個

簡單的繪圖

折線圖:

bin_counts.plot

在這裏插入圖片描述
爲了圖標展示好看處理index
條形圖:

bin_counts.index = [str(x.left) + '~' + str(x.right) for x in bin_counts.index]
bin_counts.plot(kind='bar', alpha=1, rot=0)

在這裏插入圖片描述
餅圖:

bin_counts.plot(kind='pie')
plt.show()

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章