You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

泰坦尼克号一等舱生存数据可视化结果异常问题排查

泰坦尼克号一等舱性别生存数据绘图异常问题分析

测试样本数据

Survived,Pclass,Name,Sex
0,3,"Braund, Mr. Owen Harris",male
1,1,"Cumings, Mrs. John Bradley (Florence Briggs Thayer)",female
1,3,"Heikkinen, Miss. Laina",female
1,1,"Futrelle, Mrs. Jacques Heath (Lily May Peel)",female
0,3,"Allen, Mr. William Henry",male
0,3,"Moran, Mr. James",male

问题描述

对比一等舱不同性别的生存人数时,两种绘图方式出现了矛盾结果:

  • 第一种方式直接筛选后绘图,正确显示一等舱女性几乎全部存活
  • 第二种方式分别提取男女生存计数再绘制分组柱状图,却错误显示一等舱女性几乎全部死亡,但男性结果是正确的

问题根源

咱们来拆解下问题核心:value_counts()方法默认是按数值出现的频率降序排列的。

  • 一等舱女性中存活(Survived=1)的人数远多于死亡(Survived=0),所以females = data[...]['Survived'].value_counts()返回的结果索引是[1, 0],对应的值是存活数、死亡数
  • 而一等舱男性死亡人数远多于存活人数,males = data[...]['Survived'].value_counts()返回的索引是[0, 1],对应的值是死亡数、存活数

当你用range(len(females))作为x轴位置时,女性的第一个柱子对应索引1(存活),男性的第一个柱子对应索引0(死亡),直接导致x轴标签和实际数据错位——看起来女性的“死亡”柱子很高,其实是把存活的数据放到了死亡的位置上!

修正方案

我们需要统一x轴的类别顺序,强制按[0, 1](死亡、存活)的顺序获取计数,具体修改如下:

import pandas as pd
from matplotlib import pyplot as plt
import numpy as np
data = pd.read_csv('titanic_data/train.csv')

# 强制按0、1的顺序获取计数,避免默认排序导致的错位
males = data[(data['Sex']=='male') & (data['Pclass'] == 1)]['Survived'].value_counts(sort=False)
females = data[(data['Sex']=='female') & (data['Pclass']== 1)]['Survived'].value_counts(sort=False)

plt.bar(range(len(females)), females, align='edge', width=-0.4, label='Female', color='red', alpha=0.5)
plt.bar(range(len(males)), males, align='edge', width=0.4, label='Male', color='blue', alpha=0.5)

# 手动指定x轴标签为死亡、存活,确保对应关系正确
plt.xticks(np.arange(2), ['Died', 'Survived'], rotation=0)
plt.title("Male and female survivors in first class")
plt.legend()
plt.show()

或者用更稳妥的groupby方式明确分组顺序:

# 另一种方式:用groupby+reindex确保顺序,避免缺失值问题
male_counts = data[(data['Sex']=='male') & (data['Pclass'] == 1)].groupby('Survived').size().reindex([0,1], fill_value=0)
female_counts = data[(data['Sex']=='female') & (data['Pclass'] == 1)].groupby('Survived').size().reindex([0,1], fill_value=0)

修改后,男女的计数都会按0(死亡)、1(存活)的顺序排列,x轴的柱子和标签就能一一对应,结果就正确啦!

内容的提问来源于stack exchange,提问作者Eliro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:53:40