对diamonds.csv数据集的数据探索性分析及其实现(EDA)
Posted 像雨像雾像风
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对diamonds.csv数据集的数据探索性分析及其实现(EDA)相关的知识,希望对你有一定的参考价值。
一、数据描述
1、数据描述
(1)本次使用的是砖石(diamonds)数据集,这个数据集包含近53940的价格和其他属性。根据该数据集,我们可以通过钻石的切割,颜色,净度,价格和其他属性分析钻石。
(2)该数据集中共有10个字段,下面我介绍一些这些字段:
carat:砖石的重量(克拉);
cut:钻石的切工,由低到高依次为Fair, Good, Very Good, Premium, Ideal;
color:砖石的颜色,从最低的J到最高的D;
clarity:钻石的纯净度,从低到高依次为I1, SI1, SI2, VS1, VS2, VVS1, VVS2, IF;
depth:砖石的总深度;
table:钻石的桌面比例;
price:砖石的价格;
x:砖石的长度;
y:砖石的宽度;
z:砖石的深度
2、数据导入
import pandas as pd
df = pd.read_csv(r\'C:\\Users\\Administrator\\Desktop\\diamonds.csv\')
df
3、查看数据信息
①查看数据集信息:
df.describe()
②查看数据类型:
df.info()
由此图可知,diamonds.csv数据集中的十个字段,其中有六个float类型,三个object类型,一个int型。
二、问题提出
1、砖石的价格的分布是什么样的?价格与克拉或颜色之间有什么关系?
2、砖石的纯净度与颜色之间有什么联系?纯净度分布是怎样的?
三、数据清洗和预处理
1、重复值
使用drop_duplicates()方法删除重复行:
df.drop_duplicates()
由此图可知,删除重复项之后该数据集有53794行数据,删除了146行重复的数据。
2、缺失值
使用isnull()方法查看缺失值:
df.isnull()
df.isnull().any()
有上图可知,该数据集中没有缺失值。
四、各变量相关性数据分析与可视化
1、绘制每个数据的图表信息
①柱状图:
cols=df.columns #取得列缩影
index=df.index[1:]#去除count行
plt.figure(figsize=(30,30))#控制画布大小
for i in range(len(cols) ):
a=plt.subplot(10,6,i+1)
a.set_title(cols[i])
for j in range(len(index)):
plt.bar(index[j],df.loc[index[j],cols[i]])#对每个特征绘制describe柱状图
plt.show()
②扇形图:
import matplotlib.pyplot as plt
plt.rcParams[\'font.sans-serif\'] = [\'SimHei\']
plt.pie(x=df[\'clarity\'].value_counts(),labels=df[\'clarity\'].value_counts().index,autopct=\'%.1f%%\',)
plt.title(u\'clarity\')
plt. show()
import matplotlib.pyplot as plt
plt.rcParams[\'font.sans-serif\'] = [\'SimHei\']
plt.pie(x=df[\'color\'].value_counts(),labels=df[\'color\'].value_counts().index,autopct=\'%.1f%%\',)
plt.title(u\'color\')
plt. show()
import matplotlib.pyplot as plt
plt.rcParams[\'font.sans-serif\'] = [\'SimHei\']
plt.pie(x=df[\'cut\'].value_counts(),labels=df[\'cut\'].value_counts().index,autopct=\'%.1f%%\',)
plt.title(u\'cut\')
plt. show()
由扇形图可知:clarity主要分布在VS2、SI1、SI2、VS1,其中的I1、IF占比很少;而color中G的占比最大,J最小;cut中切割理想(Ideal)的占比最大,失败的很少。
2、通过柱状图观看砖石价格的分布
#1
import seaborn as sns %matplotlib inline sns.distplot(df["price"],bins=300,kde=False,color="red") #2 sns.distplot(df[\'price\'],kde=False)
由上面两个图可知,钻石价格基本服从幂律分布。
3、通过柱形图对砖石颜色的统计
sns.countplot(diamond.color)
4、通过dtale进行可视化
通过左上角的三角形打开功能菜单(通过language可将语言切换为中文),选择描述得到下图:
由此图可知,我们可以通过描述功能得到该数据集的各个数据信息(数据的分布及频率,还有最大值、中值、最小值、总和等。)。
以carat为例:
5、砖石的其他数据与价格之间的关系
①钻石价格的分布情况
p1 <- ggplot(diamonds,aes(x = price)) +
#以价格为x轴绘制核密度图
geom_density(lwd = 1) +
#添加标题
ggtitle("Density of Price")
p2 <- ggplot(diamonds,aes(x = price)) +
#以价格为x轴,按照切工分组绘制核密度图
geom_density(lwd = 1,aes(color = cut)) +
#调整图例位置
theme(legend.position = c(0.85,0.7)) +
ggtitle("Price,by CUT")
p3 <- ggplot(diamonds,aes(x = price)) +
geom_density(lwd = 1,aes(color = color)) +
theme(legend.position = c(0.91,0.6)) +
ggtitle("Price,by Color")
p4 <- ggplot(diamonds,aes(x = price)) +
geom_density(lwd = 1,aes(color = clarity)) +
theme(legend.position = c(0.9,0.56)) +
ggtitle("Price,by Clarity")
第一副图可以看出钻石的价格呈正偏峰分布,多数的值都集中在较小的一端。
第二幅图我们将价格按颜色分组,颜色好(D)的钻石的价格多集中在价格较低的区域,而颜色差(J)的钻石价格的分布更平均一些。
第三幅图我们将价格按切工分组,各种切工的钻石分布情况差不多都多集中于价格低的区域。
第四幅图我们将价格按透明度分组,发现和第二幅图相似,透明度较好(IF)的钻石多集中在低价格区域,而透明度较差(l1)的钻石的价格分布更平均一些。
②价格与克拉和纯净度之间的关系
由散点图可知,砖石的纯净度越高,重量越重,价格越高。
③价格与克拉之间的关系
由此图我们看到随着钻石重量的增加钻石的价格也呈上升的趋势,且在某些重量上相对集中。我们可以看到钻石的重量越高其价格的离散程度越大,而在重量较低时价格的离散程度相对较小。故我认为钻石的重量越高价格越高,钻石的重量越高其价格受其他因素的影响越大。
④价格与切工(cut)之间的关系
切工与价格的关系如何? 我们可以首先将钻石按照切工分组,然后计算每一个切工等级的钻石的平均价格等。 在jupyter中,我们可以借助DataFrame的groupby函数进行分组,然后使用mean函数分组聚集计算。
diamond.groupby("cut")["price"].mean()
但从上图来看,我们发现价格和切工并不存在很强的直接相关性。我们也可以借助seaborn的盒图直观地观察。
由此图我们可以发现砖石的切工越好,其价格相对来说就越高。
⑤价格与纯净度之间的关系
通过上面的线型图我们发现,纯净度并不能直接觉定一个砖石的价格,但间接影响了砖石的价格。
⑥价格与纯净度、颜色之间的关系
由扇形图和柱状图可知,纯净度越高,颜色越稀有,价格越高。
⑦价格和克拉,切工之间的关系
上面两个图表我们在看的时候太密集,不方便观察,于是我将上面第二关图表进行了拆分,如下图所示:
由这些图表可知,对于任何颜色的砖石来说,重量越重,价格越高。
⑧价格与其他数据之间的相关性
由上图可知价格与depth之间的相关性是负相关,故对价格的影响是价格越高,depth越低。而其他数据都对价格由影响,只是影响力度不同,其中carat的影响力最大。
6、砖石数据集中所有数据之间的相关性
五、主要结论
克拉、切割、颜色、纯度对价格的影响是呈现线性正相关关系,同等条件下,克拉越高价格越高。
钻石的重量越高价格越高,钻石的重量越高其价格受其他因素的影响越大。
颜色、切工、透明度越好的钻石价格均值越低。
价格随克拉数上升而上升,有较多的离群点。
以上是关于对diamonds.csv数据集的数据探索性分析及其实现(EDA)的主要内容,如果未能解决你的问题,请参考以下文章
什么是探索性数据分析EDA(Exploratory Data Analysis)?,探索性数据分析EDA(Exploratory Data Analysis)对机器学习有是意义?探索性数据分析EDA详