精华内容
下载资源
问答
  • 在python做对应分析
    千次阅读
    2020-12-15 12:04:00

    日常分析中,

    经常会做的是研究变量间的关系,

    对于分类变量,

    常用的方法是卡

    方检验、

    Logistic

    模型等,但是对于分类变量很多,或者分类变量的类别很多

    时,用上述方法除了就会非常复杂,并且结果解释起来也不够直观,此时,可以

    使用对应分析加以分析。

    对应分析也称为关联分析,

    是一种多元统计分析技术,

    目的在于揭示变量之间或

    变量各类别之间相互关系的多元统计分析方法

    ,

    主要特点是可以将众多变量同时

    呈现在一张图表上,因此也是一种数据图示化技术。

    根据分析资料的类型不同,对应分析根据数据资料的不同,分为

    1.

    定性资料:基于频数的对应分析

    2.

    连续性资料:基于均值的对应分析

    在定性资料中,

    对两个分类变量进行的对应分析称为简单对应分析,

    对两个以上

    的分类变量进行的对应分析称为多重对应分析。

    要注意,

    对应分析并没有涉及统计检验,

    只是通过数据变换与计算,

    得出每个变

    量在图中的坐标,

    并加以图表展现,

    因此对应分析是一种描述性统计方法。

    由于

    对应分析特别适合分类变量、

    定性数据的分析,

    加之其在图形展示上的优势,

    此在市场分析领域应用很广。

    一、对应分析的基本思想

    由于对应分析最大优势是直观的图形展示,

    因此确定对应分析图中的坐标值,

    该分析方法的主要工作。

    对应分析的基本思想是在一个两变量列联表的基础上提

    取信息,

    将变量内部各水平之间的联系以及变量与变量之间的联系通过坐标值反

    映在一张二维或三维的散点图上,

    并使关系紧密的类别点聚集在一起,

    而关系疏

    远的类别点距离较远。

    那么如何确定坐标值呢?做法如下:

    首先计算两变量列联表的概率矩阵

    P

    ,并据此确定数据点坐标,在变量的类别较

    多时,

    数据点所在空间维数必然较高。

    由于高维空间比较抽象,

    且高维空间中的

    数据点很难直观地表示出来,

    因此最直接的解决方法便是降维。

    对应分析采用类

    似因子分析的方式分别对行变量类别和列变量类别实施降维,

    并以因子载荷为坐

    标,

    将行列变量的多个分类点直观地表示在对应分布图中,

    实现了定性变量各类

    别间差异的量化。

    通过观察对应分布图中各数据点的远近就能判断各类别之间联

    系的强弱。

    二、对应分析的前提条件

    1.

    对应分析的基础是列联表,

    因此单元格数值不能出现

    0

    或负数,

    如果出现则应

    对此变量进行处理

    (

    去除或合并到其他变量

    )

    更多相关内容
  • Python进行对应分析

    千次阅读 热门讨论 2021-02-10 21:28:59
    1 对应分析 ...对应分析的基本思想是将一个联列表中的行和列中的各元素的比例结构以点的形式较低维的空间中表示出来。 参考资料 百度百科: 对应分析 关于对应分析法对中国媒体网站评价的研究 ......

    从网上找对应分析的资料的时候,发现很多都是理论性的文章,有案例的文章很少。这篇博文主要是利用参考资料中2中的数据,复现一下论文中的整个实验过程。参考资料2中关于对应分析的介绍有错误,所以对应分析的计算过程来源于资料3

    1 对应分析

    对应分析(Correspondence Analysis)也称关联分析、R-Q型因子分析,是近年新发展起来的一种多元相依变量统计分析技术,通过分析由定性变量构成的交互汇总表来揭示变量间的联系。该技术可以揭示同一变量中各个类别之间的差异,以及不同变量各个类别之间的对应关系。对应分析的基本思想是将一个联列表中的行和列中的各元素的比例结构以点的形式在较低维的空间中表示出来。

    2 对应分析过程

    2.1 原始矩阵标准化

    假设原始矩阵 X X X
    X = [ x 11 x 12 … x 1 p x 21 x 22 … x 2 p ⋮ ⋮ ⋮ x n 1 x n 2 … x n p ] X=\begin{bmatrix} x_{11}&x_{12}&\dots&x_{1p} \\ x_{21}&x_{22}&\dots&x_{2p} \\ \vdots&\vdots&&\vdots \\ x_{n1}&x_{n2}&\dots&x_{np} \end{bmatrix} X=x11x21xn1x12x22xn2x1px2pxnp其中,行表示样品(比如网站),列表示属性(比如浏览量)。
    (1) 将数据矩阵 X X X转化为概率矩阵 P P P,其中矩阵 P P P中每个元素的定义如下:
    P = ( p i j ) n × p , p i j = x i j / T , T = ∑ i = 1 n ∑ j = 1 p x i j P=(p_{ij})_{n \times p}, p_{ij}=x_{ij}/T,T=\sum_{i=1}^{n}\sum_{j=1}^{p}x_{ij} P=(pij)n×p,pij=xij/T,T=i=1nj=1pxij变换后,概率矩阵 P P P的元素之和为1。
    (2)求边缘概率 p . j p_{.j} p.j p i . p_{i.} pi.的边缘概率,其计算公式如下:
    p i . = ∑ j = 1 p p i j , p . j = ∑ i = 1 n p i j p_{i.}=\sum_{j=1}^{p}p_{ij},p_{.j}=\sum_{i=1}^{n}p_{ij} pi.=j=1ppij,p.j=i=1npij(3)对概率矩阵 P P P做中心化及标准化变换得到矩阵 Z Z Z,其中矩阵 Z Z Z中的元素定义如下:
    Z = ( z i j ) n × p = p i j − p i . p . j p i . p . j Z=(z_{ij})_{n \times p}=\frac{ p_{ij}-p_{i.}p_{.j} }{ \sqrt{p_{i.}p_{.j}} } Z=(zij)n×p=pi.p.j pijpi.p.j

    2.2 计算 R R R型因子分析载荷矩阵

    (1) 计算协方差矩阵 S R = Z T Z S_{R}=Z^{T}Z SR=ZTZ的特征值和标准化的特征向量。设特征值 λ 1 ≥ λ 2 ≥ ⋯ ≥ λ m > 0 \lambda_{1}\ge\lambda_{2}\ge\dots\ge\lambda_{m}>0 λ1λ2λm>0,相应标准化特征向量为 v 1 , v 2 , … , v m v_{1},v_{2},\dots,v_{m} v1,v2,,vm。在实际应用中常按累计贡献率
    λ 1 + λ 2 + ⋯ + λ l λ 1 + ⋯ + λ l + ⋯ + λ m ≥ 0.85 \frac{ \lambda_{1}+\lambda_{2}+\dots+\lambda_{l} }{ \lambda_{1}+\dots+\lambda_{l}+\dots+\lambda_{m}}\ge0.85 λ1++λl++λmλ1+λ2++λl0.85确定所取公共因子 l ≤ m l\le m lm。注意 d i = λ i , i = ( 1 , 2 , … , m ) d_{i}=\sqrt{\lambda_{i}},i=(1,2,\dots,m) di=λi i=(1,2,,m)称为奇异值。
    (2) R R R型因子的“因子载荷矩阵”为
    R = [ λ 1 v 11 p . 1 λ 2 v 12 p . 1 ⋯ λ l v 1 l p . 1 λ 1 v 21 p . 2 λ 2 v 22 p . 2 ⋯ λ 2 v 2 l p . 2 ⋮ ⋮ ⋮ λ 1 v p 1 p . p λ 2 v p 2 p . p ⋯ λ l v p l p . p ] R=\begin{bmatrix} \frac{\sqrt{\lambda_{1}}v_{11}}{\sqrt{p_{.1}}}&\frac{\sqrt{\lambda_{2}}v_{12}}{\sqrt{p_{.1}}}&\cdots&\frac{\sqrt{\lambda_{l}}v_{1l}}{\sqrt{p_{.1}}} \\ \frac{\sqrt{\lambda_{1}}v_{21}}{\sqrt{p_{.2}}}&\frac{\sqrt{\lambda_{2}}v_{22}}{\sqrt{p_{.2}}}&\cdots&\frac{\sqrt{\lambda_{2}}v_{2l}}{\sqrt{p_{.2}}} \\ \vdots&\vdots&&\vdots \\ \frac{\sqrt{\lambda_{1}}v_{p1}}{\sqrt{p_{.p}}}&\frac{\sqrt{\lambda_{2}}v_{p2}}{\sqrt{p_{.p}}}&\cdots&\frac{\sqrt{\lambda_{l}}v_{pl}}{\sqrt{p_{.p}}} \\ \end{bmatrix} R=p.1 λ1 v11p.2 λ1 v21p.p λ1 vp1p.1 λ2 v12p.2 λ2 v22p.p λ2 vp2p.1 λl v1lp.2 λ2 v2lp.p λl vpl

    2.3 计算 Q Q Q型因子分析载荷矩阵

    (1) 计算协方差矩阵 S Q = Z Z T S_{Q}=ZZ^{T} SQ=ZZT的特征值和标准化的特征向量。 S R S_{R} SR S Q S_{Q} SQ两个矩阵矩阵大于0的特征值相同的。设 S Q S_{Q} SQ的特征值 λ 1 , λ 2 , … , λ l \lambda_{1},\lambda_{2},\dots,\lambda_{l} λ1,λ2,,λl其对应的标准化特征向量为 u 1 , u 2 , … , u m u_{1},u_{2},\dots,u_{m} u1,u2,,um
    (2) Q Q Q型因子的“因子载荷矩阵”为
    Q = [ λ 1 u 11 p 1. λ 2 u 12 p 1. ⋯ λ l u 1 l p 1. λ 1 u 21 p 2. λ 2 u 22 p 2. ⋯ λ 2 u 2 l p 2. ⋮ ⋮ ⋮ λ 1 u n 1 p n . λ 2 u n 2 p n . ⋯ λ l u n l p n . ] Q=\begin{bmatrix} \frac{\sqrt{\lambda_{1}}u_{11}}{\sqrt{p_{1.}}}&\frac{\sqrt{\lambda_{2}}u_{12}}{\sqrt{p_{1.}}}&\cdots&\frac{\sqrt{\lambda_{l}}u_{1l}}{\sqrt{p_{1.}}} \\ \frac{\sqrt{\lambda_{1}}u_{21}}{\sqrt{p_{2.}}}&\frac{\sqrt{\lambda_{2}}u_{22}}{\sqrt{p_{2.}}}&\cdots&\frac{\sqrt{\lambda_{2}}u_{2l}}{\sqrt{p_{2.}}} \\ \vdots&\vdots&&\vdots \\ \frac{\sqrt{\lambda_{1}}u_{n1}}{\sqrt{p_{n.}}}&\frac{\sqrt{\lambda_{2}}u_{n2}}{\sqrt{p_{n.}}}&\cdots&\frac{\sqrt{\lambda_{l}}u_{nl}}{\sqrt{p_{n.}}} \\ \end{bmatrix} Q=p1. λ1 u11p2. λ1 u21pn. λ1 un1p1. λ2 u12p2. λ2 u22pn. λ2 un2p1. λl u1lp2. λ2 u2lpn. λl unl

    2.4 计算 χ 2 \chi^{2} χ2统计量和总惯量

    (1) 计算总惯量 Q Q Q,总惯量表示 n n n个样品到中心 c c c的加权平方距离的总和,其最终的计算公式如下:
    Q = ∑ i = 1 n ∑ j = 1 p z i j 2 = ∑ i = 1 l λ i Q=\sum_{i=1}^{n}\sum_{j=1}^{p}z_{ij}^{2}=\sum_{i=1}^{l}\lambda_{i} Q=i=1nj=1pzij2=i=1lλi(2) 计算 χ 2 \chi^{2} χ2统计量,其计算公式如下:
    χ 2 = T ∑ i = 1 n ∑ j = 1 p z i j 2 = T Q \chi^{2}=T\sum_{i=1}^{n}\sum_{j=1}^{p}z_{ij}^{2}=TQ χ2=Ti=1nj=1pzij2=TQ

    3 实验过程

    本文使用的是参考文献2中的数据。

    import pandas as pd
    import numpy as np
    from math import sqrt
    from matplotlib import pyplot as plt
    import seaborn as sns
    from scipy import stats
    
    path='Documents/data.xlsx'
    data=pd.read_excel(path,index_col=0,sheet_name='网站评价分析数据')
    
    #1 卡方检验
    # 判断这种分析方法是否适用
    data_j=data.sum()/data.sum().sum()
    data_i=data.sum(axis=1)
    data_exp=np.dot(data_i.values.reshape(-1,1),data_j.values.reshape(1,-1)) 
    data_exp=pd.DataFrame(data_exp,index=data_i.index,columns=data_j.index) #期望值
    data_obj=data.values.flatten()
    data_exp=data_exp.values.flatten()
    chi_val,p_val=stats.chisquare(f_obs=data_obj,f_exp=data_exp)
    #这里只展示了person卡方分析结果。
    #在参考资料4中找到了一个似然卡方公式,但是计算出来的结果和论文中的结果相差太大,所以这里就忽略了
    
    #2 将data转化为概率矩阵,然后进行标准化
    data_p=data/data.sum().sum() #概率矩阵
    data_j=data_p.sum() #列边缘概率
    data_i=data_p.sum(axis=1) #行边缘概率
    
    #概率矩阵标准化
    tmp=np.dot(data_i.values.reshape(-1,1),data_j.values.reshape(1,-1))
    data_z=(data_p-tmp)/np.sqrt(tmp)
    data_z=pd.DataFrame(data_z,index=data.index,columns=data.columns)
    
    #3 求解奇异值和惯量,确定公共因子数量
    data_z_np=data_z.to_numpy()
    S_R=np.dot(data_z_np.T,data_z_np)
    eig_val_R,eig_fea_R=np.linalg.eig(S_R) #返回特征值和特征向量
    
    #注意eig_val_R没有排序,并且只去eig_val_R中大于0的特征值
    #返回维度惯量 惯量其实就是特征值
    dim_matrix=pd.DataFrame(sorted([i for i in eig_val_R if i>0],reverse=True),columns=['惯量'])
    dim_matrix['奇异值']=np.sqrt(dim_matrix['惯量'])
    dim_matrix['对应部分']=dim_matrix['惯量']/dim_matrix['惯量'].sum()
    dim_matrix['累计']=dim_matrix['对应部分'].cumsum()
    
    #R型因子载荷矩阵
    #由dim_matrix['累计']可以得出,我们选择3个公共因子
    com_fea_index=[x[0] for x in sorted(enumerate(eig_val_R),reverse=True,key=lambda x:x[1])][:3]
    cols=['c'+str(i+1) for i in range(len(com_fea_index))]
    eig_fea_R=np.multiply(eig_fea_R[:,com_fea_index],np.sqrt(eig_val_R[com_fea_index]))
    R_matrix=pd.DataFrame(eig_fea_R,index=data_j.index,columns=cols)
    R_matrix['tmp']=np.sqrt(data_j)
    for col in cols:
        R_matrix[col]=R_matrix[col]/R_matrix['tmp']
    R_matrix.drop('tmp',axis=1,inplace=True)
    
    #Q型因子载荷矩阵
    S_Q=np.dot(data_z_np,data_z_np.T)
    eig_val_Q,eig_fea_Q=np.linalg.eig(S_Q)
    com_fea_index=[x[0] for x in sorted(enumerate(eig_val_Q),reverse=True,key=lambda x:x[1])][:3]
    cols=['c'+str(i+1) for i in range(len(com_fea_index))]
    eig_fea_Q=np.multiply(eig_fea_Q[:,com_fea_index],np.sqrt(eig_val_Q[com_fea_index]))
    Q_matrix=pd.DataFrame(eig_fea_Q,index=data_i.index,columns=cols)
    Q_matrix=Q_matrix.astype(float,copy=False) #Q_matrix中的数据类型为复数类型,但是虚部都为0,所以这里转化成float
    Q_matrix['tmp']=np.sqrt(data_i)
    for col in cols:
        Q_matrix[col]=Q_matrix[col]/Q_matrix['tmp']
    Q_matrix.drop('tmp',axis=1,inplace=True)
    
    
    #4 选取公共因子c0和c1画定位图
    plot_data=pd.concat([Q_matrix[['c1','c2']],R_matrix[['c1','c2']]],axis=0)
    plot_data.index=list(data_i.index)+list(data_j.index)
    plot_data['style']=['地区']*data_i.shape[0]+['指标']*data_j.shape[0]
    
    #画图
    plt.rcParams["font.family"] = 'Arial Unicode MS'
    marks={'地区':'o','指标':'s'}
    ax=sns.scatterplot(x='c2',y='c1',hue='style',style='style',markers=marks,data=plot_data)
    ax.set_xlim(left=-1,right=1)
    ax.set_ylim(bottom=-1,top=1)
    ax.set_xticks([-1,-0.5,0,0.5,1])
    ax.set_yticks([-1,-0.5,0,0.5,1])
    ax.axhline(0,color='k',lw=0.5)
    ax.axvline(0,color='k',lw=0.5)
    for idx in plot_data.index:
        ax.text(plot_data.loc[idx,'c2']+0.005,plot_data.loc[idx,'c1']+0.005,idx)
    plt.show()
    

    最后的结果和论文中的结果有些差别,需要对此进行说明:

    • 原始数据中有一些缺失值,我在原始数据中用0进行了填充。
    • 计算出来的R型因子载荷矩阵和Q型因子载荷矩阵和论文中展示出的结果可能符号相反,误差在百分位上。
      对应分析图

    参考资料

    1. 百度百科: 对应分析
    2. 基于对应分析法的省级政府门户网站评价研究
    3. MATLAB对应分析
    4. Pearson and Log-likelihood Chi-square Test of Fit for Latent Class Analysis Estimated with Complex Samples
    展开全文
  • 案例6:SPSS--对应分析

    千次阅读 2021-02-11 22:05:08
    一、对应分析简介1.1 为什么引入对应分析进行数据分析时遇到分类型数据,并且要研究两个分类变量之间的相关关系,基于均值、方差的分析方法不能够使用,所以通常从编制两变量的交叉表入手,使用卡方检验和逻辑...

    一、对应分析简介

    1.1 为什么引入对应分析?

    在进行数据分析时遇到分类型数据,并且要研究两个分类变量之间的相关关系,基于均值、方差的分析方法不能够使用,所以通常从编制两变量的交叉表入手,使用卡方检验和逻辑回归等方法;但是当变量的类别或者变量数量两个以上时,再使用以上方法就很难直观揭示变量之间的关系,由此引入对应分析。

    1.2 什么是对应分析?

    对应分析的实质就是将交叉表里面的频数数据作变换(通过降维的方法)以后,利用图示化(散点图)的方式,从而将抽象的交叉表信息形象化,直观地解释变量的不同类别之间的联系,适合于多分类型变量的研究。

    二、 对应方法简介

    1、简单对应分析(一般只涉及两个分类变量)

    简单对应分析是分析某一研究事件两个分类变量间的关系,其基本思想以点的形式在较低维的空间中表示联列表的行与列中各元素的比例结构,可以在二维空间更加直观的通过空间距离反映两个分类变量间的关系。属于分类变量的典型相关分析。

    2、多重对应分析(多于两个分类变量)

    简单对应分析是分析两个分类变量间的关系,而多重对应分析则是分析一组属性变量之间的相关性。与简单对应分析一样,多重对应分析的基本思想也是以点的形式在较低维的空间中表示联列表的行与列中各元素的比例结构。

    3、数值变量对应分析or均值对应分析(前两种均为分类变量的对应分析,较为常用)

    与简单对应分析不同,由于单元格内的数据不是频数,因此不能使用标准化残差来表示相关强度,而只能使用距离(一般使用欧氏距离)来表示相关强度。

    对应分析时注意事项对应分析不能用于相关关系的假设检验。它虽然可以揭示变量间的联系,但不能说明两个变量之间的联系是否显著,因而在做对应分析前,可以用卡方统计量检验两个变量的相关性。

    对应分析输出的图形通常是二维的,这是一种降维的方法,将原始的高维数据按一定规则投影到二维图形上。而投影可能引起部分信息的丢失。

    对极端值敏感,应尽量避免极端值的存在。如有取值为零的数据存在时,可视情况将相邻的两个状态取值合并。

    原始数据的无量纲化处理。运用对应分析法处理问题时,各变量应具有相同的量纲(或者均无量纲)。

    三、案例分析(后附源文件)

    3.1 简单对应分析

    举个例子

    需求:大脑疾病可能会出现壳核、尾状核、苍白球、丘脑、中脑、脑桥、小脑七个部位的损伤,并且可能会出现构音障害、动作迟缓、震颤、肌张力障碍等症状,寻找这些症状具体与哪个部位损伤关联最大。如下表所示

    根据数据的特征(“部位”“症状”两变量的交叉表分析其相关性)可选用简单对应分析

    操作步骤:

    做简单对应分析(只有两个分类变量)之前,需要对交叉表进行卡方检验,只有卡方检验结果显示两个分类变量之间具有相关性,才有必要作对应分析,如果两个分类变量之间没有相关关系,也就失去作对应分析的必要了。

    【数据】--【个案加权】

    【分析】--【降维】--【对应分析】

    报告分析:

    3.2 多重对应分析

    需求:在3.1所示的基础上加上性别和年龄两个因素考虑,即四个变量:部位,症状,性别,年龄,进行相关分析

    根据数据的特征(多于两个变量的分类型数据)使用多重对应分析方法

    操作步骤:

    【分析】--【降维】--【最有标度】

    报告分析:

    3.3 数值变量对应分析(均值对应分析)

    需求:有某班级同学的期末考试成绩,比较各个同学的考试情况。

    分析思路:从数据形式可知,这是原始数据汇总表,因此无法直接使用对应分析对话框进行分析。解决方法有两个

    第一个方法是将数据转换成频数形式,做加权处理,然后进行分析。

    第二种则是用Syntax变成语言,将数据读入软件,这种方法简单快捷,本案例使用第二种方法。

    根据数据特征(考试成绩为定距变量)采用均值对应分析

    操作步骤:

    下面这一步操作很重要哦

    报告分析:

    点击获取案例源文件(不要忘记点赞哟(#^.^#))

    链接:https://pan.baidu.com/s/1ArKat5c7J7K49-OSRBDulA​pan.baidu.com

    密码:i64i

    待更新...

    展开全文
  • 手把手教你使用Python做数据分析

    千次阅读 多人点赞 2021-05-20 11:00:53
    数据分析的数学基础20世纪早期就已确立,但直到计算机的出现才使得实际操作成为可能,并使得数据分析得以推广。 分析用户的消费行为 制定促销活动的方案 制定促销时间和粒度 计算用户的活跃度 分析产品的回购...

    一、数据分析是什么

    数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,将它们加以汇总和理解并消化,以求最大化地开发数据的功能,发挥数据的作用,使得数据的价值最大化

    二、数据分析是做什么的

    数据分析是为了提取有用信息和形成结论而对数据加以详细研究和概括总结的过程。 数据分析的数学基础在20世纪早期就已确立,但直到计算机的出现才使得实际操作成为可能,并使得数据分析得以推广。

    • 分析用户的消费行为
      • 制定促销活动的方案
      • 制定促销时间和粒度
      • 计算用户的活跃度
      • 分析产品的回购力度
    • 分析广告点击率
      • 决定投放时间
      • 制定广告定向人群方案
      • 决定相关平台的投放

    数据分析使用适当的方法对收集来的大量数据进行分析,帮助人们做出判断,以便采取适当的行动

    • 保险公司从大量赔付申请数据中判断哪些为骗保的可能
    • 支付宝通过从大量的用户消费记录和行为自动调整花呗的额度
    • 短视频平台通过用户的点击和观看行为数据针对性的给用户推送喜欢的视频

    三、为什么学习数据分析

    • 岗位的需求
    • 是 Python 数据科学的基础
    • 是机器学习的基础

    四、数据分析实现流程

    • 提出问题
    • 准备数据
    • 分析数据
    • 获得结论
    • 成果可视化

    五、数据分析环境的搭建

    1. Anaconda

    • 官网:https://www.anaconda.com 下载安装对应安装包即可

    • 注意: 安装目录不可以有中文和特殊符号

    Anaconda集成好了数据分析和机器学习中所需要的全部环境

    2. Jupyter

    • Jupyter就是Anaconda提供的一个基于Web的可视化开发工具

    3. Jupyter的基本使用

    • 启动: 在终端中输入:jupyter notebook,按下回车即可

    • 新建文件: New -->> python3

    • Cell(代码块)有两种模式

      • code: 编写代码
      • markdown: 编写笔记
    • 快捷键

      • 添加cell:ab

      • 删除:x

      • 修改cell的模式

        • 修改成markdown模式:m
        • 修改成code模式:y
      • 执行cell内代码:shift+enter

      • 自动补全:tab

      • 打开帮助文档:shift+tab

    六、如何用Python进行数据分析

    在Python中我们数据分析离不开以下三剑客

    • Numpy
    • Pandas
    • Matplotlib

    Numpy模块

    • Numpy(Numerical Python) 是 Python 语言中做科学计算的基础库。重在于数值计算,也是大部分 Python 科学计算库的基础,多用于在大型、多维数组上执行的数值运算。

    1. Numpy的创建

    • 使用 array()创建一个一维数组

    在这里插入图片描述

    • 使用 array() 创建一个多维数组

    在这里插入图片描述

    • 使用 zero() 创建一个多维数组

    在这里插入图片描述

    • 使用 ones() 创建一个多维数组

    在这里插入图片描述

    • 使用 linspace() 创建一维的等差数列数组

    在这里插入图片描述

    • 使用 arange() 创建一维的等差数列数组

    在这里插入图片描述

    • 使用 random.randint() 创建随机的多维数组

    在这里插入图片描述

    2. Numpy的常用属性

    • shape
    • ndim
    • size
    • dtype

    在这里插入图片描述

    3. Numpy的索引和切片

    • 索引操作和列表同理

    在这里插入图片描述

    • 切片操作

    在这里插入图片描述

    4. Numpy的矩阵操作

    • 矩阵变形

    在这里插入图片描述

    • 级联操作

      • 将多个 Numpy 数组进行横向或者纵向的拼接
      • axis轴向参数
        • 0:列
        • 1:行

    在这里插入图片描述

    • 常用的聚合操作

      • sum, max, min, mean

    在这里插入图片描述

    • 常用的统计函数

      • 标准差:一组数据平均值分散程度的一种度量
      • 方差:统计中的方差是每个样本值与全体样本值的平均数之差的平方值的平均数,即 mean((x-x.mean())**2。换句话说,标准差就是方差的平方根。

    在这里插入图片描述

    Pandas模块

    1. 为什么学习Pandas

    Numpy能够帮助我们处理的是数值型的数据,而Pandas可以帮我们处理除数值型以外的其他类型数据,

    2. Pandas的数据结构

    • Series
      • 是一种类似于一维数组的对象,由下面两个部分组成:
        • values:一组数据(ndarray类型)
        • index:相关的数据索引标签
    • DataFrame
      • 是一个表格型的数据结构。其既有行索引,也有列索引。
        • 行索引:index
        • 列索引:columns
        • 值:values

    3. Series操作

    3.1 Series的创建

    在这里插入图片描述

    index用来指定显式索引,可以增强Series的可读性。

    在这里插入图片描述

    也可以使用字典作为数据源。

    在这里插入图片描述

    3.2 Series的索引和切片

    在这里插入图片描述

    3.3 Series的常用属性
    • shape
    • size
    • index
    • values
    • dtypes
      在这里插入图片描述
    3.4 Series的常用方法
    • head(), tail()
    • unique()
    • isnull(), notnull()

    在这里插入图片描述

    3.5 Series的算数运算

    索引一致的元素进行算数运算否则补空

    在这里插入图片描述

    4. DataFrame操作

    4.1 DataFrame的创建

    在这里插入图片描述

    可使用 ndarray 创建。

    在这里插入图片描述

    也可以使用字典作为数据源。

    在这里插入图片描述

    index 用来指定显式索引,可以增强 DataFrame 的可读性。

    在这里插入图片描述

    4.2 DataFrame索引和切片
    • iloc: 通过隐式索引取行

    • loc: 通过显式索引取行

    • 对行进行切片

    • 对列进行切片

    在这里插入图片描述

    4.3 DataFrame常用属性
    • shape
    • values
    • columns
    • index

    在这里插入图片描述

    4.4 DataFrame的常用方法

    同Series

    4.5 DataFrame的算数运算

    同Series

    4.6 DataFrame的级联和合并

    级联操作

    • pd.concat
    • pd.append

    接下来我们伪造两组DataFrame数据。

    在这里插入图片描述

    使用pd.concat()

    在这里插入图片描述

    • 匹配级联
      • 横向级联
    • 不匹配级联
      • 不匹配指的是级联的维度和索引不一致。例如纵向级联时列索引不一致,横向级联时行索引不一致。
      • 有两种连接方式
        • 外连接:补NaN(默认模式)
        • 内连接:只连接匹配的项

    PS:如果想要保留数据的完整性必须使用参数 join='outer'(外连接)

    使用 pd.append()

    • 只能纵向级联,并且只能外级联,不可以内级联(一般不用)。

    在这里插入图片描述

    合并操作

    pd.merge()

    • mergeconcat 的区别在于,merge 需要依据某一共同列来进行合并。
    • 使用 pd.merge() 合并时,会自动根据两者相同 column 名称的那一列作为 key 来进行合并。
    • 注意:每一列元素的顺序不要求一致

    一对一合并

    首先我们来伪造两组 DataFrame。

    在这里插入图片描述

    使用 pd.merge()

    在这里插入图片描述

    一对多合并

    首先我们来伪造两组 DataFrame。

    在这里插入图片描述

    使用 pd.merge()

    在这里插入图片描述

    多对多合并

    首先我们来伪造两组 DataFrame。

    在这里插入图片描述

    使用 pd.merge()

    在这里插入图片描述

    merge()方法还可以使用left_on参数和right_on参数哦,how这个参数也可以指定不同的连接方式。

    5. 基于Pandas的数据清洗

    5.1 为什么需要做数据清洗
    • 原始数据中可能存在缺失值(空值)
      • 这些值是没有意义的,并且会干扰我们分析结果的产生
    • 重复值
      • 重复值是没有必要多次分析和处理的
    • 异常值
      • 由于数据采集手段不同等,数据中可能会产生异常值,异常值同样会干扰我们分析结果的产生
    5.2 处理缺失值
    • 有两种缺失值:
      • None
      • np.nan(NaN)
    • 两种缺失值的区别
      • None:None对象类型
      • np.nan:浮点型

    为什么在数据分析中需要用到浮点类型的空而不是对象类型的?

    • None+1会报 TypeError,而 np.nan+1 结果是 nan。它不会干扰或者中断运算。
    • NaN可以参与运算
    • None不可以参与运算

    在Pandas中如果数据中遇到了None形式的空值则Pandas会将其强转成NaN的类型。

    缺失值处理操作

    我们来伪造一组带有缺失值的数据。

    在这里插入图片描述

    • 方法1:对缺失值进行过滤(删除空所在的行数据)

      • isnull() 搭配 any()

    在这里插入图片描述

    • notnull() 搭配 all()

    在这里插入图片描述

    • 使用 dropna()可以直接将缺失的行或者列数据进行删除

    在这里插入图片描述

    • 方法2:fillna() 对缺失值进行填充

    在这里插入图片描述

    5.3 处理重复数据

    我们来伪造一组带有重复值的数据。

    在这里插入图片描述

    • 使用drop_duplicates()

    在这里插入图片描述

    5.4 处理异常值

    异常值是什么?

    • 异常值指的是可能会对具有实质性意义的估计产生偏见或影响,并且会增加误差方差的值。

    接下来我们伪造一组带有异常值的数据。

    在这里插入图片描述

    然后我们来实现异常值的清洗。

    在这里插入图片描述

    6. Pandas高级操作

    6.1 替换操作
    • 替换操作可以同步作用于Series和DataFrame中
    • 单值替换
      • 普通替换:替换所有符合要求的元素
        • to_replace=15, value='value'
      • 按列指定单值替换
        • to_replace={列标签: 替换值}, value='value'
    • 多值替换
      • 列表替换
        • to_replace=[], value=[]
      • 字典替换(推荐)
        • to_replace={to_replace: value, to_replace: value}

    首先我们来伪造一组DataFrame。

    在这里插入图片描述

    使用 replace()

    在这里插入图片描述

    6.2 映射操作
    • 概念:创建一个映射关系列表,把values元素和一个特定的标签或者字符串绑定(给一个元素值提供不同的表现形式)
    • map是Series的方法,只能被Series调用

    首先我们来伪造一组DataFrame。

    在这里插入图片描述

    使用 map()

    在这里插入图片描述

    例:超过3000部分的薪资缴纳50%的税,计算每个人的税后薪资

    在这里插入图片描述

    6.3 分组聚合操作
    • 数据分类处理的核心:
      • groupby() 函数
      • groups 属性查看分组情况

    分组

    接下里我们伪造一组DataFrame。

    在这里插入图片描述

    使用 groupby()groups

    在这里插入图片描述

    聚合

    在这里插入图片描述

    高级数据聚合

    • 使用 groupby() 分组后,也可以使用 transform()apply() 提供自定义函数实现更多的运算
    • df.groupby('item')['price'].sum() <==> df.groupby('item')['price'].apply(sum)
    • transform()apply() 都会进行运算,在 transform() 或者 apply() 中传入函数即可
    • transform()apply() 也可以传入一个 lambda 表达式

    在这里插入图片描述

    6.4 数据加载
    • 读取csv文件数据

    在这里插入图片描述

    • 读取数据库中的数据
      在这里插入图片描述

    matplotlib模块

    • matplotlib模块可以帮助我们轻松的将数据制成图表可视化展示。

    首先我们倒入全局的模块

    在这里插入图片描述

    1. 绘制线形图

    1.1 绘制单条和多条线形图

    在这里插入图片描述

    1.2 设置坐标系的比例

    在这里插入图片描述

    1.3 设置图例

    在这里插入图片描述

    1.4 设置轴的标识

    在这里插入图片描述

    1.5 图例保存

    在这里插入图片描述

    1.6 曲线的样式和风格

    在这里插入图片描述

    还有其他多种参数的样式哦,详情请见库的源代码。

    2. 绘制柱状图

    在这里插入图片描述

    其余用法和线形图类似。

    3. 绘制直方图

    • 是一个特殊的柱状图,又叫做密度图。
    • plt.hist()的参数
      • bins:可以是一个bin数量的整数值,也可以是表示bin的一个序列。默认值为10
      • normed:如果值为True,直方图的值将进行归一化处理,形成概率密度,默认值为False
      • color:指定直方图的颜色。可以是单一颜色值或颜色的序列。如果指定了多个数据集合,例如DataFrame对象,颜色序列将会设置为相同顺序。如果未指定,将会使用一个默认的线条颜色
      • orientation:通过设置 orientationhorizontal 创建水平直方图。默认值为 vertical

    在这里插入图片描述

    其余用法和线形图类似。

    4. 绘制饼图

    • pie(),饼图也只有一个参数 x
    • 饼图适合展示各部分占总体的比例,条形图适合比较各部分的大小

    在这里插入图片描述

    其余用法和线形图类似。

    5. 散点图

    • scatter(), 因变量随自变量而变化的大致趋势

    在这里插入图片描述

    其余用法和线形图类似。



    PS:欢迎提出宝贵意见,如想询问技术问题可以留言区留言或加开发人员的微信(微信号:x118422)进行咨询~

    展开全文
  • Python招聘数据分析

    2020-09-28 20:03:38
    基于Python的招聘大数据爬取与分析,以智联招聘网站数据为分析对象,使用Pycharm实现了信息的爬取,通过Matplotlib绘制图形,对诸如薪资水平、学历要求及LoRaWAN-Server福利情况等数据进行可视化分析。测试结果表明,提出...
  • 前言对应分析,主要适用于有多个类别的分类变量,可以揭示同一个变量各个类别之间的差异,以及不同变量各个类别之间的对应关系(简介摘录自:https://www.jianshu.com/p/77a0d15f0336)以下通过实际例子 使用sas及r...
  • 主要介绍了Python实现两个list对应元素相减操作,结合具体实例形式分析了list对应元素操作的简单实现技巧,需要的朋友可以参考下
  • python相关性分析

    千次阅读 2022-03-19 21:26:55
    相关性分析是指对两个或多个具备相关性的变量元素进行分析,从而衡量两个变量因素的相关密切程度。相关性的元素之间需要存在一定的联系或者概率才可以进行相关性分析。 相关性的三种方法 皮尔逊相关系数(pearson):...
  • Anaconda与Python版本对应关系

    千次阅读 2021-03-04 10:49:37
    本文的初衷是因为安装Anaconda的时候你并不知道会包含哪个版本的python,因此制作了下表如果使用的主要的Python版本能在下表中找到,那安装对应的Anaconda当然更好但是如果只是临时想用某个版本的Ppython,或在下表...
  • 不过你知道如何利用Python做数据分析吗?需要学习哪些知识?下面就给大家讲解一下。 与数据分析相关的Python库很多,比如Numpy、pandas、matplotlib、scipy等,数据分析的操作包括数据的导入和导出、数据筛选、数据...
  • 项目场景:python3.8.6 对应win11系统下装scikit -learn 问题描述 python3.8.6试了pip install scikit-learn老是显示安装不成功,需要先安装对应好的版本numpy和scipy基础库 原因分析: scipy基础库-需要注意...
  • 对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信:tstoutiao,邀请你进入头条数据爱好者交流群,数据爱好者们都这儿。 本书讲的是利用python进行数据控制、处理、整理、分析等...
  • python 零基础学习篇
  • 数据分析师已经存在多年了,但是,对该职业的需求从2018年开始,对数据分析师的需求猛增,目前数据分析师...有很多还没有入行的同学通常一个认知误区:以为只要学了Python就可以数据分析师。这是错误的!我们先来理解
  • Python进行股票分析

    千次阅读 2021-04-06 22:28:50
    Python进行股票分析 1.准备工作 可以结合视频进行学习,视频链接:视频 2.工具以及所需库 jupyter notebook tushare、pandas、numpy、matplotlib 3.库的安装 打开anaconda prompt命令框输入以下命令: conda ...
  • 最终结果是写入了txt文件,所以需要循环遇到错误的时候写入对应的可识别的值(看到这个值就知道这个结果是错误的,可以写对应数量的NA或者0值),方便后续分析。 # -*- coding: utf-8 -*- """ Created on Fri Aug...
  • Python数据分析初学之分析表格

    千次阅读 2022-03-29 13:13:48
    文章目录Python数据分析初学之分析表格任务要求代码实现 Python数据分析初学之分析表格 任务要求 1)使用 pandas 读取文件 data.csv 中的数据 ,创建 DataFrame 对象,并删除其中所有缺失值; 2)使用 matplotlib 生成...
  • 主成分分析(Principal components analysis)是最常用的降维方法 算法步骤: (1)对所有样本进行中心化操作 (2)计算样本的协方差矩阵 (3)对协方差矩阵特征值分解 (4)取最大的d个特征值对应的特征向量,构造...
  • 数据分析师必备的python

    千次阅读 2021-12-08 13:22:26
    统计就是在做宏观分析的工作。拿到一组数据,分析数据的特征,具体包括样本大小,极值,均值,方差,偏度和峰度,数据的相关系数等。 分布是统计学中最基本的知识。如何指定参数生成分布,一组数据是否符合某种分布...
  • SPSS 那么简单还免费,为什么还要用 Python 因子分析(factor analysis)呢?工作狗表示,建模的目的是要卖钱的,也就是要嵌入到公司开发的产品上去,用 Python 写因子分析(factor analysis),总比找SPSS的接口...
  • python轻松操作excel表格 项目场景: 提示:通常我们对excel表格进行删除多个项的时候...提示:首先软件中导入excel表格 APP 中接收数据代码: from pandas import Series,DataFrame import pandas as pd import nu
  • Python数据分析之时间序列
  • 不导入其他厍的情况下,仅仅使用 pandas就可实现聚类分析离散化 C、 pandas 可以实现所有的数据预处理操作 D、 cut 函数默认情况下的是等宽法离散化 正确答案: D 我的答案:D ...
  • Python数据分析-房价预测及模型分析

    千次阅读 2021-09-17 01:21:25
    Python数据分析-房价的影响因素图解 上一篇OF讲述了房价的影响因素,主要是房屋面积、卫生间数、卧室数。今天,我们通过建立模型来预测房价。机器学习中关于回归算法-数据发展的预测,包含了几个模型: 1、线性...
  • 完成作业的时候将遇到的计量方法和对应如何用python实现的步骤都写这里,供自己平时参考用,也教教我那只会用stata的对象,让他早日放弃点点点,和我一起VSC面向对象编程0.0 本文供自己和小对象学习用,本人也...
  • Python之主成分分析

    千次阅读 2020-12-22 17:03:09
     了解主成分分析、因子分析、判别分析、聚类分析的原理背景  掌握SAS语言进行多变量分析过程(princomp过程和factor过程)  掌握SAS语言进行判别分析 (discrim过程)  掌握SAS语言进行聚类分析(cluster过程...
  • Python数据分析可以什么呢?

    千次阅读 2020-06-29 19:18:49
    那么利用Python数据分析可以什么呢?简单来说,可以做到的内容有很多,比如检查数据表、数据表清洗、数据预处理、数据提取和数据筛选汇总等等。下面就来为大家详细讲解一下这些用处。  1、检查数据表  ...
  • 基于Python的频谱分析(一)

    千次阅读 2020-12-21 19:01:14
    1、傅里叶变换傅里叶变换是信号领域沟通时域和频域的桥梁,频域里可以更方便的进行一些分析。傅里叶主要针对的是平稳信号的频率特性分析,简单说就是具有一定周期性的信号,因为傅里叶变换采取的是有限取样的方式...
  • 使用python进行傅里叶FFT 频谱分析

    千次阅读 2022-04-29 19:02:08
    固然是须要的,FFT中,获得的结果是复数, (3)FFT获得的复数的模(即绝对值)就是对应的“振幅谱”,复数所对应的角度,就是所对应的“相位谱”,如今能够画图了。 三、FFT的原始频谱 N=1400 x = np.arange(N) #...
  • 对于微信好有比较多的,想知道男女比例并且的,可以来试一试。需要对应python环境

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 261,510
精华内容 104,604
热门标签
关键字:

在python做对应分析