跟我一起学Python数据处理(六十三)之相关性分析、离群值查找与数据分组
大家好!在之前的学习中,我们一起了解了Python数据处理里的异常处理和数据联结,不知道大家掌握得怎么样啦?我写这些博客的目的,就是希望能和大家一起在数据处理的领域里不断进步,把复杂的数据变得清晰易懂。今天,咱们接着探索Python数据处理的新知识,包括相关性分析、找出离群值以及创建数据分组,这些可都是超实用的技能哦,让我们赶紧开始吧!
跟我一起学Python数据处理(六十三)之相关性分析、离群值查找与数据分组
大家好!在之前的学习中,我们一起了解了Python数据处理里的异常处理和数据联结,不知道大家掌握得怎么样啦?我写这些博客的目的,就是希望能和大家一起在数据处理的领域里不断进步,把复杂的数据变得清晰易懂。今天,咱们接着探索Python数据处理的新知识,包括相关性分析、找出离群值以及创建数据分组,这些可都是超实用的技能哦,让我们赶紧开始吧!
一、相关性分析:发现数据间的隐藏关系
在数据分析时,我们常常好奇不同数据之间有没有内在联系。就像我们想知道一个人的身高和体重之间有没有关联,学习时间和考试成绩是不是有关系。在Python里,我们可以借助一些工具来找出这些关系,其中一种常用的方法就是计算皮尔森相关系数。
皮尔森相关系数的取值范围在 -1 到 1 之间。如果它接近1,那就说明两个变量之间是很强的正相关,比如身高越高,体重往往也越重;要是接近 -1,就是很强的负相关,比如温度越高,穿的衣服可能就越少;如果接近0,那就表示这两个变量之间没什么线性关系。
计算皮尔森相关系数,我们可以用numpy
库。在使用之前,得先安装它,打开命令行,输入pip install numpy
就能完成安装。假设我们现在有两组数据,一组是不同城市的平均气温,另一组是对应城市的冰淇淋销量。我们想看看气温和冰淇淋销量之间有没有关系,代码可以这么写:
import numpy as np
# 平均气温数据
temperatures = [20, 25, 30, 32, 28, 24]
# 冰淇淋销量数据
ice_cream_sales = [100, 150, 200, 220, 180, 130]
# 计算皮尔森相关系数
correlation = np.corrcoef(temperatures, ice_cream_sales)[0, 1]
print(f'皮尔森相关系数: {correlation}')
运行这段代码,就能得到气温和冰淇淋销量之间的皮尔森相关系数。如果得到的系数是个正数,而且比较接近1,那就说明气温越高,冰淇淋销量越高,它们之间有很强的正相关关系;要是系数是负数,就表示它们可能是负相关;如果接近0,那就得找找其他原因来解释这两组数据的关系啦。
二、找出离群值:挖掘数据中的特殊点
在数据分析过程中,有时候会遇到一些数据和其他数据差别特别大,这些数据就是离群值。离群值可能是因为数据录入错误,也可能是数据本身的特殊情况。找到离群值很重要,它能帮助我们发现数据中的异常情况,或者挖掘出一些特殊信息。
在Python里,用agate
库找离群值很方便,有两种常用的方法:标准差法和绝对中位差法。标准差法是看数据和平均值的偏离程度,如果某个数据和平均值的偏差超过一定范围,就把它当成离群值;绝对中位差法则是通过中位数来衡量数据的离散程度,找到那些偏离中位数比较远的数据。
下面我们用agate
库的标准差法来举例。假设我们有一份学生考试成绩的数据,想要找出成绩中的离群值。先安装agate-stat
库,在命令行输入pip install agate-stat
。安装好之后,代码可以这么写:
import agate
import agatestats
agatestats.patch()
# 假设这是学生考试成绩数据
data = [
{'学生': '小明', '成绩': 85},
{'学生': '小红', '成绩': 90},
{'学生': '小刚', '成绩': 30}, # 可能是离群值
{'学生': '小美', '成绩': 88},
{'学生': '小李', '成绩': 92}
]
table = agate.Table(data)
# 使用标准差法找离群值,这里设置偏差为3
std_dev_outliers = table.stdev_outliers('成绩', deviations=3, reject=False)
# 输出离群值的数量和具体数据
print(f'离群值数量: {len(std_dev_outliers.rows)}')
for row in std_dev_outliers.rows:
print(row['学生'], row['成绩'])
在这段代码里,stdev_outliers
方法会返回那些和平均值偏差超过3倍标准差的数据。reject=False
表示我们希望看到离群值,如果设置为True
,返回的就是去掉离群值之后的数据。通过这个方法,我们就能找到那些成绩特别异常的学生,再去分析是因为什么原因导致的。
如果用绝对中位差法,代码也很简单,把stdev_outliers
换成mad_outliers
就行。不同的方法可能会找到不同的离群值,所以在分析数据的时候,可以多尝试几种方法,这样能更全面地了解数据的分布情况。
三、创建分组:深入分析数据的关系
当我们对数据有了一定的了解之后,为了更深入地研究数据之间的关系,常常需要对数据进行分组。比如说,我们有一份学生成绩数据,想看看不同班级的学生成绩有没有差异,或者不同年龄段的人在消费习惯上有什么不同。
在agate
库中,有很多工具可以帮助我们创建分组。假设我们现在有一份销售数据,里面包含了不同地区的销售额,我们想按照地区来分组,看看各个地区的销售情况怎么样。首先,我们要准备好数据,假设数据是这样的:
import agate
# 销售数据
sales_data = [
{'地区': '北京', '销售额': 1000},
{'地区': '上海', '销售额': 1200},
{'地区': '北京', '销售额': 800},
{'地区': '广州', '销售额': 900},
{'地区': '上海', '销售额': 1100}
]
table = agate.Table(sales_data)
接下来,我们就可以用agate
库的group_by
方法来按照地区分组,并且计算每个地区的总销售额:
# 按照地区分组,并计算每个地区的总销售额
grouped = table.group_by('地区')
aggregated = grouped.aggregate([
('总销售额', agate.Sum('销售额'))
])
# 输出分组和聚合后的结果
for group in aggregated.rows:
print(group['地区'], group['总销售额'])
在这段代码里,group_by('地区')
按照“地区”这一列对数据进行分组,aggregate
方法则是对每个分组进行聚合操作,这里我们用agate.Sum('销售额')
计算每个地区的总销售额。通过这样的分组和聚合操作,我们就能清楚地看到每个地区的销售总额,方便进行比较和分析。
除了按照单一条件分组,还可以根据多个条件分组,比如先按照地区分组,再按照产品类型分组,这样能更细致地分析数据之间的关系。
学习Python数据处理就像一场充满惊喜的冒险,每一个新的知识点都是我们前进路上的宝藏。今天我们学习了相关性分析、找出离群值和创建分组,这些技能能帮助我们从不同角度深入理解数据。希望大家在实际操作中多运用这些知识,不断提高自己的数据处理能力。
写作不易,如果这篇博客对你有所帮助,希望大家能关注我的博客,点赞并留下评论。你们的支持就是我继续创作的动力,后续我还会分享更多有趣又实用的数据处理知识,咱们一起加油!

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)