对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)的主要内容,如果未能解决你的问题,请参考以下文章

超市客户价值分析

「数据挖掘入门系列」数据探索

R语言数据挖掘实战系列

什么是探索性数据分析EDA(Exploratory Data Analysis)?,探索性数据分析EDA(Exploratory Data Analysis)对机器学习有是意义?探索性数据分析EDA详

R语言对NASA元数据进行文本挖掘的主题建模分析

数据分析 | 带你零基础入门数据挖掘(附代码)