使用titanic.csv数据集进行以下计算 1.缺失值处理,删除embarked列为空的行 2.对age列填充平均值 3.使用透视表查看不同性别的存活率
时间: 2024-10-19 15:14:00 浏览: 48
首先,我们需要加载`titanic.csv`数据集并预处理数据:
```python
import pandas as pd
import numpy as np
# 1. 加载数据
df_titanic = pd.read_csv('titanic.csv')
# 检查数据集中是否存在缺失值
print(df_titanic.isna().sum())
# 删除embarked列为空的行
df_titanic = df_titanic.dropna(subset=['embarked'])
# 2. 对age列填充平均值
# 首先,找到非空年龄值的平均值
mean_age = df_titanic['age'].dropna().mean()
# 然后用这个平均值填充缺失的age值
df_titanic['age'] = df_titanic['age'].fillna(mean_age)
# 3. 使用透视表查看不同性别的存活率
pivot_table = pd.pivot_table(df_titanic, values='survived', index='sex', columns='class')
print(pivot_table)
```
这将输出一个透视表,展示了男性和女性在三个船舱阶级(头等、二等和三等)中各自的生存率。
相关问题
有一个titanic.csv,首先读入 titanic.csv 文件, 存在 tit数据框对象。然后显示tit的头3条数据。先计算age列中位数,然后直接修改tit对象将该中位数填充入age列的缺失值中。embarked列是旅客登船的港口简写,统计表中有哪几个港口,保存在 port列表中, 保存后要删除列表中的 np.nan 值。Pclass列是客舱等级,alive列有两个值,yes和no对应存活与未存活。计算按客舱等级pclass分组,每类客舱的平均生还率。统计结果存在 rate 这个Series变量中。然后利用上面得到的rate变量绘制柱形图,要求标题为:211543217 陈文杰。最后按who列来分组统计各类人数,并做对比饼图。
好的,我会逐步回答您的问题。首先,读入 titanic.csv 文件,存储在 tit 数据框对象中,并显示 tit 的头 3 条数据。代码如下:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 读入 titanic.csv 文件,存储在 tit 数据框对象中
tit = pd.read_csv('titanic.csv')
# 显示 tit 的头 3 条数据
print(tit.head(3))
```
接下来,计算 age 列的中位数,并将该中位数填充入 age 列的缺失值中。代码如下:
```python
# 计算 age 列的中位数
age_median = tit['age'].median()
# 将 age 列的缺失值填充为中位数
tit['age'].fillna(age_median, inplace=True)
```
然后,统计表中有哪几个港口,保存在 port 列表中,并删除列表中的 np.nan 值。代码如下:
```python
# 统计 embanked 列的唯一值
port = tit['embarked'].unique()
# 删除 port 列表中的 np.nan 值
port = port[~pd.isnull(port)]
```
接下来,按客舱等级 pclass 分组,计算每类客舱的平均生还率。代码如下:
```python
# 按客舱等级 pclass 分组,计算每类客舱的平均生还率
rate = tit.groupby('pclass')['survived'].mean()
```
然后,利用上面得到的 rate 变量绘制柱形图,要求标题为:211543217 陈文杰。代码如下:
```python
# 利用 rate 变量绘制柱形图
rate.plot(kind='bar')
plt.title('211543217 陈文杰')
plt.show()
```
最后,按 who 列来分组统计各类人数,并做对比饼图。代码如下:
```python
# 按 who 列分组,统计各类人数
who_count = tit.groupby('who')['who'].count()
# 绘制对比饼图
who_count.plot(kind='pie', autopct='%1.1f%%')
plt.title('211543217 陈文杰')
plt.show()
```
完成以上步骤后,您应该已经得到了正确的答案和图表。
以下代码为什么不能生成热力图:import pandas as pd import seaborn as sns import numpy as np titanic_df = pd.read_csv("C:\\Users\\Lucky Week\\Documents\\WeChat Files\\wxid_jjvhmzk4khs412\\FileStorage\\File\\2023-05\\titanic\\train.csv") # 删除不必要的列 titanic_df.drop(['PassengerId', 'Name', 'Ticket', 'Cabin'], axis=1, inplace=True) # 删除缺失值 titanic_df.dropna(inplace=True) # 将性别变量转换为数值变量 titanic_df['Sex'] = titanic_df['Sex'].replace({'male': 0, 'female': 1}) # 将登船港口变量转换为数值变量 titanic_df['Embarked'] = titanic_df['Embarked'].replace({'C': 0, 'Q': 1, 'S': 2}) grouped = titanic_df.groupby('Pclass') # 求每个船票等级的平均年龄 grouped['Age'].mean() # 将数据集按照性别和船票等级进行透视 pivot_df = pd.pivot_table(titanic_df, values='Survived', index='Sex', columns='Pclass') # 将缺失值填充为 0 pivot_df.fillna(0, inplace=True) # 使用 seaborn.heatmap 函数绘制热力图,并显示每个单元格的数值 sns.heatmap(data=pivot_df.head(), annot=True)
这段代码是可以生成热力图的,它的功能是读取 Titanic 数据集,并按照性别和船票等级进行透视,并生成热力图以显示不同性别和船票等级下的生还率情况。
如果你运行这段代码时没有看到热力图窗口弹出,可能是由于你的 Python 环境缺少必要的依赖库 `seaborn` 和 `matplotlib`。你可以通过在命令行或终端中运行以下命令来安装这两个库:
```
pip install seaborn matplotlib
```
如果你已经安装了这两个库,但仍然无法生成热力图,可能是由于你的计算机上缺少必要的图形界面模块或驱动程序。你可以尝试在 Jupyter Notebook 或其他 Python IDE 中运行这段代码,或者在其他计算机上运行这段代码,看看是否可以正常生成热力图。
阅读全文