【SCAU_educoder数据挖掘】1-2直方图与柱状图
任务描述
本关任务:通过所学的知识内容利用直方图和柱状图进行特征选择。
相关知识
为了完成本关任务,你需要掌握:1.如何绘制直方图和柱状图,2.直方图与柱状图的区别。
案例背景
泰坦尼克号遭遇的灾难震惊世界,如何避免灾难甚至预测灾难呢? 要实现首先要做好泰坦尼克号的损失数据统计,才能为数据分析打下基础。
观察数据特点

观察图表我们可以知道,共有891行、12列。这代表本训练集共有891条数据,每条数据有12类信息。区别于前述鸢尾花数据集,该数据集涉及到的属性字段更多。
目标 :预测泰坦尼克号上的乘客是幸存还是遇难,每个乘客对应一个乘客Id,用0表示遇难,用1表示幸存。
编程要求
根据学习上面知识内容,利用直方图和柱状图进行特征选择

测试说明
平台会对你编写的代码进行测试: 预期输出:

代码分析:
- 导入必要的库 :
python 复制代码
| import pandas as pd | |
|---|---|
| import numpy as np | |
| import matplotlib.pyplot as plt | |
| import matplotlib.image as mpimg |
这些库提供了数据处理、数值计算和绘图的功能。
- 定义函数 :
python 复制代码
| def test(): |
|---|
这里定义了一个名为test的函数。
- 读取CSV文件 :
python 复制代码
| data_url = "/data/workspace/myshixun/step1/train.csv" | |
|---|---|
| df = pd.read_csv(data_url) |
通过pd.read_csv方法读取指定路径的CSV文件,并将其内容存储在DataFrame对象df中。
- 根据生存情况筛选数据 :
python 复制代码
| S=df[df.Survived==1] | |
|---|---|
| D=df[df.Survived==0] |
这两行代码分别筛选出数据中生存情况为1(即存活)和0(即死亡)的乘客。
- 绘制直方图 :
python 复制代码
| plt.hist(S.iloc[:, 9]) | |
|---|---|
| plt.hist(D.iloc[:, 9]) |
这里尝试绘制直方图,但是存在一些问题:
- S.iloc[:, 9]和D.iloc[:, 9]尝试访问第10列的数据(因为索引从0开始)。但是,这可能会导致错误,因为我们必须确保df至少有10列。
- 绘制两个直方图时,它们会重叠在一起,可能不容易区分。
- 保存直方图 :
python 复制代码
| plt.savefig('/data/workspace/myshixun/step1/picture2/直方图.png') |
|---|
将当前的图表保存为PNG文件。
- 绘制柱状图 :
python 复制代码
| sexNew = df.groupby(['Sex','Survived'])['Survived'].count().unstack() | |
|---|---|
| sexNew.plot(kind='bar') |
这里首先根据性别和生存情况对数据进行分组,并计算每组的数量。然后使用unstack方法将数据从长格式转换为宽格式,最后绘制柱状图。
- 保存柱状图 :
python 复制代码
| plt.savefig('/data/workspace/myshixun/step1/picture2/柱状图.png') |
|---|
将当前的柱状图保存为PNG文件。
- 展示两个图像 :
python 复制代码
| img1=mpimg.imread('/data/workspace/myshixun/step1/picture2/直方图.png') | |
|---|---|
| img2=mpimg.imread('/data/workspace/myshixun/step1/picture2/柱状图.png') | |
| plt.subplot(121),plt.imshow(img1) | |
| plt.subplot(122),plt.imshow(img2) | |
| plt.savefig("/data/workspace/myshixun/step1/picture2/特征选择.png") |
首先,使用mpimg.imread读取之前保存的直方图和柱状图。然后使用subplot方法在一个画布上绘制这两个图像,并将整个画布保存为“特征选择.png”。
- 展示图表 :
python 复制代码
| plt.show() |
|---|
完整代码:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
def test():
data_url = "/data/workspace/myshixun/step1/train.csv"
df = pd.read_csv(data_url)
S=df[df.Survived==1]
D=df[df.Survived==0]
#绘制根据S、D的前9列数据绘制直方图
########## Begin ##########
plt.hist(S.iloc[:, 9])
plt.hist(D.iloc[:, 9])
########## Begin ##########
plt.savefig('/data/workspace/myshixun/step1/picture2/直方图.png')
#sex = df.groupby('Sex')['Survived'].sum()
#绘制柱状图
sexNew = df.groupby(['Sex','Survived'])['Survived'].count().unstack()
########## Begin ##########
sexNew.plot(kind='bar')
########## End ##########
plt.savefig('/data/workspace/myshixun/step1/picture2/柱状图.png')
plt.show()
img1=mpimg.imread('/data/workspace/myshixun/step1/picture2/直方图.png')
img2=mpimg.imread('/data/workspace/myshixun/step1/picture2/柱状图.png')
plt.subplot(121),plt.imshow(img1)
plt.subplot(122),plt.imshow(img2)
plt.savefig("/data/workspace/myshixun/step1/picture2/特征选择.png")
