通过Pandas实现快速别致的数据分析
在您选择和准备数据进行建模之前,您需要事先了解一些基础内容。
如果您是使用Python进行机器学习,那么您可以使用Pandas库来更好地理解您的数据。
在这篇文章中,您将发现Pandas的一些快速别致的方法,以改善您对数据在其结构、分布和关系等方面的理解。
数据分析
数据分析其实是关于询问和回答有关您的数据的问题。
作为一名机器学习从业者,您可能不太熟悉您所在的领域。有专家随时提供帮助是理想的,但这毕竟不太可能。
当您通过标准机器学习数据集、咨询或参与竞争数据集学习应用机器学习时,这些问题也同样适用。
您需要激发关于您可以追踪的数据的问题,并且,去更好地了解您拥有的数据。您可以通过对数据进行汇总和可视化来做到这一点。
Pandas
Python中的Pandas库是专为进行快速的数据分析和操作而建立的,它是非常简单和容易上手的,如果你在R等其他平台上进行过数据分析等操作。
Pandas似乎只是擅长数据处理方面,但它通过提供statsmodels中的标准统计方法和matplotlib中的绘图方法,使其成为了强大易用的数据分析工具。
糖尿病数据集
我们需要一个小数据集,您可以使用它来探索Pandas中不同的数据分析方法。
UIC机器学习存储库提供了大量不同的标准机器学习数据集,您可以使用这些数据集来学习和练习应用机器学习,我最常用的数据集是皮马印第安人糖尿病数据集。
该数据集通过使用医疗记录中的详细信息,描述了皮马印第安人女性糖尿病发病或未发病的情况。您可以了解有关此数据集的更多信息,点击链接下载该数据集的CSV文件pima-indians-diabetes.data。
数据总览
我们将从理解我们所看到的数据结构开始。
加载数据
首先将文件中的CSV数据作为数据框加载到内存中。因为我们知道数据集提供的数据的名称,所以我们将在从文件加载数据时设置这些名称。
import pandas as pd
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = pd.read_csv('pima-indians-diabetes.data', names=names)
点击链接,了解有关Pandas IO功能和read_csv功能的更多信息。
描述数据
我们现在可以看看数据的结构。
我们可以通过直接打印数据框来查看前60行数据。
print(data)
我们可以看到,所有的数据都是数值型的,而最终的类别值是我们想要预测的因变量。
在数据转储结束时,我们可以看到数据框本身的描述为768行和9列,所以现在我们已经了解了我们的数据结构。
接下来,我们可以通过查看汇总统计信息来了解每个属性的分布情况。
print(data.describe())
这将显示我们数据框中9个属性的各个属性详细分布信息表。具体包括:数量、平均数、标准差、最小值、最大值、第一四分位数、第二四分位数(中位数)、第三四分位数。
我们可以查看这些统计数据,并开始注意与我们的问题有关的有趣事实。如平均怀孕次数为3.8次、最小年龄为21岁,以及有些人的体重指数为0,这种不可能的数据是某些属性值应该标记为缺失值的标志。
点击链接,详细了解数据框的描述统计功能。
可视化数据
图表更能说明属性值的分布和其间的关系。
不过,重要的是要先花时间了解数据的统计信息。每次以不同的方式查看数据时,您都有可能使自己注意到不同方面的信息,并可能会对问题产生不同的见解。
Pandas通过matplotlib模块来提供便捷地建立图像的功能。您可以点击链接了解更多有关Pandas中数据可视化的知识。
特征分布
第一个容易查看的性质是每个属性的分布情况。
我们首先可以通过箱线图来了解每个属性数值的散布情况。
import matplotlib.pyplot as plt
pd.options.display.mpl_style = 'default'
data.boxplot()
这段代码将绘制图形的样式(通过matplotlib)更改为默认样式,这样效果更好。
我们可以看到,测试属性有很多异常值,同时可以看到,plas属性值接近于正态分布。我们还可以通过将每个属性的值进行分段来绘制直方图矩阵,进而观察每个属性的分布情况。
data.hist()
直方图矩阵可以让您清楚地发现各个属性的分布特征,例如接近于正态分布的pres和skin属性。
特征-分类关系
下一个要探讨的重要关系是每个属性的类属性。
一种方法是可视化每个类的数据实例的属性分布以及注释和差异。您可以生成每个属性的直方图矩阵和每个类值的直方图矩阵,如下所示:
data.groupby('class').hist()
数据按类属性(两组)分组,然后为每个组中的属性创建直方图矩阵。结果是两个图像。
这有助于指出诸如plas属性的类之间的分布差异。
您可以更好地比较同一图表上每个类的属性值:
data.groupby('class').plas.hist(alpha=0.4)
通过绘制只包含plas一个属性的直方图,将数据按类别分组,其中红色的分类值为0,蓝色的分类值为1。除了部分变动,你可以看到一个近似正态分布的分布图像。这个属性可能会有助于区分类。
点击链接,您可以阅读有关groupby函数的更多信息。
特征-特征关系
最后要探讨的重要关系是属性之间的关系。
我们可以通过查看每对属性的交互分布来观察属性之间的关系。
from pandas.tools.plotting import scatter_matrix
scatter_matrix(data, alpha=0.2, figsize=(6, 6), diagonal='kde')
这里使用一个构建函数来创建所有属性之间交互关系的散点图矩阵。对角线上显示每个属性自身的Kernel密度估计。
这是一个强大的图像,从中可以获得很多有关数据的相关性信息。例如,我们可以看到age与preg之间可能存在的相关性,以及skin与mass之间可能存在的关系。
总结
在这篇文章中我们已经涵盖了很多地方。
我们从快速和别致等妙语趣话开始,载入我们的CSV格式的数据,并使用统计摘要进行了描述。
接下来,我们探索了各种不同的方法绘制我们的数据图像来揭示有趣的数据结构。我们观察了箱线图和直方图中数据的分布情况、与类属性相比较的属性分布,以及最后在成对散点图矩阵中属性之间的关系。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【数据相关】目标检测中的数据标注及格式转换代码
- 科学与艺术的融合:遗传算法绘制蒙娜丽莎
- “工业听诊”中多声源事件检测与定位
- 工业党福利:使用PaddleX高效实现指针型表计读取系列文章(2)
- 【三维点云系列】PCL点云库之数据文件与IO操作
- Jvm故障处理工具
- 递增子序列
- redis学习(二)
- You-Get 使用方法
- 接口测试 Mock 实战 | 结合 jq 完成批量化的手工 Mock
- 在Angular应用的child Component里同时使用@Input和@Output
- Angular应用里的@Input和@Output注解使用方法介绍
- K8S Ingress使用|常见问题列表
- 部署Tomcat及负载均衡
- Jenkins常用插件Publish Over SSH