人生苦短,我用python

本节源码+数据集:点击此处跳转文末名片获取

一、数据描述

本文件探讨的数据集是有关钻石各种属性与价格,

数据集中有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 pddf = 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  float642   cut         53943 non-null  object 3   color       53943 non-null  object 4   clarity     53943 non-null  object 5   depth       53943 non-null  float646   table       53943 non-null  float647   price       53943 non-null  int64  8   x           53943 non-null  float649   y           53943 non-null  float6410  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)
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


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['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')





钻石值钱吗?python分析近年钻石价格走势【包含图表分析】相关推荐

  1. python程序员月薪多少-Python程序员就业行情以及前景分析

    最近Python大热,就想要分析一下相关的市场需求,看一下Python到底集中在哪些城市,企业对Python工程师的一些需求到底是怎样的,基于此,爬取了国内某招聘平台的相关数据,获取到30000+条相 ...

  2. python画直方图代码-Python绘制直方图及子图的方法分析(代码示例)

    本篇文章给大家带来的内容是关于Python绘制直方图及子图的方法分析(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.直方图的绘制也需要用到matplotlib下的py ...

  3. python开源代码-这7个开源的Python库,让你轻松代码分析

    原标题:这7个开源的Python库,让你轻松代码分析 开源最前线(ID:OpenSourceTop) 猿妹编译 来源:https://opensource.com/article/18/7/7-pyt ...

  4. arcgis中python坡度计算_ArcGIS不同坡度植被覆盖率分析步骤

    原标题:ArcGIS不同坡度植被覆盖率分析步骤 写在前面的话:这是一个栅格分析的 入门级应用--好吧,算虾神我的实战操作科普系列的作品. 怎么用 ArcGIS做不同坡度的植被覆盖度分析,实际上在Arc ...

  5. python nlp包_StanfordNLP,让你在 Python 里一手掌握 53 种自然语言分析

    发表日期:2019-06-12 StanfordNLP,让你在 Python 里一手掌握 53 种自然语言分析 -- 不久之前,斯坦福大学公开了它最新的自然语言处理代码库-- StanfordNLP. ...

  6. python计算商品总价_GitHub - ideaOzy/data_analysis: 基于Python的南京二手房数据采集及可视化分析...

    基于Python的南京二手房数据采集及可视化分析 1 内容简介 首先通过爬虫采集链家网上所有南京二手房的房源数据,并对采集到的数据进行清洗:然后,对清洗后的数据进行可视化分析,探索隐藏在大量数据背后的 ...

  7. 怎么看rx580是不是470刷的_怎么看钻石是不是奶咖钻,钻石证书上可以看出奶咖钻石吗...

    在之前的信息分享中我们为大家介绍过,奶油钻.咖啡钻都会在一定程度上影响到钻石的外观效果,令钻石看起来并不那么透彻或颜色偏暗,那么普通人怎么判断钻石是不是奶咖钻?gia证书的哪一项体现奶咖钻石? gia ...

  8. Python爬取天气数据及可视化分析!

    来源丨Python之王 Python爬取天气数据及可视化分析 说在前面 天气预报我们每天都会关注,我们可以根据未来的天气增减衣物.安排出行,每天的气温.风速风向.相对湿度.空气质量等成为关注的焦点.本 ...

  9. python学生分布_Python数据分析实战之分布分析

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:严小样儿 分布分析法,一般是根据分析目的,将数据进行分组,研究各组别 ...

最新文章

  1. apple hosts
  2. 小程序读取富文本mysql存储_微信小程序API 富文本·EditorContext实例
  3. pku 1691 Painting A Board DFS 抽象建图 + 拓扑排序
  4. 手把手教你用 TensorFlow 实现文本分类(下)
  5. python3.8新特性 逻辑表达式_python 3.8 新特性
  6. java继承和派生4.4- 4.52020.3.24
  7. 顺序表应用2:多余元素删除之建表算法(SDUT 3325)
  8. [设计模式]单例模式
  9. VLAN专题之三:VLAN的访问链接
  10. 微软商业智能与数据挖掘精英版培训大纲(2008-09-09)
  11. 全网首发:解决办法:shmget()一直失败,errno=-22
  12. 三、北京54坐标系与西安80坐标系
  13. SD nand flash 简单的读写速度测试
  14. 多空对比(DKDB)指标
  15. 突发奇想!自动化测试在测试过程中该怎样提升效率?
  16. Flash player 必要的系统组件未能正常运行,请修复Adobe Flash Player
  17. 中餐和西餐菜名大全(zt)
  18. 【疯狂诗词大会小程序2.0】功能模块+前端+诗词答题小程序+内置数千道题目+开箱即用
  19. android WindowManager 应用内部悬浮窗口总结
  20. jsp+spring+hibernate

热门文章

  1. 2 shell 锂基脂_昭和Shell Nerita HV高速轴承润滑脂
  2. xcode/osx官方直接下载地址(离线下载)
  3. 在XShell中修改ip为静态ip
  4. 肌电信号的包络matlab程序_基于matlab的肌电信号处理程序:
  5. Cognos产品功能介绍
  6. oppo修改无线网服务器,简单小修改,你的OPPO手机wifi信号会马上提升
  7. 外贸网站最好用的5大WordPress插件【必须安装】
  8. RSPapers | 对话推荐系统论文合集
  9. 个人使用CocosCreator开发小游戏路上的一些“坑坑洼洼”
  10. 哪个相机可以拍gif动图_直接拍出GIF动态图的相机