【全程记录】一次数据分析和可视化的大作业(python)

这篇具有很好参考价值的文章主要介绍了【全程记录】一次数据分析和可视化的大作业(python)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、概述

本帖记录了一次从头到尾的作业过程(从导入数据集,经过数据处理与分析,到可视化数据,再到最终总结。包括遇到的问题与解决办法),其中运用到的知识来源于学校老师和bilibili教学视频,其中教学视频如下:

【【莫烦Python】Matplotlib Python 画图教程】

https://www.bilibili.com/video/BV1Jx411L7LU?vd_source=6cd5aa6c6bc6ca847fee566ff42f216a

【吹爆!终于有人把seaborn可视化讲得这么清晰了!2021最强的Python数据分析教程之seaborn精讲 简单明了 通俗易懂!】https://www.bilibili.com/video/BV1HF411B72n?vd_source=6cd5aa6c6bc6ca847fee566ff42f216a

【2023年度最佳python数据分析教程(numpy+matplotlib+pandas),整整200集,七周精通,拿走不谢】https://www.bilibili.com/video/BV1Jt4y1h7Vt?vd_source=6cd5aa6c6bc6ca847fee566ff42f216a

二、过程

1、数据准备(导入数据集)

我的数据集选择的是kaggle上的经典数据集——“Titanic”,其是一个常用的数据集,提供了关于泰坦尼克号乘客的各种信息,如姓名、年龄、性别、船票等级、生存情况等。

其中导入方式有两种,下面分别介绍:

① 代码下载实现

import opendatasets as od
import pandas as pd

# 下载Titanic数据集
dataset_url = 'https://www.kaggle.com/c/titanic/download/train.csv'
od.download(dataset_url, './data')

# 加载CSV数据集
dataset_path = './data/train.csv'
data = pd.read_csv(dataset_path)

# 打印数据集的前几行
print(data.head())

上述代码中,我们通过opendatasets库实现该数据集的下载,并且通过pandas库展示了数据集的前几行。

需要注意的是,如果出现了如下报错,可能是因为加速器或者VPN的使用,关闭VPN或者等待一会儿重新刷新即可。

数据可视化大作业,python,数据分析,课程设计,开发语言

② 直接在kaggle官网上下载数据集,然后上传至jupyter notebook

我在这里使用的是第二种方法,直接使用名称调用数据集即可

name = 'train.csv'
data = pd.read_csv(name)

2、数据准备与清洗

在一步中,我们将进行数据的准备与缺失值的补充

首先,我们先查看数据集的基本情况:

# 输出数据集的行数和列数
num_rows, num_cols = data.shape
print("数据集行数:", num_rows)
print("数据集列数:", num_cols)
# 输出数据集的基本信息
print("\n数据集的基本信息:")
print(data.info())

然后,我们进行缺失值的处理:

处理过程分为两步:

第一步是输出缺失值的数量:

# 检查每列的缺失值数量
missing_values = data.isnull().sum()
print("\n缺失值数量:")
print(missing_values)

第二步是填充缺失值(以‘age’列为例,以平均值填充):

data['Age'].fillna(data['Age'].mean(), inplace=True)

然后,我们进行异常数据的过滤(以‘Fare’列为例):

(我们在这里假设Fare大于99的就是异常值)

data = data[data['Fare'] <= 99]

然后,我们进行数据的拓展。

我在数据集中添加了一列“date”,其是泰坦尼克号的首航出发时间,并将它解析为了日期格式

data['date'] = 19120410
data['date'] = pd.to_datetime(data['date'])

至此,我们的数据预处理与清洗部分就结束了,下面我们查看处理后的数据集

print("处理后的数据集信息:")
print(data.info())

3、可视化

我是在jupyter notebook进行操作的,所以先准备代码的运行环境

import seaborn as sns
import matplotlib
import matplotlib.pyplot as plt
%matplotlib inline

sns.set_style('darkgrid')
matplotlib.rcParams['font.size'] = 14
matplotlib.rcParams['figure.figsize'] = (9, 5)
matplotlib.rcParams['figure.facecolor'] = '#00000000'

上述代码是在老师给定的模板上进行的修改

现在进行可视化部分:

① 不同性别的生存率(分组条形图)

# 统计不同性别的生存数量
gender_survived = data.groupby('Sex')['Survived'].value_counts().unstack()

# 绘制分组条形图
gender_survived.plot(kind='bar', stacked=True)
plt.xlabel('Sex')
plt.ylabel('Count')
plt.title('Survival Counts by Gender')
plt.legend(['Not Survived', 'Survived'])
plt.show()

② 不同舱位等级的乘客年龄分布(箱线图)

# 使用箱线图比较不同舱位等级的乘客年龄分布
plt.boxplot([data[data['Pclass'] == 1]['Age'].dropna(),
             data[data['Pclass'] == 2]['Age'].dropna(),
             data[data['Pclass'] == 3]['Age'].dropna()])
plt.xlabel('Pclass')
plt.ylabel('Age')
plt.title('Age Distribution by Passenger Class')
plt.xticks([1, 2, 3], ['1st Class', '2nd Class', '3rd Class'])
plt.show()

③ 乘客的登船港口分布(饼图)

# 统计乘客的登船港口分布
embarked_count = data['Embarked'].value_counts()

# 绘制饼图
plt.pie(embarked_count, labels=embarked_count.index)
plt.title('Distribution of Passengers by Embarked')
plt.show()

④ 比较不同年龄段乘客的生存情况(条形图)

age_groups = pd.cut(data['Age'], bins=[0, 12, 18, 30, 50, 80])
survival_by_age = data.groupby(age_groups)['Survived'].mean().reset_index()
sns.barplot(x='Age', y='Survived', data=survival_by_age)
plt.xlabel('Age Group')
plt.ylabel('Survival Rate')
plt.title('Survival Rate by Age Group')
plt.show()

⑤ 探索票价的分布(混合图)

sns.histplot(data['Fare'], kde=True)
plt.xlabel('Fare')
plt.ylabel('Count')
plt.title('Distribution of Fare')
plt.show()

⑥ 乘客的舱位等级和生存率的关系(条形图)

# 统计不同舱位等级的乘客生存率
pclass_survived = data.groupby('Pclass')['Survived'].mean()

# 绘制条形图
plt.bar(pclass_survived.index, pclass_survived)
plt.xlabel('Pclass')
plt.ylabel('Survival Rate')
plt.title('Survival Rate by Passenger Class')
plt.xticks([1, 2, 3], ['1st Class', '2nd Class', '3rd Class'])
plt.show()

4、问答

在这一部分中,我将提出一些问题,并且使用数据分析与可视化知识进行回答

问题以及解答方式:

① 不同舱位等级的乘客数量是多少?

(本题使用条形图回答)

pclass_count = data['Pclass'].value_counts()
plt.figure(figsize=(8, 6))
sns.countplot(x='Pclass', data=data)
plt.title("不同舱位等级的乘客数量")
plt.show()

需要注意的是,上述代码可能会报错:

数据可视化大作业,python,数据分析,课程设计,开发语言

 参考相关资料可知,出现这种问题可能是因为Matplotlib无法正确渲染字符,下面给出三种解决方法:

  方法一:安装中文字体库

 输入以下代码下载中文字体库:


!apt-get -qq -y install fonts-wqy-zenhei 

然后在绘图前运行如下代码,选择可以运行的字体

plt.rcParams['font.family'] = 'WenQuanYi Zen Hei'  # 设置字体为文泉驿正黑字体

 方法二:重新设置默认字体

运行以下代码:

matplotlib.rcParams['font.family'] = 'sans-serif'
matplotlib.rcParams['font.sans-serif'] = ['Arial']

通过这个方法,我们将默认字体重新设置为无衬线字体`Arial`,解决了这个问题。

 方法三:删除中文字符

这是最简单粗暴的一种方法,因为我是全英授课,作业也要求为英文完成,所以就采取了这个方法

所以我改进后的代码为:

pclass_count = data['Pclass'].value_counts()
plt.figure(figsize=(8, 6))
sns.countplot(x='Pclass', data=data)
plt.title("Distribution of different passenger class classes")
plt.show()

② 不同年龄段的乘客存活率如何?

(本题使用柱状图回答)

# 根据年龄分组,并计算存活率
age_groups = pd.cut(data['Age'], bins=[0, 18, 30, 50, 100], labels=['0-18', '19-30', '31-50', '51+'])
survival_rate_by_age = data.groupby(age_groups)['Survived'].mean()

# 绘制条形图显示不同年龄段的存活率
plt.bar(survival_rate_by_age.index, survival_rate_by_age)
plt.xlabel('Age Group')
plt.ylabel('Survival Rate')
plt.title('Survival Rate by Age Group')
plt.show()

③ 存活的乘客中,男性和女性的平均年龄是否有差异?

(本题使用柱状图回答)

# 计算存活的男性和女性的平均年龄
average_age_survived = data.groupby('Sex')['Age'].mean()

# 绘制柱状图显示存活的男性和女性的平均年龄
plt.bar(average_age_survived.index, average_age_survived,color = 'green')
plt.xlabel('Sex')
plt.ylabel('Average Age')
plt.title('Average Age of Survived Passengers by Sex')
plt.show()

④ 不同船舱等级(Pclass)的男性和女性乘客数量分别是多少?

(本题使用堆叠条形图回答)

# 统计不同船舱等级下男性和女性乘客数量
gender_counts_by_pclass = data.groupby(['Pclass', 'Sex']).size().unstack()

# 绘制堆叠条形图显示不同船舱等级下男性和女性乘客数量
gender_counts_by_pclass.plot(kind='bar', stacked=True)
plt.xlabel('Pclass')
plt.ylabel('Count')
plt.title('Passenger Count by Pclass and Sex')
plt.show()

⑤不同家庭规模(Family Size)的乘客数量分布如何?

(本题使用条形图回答)

# 计算家庭规模
data['FamilySize'] = data['SibSp'] + data['Parch'] + 1

# 统计不同家庭规模的乘客数量
passenger_count_by_family_size = data['FamilySize'].value_counts()

# 绘制条形图显示不同家庭规模的乘客数量分布
passenger_count_by_family_size.plot(kind='bar')
plt.xlabel('Family Size')
plt.ylabel('Count')
plt.title('Passenger Count by Family Size')
plt.show()

⑥ 不同年龄段的乘客存活率是否与船舱等级(Pclass)有关?

(本题使用热力图作答)

# 计算不同年龄段和船舱等级组合下的乘客存活率
survival_rate_by_age_group_pclass = data.groupby(['Age', 'Pclass'])['Survived'].mean().unstack()

# 绘制热力图显示乘客存活率与年龄段、船舱等级之间的关联
sns.heatmap(survival_rate_by_age_group_pclass, annot=True, cmap='coolwarm')
plt.xlabel('Pclass')
plt.ylabel('Age Group')
plt.title('Survival Rate by Age Group and Pclass')
plt.show()

⑦不同家庭规模(Family Size)的乘客存活率是否与船舱等级(Pclass)有关?

(本题使用热力图作答)

# 计算不同家庭规模和船舱等级组合下的乘客存活率
survival_rate_by_family_size_pclass = data.groupby(['FamilySize', 'Pclass'])['Survived'].mean().unstack()

# 绘制热力图显示乘客存活率与家庭规模、船舱等级之间的关联
sns.heatmap(survival_rate_by_family_size_pclass, annot=True, cmap='coolwarm')
plt.xlabel('Pclass')
plt.ylabel('Family Size')
plt.title('Survival Rate by Family Size and Pclass')
plt.show()

5、总结

在各个部分中,我将总结归纳从数据集中可视化得出的推论,然后回答我提出的问题。

① 可视化总结

1、女性的生存率远高于男性。

2、一般来说,舱位等级越高,乘客年龄越高。

3、绝大多数乘客都是在表示为“s”的港口登船的。

4、总体来说,0-12岁的儿童生存率高于其他年龄组,18-30岁的青壮年生存率偏低。

5、票价主要集中在“10”左右,有极少数高价票。

6、高等级客舱的生存率显著高于低等级客舱,其中最大差距一倍有余。

② 回答问题

1、三等舱的人数最多,在490人左右;一等二等舱各在190人左右。

2、0-12岁的儿童生存率高于其他年龄组,18-30岁的青壮年生存率偏低。

3、存活的男女年龄有所差异,但是差别不大,总体都在28岁上下。

4、读图可知,一等二等舱的人数几乎相同(男性各190人左右,女性50人左右);三等舱男性490人左右,女性150人左右。

5、绝大多数乘客都是独自一人登船的,也有小部分2人或3人登船的,超过四人登船的数量极少。

6、总体来讲,年龄越小,舱位等级越高,生存概率越大。

7、舱位等级越高,生存概率越大,但是未发现生存率与家庭数量有明显关联。

三、结束

学生党,第一次写博客,有不正确的地方欢迎批评指正。

也感谢老师和各路大神提供的帮助。

创作不易,转载请注明出处(顿首)文章来源地址https://www.toymoban.com/news/detail-759866.html

到了这里,关于【全程记录】一次数据分析和可视化的大作业(python)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 大数据毕设分享 大数据二手房数据爬取与分析可视化 -python 数据分析 可视化

    # 1 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项

    2024年01月23日
    浏览(54)
  • 计算机毕设 大数据上海租房数据爬取与分析可视化 -python 数据分析 可视化

    # 1 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项

    2024年02月07日
    浏览(46)
  • python毕设选题 - 大数据二手房数据爬取与分析可视化 -python 数据分析 可视化

    # 1 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项

    2024年01月20日
    浏览(63)
  • python毕设选题 - 大数据上海租房数据爬取与分析可视化 -python 数据分析 可视化

    # 1 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项

    2024年02月19日
    浏览(59)
  • 计算机毕设 大数据二手房数据爬取与分析可视化 -python 数据分析 可视化

    # 1 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项

    2024年02月04日
    浏览(45)
  • 大数据可视化——基于Python豆瓣电影数据可视化分析

    本项目旨在通过对豆瓣电影数据进行综合分析与可视化展示,构建一个基于Python的大数据可视化系统。通过数据爬取收集、清洗、分析豆瓣电影数据,我们提供了一个全面的电影信息平台,为用户提供深入了解电影产业趋势、影片评价与演员表现的工具。项目的关键步骤包括

    2024年02月04日
    浏览(83)
  • 数据分析基础-数据可视化02-不同数据类型的可视化概念及原则

    将数据空间映射到颜色空间。 数据可以被划分为两个主要的数据空间:连续数据和分类数据。这两种数据空间有不同的特点和适用的分析方法。 连续数据(Continuous Data): 连续数据是指可以在某个范围内取任何数值的数据。在连续数据空间中,数据点之间存在无限多的可能

    2024年02月11日
    浏览(45)
  • 数据分析案例-图书书籍数据可视化分析(文末送书)

      🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 1.项目背景 2.数据集介绍 3.技术工具 4.导入数据 5.数据可视化 文末推荐与福利     

    2024年01月19日
    浏览(48)
  • 数据分析案例-数据分析师岗位招聘信息可视化

      🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 ​编辑 1.数据集介绍 2.实验工具 3.实验过程 3.1加载数据 3.2数据预处理 3.3数据可视化

    2024年02月16日
    浏览(57)
  • 大数据可视化——基于Python豆瓣电影数据可视化分析系统

    本项目旨在通过对豆瓣电影数据进行综合分析与可视化展示,构建一个基于Python的大数据可视化系统。通过数据爬取收集、清洗、分析豆瓣电影数据,我们提供了一个全面的电影信息平台,为用户提供深入了解电影产业趋势、影片评价与演员表现的工具。项目的关键步骤包括

    2024年01月21日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包