【数据分析入门】python数据分析-探索性数据分析之多因子与对比分析可视化

article/2025/10/13 1:12:53

文章目录

      • 多因子与对比分析可视化
        • 理论基础
          • 假设检验与方差检验
            • 假设检验
            • 方差检验
          • 相关系数:皮尔逊、斯皮尔曼
          • 回归:线性回归
          • PCA与奇异值分解
        • 代码实践
          • 交叉分析
          • 分组分析
          • 相关分析
          • 因子分析
        • 总结
          • 代码实现
  • 相关性
    • 线性回归
    • PCA
      • 注意:sklearn中pca用的方法是奇异值分解的方法,并不是pc方法,下面用pc方法实现
  • 交叉分析
    • 分组与钻取
    • 相关分析
    • 条件熵
    • 熵增益
    • 衡量离散值的相关性
    • 基尼系数
    • 因子分析

数据分析全过程梳理见
【数据分析入门】python数据分析全过程梳理

多因子与对比分析可视化

目的:展现数据全貌

理论基础

假设检验与方差检验
假设检验

根据一定的假设条件,从样本推断总体,或者推断样本与样本之间关系的一种方法。
根据样本已知的分布性质来推断整体的性质

假设检验的基本思想是“小概率事件”原理,其统计推断方法是带有某种概率性质的反证法。小概率思想是指小概率事件在一次试验中基本上不会发生。反证法思想是先提出检验假设,再用适当的统计方法,利用小概率原理,确定假设是否成立。即为了检验一个假设H0是否正确,首先假定该假设H0正确,然后根据样本对假设H0做出接受或拒绝的决策。如果样本观察值导致了“小概率事件”发生,就应拒绝假设H1,否则应接受假设H1。

假设检验的步骤:
显著性水平越低,要求越高
在这里插入图片描述
检验统计量:
t分布,样本区别
f检验,方差分析
卡方检验,四格表检验法,检验两个指标有没有相关性

方差检验

F检验
在这里插入图片描述
R5piv5rip5biF5biF,size_17,color_FFFFFF,t_70,g_se,x_16)

独立分布t检验
在这里插入图片描述
样本长度可以不一样

相关系数:皮尔逊、斯皮尔曼

在这里插入图片描述
在这里插入图片描述
n是样本个数
d是排序
只跟相对大小有关
应用于相对比较的情况

回归:线性回归

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
好的回归,DW值接近2,应该是残差不相关

PCA与奇异值分解

在这里插入图片描述
主成分最大的作用:降维

奇异值分解

代码实践

交叉分析
分组分析
相关分析
因子分析

在这里插入图片描述
在这里插入图片描述

总结

在这里插入图片描述

代码实现

相关性

import pandas as pd
s1=pd.Series([0.1,0.2,1.1,2.4,1.3,0.3,0.5])
s2=pd.Series([0.5,0.4,1.2,2.5,1.1,0.7,0.1])
s1.corr(s2)
0.9333729600465923
s1.corr(s2,method="spearman")
0.7142857142857144
df=pd.DataFrame([s1,s2])
df.corr()
df=pd.DataFrame(np.array([s1,s2]).T)
df.corr()
x=np.arange(10).astype(np.float).reshape((10,1))
C:\ProgramData\Miniconda3\lib\site-packages\ipykernel_launcher.py:1: DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. To silence this warning, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.
Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations"""Entry point for launching an IPython kernel.
y=x*3+4+np.random.random((10,1))

线性回归

from sklearn.linear_model import LinearRegression
reg=LinearRegression()
res=reg.fit(x,y)
y_pred=reg.predict(x)
reg.coef_
array([[2.93514572]])
reg.intercept_
array([4.70737715])

PCA

data=np.array([np.array([2.5,0.5,2.2, 1.9,3.1,2.3,2, 1,1.5,1.1]),
np.array([2.4,0.7,2.9,2.2,3,2.7,1.6,1.1, 1.6,0.9])]).T
data
array([[2.5, 2.4],[0.5, 0.7],[2.2, 2.9],[1.9, 2.2],[3.1, 3. ],[2.3, 2.7],[2. , 1.6],[1. , 1.1],[1.5, 1.6],[1.1, 0.9]])
from sklearn.decomposition import PCA
lower_dim=PCA(n_components=1)
lower_dim.fit(data)
PCA(n_components=1)
lower_dim.explained_variance_ratio_
array([0.96318131])
lower_dim.fit_transform(data)
array([[-0.82797019],[ 1.77758033],[-0.99219749],[-0.27421042],[-1.67580142],[-0.9129491 ],[ 0.09910944],[ 1.14457216],[ 0.43804614],[ 1.22382056]])

注意:sklearn中pca用的方法是奇异值分解的方法,并不是pc方法,下面用pc方法实现

import numpy as np
import pandas as pd
def myPCA(data,n_components=10000000):mean_value=np.mean(data,axis=0)mid=data-mean_valuecov_mat=np.cov(mid,rowvar=False)from scipy import linalgeig_vals,eig_vects=linalg.eig(np.mat(cov_mat))eig_val_index=np.argsort(eig_vals)eig_val_index=eig_val_index[:-(n_components+1):-1]eig_vects=eig_vects[:,eig_val_index]low_dim_mat=np.dot(mid,eig_vects)return low_dim_mat,eig_vals
myPCA(data,n_components=1)

交叉分析

import pandas as pd
import numpy as np
import scipy.stats as ss
import matplotlib.pyplot as plt
import seaborn as sns
df=pd.read_csv('C:\\Users\\wenxiaoyu_intern\\Documents\\client_rfm.csv')
df=df.fillna(0)
df.loc[df['gain'] >0,['gain_type']]=1
df.loc[df['gain'] <=0,['gain_type']]=-1
df_indices=df.groupby(by="risk").indicess_values=df["vol"].iloc[df_indices[3]].values
l_values=df["vol"].iloc[df_indices[1]].values
ss.ttest_ind(s_values,l_values)[1]
0.1287748887778182
#颜色越深,越有关系
risk_keys=list(df_indices.keys())
dp_t_mat=np.zeros([len(risk_keys),len(risk_keys)])
for i in range(len(risk_keys)):for j in range(len(risk_keys)):p_value=ss.ttest_ind(df["vol"].iloc[df_indices[risk_keys[i]]].values,df["vol"].iloc[df_indices[risk_keys[j]]].values)[1]if p_value <0.05:dp_t_mat[i][j]=-1else:dp_t_mat[i][j]=p_value
sns.heatmap(dp_t_mat,xticklabels=risk_keys,yticklabels=risk_keys)
<AxesSubplot:>
#颜色越深,没有关系,颜色越浅,越有关系
risk_keys=list(df_indices.keys())
dp_t_mat=np.zeros([len(risk_keys),len(risk_keys)])
for i in range(len(risk_keys)):for j in range(len(risk_keys)):p_value=ss.ttest_ind(df["gain_type"].iloc[df_indices[risk_keys[i]]].values,df["gain_type"].iloc[df_indices[risk_keys[j]]].values)[1]dp_t_mat[i][j]=p_value
sns.heatmap(dp_t_mat,xticklabels=risk_keys,yticklabels=risk_keys)
<AxesSubplot:>
#颜色越深,没有关系,颜色越浅,越有关系
risk_keys=list(df_indices.keys())
dp_t_mat=np.zeros([len(risk_keys),len(risk_keys)])
for i in range(len(risk_keys)):for j in range(len(risk_keys)):p_value=ss.ttest_ind(df["date_nums"].iloc[df_indices[risk_keys[i]]].values,df["date_nums"].iloc[df_indices[risk_keys[j]]].values)[1]dp_t_mat[i][j]=p_value
sns.heatmap(dp_t_mat,xticklabels=risk_keys,yticklabels=risk_keys)
<AxesSubplot:>
#透视表,交叉分析
piv_tb=pd.pivot_table(df,values="gain",index=["risk"],columns=["gain_type"],aggfunc=np.mean)
piv_tb
#透视表,交叉分析
piv_tb=pd.pivot_table(df,values="vol",index=["risk"],columns=["gain_type"],aggfunc=np.mean)
piv_tb
#透视表,交叉分析
piv_tb=pd.pivot_table(df,values="total_amount",index=["risk"],columns=["gain_type"],aggfunc=np.mean)
piv_tb
sns.heatmap(piv_tb)
#颜色越浅,交易量越大
<AxesSubplot:xlabel='gain_type', ylabel='risk'>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-As1F1Kgr-1659436077451)(client_files/client_138_1.png)]

sns.heatmap(piv_tb,cmap=sns.color_palette(("Reds")))
#颜色越深,交易量越大
<AxesSubplot:xlabel='gain_type', ylabel='risk'>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6LyZC4qp-1659436077452)(client_files/client_139_1.png)]

分组与钻取

sns.barplot(x="gain_type",y="vol",hue="risk",data=df)
<AxesSubplot:xlabel='gain_type', ylabel='vol'>
d_n=df["date_nums"]
sns.barplot(list(range(len(d_n))),d_n.sort_values())
C:\ProgramData\Miniconda3\lib\site-packages\seaborn\_decorators.py:43: FutureWarning: Pass the following variables as keyword args: x, y. From version 0.12, the only valid positional argument will be `data`, and passing other arguments without an explicit keyword will result in an error or misinterpretation.FutureWarning

相关分析

sns.heatmap(df.corr(),vmin=-1,vmax=1,cmap=sns.color_palette("RaBu",n_colors=128))
import pandas as pd
import numpy as np
s1=pd.Series(["X1","X1","X2","X2","X2","X2"])
s2=pd.Series(["Y1","Y1","Y1","Y2","Y2","Y2"])
s1.groupby(by=s1).count().values
array([2, 4], dtype=int64)
def getEntropy(s):#计算分布if not isinstance(s,pd.Series):s=pd.Series(s)prt_ary=s.groupby(by=s).count().values/float(len(s))return -(np.log2(prt_ary)*prt_ary).sum()
getEntropy(s1)#s1的熵,log2(2/6)*2/6+log2(4/6)*4
0.9182958340544896
getEntropy(s2)
1.0

条件熵

条件熵是不对称的


def getCondEntropy(s1,s2):d=dict()for i in list(range(len(s1))):d[s1[i]]=d.get(s1[i],[])+[s2[i]]return sum([getEntropy(d[k])*len(d[k])/float(len(s1)) for k in d])    
getCondEntropy(s1,s2)
0.5408520829727552
getCondEntropy(s2,s1)
0.4591479170272448

熵增益

熵增益是对称的
熵增益率不是对称的

def getEntropyGain(s1,s2):return getEntropy(s2)-getCondEntropy(s1,s2)
def getEntropyGainRatio(s1,s2):return getEntropyGain(s1,s2)/getEntropy(s2)
getEntropyGain(s1,s2)
0.4591479170272448
getEntropyGain(s2,s1)
0.4591479170272448
getEntropyGainRatio(s1,s2)
0.4591479170272448
getEntropyGainRatio(s2,s1)
0.5

衡量离散值的相关性

import math
def getDiscreleCorr(s1,s2):return getEntropyGain(s1,s2)/math.sqrt(getEntropy(s1)*getEntropy(s2))
getDiscreleCorr(s1,s2)
0.4791387674918639
getDiscreleCorr(s2,s1)
0.4791387674918639

基尼系数

#概率平方和
def getProbSS(s):#计算分布if not isinstance(s,pd.Series):s=pd.Series(s)prt_ary=s.groupby(by=s).count().values/float(len(s))return sum(prt_ary**2)
def getGini(s1,s2):d=dict()for i in list(range(len(s1))):d[s1[i]]=d.get(s1[i],[])+[s2[i]]return 1-sum([getProbSS(d[k])*len(d[k])/float(len(s1)) for k in d])   
getGini(s1,s2)
0.25
getGini(s2,s1)
0.2222222222222222
df=pd.read_csv(r"C:\Users\wenxiaoyu_intern\Documents\用户画像\client_rfm.csv")
df=df.fillna(0)

因子分析

主成分分析

from sklearn.decomposition import PCA 
my_pca=PCA(n_components=7)
my_pca.fit_transform(df.drop(labels=["client_rfm"],axis=1))
df.drop(labels=["client_rfm"],axis=1)
lower_mat=my_pca.explained_variance_ratio_
import seaborn as sns
sns.heatmap(pd.DataFrame(lower_mat).corr(),vmin=1,vmax=1,cmap=sns.color_palette("RdBu"))

http://chatgpt.dhexx.cn/article/6TM5lO8n.shtml

相关文章

数据分析系列之挖掘建模

经过数据探索与数据预处理,得到了可以直接建模的数据,根据挖掘目标和数据形式可以建立分类与预测,聚类分析,关联规则,时序模式和偏差检测等模型,帮助企业提取数据中的商业价值. 分类与预测 对于之前的背景假设,餐饮企业会经常遇到如下问题: 如何基于菜品历史销售情况,以及节…

【大数据分析与挖掘】挖掘建模之关联分析

文章目录 一、关联规则1.1 常用的关联规则算法1.2 Apriori算法介绍1.2.1 关联规则与频繁项集1.2.2 Apriori算法的思想与性质1.2.3 Apriori算法的实现的两个过程1.2.4 Apriori算法的实现案例 一、关联规则 关联规则分析也成为购物篮分析&#xff0c;最早是为了发现超市销售数据…

Hands-on-data-analysis 动手数据分析

动手数据分析笔记 第一章 第一节 数据载入及初步观察 数据载入 df pd.read_csv(file_path)df2 pd.read_table(file_path)read_csv 函数 见CSDN 博客&#xff1a; https://blog.csdn.net/weixin_39175124/article/details/79434022 问&#xff1a;read_csv 和 read_table …

python数据分析-因子分析(转载)

python数据分析-因子分析&#xff08;转载&#xff09; &#xff08;获取更多知识&#xff0c;前往前往我的wx ————公z号 &#xff08;程式解说&#xff09; 原文来自python数据分析-因子分析

ThreeJs 数据可视化学习扫盲

一&#xff1a;前言 数据可视化是一个跨领域的行业&#xff0c;其中包含了图形学、数学、视觉传达等专业领域。 下图罗列出了一个简单的学习方向。 二&#xff1a;可视化方案以及学习路线 目前采用的是比较成熟&#xff0c;社区活跃度更高的Three.js&#xff0c;它是一个开源…

数据处理以及Hive数据分析

数据处理以及Hive数据分析 一、pandas进行数据预处理【1】待处理的一部分数据【2】原始数据文件的格式说明【3】数据预处理要求【4】 处理完成的数据字段说明【5】 实验方法使用pandas进行数据预处理 【6】解析题意【7】代码展示&#xff08;1&#xff09;读取文件&#xff08;…

Python交互式数据分析报告框架~Dash介绍

原文作者&#xff1a;Plotly,Chris Pamer 原文链接&#xff1a; https://link.jianshu.com/?thttps%3A%2F%2Fmedium.com%2F%40plotlygraphs%2Fintroducing-dash-5ecf7191b503 译者序&#xff1a;原文于2017年6月21日发布&#xff0c;时过半载&#xff0c;将这篇既不是教程…

CESI: Canonicalizing Open Knowledge Bases using Embeddings and Side Information

开放性知识库的规范化&#xff08;个人理解&#xff1a;这里的规范化实际上就是将相同语义的实体或关系聚集在一起&#xff0c;从而表示一个实体或关系&#xff09;&#xff0c;主要是OPENie提取的过程中没有进行区分&#xff0c;最近的研究发现&#xff0c;开放KBS的规范化实际…

计算机一级仿宋gb2312,仿宋gb2312字体

一般情况下&#xff0c;这款软件在试用的过程可能还有点小问题&#xff0c;但是正所谓瑕不掩瑜&#xff0c;相信用不了多久&#xff0c;只要程序猿给力点&#xff0c;这种小小的反馈不爽就可以解决。 仿宋gb2312字体字体简介 仿宋_GB2312字体是印刷字体的一种 &#xff0c;仿照…

Supervisor部署(离线部署需要提前下载部署包)

1.软件准备 下载tar包&#xff1a;wget https://pypi.python.org/packages/source/s/supervisor/supervisor-3.1.3.tar.gz 解压&#xff1a;tar -xvf supervisor-3.1.3.tar.gz 进入解压包&#xff1a;cd supervisor-3.1.3 开始安装&#xff1a;python setup.py install 下载me…

Docker 学习之 Docker 容器数据卷

容器数据卷 什么是容器数据卷 docker 理念回顾 将应用和环境打包成一个镜像&#xff01; 问题&#xff1a;数据&#xff1f;如果数据都在容器中&#xff0c;那么我们删除容器&#xff0c;数据就会丢失&#xff01;需求&#xff1a;数据可以持久化&#xff01; 容器之前可以…

Supervisor 安装与配置

文章目录 Supervisor 安装与配置一、介绍二、名词释义三、Supervisor 安装三、Supervisor 配置四、启动控制终端五、注册为系统服务六、管理界面1、管理界面的弊端 Supervisor 安装与配置 一、介绍 ​ Supervisor 是用Python开发的一个 client/server 服务&#xff0c;是Linu…

使用Cesi+Supervisor实现进程管理

使用CesiSupervisor实现进程管理 相信很多的运维小伙伴都是饱受进程丢失的痛苦&#xff0c;最怕半夜被手机吵醒&#xff0c;那一定是经理想你 不管进程是前台运行还是后台静默运行&#xff0c;我们都需要能监控其进程状态。 原因有三&#xff1a; 一&#xff0c;在意外结束时…

echarts学习笔记1

可视化面板介绍 ​ 应对现在数据可视化的趋势&#xff0c;越来越多企业需要在很多场景(营销数据&#xff0c;生产数据&#xff0c;用户数据)下使用&#xff0c;可视化图表来展示体现数据&#xff0c;让数据更加直观&#xff0c;数据特点更加突出。 [外链图片转存失败,源站可能…

supervisor集群管理

1.介绍 Supervisor是一个进程管理工具&#xff0c;就是有一个进程需要每时每刻不断的运行&#xff0c;但是这个进程又有可能由于各种原因有可能停止运行。supervisor官网&#xff1a;http://www.supervisord.org/ 当进程停止运行的时候我们希望能自动重新启动&#xff0c;Super…

UOS桌面操作系统专业版字体

fc-list |sort| awk {print $1 } |uniq| wc -l cesi授权的字体 /usr/share/fonts/fonts-cesi/CESI_FS_GB13000.TTF: CESI仿宋\-GB13000,CESI_FS_GB13000:styleRegular /usr/share/fonts/fonts-cesi/CESI_FS_GB18030.TTF: CESI仿宋\-GB18030,CESI_FS_GB18030:styleRegular /…

罗马仕荣获中国质量认证中心、CESI颁发的全国首批“双新认证”证书

2022年11月25日&#xff0c;2022&#xff08;冬季&#xff09;亚洲户外电源大会于深圳市南山区科兴科学园ECO国际会议中心举办。本次大会由中国电子技术标准化研究院、北京京东世纪贸易有限公司、充电头网、全国电子产品安全标准化技术委员会、工信部锂离子电池及类似产品标准化…

supervisor 的 web 管理工具 cesi

一、supervisor 配置 说明&#xff1a;如果只是使用 supervisor 自带的 web&#xff0c;仅如下配置就可以vim /etc/supervisor/supervisord.conf[inet_http_server] ; inet (TCP) server disabled by default port192.168.5.149:9001 ; ip_address:port specif…

管理ELK进程工具: Supervisor Cesi

一、Supervisor简介 supervisor是一个Linux/Unix系统上的进程监控工具&#xff0c;supervisor是一个Python开发的通用的进程管理程序&#xff0c;可以管理和监控Linux上面的进程&#xff0c;能将一个普通的命令行进程变为后台daemon&#xff0c;并监控进程状态&#xff0c;异常…

CeSi 进程集中管理部署

一&#xff1a;安装环境 CentOs 7环境 sudo yum install -y git epel-releasesudo yum install -y python34 python34-pip 二&#xff1a; 安装CeSi https://github.com/Gamegos/cesi 有详细的安装步骤&#xff0c;需要安装一些工具 ## 安装yarn curl --silent --location http…