Python数据分析——分析欧洲杯数据集

读取数据集Euro_stats.csv,将其存成DataFrame,并命名为euro

import pandas as pd
euro = pd.read_csv(r'C:\Users\75559\Python\expt1\Euro_stats.csv')
euro
  1. import pandas as pd:这是导入pandas库的命令。pandas是一个强大的Python数据分析工具库,用于数据处理、清洗、转换等。在这里,我们使用import语句将pandas库导入到当前的Python环境中,并给它起了一个别名pd,这样在后续的代码中就可以用pd来调用pandas库中的函数和类。

  2. euro = pd.read_csv(r'C:\Users\75559\Python\expt1\Euro_stats.csv'):这是使用pandas库中的read_csv函数读取CSV文件的命令。CSV(Comma-Separated Values,逗号分隔值)是一种 plain text 数据格式,用于存储表格数据(数字和文本)。read_csv函数将CSV文件转换为一个DataFrame对象。在这里,r'C:\Users\75559\Python\expt1\Euro_stats.csv'是文件路径,r表示字符串是原始字符串,不会对路径中的反斜杠进行转义。

  3. euro:这个变量名表示存储读取的数据的DataFrame对象的名称。在后续的代码中,可以通过euro这个变量来访问或操作这个DataFrame对象。

  4. euro:这又是一行代码,尝试打印出euro这个DataFrame对象的内容。但是这行代码没有换行符,所以可能会和下一行代码在同一行显示。

        这段代码的主要作用是读取一个CSV文件,并将文件内容存储在一个DataFrame对象中,以便后续进行数据分析。

有多少支球队参加了欧洲杯?

euro['Team'].nunique()
  1. euro:这是之前读取CSV文件后创建的DataFrame对象。

  2. euro['Team']:这表示 euro DataFrame对象中名为 ‘Team’ 的列。在pandas中,你可以通过方括号 [] 的方式访问DataFrame中的列。

  3. .nunique():这是pandas中的一个内置方法,用来计算某一列中唯一不同的值(即唯一键)的数量。这个方法会返回一个Series对象,其中包含了该列中唯一值的数量。

        euro['Team'].nunique() 这行代码的作用是计算 ‘Team’ 这一列中不同团队的个数。例如,如果 ‘Team’ 列包含了 ‘Team A’, ‘Team B’, ‘Team C’ 等值,那么 nunique() 方法将返回3,因为有三支不同的团队。

        这通常用于检查数据集中某一列的多样性,例如在一组数据中团队、商品种类或者类别变量的不同选项有多少。

该数据集中一共有多少列?分别是什么?

print(euro.shape[1])
print(euro.columns)

        在pandas中,DataFrame对象有一个属性叫做shape,它是一个元组,包含了DataFrame的行数和列数。shape[1]就是获取DataFrame的列数。

        这里的意思是:

  1. print(euro.shape[1]):这行代码会打印出euro DataFrame的列数。如果你想看整个DataFrame的形状,可以只打印euro.shape而不索引它。

  2. print(euro.columns):这行代码会打印出euro DataFrame的所有列名。euro.columns是一个包含所有列名的Index对象。

将数据集中的列TeamYellow CardsRed Cards单独存为一个名叫discipline的数据框

discipline = euro[['Team', 'Yellow Cards', 'Red Cards']]
print(discipline)

        这段代码的作用是创建一个新的DataFrame,它包含了原始DataFrame euro 中特定的几列数据。具体来说:

  1. discipline = euro[['Team', 'Yellow Cards', 'Red Cards']]

    • euro 是原始的DataFrame对象。
    • [['Team', 'Yellow Cards', 'Red Cards']] 是一个列表,其中包含了列名。这告诉pandas从euro中选择这些列。
    • discipline = euro[['Team', 'Yellow Cards', 'Red Cards']] 创建了一个新的DataFrame对象discipline,它只包含euro中名为’Team’, ‘Yellow Cards’, 和 'Red Cards’的列。
  2. print(discipline)

    • 这行代码会打印出discipline DataFrame的内容。你会看到与’Team’, ‘Yellow Cards’, 和 'Red Cards’相关的数据,但是没有其他列的数据。

        所以,如果你运行这段代码,你会得到一个只包含’Team’, ‘Yellow Cards’, 和 'Red Cards’这三列的DataFrame,并且这些列的数据会打印出来。这通常用于数据分析时,当你只需要数据集中的部分信息时,可以通过这种方式来子集数据。

discipline按照先Red CardsYellow Cards进行排序

discipline.sort_values(by=['Red Cards', 'Yellow Cards'])
  • discipline:这是之前通过选择 euro DataFrame 中特定列而创建的新的DataFrame对象,它包含了 ‘Team’, ‘Yellow Cards’, 和 ‘Red Cards’ 这三列的数据。

  • .sort_values():这是pandas中的一个方法,用于对DataFrame进行排序。它的参数可以指定排序的依据,即哪一列或者哪几列的值。

  • by=['Red Cards', 'Yellow Cards']:这个参数指定了排序的依据是 ‘Red Cards’ 和 ‘Yellow Cards’ 这两列。pandas会根据这两列的值来对数据进行排序。

  • 如果 ‘Red Cards’ 和 ‘Yellow Cards’ 两列中有一个或多个有缺失值(例如NaN),pandas默认会按照缺失值后面的列进行排序。如果两列都有缺失值,那么缺失值多的行会排在后面。

  • 默认情况下,.sort_values() 方法会按照升序对数据进行排序,即数值从小到大排列。如果你想要进行降序排序,可以使用 ascending=False 参数。

计算每支球队拿到的黄牌数的平均值

print(discipline.groupby('Team').agg({'Yellow Cards': 'sum'}).mean())
  1. discipline.groupby('Team')

    • 这部分代码将 discipline DataFrame 按照 ‘Team’ 这一列进行分组。这意味着数据会被分成不同的组,每个组对应于 DataFrame 中 ‘Team’ 列的一个唯一值。
  2. .agg({'Yellow Cards': 'sum'})

    • .agg() 方法是用来对分组后的数据进行聚合操作的。在这里,我们指定要对 ‘Yellow Cards’ 这一列进行求和(‘sum’)操作。这意味着对于每个团队组,将计算该组中 ‘Yellow Cards’ 列所有值的和。
  3. .mean()

    • 这部分代码对聚合后的结果进行计算平均值的操作。由于我们之前对 ‘Yellow Cards’ 列进行了求和,所以这里计算的是每个团队组 ‘Yellow Cards’ 总和除以该组的大小(即该组有多少行)。如果组中没有缺失值,这将给出每个团队平均获得的黄色卡片数。
  4. print(...)

    • 这行代码会打印出聚合和平均操作的结果。

        

        这行代码的作用是计算每个团队平均获得的黄色卡片数。需要注意的是,如果 ‘Team’ 列中有重复的值,那么 .groupby('Team') 会将这些重复的值视为不同的组进行处理。如果 ‘Team’ 列中没有重复值,那么每个团队只算一个组,聚合和平均的结果将直接反映在该团队对应的 ‘Yellow Cards’ 列上。

展示进球数Goals超过6的球队数据

Goals_over_6 = euro['Goals'] > 6
print(euro.loc[Goals_over_6, :])
  1. Goals_over_6 = euro['Goals'] > 6

    • 这部分代码创建了一个新的布尔系列 Goals_over_6,其中每个元素对应于 euro DataFrame 中 ‘Goals’ 列的每个值。如果 ‘Goals’ 列的值大于6,相应的元素为 True,否则为 False
  2. euro.loc[Goals_over_6, :]

    • .loc[] 方法用于基于布尔系列选择 DataFrame 的行。在这里,我们使用 Goals_over_6 来选择所有为 True 的行。
    • : 表示选择所有列,因此 euro.loc[Goals_over_6, :] 会选择 ‘Goals_over_6’ 中所有 True 值的行,并打印出这些行中所有的列数据。
  3. print(...)

    • 这行代码会打印出筛选出来的行的数据。

选取数据框euro的前6列

euro.iloc[:, :6]
  1. euro.iloc[:, :6]

    • .iloc[] 是 pandas DataFrame 的一个方法,用于基于整数的位置索引来选择数据。
    • : 表示选择所有的行。
    • :6 表示选择列的范围,从第一列(索引为0)到第六列(索引为5)。

    因此,euro.iloc[:, :6] 会返回一个新的 DataFrame,其中包含 euro 的前6列,而不管行数。

  2. 如果你想要选择特定的行和列,你可以这样做:

    • euro.iloc[0:10, 0:3]:这将选择第0到第9行(不包括第10行)和第0到第2列(不包括第3列)的数据。
    • euro.iloc[1, 2]:这将选择第1行第2列的一个单一的单元格。
  3. 需要注意的是,.iloc[] 方法使用的是基于零的索引,也就是说,第一列的索引是0,第二列的索引是1,依此类推。

选取数据框euro的除最后3行之外的全部行

print(euro.iloc[:,:-3])
  1. euro.iloc[:,:-3]

    • .iloc[] 是 pandas DataFrame 的一个方法,用于基于整数的位置索引来选择数据。
    • : 表示选择所有的行。
    • :-3 表示选择列的范围,从第一列(索引为0)到最后第三列(索引为-3)之前的所有列。在Python中,负数索引表示从最后一项开始倒数,因此 :-3 会包含索引为0到索引为-4的所有列,但不包括索引为-3的列。

    因此,euro.iloc[:,:-3] 会返回一个新的 DataFrame,其中包含 euro 的所有列,但不包括最后一列到倒数第三列之间的数据。

  2. print(...)

    • 这行代码会打印出通过 .iloc[:,:-3] 方法选择的数据。

找到英格兰(England)、意大利(Italy)和俄罗斯(Russia)的射门准确率(Shooting Accuracy)

euro.set_index('Team',inplace=True)
print(euro.loc[['England','Italy','Russia'],'Shooting Accuracy'])
  1. euro.set_index('Team',inplace=True):这行代码将名为euro的DataFrame的’Team’列设置为其索引。inplace=True参数表示直接在原始数据上进行修改。这意味着euro DataFrame的索引将被更新,以后你可以通过索引来快速访问行。

  2. print(euro.loc[['England','Italy','Russia'],'Shooting Accuracy']):这行代码打印出euro DataFrame中特定行的’Shooting Accuracy’列的值。euro.loc函数的第一个参数是一个索引标签的列表,这些标签对应于euro DataFrame中你感兴趣的团队(在这里是’England’,‘Italy’,和’Russia’)。第二个参数是列的名称(在这里是’Shooting Accuracy’),它告诉你哪一列的值你想要查看。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值