【Python可视化实战】钻石数据可视化

一、项目引言

1.背景和目标

钻石作为一种珍贵的宝石,其价格受到多种因素的影响。为了深入了解钻石价格的决定因素,我们收集了大量关于钻石的数据,并希望通过数据可视化来揭示钻石特征与价格之间的关系。

2.内容

  • 收集钻石的各项特征数据,包括重量、颜色、刀工等。
  • 利用这些数据,我们进行初步的数据清洗和整理。
  • 使用Matplotlib和Seaborn进行数据可视化,探索各特征与钻石价格之间的关系。

3.技术方案和工具

  • Python编程语言:用于数据处理和可视化。
  • Matplotlib库:用于创建基础图表。
  • Seaborn库:用于创建高级统计图形。
  • Pandas库:用于数据处理和分析。
  • NumPy库:用于数值计算。

二、数据准备

1.数据源

我们使用的是ggplot2提供的经典的diamonds数据集,描述了不同钻石的结构特征及其价格。

2. 数据预处理

2.1 数据导入

import pandas as pd
import numpy as np
diamonds = pd.read_csv('./data/diamonds.csv')
diamonds.head(5)

删除没有意义的列 

diamonds.drop(diamonds.columns[0],axis=1,inplace=True)
diamonds.head(5)

 通过info()函数我们可以看所有列数据的类型信息:

diamonds.info()

数据集包含53940个样本,共有10个变量,其中有6个浮点型(float)变量、1个整型(int)变量和3个对象型(object)变量,不存在缺失值,目标标量为price,每个变量对应的含义如下所示: 

三、可视化分析 

3.1导入库 

import seaborn as sns
import matplotlib.pyplot as plt
# notebook格式,放大横纵坐标标记,显示刻度,更容易看清
sns.set_context("notebook",font_scale=1) 
sns.set_style('ticks')
# 配色使用Set2
sns.set_palette('Set2')      
#以内嵌方式画图
%matplotlib inline

3.2 数值变量描述性统计分析

f,axarr = plt.subplots(2,4,figsize=(15,10))
sns.boxplot(y='carat',data=diamonds,ax=axarr[0,0])
sns.boxplot(y='depth',data=diamonds,ax=axarr[0,1])
sns.boxplot(y='table',data=diamonds,ax=axarr[0,2])
sns.boxplot(y='price',data=diamonds,ax=axarr[0,3])
sns.boxplot(y='x',data=diamonds,ax=axarr[1,0])
sns.boxplot(y='y',data=diamonds,ax=axarr[1,1])
sns.boxplot(y='z',data=diamonds,ax=axarr[1,2])
plt.tight_layout()

我们看到所有变量都存在许多异常值。在之后的模型构建中,某些模型的训练易受到异常值的影响。(例如第六七张图差异过大,五为正常)

3.3 非数值变量描述性统计分析

sns.countplot(x='cut',data=diamonds)
plt.tight_layout()

大部分的钻石的切工还是比较理想的。我们还可以分析不同切工的钻石的价格情况,切工似乎跟价格并不成正比关系。 

sns.barplot(x='cut',y='price',data=diamonds)

sns.countplot(y='color',data=diamonds)

sns.countplot(x='clarity',data=diamonds)

3.4 相关性分析

sns.jointplot(x='carat',y='depth',height=8,alpha =.25,color='g',data=diamonds)
sns.jointplot(x='carat',y='price',height=8,alpha =.25,color='g',data=diamonds)
plt.tight_layout()

第一行代码创建了一个联合分布图,展示了 carat(钻石的重量)和 depth(钻石的深度)之间的关系。该图具有8的高度,使用绿色表示,并设置了0.25的透明度,以便观察重叠部分。第二行代码创建了另一个联合分布图,展示了 carat 和 price(钻石的价格)之间的关系。同样,该图具有8的高度,使用绿色表示,并设置了0.25的透明度。使用 plt.tight_layout() 函数调整图形布局,确保所有图形元素正确地定位。目的是通过绘制联合分布图来探索和理解钻石数据集中不同变量之间的关系,从而更好地理解数据集和进行进一步的数据分析。

我们可以看到caratprice存在正相关关系,证明钻石价格很大程度上与钻石的克拉重量有关,这也符合我们的实际经验。

在Seaborn中,存在pairplot函数,可以将所有变量之间的相关关系一并画出并分析。pariplotPairGrid的一个包装函数,它提供了Seaborn一个重要的抽象功能——Grid。Seaborn的Grid将Matplotlib中Figure和数据集中的变量联系起来了。

我们有两种方式可以和grids进行交互操作。其一,Seaborn提供了类似于pairplot的包装函数,它提前设置了许多常见任务的参数;其二,如果你需要更多的自定义选项,那么你可以直接利用Grid方法。

sns.pairplot(diamonds,hue='cut')

3.5 异常值处理与grids交互

 选取数值

diamonds_num = diamonds.select_dtypes(include=[np.number])
diamonds_num.head(5)

去掉异常值

diamonds_cl = diamonds_num[(diamonds_num > diamonds_num.quantile(.05)).all(1) & (diamonds_num < diamonds_num.quantile(.95)).all(1)]
diamonds_cl.head(5)

制图 

def core(diamonds, alpha=.05):
    mask = (diamonds > diamonds.quantile(alpha)).all(1) & (diamonds_cl < diamonds.quantile(1 - alpha)).all(1)
    return diamonds[mask]



cmap = sns.cubehelix_palette(as_cmap=True, dark=0, light=1, reverse=True)

(diamonds.select_dtypes(include=[np.number])
   .pipe(core)
   .pipe(sns.PairGrid)
   .map_upper(plt.scatter, marker='.', alpha=.25)
   .map_diag(sns.kdeplot)
   .map_lower(plt.hexbin, cmap=cmap, gridsize=20)
)

这段代码是使用Python的Seaborn库和Matplotlib库对“diamonds”数据集进行可视化的。Seaborn是基于matplotlib的高级接口,它提供了一种方便的方法来创建复杂的统计图形。让我们逐步分析代码的各个部分:(1)代码创建了一个颜色映射(colormap)对象,名为“cmap”,它使用cubehelix颜色方案。这种颜色方案在数据可视化中很常用,因为它在视觉上更吸引人,并且可以更好地表示数据的层次结构。(2)代码选择了数据框“diamonds”中所有数值型的数据列。这是为了确保我们只处理数值型数据,忽略分类数据或其他非数值型数据。(3)使用.pipe()方法将上一步的结果传递给名为“core”的函数或方法。这个“core”函数或方法的具体细节并未在代码中给出。(4)将结果传递给Seaborn的PairGrid类,创建一个网格,其中每个单元格都表示一对特征之间的联合分布。在网格的上部分,为每个单元格添加散点图,其中数据点用点(.)表示,透明度设置为0.25。在网格的对角线上,为每个单元格添加核密度估计图(KDE)。核密度估计是一种可视化单变量分布的方法。最后在网格的下部分,为每个单元格添加六边形bin图(hexbin)。这用于显示两个变量之间的联合分布。颜色映射(cmap)应用于六边形bin图,而gridsize参数定义了每个六边形的网格大小。

g = sns.FacetGrid(diamonds, row='cut', aspect=4, height=2, margin_titles=True)
g.map(sns.kdeplot, 'price', shade=True, color='g')
for ax in g.axes.flat:
    ax.yaxis.set_visible(False)
sns.despine(left=True)
g.fig.subplots_adjust(hspace=0.1)
g.set(xlim=(0, 15000))
plt.tight_layout()

FaceGrid可以通过控制分面变量来生成Grid图形,其中PairGrid是它的一个特例。接下来的案例中,我们将以数据集中的cut变量为分面变量来绘制图像:

最后一个案例展示了如何将Seaborn和Matplotlib结合起来。g.axesmatplotlib.Axes的一个数组,g.figmatplotlib.Figure的一个特例。这是使用Seaborn时常见的一个模式:利用Seaborn的方法来绘制图像,然后再利用Matplotlib来调整细节部分。 我认为Seaborn之所以吸引人是因为它的绘图语法具有很强的灵活性。你不会被作者所设定的图表类型所局限住,你可以根据自己的需要创建新的图表。

agged = diamonds.groupby(['cut', 'color']).mean().sort_index().reset_index()

g = sns.PairGrid(agged, x_vars=agged.columns[2:], y_vars=['cut', 'color'],
                height=5, aspect=.65)
g.map(sns.stripplot, orient="h", size=10, palette='Blues_d')
plt.tight_layout()

最后我们来画出在不同颜色的钻石中,克拉重量与价格的关系:

g = sns.FacetGrid(diamonds, col='color', hue='color', col_wrap=4)
g.map(sns.regplot, 'carat', 'price')

 

四、项目总结

本次项目的目标是深入了解钻石价格的决定因素,通过收集大量关于钻石的数据,并利用数据可视化技术来揭示钻石特征与价格之间的关系。在项目实施过程中,我们首先收集了钻石的各项特征数据,包括重量、颜色、刀工等。接下来,我们对这些数据进行了初步的数据清洗和整理,以确保数据的准确性和可靠性。为了更好地探索各特征与钻石价格之间的关系,我们采用了Matplotlib和Seaborn这两个强大的数据可视化库。通过创建散点图、核密度估计图和六边形bin图等多种图形,我们能够直观地展示钻石特征与价格之间的关系。通过本次项目,我们成功地揭示了钻石特征与价格之间的潜在关系,为相关行业的从业人员提供了有价值的参考信息。同时,我们也锻炼了数据处理和分析能力,加深了对数据可视化的理解和应用。最后,本次项目达到了预期的目标,为探索钻石价格的决定因素提供了有益的视角。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/293462.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【python高级用法】进程

一个简单的进程 # -*- coding: utf-8 -*-import multiprocessingdef foo(i):print (called function in process: %s %i)returnif __name__ __main__:Process_jobs []for i in range(5):p multiprocessing.Process(targetfoo, args(i,))Process_jobs.append(p)p.start()p.j…

Vue中的过滤器详解(应用场景和原理分析)

文章目录 一、是什么二、如何用定义filter小结&#xff1a; 三、应用场景四、原理分析小结&#xff1a; 参考文献 一、是什么 过滤器&#xff08;filter&#xff09;是输送介质管道上不可缺少的一种装置 大白话&#xff0c;就是把一些不必要的东西过滤掉 过滤器实质不改变原…

K-最近邻算法(KNN)是什么算法?

K-最近邻算法&#xff08;K-Nearest Neighbor&#xff0c;KNN&#xff09;是一种经典的有监督学习方法&#xff0c;也可以被归为懒惰学习&#xff08;Lazy Learning&#xff09;方法。它基于“物以类聚”的原理&#xff0c;假设样本之间的类别距离越近则它们越有可能是同一类别…

关于目标检测任务中,XML(voc格式)标注文件的可视化

1. 前言 最近在弄关于目标检测的任务&#xff0c;因为检测的图片和标签是分开的&#xff0c;可视化效果不明显&#xff0c;也不知道随便下载的数据集&#xff0c;标注信息对不对。网上看了好多代码&#xff0c;代码风格和本人平时不同&#xff0c;看起来麻烦&#xff0c;也不知…

项目使用PowerJob

新一代的定时任务框架——PowerJob 简介 PowerJob是基于java开发的企业级的分布式任务调度平台&#xff0c;与xxl-job一样&#xff0c;基于web页面实现任务调度配置与记录&#xff0c;使用简单&#xff0c;上手快速&#xff0c;其主要功能特性如下&#xff1a; 使用简单&…

ClickHouse基础介绍

目录 前言 1、什么是clickhouse 2、OLAP场景的关键特征 3、列式存储更适合于OLAP场景的原因 4、clickhouse的独特功能 5、clickhouse的缺点 6、性能 6.1、单个大查询的吞吐量 6.2、处理短查询的延迟时间 6.3、处理大量短查询的吞吐量 6.4、数据的写入性能 前言 11月…

RTSP/Onvif安防平台EasyNVR接入EasyNVS显示服务不存在的原因及解决办法

EasyNVS云管理平台具备汇聚与管理EasyGBS、EasyNVR等平台的能力&#xff0c;可以将接入的视频资源实现统一的视频能力输出&#xff0c;支持远程可视化运维等管理功能&#xff0c;还能解决设备现场没有固定公网IP却需要在公网直播的需求。 有用户在现场部署EasyNVR&#xff0c;…

how2heap-2.23-04-unsorted_bin_leak

#include<stdio.h> #include<malloc.h>int main() {char* a malloc(0x88);char* b malloc(0x8);free(a);long* c malloc(0x88);printf("%lx , %lx\n",c[0],c[1]);return 0; }unsorted bin leak原理&#xff1a;将chunk从unsorted bin申请回来时&#…

ssm基于web的素材网的设计与实现+vue论文

基于web的素材网站的设计与实现 摘要 当下&#xff0c;正处于信息化的时代&#xff0c;许多行业顺应时代的变化&#xff0c;结合使用计算机技术向数字化、信息化建设迈进。传统的素材信息管理模式&#xff0c;采用人工登记的方式保存相关数据&#xff0c;这种以人力为主的管理…

安卓逆向某脚本-stringFog 拆解

引言 有个autojs 脚本软件,挺好用的,我想看下这个软件怎么实现的,学习写人家怎么写的。 先用MT 重新打包下, 看下重打包之后是否还可以继续使用。 用MT 打开APK,然后选择查看 随便找一个dex ,编辑下

02、Kafka ------ 配置 Kafka 集群

目录 配置 Kafka 集群配置步骤启动各Kafka节点 配置 Kafka 集群 启动命令&#xff1a; 1、启动 zookeeper 服务器端 小黑窗输入命令&#xff1a; zkServer 2、启动 zookeeper 的命令行客户端工具 &#xff08;这个只是用来看连接的节点信息&#xff0c;不启动也没关系&#…

数据结构与算法(六)

文章目录 高频-体系学习班(六)41 四边形不等式技巧(上)41.1 非负数组切分成左右两部分累加和的最大值41.2 非负数组切分成左右两部分累加和的最大值的数组41.3 合并石子的得分41.4 画匠问题42 四边形不等式技巧(下)42.1 邮局选址问题42.2 丢棋子问题43 状态压缩的动态规划…

RabbitMQ安装与应用

文章目录 1. RabbitMQ1.1. 同步通讯与异步通讯1.2. 异步通讯的优缺点1.3. 几种MQ的对比1.4. docker安装运行RabbitMQ 流程1.5. RabbitMQ的几个概念1.6. 五种模型1.6.1. 基本消息队列 1.7. 基本使用1.7.1. 1建立连接时会出现以下界面![在这里插入图片描述](https://img-blog.csd…

MFC扩展库BCGControlBar Pro v34.0 - 网格、报表控件功能升级

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中&#xff0c;并为您节省数百个开发和调试时间。 BCGControlBar专业版 v34.0已正式发布了&#xff0c;该版本包括新的主题任务对话框、图像效果、旋转圆形刻度、…

[电子榨菜]状态管理redux,以及react-redux

0.写在前面 很遗憾&#xff0c;最终还是没能入围2023年的博客评选。 不过不管怎么说&#xff0c;今年需要开个好头。 迫于成本压力吧&#xff0c;最终还是没能顺利离开这里。。。。。。 其实白天已经能放的下啦&#xff0c;我给自己买了喜欢的玩具&#xff0c;去了喜欢的漫…

MySQL:约束主键唯一键

表的约束&#xff1a;表中一定有约束&#xff0c;通过约束让插入表中的数据是符号预期的 约束的本质是通过技术手段&#xff0c;倒逼程序员插入正确的数据 Null约束 这里的Null表示在插入的时候&#xff0c;该属性能否为空&#xff0c;如果是NO&#xff0c;则插入时候必须有数…

《Effective C++》《Resource Management》

文章目录 13、term13:Use objects to manage resources14、term14:Think carefully about copying behavior in resource-managing classes15、term15:Provide access to raw resources in resource-managing classes法一&#xff1a; 使用智能指针的get进行显示转换法二&#…

第11课 实现桌面与摄像头叠加

在上一节&#xff0c;我们实现了桌面捕获功能&#xff0c;并成功把桌面图像和麦克风声音发送给对方。在实际应用中&#xff0c;有时候会需要把桌面与摄像头图像叠加在一起发送&#xff0c;这节课我们就来看下如何实现这一功能。 1.备份与修改 备份demo10并修改demo10为demo11…

Python数据分析从入门到进阶:分类算法

数据分析是处理和解释数据以发现有用信息和洞察的过程。其中&#xff0c;分类算法是数据分析领域的一个重要组成部分&#xff0c;它用于将数据分为不同的类别或组。 本文将介绍分类算法的基本概念和进阶技巧&#xff0c;以及如何在Python中应用这些算法&#xff0c;包括示例代…

01.微服务架构优缺点、服务拆分和远程调用

1.认识微服务 随着互联网行业的发展&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢&#xff1f; 1.0.学习目标 了解微服务架构的优缺点 1.1.单体架构 单体架构&#xff1a;将业务的所有…