泰坦尼克数据集生存率分析,dataframe的groupby用法
发布于 作者:苏南大叔 来源:程序如此灵动~数据集在代码层面上,表现为dataframe
,使用df.groupby()
可以对数据进行分组,进而可以做特定的统计。换句话说,可以对具有某些特征的样本所具有的属性进行统计。
大家好,这里是苏南大叔的“程序如此灵动”博客,这里讲述苏南大叔和计算机代码之间的故事。测试环境:python@3.12.3
,pandas@2.2.2
,numpy@1.26.4
,xlrd@2.0.1
,openpyxl@3.1.2
。
龙套数据样本
本文的龙套数据是titanic3.xls
,可以从下面的链接拿到数据:
- http://hbiostat.org/data/repo/titanic3.xls
- http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic3.xls
更多数据源,请参考:
加载.xls
样本的代码如下:
import pandas as pd
file = "http://hbiostat.org/data/repo/titanic3.xls"
df = pd.read_excel(file, "titanic3", index_col=None, na_values=['NA'])
对于本文来说,需要特别注意:这些字段是字符串,并不是数字。会引发一系列的异常信息。
计算生存率
本文主要目的是求泰坦尼克数据集的survived
生存率,使用的函数是.mean()
,实际上是求平均数。对于泰坦尼克数据集来说,survived
的取值是0
和1
,计算平均值【恰巧】能得到目标数据。如果不是这种特殊的取值,使用mean()
是不能获得目标数据结果的。
鉴于各大教程里面,都使用的是这个.mean()
函数计算的泰塔尼克数据集的生存率。所以,本文沿用这个用法。例如:
df.groupby('field').mean()["target"]
正常情况下,是这么使用的:
df.groupby('pclass').mean()["survived"]
可能的报错信息
由于pandas
版本的问题,使用.mean()
函数的时候,也可能会遇到下面的报错信息:
raise TypeError(f"Could not convert string '{x}' to numeric")
TypeError: Could not convert string 'femalemale' to numeric
样本数据集里面存在着一下非数字的字段,这些字段可能会带来报错。需要对这些非数字字段进行转换,或者删除。但是,最标准的做法就是:添加一个参数numeric_only=True
。例如:
df.groupby('pclass').mean(numeric_only=True)["survived"]
部分pandas
版本,在做groupby()
操作的时候,会有警告信息,类似:observed=False
。继续变形写成:
df.groupby('pclass', observed=False).mean(numeric_only=True)["survived"]
分组实例
看看不同等级的船票分组的生存率如何,执行代码:
df.groupby('pclass').mean(numeric_only=True)["survived"]
车票分组之后,再按性别进行分组:
df.groupby(['pclass', 'sex']).mean(numeric_only=True)["survived"]
或者:
df.groupby(['pclass', 'sex'], observed=False).mean(numeric_only=True)["survived"]
相关文章
结语
更多python
相关文章,请点击苏南大叔的博客文章:
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。