不同数据类型的相关性分析总结

        在进行数据建模之前,我们一般会进行数据探索和描述性分析,发现数据规律及数据之间的相关性,本文主要从检验方法和可视化图形两个方面对不同数据类型的相关性分析方法进行总结,以加强对数据的了解和认识,为建模打下基础。

目录

一、不同数据类型的相关性总结

二、不同数据类型的相关性案例

2.1 连续变量 与 连续变量

2.1.1 可视化图形--散点图

2.1.2 检验方法--相关系数

2.2 连续因变量 与 二分类自变量

2.2.1 可视化图形--箱线图

2.2.2 检验方法--t检验

 2.3 连续自变量 与 二分类因变量

2.3.1 可视化图形--箱线图

2.3.2 检验方法--z检验

2.3.3 可视化图形--Logit图

2.4 多分类自变量 与 连续目标变量

2.4.1 可视化图形--分组箱线图

2.4.2 检验方法--方差分析

2.5 分类变量 与 分类变量

2.5.1 可视化图形--堆叠图

2.5.2 可视化图形--改进堆叠图 

2.5.3 检验方法--卡方检验


一、不同数据类型的相关性总结

自变量、因变量数据类型检验方法可视化图形
连续型&连续型相关系数散点图(大数据量不建议使用)
连续型&离散型(二分类)t检验/z检验分组箱线图、logit图(因变量为二分类,自变量为连续型)
离散型(多分类)&分类型方差分析分组箱线图
离散型&离散型卡方检验堆叠图、改进的堆叠图

二、不同数据类型的相关性案例

2.1 连续变量 与 连续变量

以信用卡申请及消费信息数据源为例,下载连接如下:线性回归建模及模型诊断数据集--creditcard_exp.csv_线性回归数据集-数据挖掘文档类资源-CSDN下载数据源中目标变量为avg_exp(月均消费金额),其余为自变量,首先筛选Acc=1(已开卡的用户数据,已开卡的用户才有消费),观察连续变量Age(申请人年龄)、Income(年收入)、dist_home_val(所住小区房屋均价)、dist_avg_income(当地人均收入)、high_avg(高出当地平均收入)和目标变量avg_exp(月均消费金额)之间的相关性。

2.1.1 可视化图形--散点图

因本数据集的数据量不大,可首先通过散点图可视化来看所有变量间的相关程度:

%matplotlib inline
import os
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from scipy import stats 
import statsmodels.api as sm
import statsmodels.formula.api as smf# 导入案例中的数据
df2 = pd.read_csv('./data/creditcard_exp.csv')
df2 = df2[df2['Acc'] == 1]  # 筛选已开卡数据
df2 = df2.astype({'avg_exp': 'float64', 'avg_exp_ln': 'float64'}) # 修改字段数据类型# 连续变量, 共6个
cons_df = df2[['avg_exp', 'Age', 'Income', 'dist_home_val', 'dist_avg_income', 'high_avg']]# 绘制两两间的散点图
fig = plt.figure(figsize = (20, 10))
axs = fig.subplots(6, 6)
for i in range(6):for j in range(6):axs[i, j].scatter(cons_df.iloc[:, i], cons_df.iloc[:, j])

 上图中按行看是按以上连续变量,每个变量与其他变量的散点图,因变量avg_exp为第一个,只观察第一行即可。与avg_exp线性关系较明显的是Income(年收入)、 dist_avg_income(当地人均收入)。

2.1.2 检验方法--相关系数

接着通过相关系数看其相关程度:

cons_df.corr()

同样观察第一行,avg_exp和Income的相关系数为0.67,与dist_avg_income的相关系数为0.70,这两者的相关性较强,因此如果预测用户开卡后的月均消费水平,这两个变量会有较好的预测能力。

2.2 连续因变量 与 二分类自变量

使用上小节信用卡申请及消费信息数据数据源中,观察Ownrent(是否自有住房)的月均信用卡消费水平是否有显著差异。

2.2.1 可视化图形--箱线图

首先用箱线图查看是否自有住房的月均信用卡消费的分布差异,可以看出自有住房的消费水平明显高于非自有住房。

import seaborn as snssns.boxplot(df2['Ownrent'], df2['avg_exp']) # 画箱线图

2.2.2 检验方法--t检验

接着用t检验(样本量较小可用t检验,本案例中Ownrent为1的有27条,为0的有43条)对其差异进行显著性检验,其p值为0.01 < 0.05,故认为是否自有住房的月均消费水平是显著的。

import scipy.stats as st   # 引入scipy.stats进行t检验st.ttest_ind(df2[df2['Ownrent'] == 0]['avg_exp'], df2[df2['Ownrent'] == 1]['avg_exp'])

 2.3 连续自变量 与 二分类因变量

连续自变量和二分类因变量的相关性分析可以套用2.2章节中的方法进行,除此之外,在可视化图形方面,可以用Logit图来更近一步的查看连续自变量的变化对因变量的影响。本案例为车辆出险保险理赔数据,Loss为车辆是否出险,可将其处理为0-1变量,其余变量为车主、汽车特征。下载链接如下:不同数据类型的相关性分析总结数据集1--auto_ins.csv-机器学习文档类资源-CSDN下载

分析车主驾龄Age和是否出险is_loss之间的相关性

2.3.1 可视化图形--箱线图

df3 = pd.read_csv('./data/auto_ins.csv', encoding = 'gbk')
df3['is_loss'] = [1 if i > 0 else 0 for i in df3['Loss']]  # 目标变量sns.boxplot(df3['is_loss'], df3['Age']) 


 从箱线图结果来看,出险与否的年龄分布无明显差异

2.3.2 检验方法--z检验

sw.ztest(df3[df3['is_loss'] == 0]['Age'], df3[df3['is_loss'] == 1]['Age'])

从z检验结果的p值0.21 > 0.05可知,两者之间的相关性未通过显著性检验。

2.3.3 可视化图形--Logit图

上述z检验未通过,说明其相关性不强,但仅通过检验并不能告诉我们不同年龄段的出险概率的变化情况,Logit图能够进一步观察自变量的变化对因变量的影响,如下是参考代码

# 画logit图, 参数df为数据集,col为连续变量字段名, target_name为目标变量字段名
def plot_distribute_fig(df, col, target_name):# 首先对连续特征变量进行等频分箱out, bins = pd.qcut(df[col], 20 ,duplicates='drop', retbins = True)new_col = col + '_cut'df[new_col] = outbad_ind_0 = df[df[target_name] == 0][target_name].count()   # 目标变量为0的总数bad_ind_1 = df[df[target_name] == 1][target_name].count()   # 目标变量为1的总数# 计算分箱中目标变量分布bad_ind_c_0 = df[df[target_name] == 0].groupby(new_col).count()[target_name] # 分箱中为0的个数bad_ind_c_1 = df[df[target_name] == 1].groupby(new_col).count()[target_name] # 分箱中为1的个数bad_ind_c_t = df.groupby(new_col).count()[target_name] # 分箱中的总数bad_ind_c_1_p = bad_ind_c_1/bad_ind_1 # 分箱中目标变量为1的占比# 将其存入新变量中woe_df = pd.DataFrame({new_col + '_0': bad_ind_c_0, new_col + '_1': bad_ind_c_1, new_col + '_t': bad_ind_c_t, new_col + '_1_p': bad_ind_c_1_p})# 左轴绘制连续变量分箱的个数ax1.bar(x, woe_df[new_col + '_t'], label = 'nums of bins')ax1.set_xticks(x, woe_df.index)   # 设置坐标轴标签# 右轴绘制该分箱中目标变量为1的占比ax2 = ax1.twinx()   # 设置双轴ax2.plot(x, bad_ind_c_1_p, color = 'red', label = 'bad pct of bins')fig.legend(loc = 1, bbox_to_anchor=(1,1), bbox_transform=ax1.transAxes) # 需加属性,否则图例会出界ax2.set_title('nums and bad pct of per bins')return woe_dfwoe_df = plot_distribute_fig(df3, 'Age', 'is_loss')

 通过Logit可以看出,随着车主驾龄的增加,出险的概率在下降。

2.4 多分类自变量 与 连续目标变量

继续使用2.1 章节中的数据集为例,来看不同教育水平edu_class的月均消费水平avg_exp是否有显著差异,可视化分析上依然可以用分组箱线图来查看

2.4.1 可视化图形--分组箱线图

sns.boxplot(df2['edu_class'], df2['avg_exp'])

从箱线图中可以看到不同教育水平的消费水平之间有显著差异

2.4.2 检验方法--方差分析

多分类变量和连续变量之间的相关性检验可以通过两两之间的t/z检验进行,但较为繁琐。一般使用方差分析进行,方差分析能够更高效的检验不同分组之间的显著性差异,可通过单因素方差分析的f检验进行,也可通过建立线性回归模型并对其进行方差分析,具体代码如下。

(1)单因素方差分析

# 单因素方差分析
avg_exp_arr = []
for i in range(4):avg_exp_arr.append(df2[df2['edu_class'] == i]['avg_exp'])stats.f_oneway(*avg_exp_arr)  # 模块来自 from scipy import stats 

 (2)建立线性回归模型并进行方差分析

lr = smf.ols(formula = 'avg_exp~C(edu_class)', data = df2).fit() # 建立线性回归模型
df2_anova = sm.stats.anova_lm(lr, typ = 1) # 对模型进行方差分析
df2_anova

 可以看到其结果是一样的,即认为不同教育水平的信用卡消费有显著差异。(该方法也可进行多因素方差分析)

2.5 分类变量 与 分类变量

该案例使用2.3章节中的车辆出险保险理赔的数据源,其特征变量为性别,目标变量为是否出险,分析两者之间的相关性。

2.5.1 可视化图形--堆叠图

首先用堆叠图,来看不同性别的出险分布情况

df3_cross = pd.crosstab(df3['Gender'], df3['is_loss'], margins = True) # 列联表
df3_cross_p = df3_cross.apply(lambda x: x/x['All'], axis = 1) # 计算占比
print(df3_cross_p)
df3_cross_p.iloc[0:2, 0:2].plot(kind = 'bar', stacked = True) # 画出堆叠图

 

2.5.2 可视化图形--改进堆叠图 

从上堆叠图中可看到不同性别的出险概率有差异,但不能看出男女两者的样本量差异,如下是改进的堆叠图,能直观的看出男女分布及其出现概率情况。

def plot_stacked(data_raw):# 计算占比data_raw_1 = data_raw.div(data_raw.sum(axis = 1), axis = 'index')y_0_p = data_raw_1.iloc[:,0]   # 各分类变量中 目标变量为0的 占比y_1_p = data_raw_1.iloc[:,1]   # 各分类变量中 目标变量为1的 占比# 获取每个分类变量在整体中的占比data_raw['pct'] = data_raw.sum(axis = 1)/data_raw.sum(axis = 1).sum()x = data_raw['pct']   # 每根柱子的坐标plt.figure(figsize = (8, 6))plt.bar(x, y_0_p, color = 'royalblue', width = x, label = '0')  # 每根柱子的第一截plt.bar(x, y_1_p, bottom = y_0_p, color = 'darkorange', label = '1', width = x)  # 每根柱子的第二截plt.xticks(x, ['0', '1'])plt.legend(loc='best', title = 'is_loss')plt.show()plot_stacked(pd.crosstab(df3['Gender'], df3['is_loss']))

2.5.3 检验方法--卡方检验

分类变量的检验方法可通过卡方检验进行,如下是参考代码。

stats.chi2_contingency(df3_cross.iloc[:2, :2])

 通过上图可以看出卡方检验的p值为0.00018 < 0.05,即认为不同性别间的出险差异是显著的。两分类变量的相关性程度可用Cramer's V系数来度量,其计算公式如下:

V = \sqrt{\frac{\chi ^{2}}{n\times min[(r-1),(c-1)]}}

\chi ^{2}是卡方值,n为列联表的总频数即样本量,r为行数,c为列数,该值越大说明相关性越强,否则越小(参考自贾俊平老师第三版统计学p204-205页)。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(9)数据分析-相关性分析

文章目录 1、运用场景2、图形描述相关性2.1使用场景2.2 代码实现2.3 效果呈现 3、正态资料相关性分析3.1 使用场景3.2 皮尔森相关系数3.3 代码实现3.4 结果分析 4、非正太资料的相关分析4.1 使用场景4.2 斯皮尔曼等级相关系数4.3 代码实现4.4 结果分析 1、运用场景 相关性分析是…

数据分析之数据相关性分析

相关性分析 作者&#xff1a;学者科技 时间&#xff1a;2022/12/25 应用场景 发现数据之间的关联性 比如 啤酒 和 尿布 删减统计指标 比如 城市里的温度传感器&#xff0c;相关性强的可以去掉以节约成本 挑选回归建模的变量 选择与因变量相关性高的自变量自变量间如果有高度…

数据特征分析技能—— 相关性检验

数据特征分析技能—— 相关性检验 相关性分析是指对两个或多个具备相关性的变量元素进行分析&#xff0c;从而衡量两个变量因素的相关密切程度 一般常用四种方法&#xff1a; - 画图判断 - pearson&#xff08;皮尔逊&#xff09;相关系数 - sperman&#xff08;斯皮尔曼&a…

印刷品的排版技巧

印刷品的精美离不开精美的排版&#xff0c;排版设计能够让书本杂志标题规整好看。随着设计素材的丰富&#xff0c;现在设计师可以有越来越多的选择&#xff0c;不过有时候过多的元素在设计并不能起到画龙点睛的作用&#xff0c;相反经常会发现一些排版设计十分杂乱&#xff0c;…

微信公众号排版方法及相关素材网站

作者&#xff1a;杨坤龙 链接&#xff1a;https://www.zhihu.com/question/23640203/answer/375921114 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 关于排版 前段时间我发了条朋友圈&#xff1a;有哪些东西是你…

关于文案排版的一些基本技巧

一、主文案 1. 什么是主文案 关于首页&#xff0c;会涉及到主文案&#xff0c;副文案&#xff0c;装饰性文案等。一个文案中最重要的是主文案&#xff0c;所谓主文案就是你想突出什么&#xff0c;什么就是主文案&#xff0c;主文案一般就是口号类的&#xff0c;标语&#xff0c…

一些实用排版工具

三年前我什么都不懂的时候&#xff0c;就听闻了高大上的LaTeX&#xff0c;还去听了图书馆某工科博士开的LaTeX入门讲解&#xff0c;听的天花乱坠毫无头绪&#xff0c;回去兴冲冲地装上&#xff0c;运行&#xff0c;出现bug&#xff0c;然后傻眼了&#xff0c;解决不了&#xff…

【工具】用PPT排版打印海报时图片分辨率问题

版本&#xff1a;PPT 2013 PPT用来排版做海报也许不是那么好&#xff0c;但是可以用&#xff0c;也方便。【工具】PPT插入高清图片保存后图片变模糊的解决方法&#xff0c;这里解决了高清图片在PPT中被压缩的问题&#xff0c;但用PPT打印还会碰到问题。 将PPT打印为pdf时&…

135编辑器点击换图html,这5种换图姿势,只有排版高手才会!

换图教程 胖友们&#xff0c;欢迎来看二条&#xff01; 最近客服小姐姐一直催我写一篇关于换图的教程&#xff0c;我就不明白了&#xff01;去年答应你的事&#xff0c;我怎么能拖那么久...你怎么还记得那么清楚&#xff01; 好吧&#xff0c;教程开始。 135编辑器给图片/图片样…

ChatGLM的搭建过程

本次搭建的是清华大学开源的ChatGLM。源码地址。模型地址。 1、开启BBR加速 如何开启BBR加速可以去看我的这篇文章&#xff0c;Linux开启内核BBR加速。 2、拉取ChatGLM源码和ChatGLM模型 点击这里跳转到源码处。 点击这里跳转到模型下载处。 我这里在下载之前创建了一个目…

道指30只成分股的股价及历史股价抓取分析

1.获取数据: 想要获得道指30只成分股的最新股价 import requests import re import pandas as pddef retrieve_dji_list():try:r requests.get(https://money.cnn.com/data/dow30/)except ConnectionError as err:print(err)search_pattern re.compile(class"wsod_sym…

短信验证码接口的实现

代码&#xff1a; sendsms.java //接口类型&#xff1a;互亿无线触发短信接口&#xff0c;支持发送验证码短信、订单通知短信等。 // 账户注册&#xff1a;请通过该地址开通账户http://sms.ihuyi.com/register.html // 注意事项&#xff1a; //&#xff08;1&#xff09;调试…

交友项目【手机号验证码发送】功能实现

目录 1&#xff1a;注册登录需求分析 1.1&#xff1a;业务说明 1.2&#xff1a;需求分析 1.3&#xff1a;数据库表 1.4&#xff1a;实体类 2&#xff1a;发送短信验证码 2.1&#xff1a;登录验证码 2.2&#xff1a;接口说明 2.3&#xff1a;流程分析 2.4&#xff1a;…

免费的短信验证码接口

免费的短信验证码接口 改了唯ID的东西&#xff0c;大家可以用来玩玩&#xff0c;该服务明年6月到期&#xff0c;也希望大家能文明使用&#xff01; 不说废话了&#xff0c;直接上接口。 1、发送短信验证码接口 POST http://sms.usts.top/sms/sendCode?phone手机号2、…

短信验证码平台有哪些比较好用?

现如今&#xff0c;要想分辨短信验证码平台哪些比较好用&#xff0c;需要从速度、到达率、稳定性等几个方面来决定。短信验证码平台是很讲究时效性&#xff0c;所以速度快、到达率高是很关键的。另外&#xff0c;在选择短信验证码平台的时候&#xff0c;还要注意短信发送、接收…

短信验证码的实现

需求 发送验证码短信然后接收验证码再完成注册 具体操作 1>点击"获取验证码"的按钮,会发送sendVerifyCode的异步请求并带上参数phone(number) 查看前端代码html 查看对应的js代码 2>后端接口的实现 接口接收请求,获取到手机号,生成验证码code,拼接出短信,并…

目前可以用的短信验证码平台哪个比较好?

目前短信验证码大家应该都很熟悉了&#xff0c;尤其当你在一些购物网站等注册会员或者修改信息时都需要验证码。而短信验证码是商家为了降低重复注册或者非法注册&#xff0c;就需要短信验证码来帮忙用户的真实性。那么&#xff0c;目前可以用的短信验证码平台哪个比较好呢&…

短信验证码登录的实现

原理说明开发环境具体实现过程 原理说明 在网站登录时经常会遇到短信验证码登录的情况&#xff0c;其原理如下&#xff1a;首先我们需要一个短信发送接口&#xff0c;前端发送手机号码到后端&#xff0c;后端随机生成一个验证码并存入redis,并且设置该key的过期时间。(这里可以…

低代码真的是“行业毒瘤”?

低代码/零代码到底是“行业毒瘤”还是“大势所趋”&#xff1f;碰瓷“码农”万年户&#xff0c;低代码火了这些年&#xff0c;你还觉得是毒瘤吗&#xff1f; 低代码/零代码作为比较有争议的话题&#xff0c;常年被拿来碰瓷码农&#xff0c;也是很多行业大佬关注的对象。 阿里云…

chatgpt赋能python:Python如何下载人人文库

Python如何下载人人文库 人人文库是一个知识分享社区&#xff0c;用户可以在平台上上传、下载和分享文档。 Python是一种强大的编程语言&#xff0c;具有强大的网络和数据处理库。今天&#xff0c;我们将介绍如何使用Python来下载人人文库中的文档。 首先&#xff0c;我们需…