当前位置: 首页 > news >正文

使用Python解决数据分析中的相关性分析

目录

  • 1.相关系数基础
    • 1.1 使用==Pandas==计算皮尔逊相关系数
    • 1.2 计算物品A与其他物品的相关系数
    • 1.3 用户间的相关系数
    • 1.4 获取相关系数矩阵
  • 2. 相似度计算的Python实现
    • 2.1 欧式距离
    • 2.2 余弦相似度
    • 2.3 皮尔逊相关系数的手动实现
  • 3. 总结

在数据分析中,相关系数是衡量两个变量之间线性关系的重要指标。本文将深入探讨如何在Python的Pandas库中计算和应用相关系数,并结合实际示例,展示不同相似度计算方法的实现。

1.相关系数基础

相关系数可以帮助我们了解变量之间的关系强度和方向。最常用的相关系数是皮尔逊相关系数,它的值介于-1和1之间。值为1表示完全正相关,-1表示完全负相关,0则表示无相关性。

1.1 使用Pandas计算皮尔逊相关系数

我们首先创建一个数据框(DataFrame)来模拟用户对不同物品的评分:

import pandas as pddf = pd.DataFrame([[5, 4, 4], [1, 2, 2], [5, 2, 1]], columns=['物品A', '物品B', '物品C'], index=['用户1', '用户2', '用户3'])
df

在这里插入图片描述

1.2 计算物品A与其他物品的相关系数

可以使用corrwith方法计算物品A与其他物品的皮尔逊相关系数:

A = df["物品A"]
corr_A = df.corrwith(A)
print(corr_A)

在这里插入图片描述

1.3 用户间的相关系数

类似地,可以计算用户之间的相关系数:

user_corr = df.corrwith(df.iloc[0], axis=1)  # 计算用户1与其他用户的皮尔逊相关系数
print(user_corr)

在这里插入图片描述

1.4 获取相关系数矩阵

使用corr()方法,可以快速获取整个数据框的相关系数矩阵:

corr_matrix = df.corr()
print(corr_matrix)

在这里插入图片描述

2. 相似度计算的Python实现

除了相关系数,计算物品或用户之间的相似度也非常重要。以下是几种常用的相似度计算方法。

2.1 欧式距离

欧式距离是衡量两个点之间直线距离的一种方法,可以通过以下方式计算:

import numpy as np# 计算第一行与第二行的欧氏距离
euclidean_distance = np.linalg.norm(df.iloc[0] - df.iloc[1])
print("物品A与物品B的欧氏距离为:", euclidean_distance)

在这里插入图片描述

2.2 余弦相似度

余弦相似度用于衡量两个向量的夹角,常用于文本和推荐系统中:

from sklearn.metrics.pairwise import cosine_similarityitem_similarity = cosine_similarity(df)
cos_df = pd.DataFrame(item_similarity, columns=["物品A", "物品B", "物品C"], index=["物品A", "物品B", "物品C"])
print(cos_df)

在这里插入图片描述

2.3 皮尔逊相关系数的手动实现

除了Pandas,Scipy库也可以计算皮尔逊相关系数:

from scipy.stats import pearsonrX = [1, 3, 5, 7, 9]
Y = [9, 8, 6, 4, 2]
corr = pearsonr(X, Y)
print("皮尔逊相关系数r的值为:", corr[0], "显著性水平P值为:", corr[1])

在这里插入图片描述

3. 总结

本文介绍了如何在Python中计算相关系数及相似度,可用于数据预处理分析部分。通过实际的代码示例,展示了皮尔逊相关系数、欧式距离和余弦相似度的计算方式。这些技术在数据分析和推荐系统中具有重要应用。

相关文章:

  • macOS 15 Blank OVF - macOS Sequoia 虚拟化解决方案
  • 分享个锂电池升压芯片,3.7V升5V大电流输出的芯片。AD2403 PWM升压芯片
  • 如何创建一个包含多个列的表?
  • 828华为云征文|华为云Flexus云服务器X实例——部署EduSoho网校系统、二次开发对接华为云视频点播实现CDN加速播放
  • fastadmin本地安装插件提示”请从官网渠道下载插件压缩包(code:2)(code:1)“
  • 数据结构(Day18)
  • vue-pdf 实现pdf预览、高亮、分页、定位功能
  • 问题记录:end value has mixed support, consider using flex-end instead
  • docker和ufw冲突问题
  • SpringBoot开发——整合P6Spy详细记录SQL执行耗时情况
  • 智能识别猫猫
  • Day 1 词汇备战
  • 使用MyBatis-Plus与Thymeleaf在Spring Boot中实现增删改查
  • 【CSS】鼠标 、轮廓线 、 滤镜 、 堆叠层级
  • 学习一下怎么用git
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • flutter的key在widget list的作用以及必要性
  • gf框架之分页模块(五) - 自定义分页
  • HashMap剖析之内部结构
  • Js基础——数据类型之Null和Undefined
  • js数组之filter
  • Linux CTF 逆向入门
  • Median of Two Sorted Arrays
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • October CMS - 快速入门 9 Images And Galleries
  • python3 使用 asyncio 代替线程
  • Swoft 源码剖析 - 代码自动更新机制
  • vue脚手架vue-cli
  • 分布式任务队列Celery
  • 批量截取pdf文件
  • 前嗅ForeSpider中数据浏览界面介绍
  • Mac 上flink的安装与启动
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • #WEB前端(HTML属性)
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (Forward) Music Player: From UI Proposal to Code
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (论文阅读11/100)Fast R-CNN
  • (十八)SpringBoot之发送QQ邮件
  • (一)RocketMQ初步认识
  • (一)模式识别——基于SVM的道路分割实验(附资源)
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • (轉貼) UML中文FAQ (OO) (UML)
  • .NET6 命令行启动及发布单个Exe文件
  • .net反编译的九款神器
  • .NET正则基础之——正则委托
  • [ CTF ]【天格】战队WriteUp- 2022年第三届“网鼎杯”网络安全大赛(青龙组)
  • [ 攻防演练演示篇 ] 利用通达OA 文件上传漏洞上传webshell获取主机权限
  • [AI aider] 打造终端AI搭档:Aider让编程更智能更有趣!
  • [Android Studio 权威教程]断点调试和高级调试
  • [Angular] 笔记 9:list/detail 页面以及@Output
  • [BZOJ] 2044: 三维导弹拦截
  • [CSS]文字旁边的竖线以及布局知识