python 的案例实战_python案例实战之一

本文详细介绍了使用Python进行数据清洗的过程,包括查看数据整体情况、处理缺失值、修复异常数据和检查重复数据。通过实例分析了如何处理联赛和俱乐部字段的空值,以及对异常的球员身价数据进行替换。最后,讨论了如何基于不同维度进行数据分析和可视化。
摘要由CSDN通过智能技术生成

分析思路:

1、明确分析目标;

2、导入库、导入数据;

3、简单查看下数据行列、整体情况;

4、数据清洗;

5、确定维度和指标;

6、分析并作图

1、查看整体数据情况

1.1引入使用的库

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

1.2加载数据文件

df = pd.read_csv('./FIFA_2018_player.csv')

1.3简单查看数据整体情况

df.head()

ec9f553714fa797824f7293533bb2549.png

数据表头说明:

ID:编号

name:球员姓名

full_name:球员全名

nationality:国籍

league:联赛

club:所属俱乐部

age:年龄

birth_date:出生日期

height_cm:身高

weight_kg:体重

eur_value:身价

eur_wage:周薪

df.describe()

07378ecf4011357103fffef7d6b6ef23.png

2、开始清理数据

数据清理-所有需要分析的数据都需要看下。

对于数值型,可以看下describe方法输出的信息,重点关注最大值,最小值,平均值,行数等。

2.1、查看整体数据量

f.count()

f8f98222083ce663c7e260aae1d1f683.png

2.2、对null值处理

通过查看各列数据量情况(非null值)发现,league字段和club字段与其他字段存在差异。存在253行的null值,对于一万条数据来说影响还好,可以删掉。

#删除数据一般放在后面进行,这里因为其他数据也是异常,所以可以先删掉

df.drop(df[df.league.isnull()].index,inplace=True)

再次查看数据情况

df.count()

6f20be91b42a043d92dd99e2fc63eb2d.png

每列数据量一致,不存在null值。

2.3、查看整体统计量情况,查看是否存在异常

df.describe()

7f374444814c2635d4f10fd8ba1b0b3f.png

此处的身价最小的为0,但工资为1000,因此存在数据失真情况。

df[df['eur_value']<100]

040cd05d7a5e71143a90ab477116f297.png

我们对身价小于100的数据进行查看,存在6行数据异常。

对此种情况可有三种处理方式:

1、由于异常数据量较少,可依次查询真实数据并重新赋值;

2、取整体平均值,对异常数据进行覆盖;

3、由于总体数据量大,可直接删除异常数据。

本案例中采取第二种方式处理

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

df[df['eur_value']<100]

用整体平均值对异常数据进行覆盖后,查看身价是否还存在小于100的

cf0bbd5acad325a7faa1a5e61bb43087.png

2.4、查看是否有重复数据

df[df['full_name'].duplicated()]

1266707a0ccfaea974676a4ed1b6a183.png姓名重复的数据为102行,可随便抽取一条查看

df[df['full_name']=='Moussa Dembélé']

71f925c677cb9bfce93c43abc0426c21.png

可以看到,虽姓名一致,但其他字段均不同,为重名但不同人的情况。

3、开始分析数据

3.1、整体数据量描述

df.count()

f0abb7ef36ca21db50d1839c45dc197e.png

3.2、对常用统计量做简单描述

df.describe()

624e625937eef511de992d35107964ed.png

明确维度和指标:每一列、每几列可以作为一个维度;各种统计值为指标。

对于离散型的维度,一般使用groupby分组使用;对于连续型的维度,一般分区间。

3.3、离散型维度-国家维度的运动员数量

国家维度的运动员数,为离散型,使用groupby分组,并计算总和

df.groupby('nationality',as_index=False).count()

为方便后续数据使用,因此不需要用nationality设置索引,因此使用as_index=False

bff0a1b39a6e40e97a9522c6cb30b93e.png

为方便查看,仅取国籍和数量两列,并根据球员数量进行排序

nationality_data = df.groupby('nationality',as_index=False).count()[['nationality','name']]

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

#按照player_count进行排序

nationality_data.sort_values('player_count',ascending=False)

b80188f272c7a0aaa66aaed924fb84e4.png

3.4、连续型维度-选取年龄为例,以年龄为维度,以不同年龄段人数为指标

bins = np.arange(15,50,5)

bins_data = pd.cut(df['age'],bins)

bin_counts = df['age'].groupby(bins_data).count()

bin_counts

8400d0960818275e51d5ae9c5df0097f.png

4、对分析结果进行可视化

bin_counts.plot(kind='pie')

fe32fb9273603cf763492759db57a72e.png

原文链接:https://blog.csdn.net/m0_46511764/article/details/105324932

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值