案例

您所在的位置:网站首页 中国男篮历史十大球员身高数据分析 案例

案例

2024-07-17 06:47:40| 来源: 网络整理| 查看: 265

案例——中国篮球运动员的基本信息分析 分析目标

1、计算中国男篮、女篮运动员的平均身高与平均体重 2、分析中国篮球运动员的年龄分布 3、计算中国篮球运动员的体质指数

数据获取

先导入可能需要用到的包

import pandas as pd import numpy as np import matplotlib.pyplot as plt

读取数据源文件

df_left = pd.read_csv("配套资源/源代码/第6章/运动员信息采集01.csv", encoding="gbk") df_right = pd.read_excel("配套资源/源代码/第6章/运动员信息采集02.xlsx")

用外连接的方式合并数据

data_df = pd.merge(df_left, df_right, how="outer") data_df.head()

在这里插入图片描述 筛选出中国篮球运动员的信息

basketball_data = data_df[data_df['国籍'] == '中国'] basketball_data = basketball_data[basketball_data['项目'] == '篮球'] basketball_data.head()

在这里插入图片描述

数据清理 检测和处理重复值

检测重复值

basketball_data[basketball_data.duplicated().values == True]

在这里插入图片描述 处理重复值

basketball_data.drop_duplicates(ignore_index=True, inplace=True) basketball_data[basketball_data.duplicated().values == True]

在这里插入图片描述

检测和处理缺失值

检测缺失值

basketball_data[basketball_data.isna().values == True]

在这里插入图片描述 因为省份对分析目的无影响,这里只用处理身高和体重,但是因为男女有差异性,故先分男女两个表。 先处理男表 查看详细信息

male_data = basketball_data[basketball_data['性别'] == '男'] female_data = basketball_data[basketball_data['性别'] == '女'] male_data.info()

在这里插入图片描述

只有身高存在缺失值,查看身高数据

print(male_data['身高'].values)

在这里插入图片描述

除了空值,其他都是一样的单位xxx+‘厘米’ 开始处理空值,选择用平均值代替

male_heights = male_data['身高'].dropna() fill_male_height = male_heights.apply(lambda x: x[:-2]).astype(int).mean() fill_male_height = str(int(fill_male_height)) + '厘米' male_data.loc[:, '身高'] = male_data.loc[:, '身高'].fillna(fill_male_height) male_data.info()

在这里插入图片描述 男表缺失值处理完成。 开始查看女表信息

female_data.info()

在这里插入图片描述 忽略省份,还有身高和体重存在缺失值,先查看身高数据

print(female_data['身高'].values)

在这里插入图片描述

存在不一致的数据结构,所以需要先统一将数据变成xxx + “厘米”

data = {'191cm':'191厘米','1米89公分':'189厘米','2.01米':'201厘米', '187公分':'187厘米','1.97M':'197厘米','1.98米':'198厘米', '192cm':'192厘米'} female_data.loc[:, '身高'].replace(data, inplace=True) print(female_data['身高'].values)

在这里插入图片描述

继续处理缺失值,采用平均值来填充

female_heights = female_data['身高'].dropna() fill_female_height = female_heights.apply(lambda x: x[:-2]).astype(int).mean() fill_female_height = str(int(fill_female_height)) + '厘米' female_data.loc[:, '身高'] = female_data.loc[:, '身高'].fillna(fill_female_height) female_data.info()

身高的缺失值处理完成 在这里插入图片描述 开始处理体重缺失值,先查看数据

print(female_data['体重'].values)

在这里插入图片描述

发现一个明显的异常数值8kg,决定采用向前填充的方式替换

female_data['体重'].replace(to_replace='8kg', method='pad', inplace=True) print(female_data['体重'].values)

在这里插入图片描述

开始用平均值填充缺失值

female_weights = female_data['体重'].dropna() fill_female_weight = female_weights.apply(lambda x: x[:-2]).astype(int).mean() fill_female_weight = str(int(fill_female_weight)) + '厘米' female_data.loc[:, '体重'] = female_data.loc[:, '体重'].fillna(fill_female_weight) female_data.info()

在这里插入图片描述

检测和处理异常值

为了方便计算等操作,选择将身高和体重两列变为int类型,并重新命名列表

male_data['身高'] = male_data['身高'].apply(lambda x: x[:-2]).astype(int) male_data.rename(columns={'身高': '身高/cm'}, inplace=True) male_data['体重'] = male_data['体重'].apply(lambda x: x[:-2]).astype(int) male_data.rename(columns={'体重': '体重/kg'}, inplace=True) female_data['身高'] = female_data['身高'].apply(lambda x: x[:-2]).astype(int) female_data.rename(columns={'身高': '身高/cm'}, inplace=True) female_data['体重'] = female_data['体重'].apply(lambda x: x[:-2]).astype(int) female_data.rename(columns={'体重': '体重/kg'}, inplace=True) male_data.head()

在这里插入图片描述

female_data.head()

在这里插入图片描述 利用箱型图查看男表的身高和体重是否存在异常值

plt.rcParams['font.sans-serif'] = ['SimHei'] male_data.boxplot(column='身高/cm')

在这里插入图片描述 身高不存在异常值

plt.rcParams['font.sans-serif'] = ['SimHei'] male_data.boxplot(column='体重/kg')

在这里插入图片描述 体重也不存在异常值,说明男表数据正常 接下来查看女表数据

plt.rcParams['font.sans-serif'] = ['SimHei'] female_data.boxplot(column='身高/cm')

在这里插入图片描述 出现一个异常值,但经核实,是真实值 查看体重数据

plt.rcParams['font.sans-serif'] = ['SimHei'] female_data.boxplot(column='体重/kg')

在这里插入图片描述 经核实,这个离群点也属于非异常值 如果我们通过箱型图发现了异常值,可以使用下面的函数来找到这个异常值

def box_outliers(ser): new_ser = ser.sort_values() if new_ser.count() % 2 == 0: Q3 = new_ser[int(len(new_ser) / 2):].median() Q1 = new_ser[:int(len(new_ser) / 2)].median() elif new_ser.count() % 2 == 1: Q3 = new_ser[int((len(new_ser) + 1) / 2):].median() Q1 = new_ser[:int((len(new_ser) + 1) / 2)].median() IQR = round(Q3 - Q1, 1) rule = (ser round(Q3 + 1.5 * IQR, 1)) index = np.arange(ser.shape[0])[rule] outliers = ser.iloc[index] return outliers

除了通过箱型图,我们也可以通过3sigma原则来验证, 函数实现如下

def three_sigma(ser): # 计算平均数 mean_data = ser.mean() # 计算标准差 std_data = ser.std() # 根据数值小于μ-3σ或大于μ+3σ均为异常值 rule = (mean_data-3*std_data>ser) | (mean_data+3*std_data


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


    图片新闻

    实验室药品柜的特性有哪些
    实验室药品柜是实验室家具的重要组成部分之一,主要
    小学科学实验中有哪些教学
    计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
    实验室各种仪器原理动图讲
    1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
    高中化学常见仪器及实验装
    1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
    微生物操作主要设备和器具
    今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
    浅谈通风柜使用基本常识
     众所周知,通风柜功能中最主要的就是排气功能。在

    专题文章

      CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭