泰坦尼克号数据分析报告
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 float646 SibSp 891 non-null int64 7 Parch 891 non-null int64 8 Ticket 891 non-null object 9 Fare 891 non-null float6410 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_allprint("等级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 pltx = 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 pltdf = 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_nomale_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"] = 0else: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相关知识。
泰坦尼克号数据分析报告相关推荐
- Titantic乘客生还预测数据分析报告—基于python实现
Titantic乘客生还预测数据分析报告-基于python实现 1. 问题提出 2. 数据描述 3. 特征独立分析 4. 数据处理 5. 模型评估 1. 问题提出 Titantic数据集是Kaggle ...
- python数据分析并生成报告界面_如何用Python绘图和制作数据分析报告?
Live 简介: 你要向老板汇报自己的工作成果,如果光靠生硬的语言或文字来展示,那么老板很有可能听不懂,更没有兴趣看那一堆文字.这会直接影响你的升职加薪.但是你还要还房贷.买车子.旅游.结婚.生孩子. ...
- 2018年8月以太坊DApp数据分析报告
近日,链塔数据BlockData发布了<2018年8月以太坊DApp数据分析报告>,报告显示,以太坊上的DApp数量多达775个,形成了一个较为完善的开发生态圈,累计交易笔数多达3.003 ...
- 8天后,有份独家小程序数据分析报告重磅来袭
写下这个标题的时候,小编的内心是有点小激动的. 目前夏日葵电商成功涉及的小程序有:旅游.餐饮.技术服务.生鲜电商以及耗材等行业: 为了让更多想做小程序的人掌握先机, 夏日葵电商将与这5类小程序商家联手 ...
- 产品经理经验谈50篇(二):如何写好一份规范的数据分析报告?我想你需要知道这些
01 结构规范及写作 报告常用结构: 1. 架构清晰.主次分明 数据分析报告要有一个清晰的架构,层次分明能降低阅读成本,有助于信息的传达.虽然不同类型的分析报告有其适用的呈现方式,但总的来说作为议论文 ...
- 掌握5个核心要点,做一个高质量的数据分析报告
作为职场人,在日常工作中肯定少不了要写月报.年报等各种分析报告.虽然时下数据分析已成为人人必备的技能,但不会写数据分析报告的人还是很多,大多数人的通病是分析报告只是呈现数据.罗列事实,但却没有结论,或 ...
- python 豆瓣评论数据分析_Python爬虫实战案例:豆瓣影评大数据分析报告之网页分析...
个人希望,通过这个完整的爬虫案例(预计总共4篇短文),能够让爬虫小白学会怎么做爬虫的开发,所以在高手们看来,会有很多浅显的废话,如果觉得啰嗦,可以跳过一些内容~ 上一篇文章给大家简单介绍了Python ...
- sql能查到数据 dataset对象里面没有值_新零售数据分析报告
零售项目数据分析报告 一.项目背景 随着零售市场的竞争日趋激烈,在试图满足客户期望时,最优化服务业务流程的能力是最重要的.通道化和管理数据,以争取客户的利益以及创造利润为目标,对生存至关重要. 理想情 ...
- 如何查询一个表中除某几个字段外其他所有的字段_一个小故事告诉你:如何写好数据分析报告?...
关注并将「人人都是产品经理」设为星标 每天早 07 : 45 按时送达 给你一份数据,你能完美的出一份数据报告吗?本文结合一个小故事,来告诉大家如何写好一份数据分析报告,enjoy~ 作者:Haby ...
- pandas_profiling :教你一行代码生成数据分析报告
分析报告全貌 什么是探索性数据分析 熟悉pandas的童鞋估计都知道pandas的describe()和info()函数,用来查看数据的整体情况,比如平均值.标准差之类,就是所谓的探索性数据分析- ...
最新文章
- 人脸检测库libfacedetection介绍
- 模拟电路技术之基础知识(三)
- php给留言分配id_php留言板更新代码
- linux自动跑批,在linux中添加硬盘并在系统启动时自动挂载
- arm-linux-gnueabihf gcc8.3交叉编译工具搭建教程
- ZooKeeper学习-- Zookeeper简单介绍
- 并发模型之——共享内存模型(线程与锁)理论篇
- jsp学习之路之实现一个用户信息页面并实现跳转到另外一个页面输出用户的相关信息
- node.js提供的服务器live-server的使用
- _2020年10个最好的Linux发行版本
- iirf有时有效,有时返回404错误的解决方法
- javascript自定义滚动条插件,几行代码的事儿
- 自定义一个序列化表单的方法2+提示语
- 计算机毕业设计android的手机商城app(源码+系统+mysql数据库+Lw文档)
- 纯前端导出PDF分页截取问题处理
- 2021东北师范大学计算机技术专业研究生入学复测考试
- Java--IDEA报错Project ‘org.springframework.boot:spring-boot-starter-parent:2.2.0.RELEAS
- 英语四级和计算机一级算多少学分,英语四级几分过 英语四级426分过了吗。
- DevExpress XPO 学习笔记
- 什么是Websocket以及Nginx实现ws代理