泰坦尼克号数据分析报告

1 概述

先大体分析数据特性,然后分析Survived、Pclass、Sex、Age的数据,最后使用这些svm模型做训练和预测。

2 数据整体分析

import pandas as pd
import matplotlib.pyplot as plt

# 导入数据
data = pd.read_csv("泰坦尼克幸存者_all.csv")
# pandas 常用数据结构:DataFrame
print(len(data))  # 样本总数891条数据
print(data.shape)  # 表示行数、列数
print(data.info())  # 信息
print(data.values)  # 打印数值
print(data.columns)  # 列名
print(data.index)  # 行名
print(data.head(5))  # 前5行
print(data.tail(5))  # 后5行

# 总体幸存率=幸存人数/总人数
# 1 sum(列)/总数据量,
# 问题1:取出某一列:
# 问题2:数据总量:len(data)
# 取单独的列 方式1:
s = data.Survived
# 取单独的列 方式2:
s2 = data["Survived"]


结果展示:

891
(891, 12)
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
 #   Column       Non-Null Count  Dtype  
---  ------       --------------  -----  
 0   PassengerId  891 non-null    int64  
 1   Survived     891 non-null    int64  
 2   Pclass       891 non-null    int64  
 3   Name         891 non-null    object 
 4   Sex          891 non-null    object 
 5   Age          714 non-null    float64
 6   SibSp        891 non-null    int64  
 7   Parch        891 non-null    int64  
 8   Ticket       891 non-null    object 
 9   Fare         891 non-null    float64
 10  Cabin        204 non-null    object 
 11  Embarked     889 non-null    object 
dtypes: float64(2), int64(5), object(5)
memory usage: 83.7+ KB
None
[[1 0 3 ... 7.25 nan 'S']
 [2 1 1 ... 71.2833 'C85' 'C']
 [3 1 3 ... 7.925 nan 'S']
 ...
 [889 0 3 ... 23.45 nan 'S']
 [890 1 1 ... 30.0 'C148' 'C']
 [891 0 3 ... 7.75 nan 'Q']]
Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp',
       'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'],
      dtype='object')
RangeIndex(start=0, stop=891, step=1)
   PassengerId  Survived  Pclass  ...     Fare Cabin  Embarked
0            1         0       3  ...   7.2500   NaN         S
1            2         1       1  ...  71.2833   C85         C
2            3         1       3  ...   7.9250   NaN         S
3            4         1       1  ...  53.1000  C123         S
4            5         0       3  ...   8.0500   NaN         S

[5 rows x 12 columns]
     PassengerId  Survived  Pclass  ...   Fare Cabin  Embarked
886          887         0       2  ...  13.00   NaN         S
887          888         1       1  ...  30.00   B42         S
888          889         0       3  ...  23.45   NaN         S
889          890         1       1  ...  30.00  C148         C
890          891         0       3  ...   7.75   NaN         Q

[5 rows x 12 columns]

3 死亡率-幸存率分析

# 计算幸存率
sr = sum(s) / len(data)
print(sr) # 保留两位小数点
# 计算死亡率
dr = 1 - sr
print(dr)
0.3838383838383838
0.6161616161616161

使用饼状图展示:

## 绘制饼状图
print("------------饼状图---------")
# 1 导入包 import matplotlib.pyplot as plt
# 2 导入数据
# 3 绘图
# 4 显示图像
# 为了使图像更好看:添加图例、修改颜色、设置字体
sdr = [sr, dr] # [0.38,  0.62]
labels = ["Survived","Dead"]
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.title("死亡率-幸存率-饼状图")
explode = (0,0.1)

colors = ['mediumpurple','lightpink']  # 颜色
plt.pie(sdr,          # 数据
        labels=labels,  # 标签
        autopct='%3.2f%%', # 显示百分比
        colors=colors,    # 颜色
        textprops={'fontsize':18,'color':'k'}, # 文本属性,文字大小颜色
        explode=explode, #饼的分离程度
        shadow=True,     # 阴影
        startangle=60)
plt.show() #显示用

在这里插入图片描述

4 船舱等级分析

4.1 船舱等级单个变量分析

import pandas as pd
import matplotlib.pyplot as plt

# 导入数据
data = pd.read_csv("泰坦尼克幸存者_all.csv")
# 1 取出Pclass这一列
p = data.Pclass
# 2 判断这一列等于1是哪些值
p1 = p == 1
# 3  计算这些值的数量
p1_s = p[p1].count()
p2_s = data.Pclass[data.Pclass == 2].count()
p3_s = data.Pclass[data.Pclass == 3].count()
print(p1_s)
print(p2_s)
print(p3_s)

# 绘制饼状图
sdr = [p1_s, p2_s, p3_s]  # [0.38,  0.62]
labels = ["等级1", "等级2", "等级3"]
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.title("船舱等级-人数-饼状图")
explode = (0, 0.1, 0)

colors = ['mediumpurple', 'lightpink','red']  # 颜色
plt.pie(sdr,  # 数据
        labels=labels,  # 标签
        autopct='%3.2f%%',  # 显示百分比
        colors=colors,  # 颜色
        textprops={'fontsize': 18, 'color': 'k'},  # 文本属性,文字大小颜色
        explode=explode,  # 饼的分离程度
        shadow=True,  # 阴影
        startangle=60)
plt.show()  # 显示用

在这里插入图片描述

4.2 船舱等级-死亡率的关系

import pandas as pd
import matplotlib.pyplot as plt

# 导入数据
data = pd.read_csv("泰坦尼克幸存者_all.csv")

def f(x):
    p1_all = sum(data.Pclass == x)
    p1_dead = sum(data[data.Pclass == x].Survived == 0)
    return p1_dead / p1_all


print("等级1-死亡率:" + str(round(f(1), 2)))
print("等级2-死亡率:" + str(round(f(2), 2)))
print("等级3-死亡率:" + str(round(f(3), 2)))

# 写成函数的形式
p_dead = [round(f(1), 2), round(f(2), 2), round(f(3), 2)]
p_label = ['等级1', '等级2', '等级3']
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.title("船舱等级-死亡率")
plt.ylim((0, 1))
plt.plot(p_label, p_dead, 'ro-')
plt.show()

在这里插入图片描述

4.3 线性相关系数的计算

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 100)  # x变量
noise = np.random.rand(100)
y = -1 * x + -noise*5  # y变量
corr = np.corrcoef(x, y)[0][1]  # 线性相关系数
print(corr)
plt.plot(x, y, 'ro')
plt.show() 

在这里插入图片描述

5 性别分析

5.1 性别单个变量分析

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('泰坦尼克幸存者_all.csv')
male = df.Sex[df.Sex == "male"].count()
female = df.Sex[df.Sex == "female"].count()
print("male: " + str(male))
print("female: " + str(female))
plt.figure(figsize=(10, 5))
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.title("性别-饼图")
p = plt.pie([male, female],labels=['male', 'female'],autopct='%1.0f%%')
plt.show()

在这里插入图片描述

5.2 性别-死亡率的关系

def get_pclass_survived(x):
    Survived_Pclass = df[["Survived", "Sex"]]
    Pclass = Survived_Pclass[Survived_Pclass["Sex"] == x]  # 船舱等级1总共人数
    Pclass_Survived = Pclass["Survived"][Pclass["Survived"] == 1].count()  # 船舱等级1幸存人数
    Pclass_Survived_no = Pclass["Survived"][Pclass["Survived"] == 0].count()  # 船舱等级1死亡人数
    return Pclass_Survived, Pclass_Survived_no

male_Survived, male_Survived_no = get_pclass_survived("male")
female_Survived, female_Survived_no = get_pclass_survived("female")
plt.figure(figsize=(10, 5))
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签

def plot_pie(sex, index, Survived, Survived_no):
    plt.subplot(index)
    plt.title("性别: " + str(sex))
    p = plt.pie([Survived, Survived_no],
                labels=["幸存", "死亡"],
                autopct='%1.0f%%',
                colors=['red', 'green'])
plot_pie("male", 121, male_Survived, male_Survived_no)
plot_pie("female", 122, female_Survived, female_Survived_no)
plt.show()

在这里插入图片描述

6 年龄分析

6.1 缺失值处理

import pandas as pd
import matplotlib.pyplot as plt

# 分析年龄,缺失值问题
data = pd.read_csv("泰坦尼克幸存者_all.csv")
age = data.Age
# 缺失值所占比例
print(age.isnull().sum() / len(age))

# 删除
# age.dropna(inplace = True)

# 填充1:任一数来填充
# age.fillna(1, inplace = True)
import numpy as np
# mean + noise * std
x = age.mean() + np.random.randn() * age.std()
age.fillna(x, inplace=True)
print(age)

# 填充1: 使用均值
# age.fillna(age.mean(), inplace=True)
# print(age)
# 填充2:使用前面或后面的值  method
# age.fillna(method="ffill", inplace=True)
# print(age)

6.2 绘制频率分布直方图

import pandas as pd
import matplotlib.pyplot as plt

# 分析年龄,缺失值问题
data = pd.read_csv("泰坦尼克幸存者_all.csv")
# bins 越大,划分越细
age = data.Age
plt.subplot(121)
age.hist(bins = 100) # 频率分布直方图

plt.subplot(122)
age.plot(kind = 'kde') #密度分布函数
plt.show() # 只是展示

Survived = data.Survived
Survived.hist()
plt.show() # 只是展示

在这里插入图片描述

7 使用svm模型进行训练和预测

import pandas as pd
import numpy as np
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score

# 使用svvm模型进行分析
data = pd.read_csv("泰坦尼克幸存者_all.csv")
all_data = data[["Survived", "Pclass", "Sex", "Age"]]

# 处理性别female=0, male=1  loc
for i, x in enumerate(all_data["Sex"]):
    if x == "female":
        all_data.loc[i, "Sex"] = 0
    else:
        all_data.loc[i, "Sex"] = 1

# 处理年龄
age = data.Age
x = age.mean() + np.random.randn() * age.std()
all_data["Age"].fillna(x, inplace=True)

# 划分数据集
r = list(range(len(all_data)))
np.random.shuffle(r)
ra = int(len(r) * 0.8)
train_data = all_data.loc[r[0:ra]]
test_data = all_data.loc[r[ra:]]

# 划分特征、标签
features = ["Pclass", "Sex", "Age"]
label = ["Survived"]
train_x = train_data[features].values
train_y = train_data[label].values
test_x = test_data[features].values
test_y = test_data[label].values

# 搭建模型、训练模型、测试模型
svm_model = SVC(kernel='linear')
svm_model.fit(train_x, train_y) # 训练

predict1 = svm_model.predict(train_x) # 预测
accuracy1 = accuracy_score(train_y, predict1)
print(accuracy1)

predict2 = svm_model.predict(test_x)
accuracy2 = accuracy_score(test_y, predict2)
print(accuracy2)
0.7808988764044944
0.8100558659217877

AI学习部,不定期更新数据分析、机器学习、深度学习、python相关知识。
在这里插入图片描述

  • 2
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
泰坦尼克号数据_泰坦尼克号数据分析报告 891名乘客中遇难乘客有549⼈,占61.6%,⽣还乘客342⼈,占38.4%.各等级船舱乘客⼈数 各等级船舱乘客⼈数 Pclass_count=titanic_data['Pclass'].value_counts().sort_index() #⽤Bar_pie()函数作条形图和饼状图 Bar_pie(Pclass_count) 三等船舱乘客最多,占55.1%;⼀等船舱次之占24.2%;⼆级船舱乘客最少,占20.7%.男⼥乘客分布情况 男⼥乘客分布情况 Sex_count=titanic_data['Sex'].value_counts() print(Sex_count) Bar_pie(Sex_count) male 577 female 314 Name: Sex, dtype: int64 男乘客有577⼈,占64.8%;⼥乘客有314⼈,占35.2%.乘客年龄分布情况 乘客年龄分布情况 In [84]: #乘客年龄分布直⽅图 #创建figure、subplot,并⽤hist作条形图 fig_Age=plt.figure(figsize=(10,5)) ax_Age=fig_Age.add_subplot(1,2,1) titanic_data['Age'].hist(bins=10,color='g',alpha=0.3,grid=False) #设置x轴刻度标签 ax_Age.set_xticks([0,10,20,30,40,50,60,70,80,90,100]) #添加标题,x轴标签,y轴标签 ax_Age.set_title('Hist plot of Age') ax_Age.set_xlabel('Age') ax_Age.set_ylabel('number of people') #乘客年龄分布箱线图 #作箱线图 plt.subplot(122) titanic_data.boxplot(column='Age',showfliers=False) #添加y轴标签 plt.ylabel('Age') plt.title('boxplot of Fare') titanic_data['Age'].describe() count 891.000000 mean 29.544332 std 13.013778 min 0.000000 25% 22.000000 50% 29.000000 75% 35.000000 max 80.000000 Name: Age, dtype: float64 乘客年龄⼤概成正态分布,平均年龄29岁多,最⼤的80岁,最⼩的不到1岁(利⽤int()取整,不到1岁的为0).兄弟姐妹、配偶在船上的 兄弟姐妹、配偶在船上的 乘客分布情况条形图 乘客分布情况条形图 #创建figure、subplot,⽤plot()作柱状图 fig_SibSp=plt.figure(figsize=(10,5)) ax_SibSp=fig_SibSp.add_subplot(1,2,1) SibSp_count=titanic_data['SibSp'].value_counts() SibSp_count.plot(kind='bar') #添加标题,x轴标签,y轴标签 ax_SibSp.set_title('Bar plot of SibSp') ax_SibSp.set_xlabel('number of SibSp') ax_SibSp.set_ylabel('number of people') #拥有各 数量的兄弟姐妹、配偶的乘客⽐例条形图 plt.subplot(122) SibSp_count.div(SibSp_count.sum()).plot(kind='bar') #添加标题,x、y轴 标签 plt.title('Ratio of people in SibSp') plt.xlabel('SibSp') plt.ylabel('ratio') 在船上没有兄弟姐妹配偶的乘客较多,占68.2%.⽗母、孩⼦在船上的乘客分布条形图 ⽗母、孩⼦在船上的乘客分布条形图 Parch_count=titanic_data['Parch'].value_counts() #创建figure、subplot,⽤plot()作柱状图 fig_Parch=plt.figure(figsize=(10,5)) ax_Parch=fig_Parch.add_subplot(1,2,1) Parch_count.plot(kind='bar') #添加标题,x、y轴标签 ax_Parch.set_title('Bar plot of Parch') ax
### 回答1: Jupyter是一个常用的交互式编程环境,可以用于进行数据分析和可视化。泰坦尼克号是一艘著名的沉船,其数据集包含了船上乘客的信息。通过对泰坦尼克号数据的分析,我们可以了解和预测乘客的生存情况和其他相关因素。 在进行泰坦尼克号数据分析时,我们可以首先导入数据集,并对数据进行初步的展示和观察。我们可以查看数据集的各个列名和数据类型,以及了解数据集中是否有缺失值等问题。 接下来,我们可以对数据集进行清洗和预处理。这可能包括处理缺失值,删除不需要的列或行,以及对数据进行转换或编码等操作。例如,我们可以通过填充或删除缺失值来处理数据集的缺失信息问题。我们还可以将分类变量进行独热编码,以便后续的分析和建模。 在数据预处理完成后,我们可以进行进一步的分析。我们可以使用统计方法和可视化工具来了解各个变量之间的关系,并探索生存率与其他因素(如性别、年龄等)之间的关系。我们可以绘制柱状图、饼图、箱图等图表来直观地展示数据集的特征和趋势。 此外,我们还可以使用机器学习算法对泰坦尼克号数据进行建模和预测。我们可以使用分类算法(如逻辑回归、决策树等)来预测乘客的生存情况。通过训练模型并对其进行评估,我们可以了解不同因素对生存率的影响,并预测新乘客的生存情况。 总而言之,通过对泰坦尼克号数据的分析,我们可以更深入地了解这个历史事件,并通过数据分析和建模方法来预测乘客的生存情况和其他相关因素。Jupyter提供了一个交互式的环境,使得数据分析和可视化更加方便和直观。 ### 回答2: 泰坦尼克号数据分析是基于Jupyter Notebook进行的一项分析工作。Jupyter Notebook是一个开源的交互式编程环境,可以用于数据分析、可视化和机器学习等任务。 在泰坦尼克号数据分析中,我们可以通过使用Jupyter Notebook来加载和处理数据,并进行各种统计和可视化操作。首先,我们需要导入所需的Python库,如pandas和matplotlib等。然后,我们可以使用pandas库读取泰坦尼克号数据集,并对数据进行初步的观察和清理,如查看数据的列名、样本值、缺失值等。 接下来,我们可以进行一些基本的统计分析,如计算乘客的生存率、船上不同等级舱位的人数和生存率等。这些分析结果可以通过使用matplotlib库进行可视化,如柱状图、饼图等。 此外,我们还可以使用Jupyter Notebook来进行更深入的数据分析,如特征工程、机器学习模型的构建和评估等。通过选择适当的特征和模型,我们可以预测乘客的生存情况,并对模型进行评估和优化。 总之,Jupyter Notebook提供了一个便捷的环境,可以对泰坦尼克号数据进行分析和可视化。通过使用各种Python库和机器学习算法,我们可以深入了解数据,并得出有关乘客生存情况的结论。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王小葱鸭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值