EDA探索性数据分析 -- 足球赛事红牌数据分析

一. 数据读取与预处理

import warnings
warnings.filterwarnings('ignore')

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
import seaborn as sns
%matplotlib inline
sns.set_context('poster', font_scale = 1.3)

df = pd.read_csv('redcard.csv.gz', compression = 'gzip')
print(df.shape)
df.head()

(146028, 28)
在这里插入图片描述

all_columns = df.columns.tolist()

# df.info()
# df.dtypes
df.describe().T

在这里插入图片描述

len(df.playerShort.unique())
len(df.player.unique())

2053
2034

print(df.height.mean())
print(np.mean(df.groupby('playerShort').height.mean()))
np.mean(df.groupby('player').height.mean())

181.93593798236887
181.74372848007872
181.7593471266707

二. 数据板块切分

2.1 创建子表并快速测试唯一性的辅助函数

player_index = 'playerShort'
player_cols = ['birthday', 'height', 'weight', 'position', 'photoID', 'rater1', 'rater2']

def get_subgroup(dataframe, g_index, g_columns):
    g = dataframe.groupby(g_index).agg({
   col:'nunique' for col in g_columns})
    if g[g > 1].dropna().shape[0] != 0:
        print("Warning: you probably assumed this had all unique values but it doesn't.")
    return dataframe.groupby(g_index).agg({
   col:'max' for col in g_columns})

players = get_subgroup(df, player_index, player_cols)
players.head()

在这里插入图片描述

2.2 Players子表

def save_subgroup(dataframe, g_index, subgroup_name, prefix = 'raw_'):
    save_subgroup_filename = ''.join([prefix, subgroup_name, '.csv.gz'])
    dataframe.to_csv(save_subgroup_filename, compression='gzip', encoding = 'UTF-8')
    test_df = pd.read_csv(save_subgroup_filename, compression='gzip', index_col = g_index, encoding='UTF-8')
    if dataframe.equals(test_df):
        print('Test-passed: we recover the equivalent subgroup dataframe.')
    else:
        print('Warning -- equivalence test!!! Double-check.')
        
save_subgroup(players, player_index, 'players')

Test-passed: we recover the equivalent subgroup dataframe.

2.3 Clubs子表

club_index = 'club'
club_cols = ['leagueCountry']
clubs = get_subgroup(df, club_index, club_cols)
clubs.head()

在这里插入图片描述

clubs['leagueCountry'].value_counts()

在这里插入图片描述

save_subgroup(clubs, club_index, 'clubs')

2.4 Referees子表

referee_index = 'refNum'
referee_cols = ['refCountry']
referees = get_subgroup(df, referee_index, referee_cols)
referees.head()

在这里插入图片描述

print(referees.refCountry.nunique())
print(referees.shape)
save_subgroup(referees, referee_index, 'referees')

161
(3147, 1)
Test-passed: we recover the equivalent subgroup dataframe.

2.5 refCountry子表

country_index = 'refCountry'
country_cols = ['Alpha_3', 'meanIAT', 'nIAT', 'seIAT', 'meanExp', 'nExp', 'seExp']

countries = get_subgroup(df, country_index, country_cols)
countries = countries.rename(columns = {
   'Alpha_3' : 'countryName'})
print(countries.shape)
countries.head()

(161, 7)
在这里插入图片描述

save_subgroup(countries, country_index, 'countries')

2.6 红牌Dyads子表

dyad_index = ['refNum', 'playerShort']
dyad_cols = ['games'
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值