首页 > 其他 > 详细

对砖石属性表进行数据可视化分析(使用seaborn工具)

时间:2021-06-17 21:25:31      阅读:44      评论:0      收藏:0      [点我收藏+]

对砖石属性表进行可视化分析

一、数据描述

1.数据解释

该数据是对砖石的一些属性进行可视化分析,共53940条数据,共10个字段,下面开始介绍个字段:

  • carat:表示砖石的重量,重量的单位是克拉;
  • cut:表示砖石的切割质量,切割质量分为Ideal、Premium、Good、Very Good、Fail(理想、优质、良好、非常好、失败)。
  • color:表示砖石的色彩,J (worst) to D (best)(从最差到最佳)。
  • clarity:表示砖石的净度,净度分为IF、VVS1、VVS2、VS1、VS2、SI1、SI2(内含物的含量,从内无瑕疵到内含等级)。
  • depth:表示砖石的全深比。
  • table:表示砖石的台面。
  • price:表示砖石的价格。
  • x:长,单位mm
  • y:宽,单位mm
  • z:深,单位mm

2.导入数据

技术分享图片

 

 3.查看数据集信息

技术分享图片

 

 技术分享图片

 

从统计信息可以看出数字型的总数、count,数据个数(非空数据),mean,均值,std,标准差,min,最小值,25%,第1四分位数,即第25百分位数,50%,第2四分位数,即第50百分位数,75%,第3四分位数,即第75百分位数,max,最大值等信息。

二、问题提出

1.砖石的各个属性之间是否有关?

2.砖石的属性和砖石的数量是否有关系?

3.砖石的长、宽、深之间有关系吗?

三、数据清洗

1.查找缺失值

技术分享图片

 

 技术分享图片

 

 从数据集中,可以看到没有缺失值。

2.查看数据类型

技术分享图片

 

 可以看到有三个属性是非数字型的,后面可以对其进行处理,把它转换为数字型。

3.类型转换

技术分享图片

 

 技术分享图片

 

 4.处理缺失值

技术分享图片

 

 把缺失值删除。

四、数据可视化

1.对查看整体多对关系

技术分享图片

 

 把数据放大,查看关系

技术分享图片

 

 从图中可以看出它们之间都有关系。

2.使用热地图显示相关系数

技术分享图片

 

 技术分享图片

 

 从图中可以看到,砖石的每个属性都存在较强的相关性。

3.查看x、y、z之间的关系

技术分享图片

 

 技术分享图片

 

 技术分享图片

 

 从图中看x,y,z的相关性还是很高的。

4.从不同属性来看砖石数量比

下面来做个饼图看看从色彩,切割等属性来看看不同品质的钻石数量占比:

技术分享图片

 

 技术分享图片

 

 技术分享图片

 

 5.查看切割质量和价格比

技术分享图片

 

 从图中可以看出,切割质量越好,价格越高。

五、数据预处理

1.查看是否存在异常值

使用箱线图查看数据是否存在异常值:

技术分享图片

 

 技术分享图片

 

 从图中可以看出,不存在明显的异常值。

六、总结

1.从以上分析可以看出,各个属性之间的相关性很高

2.砖石的各个属性与砖石的数量有关系,砖石色彩越差或越小砖石数量就少,切割质量最差的,数量最少,净度最差的,数量也相对其它的要少。

3.砖石越长,宽度越低,深度越高

4.切割质量越好,砖石的价格越高

5.价格与砖石的长宽深有很强的相关性,而且基本都是正相关。

七、代码分析

# coding: utf-8

# In[1]:


import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.cm as sns
get_ipython().run_line_magic(matplotlib, inline)

df=pd.read_csv(rdiamonds.csv)
print("输出数据集:")
print(df.head())


# In[2]:


print("数据统计信息:")
print(df.describe())


# In[3]:


print("数据集基本信息:")
print(df.info())


# In[4]:


#查看数据集
df.value_counts()


# In[5]:


#查看缺失值
df.isnull().sum()


# In[6]:


#数据清理

#把非数字型转换为数字型
import collections
#统计列表元素出现的次数
collections.Counter(df[color])


# In[7]:


collections.Counter(df[clarity])


# In[8]:


collections.Counter(df[cut])


# In[9]:


df[cut_no]=df[cut]
df[clarity_no]=df[clarity]
df[color_no]=df[color]
# 准备好替换map
cut_rp_map={Fair:1,Good:2,Very Good:3,Premium:4,Ideal:5}
co_rp_map={J:1,I:2,H:3,G:4,F:5,E:6,D:7}
cl_rp_map={I1: 1,SI2: 2,SI1: 3,VS2: 4,VS1: 5,VVS2: 6,VVS1: 7,IF: 8}
# inplace 默认值是False,为True则替换原数据集,否则不替换原数据而是返回替换结果
df[cut_no].replace(cut_rp_map,inplace=True)
df[clarity_no].replace(cl_rp_map,inplace=True)
df[color_no].replace(co_rp_map,inplace=True)


# In[14]:


# 应用于原数据集
df.dropna(inplace=True)
# 删除至少两个空值的行
df.dropna(thresh=2)
# 删除所有值都是空的行
df.dropna(how=all)
# 删除列
df.dropna(axis=columns)


# In[13]:


import seaborn as sns
# 用Seaborn画成对关系
sns.pairplot(df)
plt.show()


# In[11]:


# Correlation matrix
def plotCorrelationMatrix(df1, graphWidth):
    df1 = df1.dropna(columns) # drop columns with NaN
    df1 = df1[[col for col in df1 if df1[col].nunique() > 1]] # keep columns where there are more than 1 unique values
    if df1.shape[1] < 2:
        print(fNo correlation plots shown: The number of non-NaN or constant columns ({df1.shape[1]}) is less than 2)
        return
    corr = df1.corr()
    plt.figure(num=None, figsize=(graphWidth, graphWidth), dpi=80, facecolor=w, edgecolor=k)
    corrMat = plt.matshow(corr, fignum = 1)
    plt.xticks(range(len(corr.columns)), corr.columns, rotation=90)
    plt.yticks(range(len(corr.columns)), corr.columns)
    plt.gca().xaxis.tick_bottom()
    plt.colorbar(corrMat)
    plt.title(fCorrelation Matrix for Diamonds, fontsize=15)
    plt.show()
    
plotCorrelationMatrix(df, 14)


# In[15]:


# 用Seaborn画散点图
sns.jointplot(x="x", y="y", data=df,color=blue, kind=scatter);
plt.show()


# In[16]:


# 使用Seaborn画折线图
sns.lineplot(x="x", y="z", data=df)
plt.show()


# In[17]:


# 用Seaborn画直方图
sns.distplot(df[z], kde=False)
plt.show()
sns.distplot(df[z], kde=True)
plt.show()


# In[18]:


# 用Seaborn画箱线图
sns.boxplot(data=df[z])
plt.show()


# In[17]:


#删除/选取某行含有特定数值的行
r=[x for i,x in enumerate(df.index) if df.z[i]>10]
#利用enumerate对row0进行遍历,将含有数字3的列放入r中
print(Remvove row: ,r)
#利用drop方法将含有特定数值的列删除
df.drop(r,axis=0,inplace=True) 
# 用Seaborn画箱线图
sns.boxplot(data=df[z])
plt.show()


# In[19]:


new_df=df[~df[z].isin([31.8])]
#通过取反
print(new_df.z)


# In[20]:


import collections
# 统计列表元素出现次数
color_cnt=collections.Counter(df[color])
color_keys=color_cnt.keys()
color_values=color_cnt.values()
# 用Matplotlib画饼图
plt.pie(x = color_values, labels=color_keys)
plt.show()


# In[21]:


fig,axj=plt.subplots(nrows=2,ncols=2,figsize=(8, 8),dpi=200) #建立饼图坑
axes = axj.flatten() #子图展平
color_cnt=collections.Counter(df[color])
color_keys=[x for x in color_cnt.keys()]
color_values=[x for x in color_cnt.values()]

c_cnt=collections.Counter(df[cut])
c_keys=[x for x in c_cnt.keys()]
c_values=[x for x in c_cnt.values()]

cl_cnt=collections.Counter(df[clarity])
cl_keys=[x for x in c_cnt.keys()]
cl_values=[x for x in c_cnt.values()]

axes[0].set_title("color pie")
axes[0].pie(x=color_values,labels=color_keys)
axes[1].set_title("cut pie")
axes[1].pie(x=c_values,labels=c_keys)
axes[2].set_title("clarity pie")
axes[2].pie(x=cl_values,labels=cl_keys)

plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=0.5, hspace=0.2)  # 调整子图间距
plt.show()


# In[23]:


# 用Seaborn画二元变量分布图(散点图,核密度图,Hexbin图)
sns.jointplot(x="cut_no", y="price", data=df, kind=scatter)
sns.jointplot(x="cut_no", y="price", data=df, kind=kde)
sns.jointplot(x="cut_no", y="price", data=df, kind=hex)
plt.show()


# In[24]:


# 使用Seaborn画折线图
sns.lineplot(x="cut_no", y="price", data=df)
plt.show()


# In[ ]:

 

对砖石属性表进行数据可视化分析(使用seaborn工具)

原文:https://www.cnblogs.com/LJLHDH3/p/14897145.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!