对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、绘制每个数据的图表信息
①柱状图:
lumns #取得列缩影
isnull的用法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.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.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.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、通过柱形图对砖⽯颜⾊的统计
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函数分组聚集计算。
但从上图来看,我们发现价格和切⼯并不存在很强的直接相关性。我们也可以借助seaborn的盒图直观地观察。
由此图我们可以发现砖⽯的切⼯越好,其价格相对来说就越⾼。
⑤价格与纯净度之间的关系
通过上⾯的线型图我们发现,纯净度并不能直接觉定⼀个砖⽯的价格,但间接影响了砖⽯的价格。
⑥价格与纯净度、颜⾊之间的关系
由扇形图和柱状图可知,纯净度越⾼,颜⾊越稀有,价格越⾼。
⑦价格和克拉,切⼯之间的关系
上⾯两个图表我们在看的时候太密集,不⽅便观察,于是我将上⾯第⼆关图表进⾏了拆分,如下图所⽰:
由这些图表可知,对于任何颜⾊的砖⽯来说,重量越重,价格越⾼。
⑧价格与其他数据之间的相关性
由上图可知价格与depth之间的相关性是负相关,故对价格的影响是价格越⾼,depth越低。⽽其他数据都对价格由影响,只是影响⼒度不同,其中carat的影响⼒最⼤。
6、砖⽯数据集中所有数据之间的相关性
五、主要结论
克拉、切割、颜⾊、纯度对价格的影响是呈现线性正相关关系,同等条件下,克拉越⾼价格越⾼。
钻⽯的重量越⾼价格越⾼,钻⽯的重量越⾼其价格受其他因素的影响越⼤。
颜⾊、切⼯、透明度越好的钻⽯价格均值越低。
价格随克拉数上升⽽上升,有较多的离点。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论