Skip to main content

moregeek program

钻石价格分析_懒笑翻的博客-多极客编程

一、数据描述

本文件探讨的数据集是有关钻石各种属性与价格,数据集中有53,943颗钻石,有10个特征(carat, cut, color, clarity, depth, table, price, x, y, z)。

数据集: ​​DiamondsPrices2022.csv​

1、数据集中变量特征

总共10个变量,其中3个为Object类型 [cut、 color 和 clarity],1个为整数(int64)类型[price],6个为数值(float64)类型[carat, depth, table, x, y, z]。

pandas 缺乏区分 str和object类型,都对应dtype('O')类型,既是强制类型为dtype('S')也无效。

Numpy 可以区分 str和object类型,dtype('O') 和 dtype('S')分别对应与 object 、str。

2、数据集中变量含义

变量

含义

范围

carat

钻石的重量,单位克拉

0.2-5.01

cut

切割质量

Fair(一般), Good(好), Very Good(非常好), Premium(优质), Ideal(理想)

color

钻石颜色

J (最差)到 D (最好)

clarity

钻石的透明度

I1(最差) ,SI2,SI1,VS2,VS1,VS2,VS1,IF (最好)

depth

总深度百分比

43-79

table

钻石顶部相对于最宽点的宽度,钻石的台面

43-95

price

钻石的美元价格,单位是美元

326-18823

x

钻石长度,单位mm

0-10.74

y

钻石宽度,单位mm

0-58.9

z

钻石深度,单位mm

0-31.8

二、问题提出

1、钻石中最常见的类别

2、不同属性与价格的相关度

3、每个分类的价格分布

三、数据预处理
1、数据预处理原因

原始数据存在以下问题:

1.不一致——数据内涵出现不一致情况

2.重复
3.不完整——感兴趣的属性没有值
4.含噪声——数据中存在着错误、或异常(偏离期望值)的数据
5.高维度

2、数据预处理的方法

方法


数据清洗

去掉噪声和无关数据

数据集成

将多个数据源中的数据结合起来存放在一个一致的数据存储中

数据变换

把原始数据转换成为适合数据挖掘的形式

数据归约

主要方法包括:数据立方体聚集,维归约,数据压缩,数值归约,离散化和概念分层等

3、数据预处理

在这里我们发现没有缺失值、也没有重复值,因此原始数据可以直接使用。

import pandas as pd

df = pd.read_csv('.\data\DiamondsPrices2022.csv')
print(df.head()) # 数据集查看
# 数据统计信息
df.describe().to_excel(r'.\result\data1.xlsx')
print("-------------缺失值数量 可以发现该数据集中没有缺失值------------")
print(df.isnull().sum())
print("-------------数据类型统计--------------")
print(df.info())
print("-------------查看重复行数据 可以发现没有重复数据-----------------")
print(df[df.duplicated()])

输出结果

   Unnamed: 0  carat      cut color clarity  ...  table  price     x     y     z
0 1 0.23 Ideal E SI2 ... 55.0 326 3.95 3.98 2.43
1 2 0.21 Premium E SI1 ... 61.0 326 3.89 3.84 2.31
2 3 0.23 Good E VS1 ... 65.0 327 4.05 4.07 2.31
3 4 0.29 Premium I VS2 ... 58.0 334 4.20 4.23 2.63
4 5 0.31 Good J SI2 ... 58.0 335 4.34 4.35 2.75
[5 rows x 11 columns]
-------------缺失值数量 可以发现该数据集中没有缺失值-----------------
Unnamed: 0 0
carat 0
cut 0
color 0
clarity 0
depth 0
table 0
price 0
x 0
y 0
z 0
dtype: int64
-------------数据类型统计-----------------
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 53943 entries, 0 to 53942
Data columns (total 11 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Unnamed: 0 53943 non-null int64
1 carat 53943 non-null float64
2 cut 53943 non-null object
3 color 53943 non-null object
4 clarity 53943 non-null object
5 depth 53943 non-null float64
6 table 53943 non-null float64
7 price 53943 non-null int64
8 x 53943 non-null float64
9 y 53943 non-null float64
10 z 53943 non-null float64
dtypes: float64(6), int64(2), object(3)
memory usage: 4.5+ MB
None
-------------查看重复行数据 可以发现没有重复数据-----------------
Empty DataFrame
Columns: [Unnamed: 0, carat, cut, color, clarity, depth, table, price, x, y, z]
Index: []
四、数据可视化
1、导入模块与数据
color_palette()详解

默认6种颜色:deep,muted, pastel, bright, dark, colorblind seaborn, color_palette(palette=None, n_colors = None, desat = None)

import pandas as pd
from matplotlib import pyplot as plt

# 加这两行避免在plt中使用中文时报运行时错误 RuntimeWarning: Glyph 20363 missing from current font. font.set_text(s, 0, flags=flags)
plt.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文标签
plt.rcParams['axes.unicode_minus'] =

# 生成颜色
colors = sns.color_palette('pastel')[0:5]

diamonds = pd.read_csv('./data/DiamondsPrices2022.csv')
diamonds = diamonds.drop(['Unnamed: 0'], axis=1) # 删除指定索引标签 axis=1代表列 0代表行
print(diamonds.head()) # 查看部分数据
2、有序因子变量、数值型列分类
diamonds_cat = ['cut', 'color', 'clarity']
diamonds_num = ['carat', 'depth', 'table', 'price', 'x', 'y', 'z']
3、钻石中常见类别
for c in diamonds_cat:
print('----', c, '----')
print(diamonds[c].value_counts())
diamonds[c].value_counts().plot(kind='bar', title=f'Counting diamonds per {c.title()}.')
plt.savefig(r'.\result\Counting_diamonds per_' + f'{c.title()}.png')
plt.show()

可以得出结论:对应属性最多数量的是---->最理想的切割钻石21551,G的颜色是11292,SI1的净度是13067

---- cut ----
Ideal 21551
Premium 13793
Very Good 12083
Good 4906
Fair 1610
Name: cut, dtype: int64
---- color ----
G 11292
E 9799
F 9543
H 8304
D 6775
I 5422
J 2808
Name: color, dtype: int64
---- clarity ----
SI1 13067
VS2 12259
SI2 9194
VS1 8171
VVS2 5066
VVS1 3655
IF 1790
I1 741

![Counting_diamonds per_Cut](assets/Counting_diamonds per_Cut.png)

![Counting_diamonds per_Color](assets/Counting_diamonds per_Color.png)

![Counting_diamonds per_Clarity](assets/Counting_diamonds per_Clarity.png)

4、最昂贵的钻石属性
print(diamonds[diamonds.price == diamonds.price.max()])
5、计算钻石价格在Q3范围内的各类属性的数量
关于Q3解析
  • 第1四分位数 (Q1),又称“较小四分位数”,等于该样本中所有数值由小到大排列后第25%的数字。
  • 第2四分位数 (Q2),又称“中位数”,等于该样本中所有数值由小到大排列后第50%的数字。
  • 第3四分位数 (Q3),又称“较大四分位数”,等于该样本中所有数值由小到大排列后第75%的数字。
for c in diamonds_cat:
dlv = diamonds.loc[(diamonds.price >= diamonds.price.quantile(q=.75))][c].value_counts()
print(c, '--\n', dlv)
dlv.plot(kind='bar').set_title(f'Counting Diamonds for kind of {c.title()}.')
plt.show()
6、最常见属性的钻石数据
ascending 解析

ascending表示排序方式,值为True表示升序,可以省缺,值为False表示降序。

IGS_ByPriDesc = diamonds[(diamonds.cut == 'Ideal') & (diamonds.color == 'G') & (diamonds.clarity == 'SI1')].sort_values('price', ascending=False)
IGS_ByPriDesc.to_excel(r'.\result\IGS_ByPriDesc.xlsx')
7、特定特征所占比例
# 每种属性数量最多的钻石:最理想的切割钻石是21551,G的颜色是11292,SI1的净度是13067
# 特定特征所占比例
a = diamonds[(diamonds.cut == 'Ideal') & (diamonds.color == 'G') & (diamonds.clarity == 'SI1')].shape[0]
b = diamonds.shape[0]
# 用饼图表示
plt.pie([a, b], labels=['Ideal+G+SI1数量', '钻石总数量'], colors=colors, autopct='%.6f%%')
plt.title('特定特征所占比例.')
plt.savefig(r'.\result\Ideal_G_SI1_pie.png')
plt.show()
8、不同属性与价格的相关度
corr()详解

corr()函数的作用是用于求解不同变量之间的相关性,值越大表示变量之间的相关性越大。

# print(diamonds.sort_values('carat', ascending=False))
print(diamonds['carat'].corr(diamonds['price'])) # 克拉数与价格几乎是正相关,克拉数增加的越多,价格增加也越多
print(diamonds['depth'].corr(diamonds['price'])) # 总深度百分比越高,价格越低,呈负相关
print(diamonds['table'].corr(diamonds['price'])) # 台面宽度与价格相关性很低
9、Carat, Table, Depth and Priced 的相关热图
plt.figure(figsize=(16, 6))
sns.heatmap(diamonds.loc[:, ['carat', 'table', 'depth', 'price']].corr(), vmin=-1, vmax=1, annot=True).set_title(
'Carat, Table, Depth, Priced 的相关热图', fontdict={'fontsize': 12}, pad=12)
plt.show()
10、基于每个分类变量的价格分布

KDE分布图,是指Kernel Density Estimation核概率密度估计。可以理解为是对直方图的加窗平滑。通过KDE分布图,可以查看并对训练数据集和测试数据集中特征变量的分布情况。

for c in ['cut', 'color', 'clarity']:
sns.displot(data=diamonds, x="price", hue=f"{c}", kind='kde')
plt.title(f'基于{c.title()}的价格分布图')
plt.subplots_adjust(top=0.95) # 设置图表距画布上边的空白
plt.savefig(fr'.\result\基于{c.title()}的价格分布图.png')
plt.show()

©著作权归作者所有:来自51CTO博客作者lanxiaofang的原创作品,请联系作者获取转载授权,否则将追究法律责任

超市零售分析_懒笑翻的博客-多极客编程

一、数据描述 数据集中9994条数据,横跨1237天,销售额为2,297,200.8603美元,利润为286,397.0217美元,他们的库存中有1862件独特的物品,它们被分为3类,所有这些物品都在美国4个地区的49个州销售,来着793位客户的5009个订单。数据集: ​​Superstore.csv​​ 来源:kaggle一共21列数据,每一列属性描述如下:Row ID => 每

python自学教程7-字典有哪些常用操作_12178579的博客-多极客编程

Hi,今天我们聊聊字典。正式开始前,先看一个问题。下面的个人信息,如果想使用Python数据类型表示,应该用什么数据类型呢?你会发现,数字、字符串、列表其实表达起来都不是很方便。 字典就比较适合这种场景。python中的字典类型能很方便的表达多维数据。字典类型利用集合元素的不重复特性作为key与对应的值形成键值对。然后因为集合中的元素都是可哈希,非常方便建立哈希表来做索引查询对应的值。Python

python3中的算术运算符_mb6107f4b8c7d14的博客-多极客编程

一·算术运算符在python中,算术运算符与数学中的算术运算极为类似,只是有些运算符号有所差别。算术运算符的算术计算一般是运用于int类型与floa类型,同时+与*还可以运用到各种序列的拼接合并与复制中。优先级:有括号先算括号内的,再乘方>乘除>整除>取余>加减进行运算。运算符名称说明+求和数学里的加法-取差数学里的减法*相乘数学里的乘法/相除数学里的除法%取余得到除法的余

【python助力疫情管控】太方便啦~从100个不同格式的excel文件里,1秒内找出1个人的详细信息_程序员晚枫的博客-多极客编程

大家好,我是在重庆奋斗的Python程序员晚枫。 最近开源中国的推荐项目,Python自动化办公专用的👉python-office库,更新了一个和疫情管控有关的功能。 今天我们一起来学习一下,1行代码就能解决问题,真的很实用! python-office的项目官网:https://www.python-office.com 0. 功能说明 这次发布的功能,来自核酸检测中,对Excel数据的查

咖啡价格分析_懒笑翻的博客-多极客编程

一、数据概览 咖啡是一种用烘焙过的咖啡豆、咖啡属某些开花植物的浆果种子调制而成的饮料。 从咖啡果实中分离出种子,生产出一种稳定的、未经烘焙的生咖啡。 然后将种子进行烘焙,这一过程将它们转化为一种可消费的产品:焙烤咖啡,将其磨成细颗粒,通常在热水中浸泡,然后过滤,形成一杯咖啡。 咖啡价格数据从2000年1月2022年5月。 在本例中我们使用pandas、pyplot、seaborn进行数据可视

装饰器_三虎的博客-多极客编程

装饰器介绍为何要用装饰器软件的设计应该遵循开放封闭原则,即对扩展是开放的,而对修改是封闭的。对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。对修改封闭,意味着对象一旦设计完成,就可以独立完成其工作,而不要对其进行修改。软件包含的所有功能的源代码以及调用方式,都应该避免修改,否则一旦改错,则极有可能产生连锁反应,最终导致程序崩溃,而对于上线后的软件,新需求或者变化又层出

超市零售分析_懒笑翻的博客-多极客编程

一、数据描述 数据集中9994条数据,横跨1237天,销售额为2,297,200.8603美元,利润为286,397.0217美元,他们的库存中有1862件独特的物品,它们被分为3类,所有这些物品都在美国4个地区的49个州销售,来着793位客户的5009个订单。数据集: ​​Superstore.csv​​ 来源:kaggle一共21列数据,每一列属性描述如下:Row ID => 每

【超详细】apache durid从入门到安装详细教程_博学谷狂野架构师的博客-多极客编程

1. Durid概述Apache Druid是一个集时间序列数据库、数据仓库和全文检索系统特点于一体的分析性数据平台。本文将带你简单了解Druid的特性,使用场景,技术特点和架构。这将有助于你选型数据存储方案,深入了解Druid存储,深入了解时间序列存储等。Apache Druid是一个高性能的实时分析型数据库。1.1 为什么使用1.1.1 云原生数据库一个现代化的云原生,流原生,分析型数据库

python自学教程7-字典有哪些常用操作_12178579的博客-多极客编程

Hi,今天我们聊聊字典。正式开始前,先看一个问题。下面的个人信息,如果想使用Python数据类型表示,应该用什么数据类型呢?你会发现,数字、字符串、列表其实表达起来都不是很方便。 字典就比较适合这种场景。python中的字典类型能很方便的表达多维数据。字典类型利用集合元素的不重复特性作为key与对应的值形成键值对。然后因为集合中的元素都是可哈希,非常方便建立哈希表来做索引查询对应的值。Python

算法竞赛入门【码蹄集新手村600题】(mt1101-1150)_灵彧universe的博客-多极客编程

算法竞赛入门【码蹄集新手村600题】(MT1101-1150) @TOC 前言 为什么突然想学算法了? > 用较为“官方”的语言讲,是因为算法对计算机科学的所有分支都非常重要。 在绝大多数的计算机科学分支领域中,要想完成任何实质性的工作,理解算法的基础知识并掌握与算法密切相关的数据结构知识是必不可少的。> 但从实际而言,是因为当下快到了考研和找工作的年纪(ಥ_ಥ),无论走哪一条路

java之stringbuilder和stringbuffer精选_javaarchitecttl的博客-多极客编程

前言: 他强任他强,清风拂山岗.他横任他横,明月照大江我们上一篇聊到了java之String类,这一片我们聊一下StringBuilder和stringbuffer类,针对于以下的概念,都会有实体例子配合着,给大家演示,希望给历险中的你带来一些帮助!!!  一.介绍     StringBuilder类在 Java 5 中被提出,它和StringBuffer 之间的最大不同在于 StringBui

【python助力疫情管控】太方便啦~从100个不同格式的excel文件里,1秒内找出1个人的详细信息_程序员晚枫的博客-多极客编程

大家好,我是在重庆奋斗的Python程序员晚枫。 最近开源中国的推荐项目,Python自动化办公专用的👉python-office库,更新了一个和疫情管控有关的功能。 今天我们一起来学习一下,1行代码就能解决问题,真的很实用! python-office的项目官网:https://www.python-office.com 0. 功能说明 这次发布的功能,来自核酸检测中,对Excel数据的查