美文网首页
09.交叉&结构&相关分析

09.交叉&结构&相关分析

作者: 李慕玄 | 来源:发表于2018-07-07 19:46 被阅读0次

1.交叉分析

用于分析两个或两个以上,分组变量之间的联系,以交叉表形式进行变量间关系的对比分析。

  • 定量 & 定量分组交叉
  • 定量 & 定性分组交叉
  • 定性 & 定性分组交叉

交叉统计函数

pivot_table(values, index, columns, aggfunc, fill_value)
  • values:数据透视表中的值
  • index:数据透视表中的行
  • columns:数据透视表中的列
  • aggfunc:统计函数
  • fill_value:NA值的统一替换
import numpy
import pandas
data = pandas.read_csv(
    '/users/bakufu/desktop/5.4/data.csv'        
)
Out[2]: 
       用户ID   注册日期         身份证号码     性别    出生日期  年龄
0      100000  2011/1/1  15010219621116401I  男  1962/11/16  52
1      100001  2011/1/1  45092319910527539E  男   1991/5/27  23
2      100002  2011/1/1  35010319841017421J  男  1984/10/17  30
3      100006  2011/1/1  37110219860824751B  男   1986/8/24  28
4      100010  2011/1/1  53042219860714031J  男   1986/7/14  28
5      100011  2011/1/1  32012519871028001B  男  1987/10/28  27
6      100012  2011/1/1  23030219930828581I  男   1993/8/28  21
7      100013  2011/1/1  42112619900301477J  男    1990/3/1  24
8      100015  2011/1/1  53012119811002001I  男   1981/10/2  33
9      100016  2011/1/1  21050219890110061C  男   1989/1/10  26
10     100017  2011/1/2  22038219841212024A  女  1984/12/12  30
      ...       ...                 ... ..         ...  ..
59100  199501  2011/9/2  42102319931117009A  男  1993/11/17  21
[59101 rows x 6 columns]

bins = [
    min(data.年龄)-1, 20, 30, 40, max(data.年龄)+1      
]
Out[4]:
[2, 20, 30, 40, 88]

labels = [
    '20岁及以下', '21岁到30岁', '31岁到40岁', '41岁及以上'        
]
Out[6]:
['20岁及以下', '21岁到30岁', '31岁到40岁', '41岁及以上']

data['年龄分层'] = pandas.cut(
    data.年龄,
    bins,
    labels=labels
)
Out[9]: 
       用户ID   注册日期      身份证号码        性别    出生日期  年龄   年龄分层
0      100000  2011/1/1  15010219621116401I  男  1962/11/16  52   41岁及以上
1      100001  2011/1/1  45092319910527539E  男   1991/5/27  23  21岁到30岁
2      100002  2011/1/1  35010319841017421J  男  1984/10/17  30  21岁到30岁
3      100006  2011/1/1  37110219860824751B  男   1986/8/24  28  21岁到30岁
4      100010  2011/1/1  53042219860714031J  男   1986/7/14  28  21岁到30岁
5      100011  2011/1/1  32012519871028001B  男  1987/10/28  27  21岁到30岁
6      100012  2011/1/1  23030219930828581I  男   1993/8/28  21  21岁到30岁
7      100013  2011/1/1  42112619900301477J  男    1990/3/1  24  21岁到30岁
8      100015  2011/1/1  53012119811002001I  男   1981/10/2  33  31岁到40岁
9      100016  2011/1/1  21050219890110061C  男   1989/1/10  26  21岁到30岁
10     100017  2011/1/2  22038219841212024A  女  1984/12/12  30  21岁到30岁
      ...       ...                 ... ..         ...  ..      ...
59100  199501  2011/9/2  42102319931117009A  男  1993/11/17  21  21岁到30岁
[59101 rows x 7 columns]

ptResult = data.pivot_table(
    values=['年龄'],
    index=['年龄分层'],
    columns=['性别'],
    aggfunc=[numpy.size]        
)
Out[11]: 
年龄分层       女      男        
20岁及以下    111   1950
21岁到30岁   2903  43955
31岁到40岁    735   7994
41岁及以上    567    886

2.结构分析

在分组及交叉分析的基础上,计算各组成部分所占的比重,进而分析总体的内部特征的分析方法。
主要指定性分组,通过饼图或圆环图进行数据展现。

pandas中进行占比计算,使用groupby计算出分组结果,或pivot_table计算出交叉表的结果之后,如果
还需要继续运算,可使用数据框自带函数计算。

数据框的外运算函数,用于两个数据框之间的运算

运算 注释
add
sub
multiply
div

数据框的内运算函数,用于数据框自身的运算

运算 注释
sum 求和
mean 均值
var 方差
sd 标准差

设置axis参数,指定是按列运算还是按行运算
axis参数说明

  • 0:按列运算(默认)
  • 1:按行运算
import numpy
import pandas
data = pandas.read_csv(
    '/users/bakufu/desktop/5.5/data.csv'      
)
Out[14]: 
       用户ID   注册日期       身份证号码       性别   出生日期   年龄
0      100000  2011/1/1  15010219621116401I  男  1962/11/16  52
1      100001  2011/1/1  45092319910527539E  男   1991/5/27  23
2      100002  2011/1/1  35010319841017421J  男  1984/10/17  30
3      100006  2011/1/1  37110219860824751B  男   1986/8/24  28
4      100010  2011/1/1  53042219860714031J  男   1986/7/14  28
5      100011  2011/1/1  32012519871028001B  男  1987/10/28  27
6      100012  2011/1/1  23030219930828581I  男   1993/8/28  21
7      100013  2011/1/1  42112619900301477J  男    1990/3/1  24
8      100015  2011/1/1  53012119811002001I  男   1981/10/2  33
9      100016  2011/1/1  21050219890110061C  男   1989/1/10  26
10     100017  2011/1/2  22038219841212024A  女  1984/12/12  30
      ...       ...                 ... ..         ...  ..
59100  199501  2011/9/2  42102319931117009A  男  1993/11/17  21
[59101 rows x 6 columns]

bins = [
    min(data.年龄)-1, 20, 30, 40, max(data.年龄)+1        
]
Out[16]:
[2, 20, 30, 40, 88]

labels = [
    '20岁及以下', '21岁到30岁', '31岁到40岁', '41岁及以上'
]
Out[18]:
['20岁及以下', '21岁到30岁', '31岁到40岁', '41岁及以上']

data['年龄分层'] = pandas.cut(
    data.年龄,
    bins,
    labels=labels        
)
Out[21]: 
       用户ID   注册日期       身份证号码       性别   出生日期   年龄  年龄分层
0      100000  2011/1/1  15010219621116401I  男  1962/11/16  52   41岁及以上
1      100001  2011/1/1  45092319910527539E  男   1991/5/27  23  21岁到30岁
2      100002  2011/1/1  35010319841017421J  男  1984/10/17  30  21岁到30岁
3      100006  2011/1/1  37110219860824751B  男   1986/8/24  28  21岁到30岁
4      100010  2011/1/1  53042219860714031J  男   1986/7/14  28  21岁到30岁
5      100011  2011/1/1  32012519871028001B  男  1987/10/28  27  21岁到30岁
6      100012  2011/1/1  23030219930828581I  男   1993/8/28  21  21岁到30岁
7      100013  2011/1/1  42112619900301477J  男    1990/3/1  24  21岁到30岁
8      100015  2011/1/1  53012119811002001I  男   1981/10/2  33  31岁到40岁
9      100016  2011/1/1  21050219890110061C  男   1989/1/10  26  21岁到30岁
10     100017  2011/1/2  22038219841212024A  女  1984/12/12  30  21岁到30岁
      ...       ...                 ... ..         ...  ..      ...
59100  199501  2011/9/2  42102319931117009A  男  1993/11/17  21  21岁到30岁
[59101 rows x 7 columns]

ptResult = data.pivot_table(
    values=['年龄'],
    index=['年龄分层'],
    columns=['性别'],
    aggfunc=[numpy.size]
)
Out[23]:     
年龄分层      女      男         
20岁及以下    111   1950
21岁到30岁   2903  43955
31岁到40岁    735   7994
41岁及以上    567    886

#按列进行求和
ptResult.sum()
Out[24]: 
女      4316
男     54785
dtype: int64

#按列进行求和
ptResult.sum(axis=0)
Out[25]: 
女      4316
男     54785
dtype: int64

#按行进行求和
ptResult.sum(axis=1)
Out[26]: 
年龄分层
20岁及以下      2061
21岁到30岁     46858
31岁到40岁      8729
41岁及以上      1453
dtype: int64

#按行进行占比计算,不同年龄段的性别占比
ptResult.div(ptResult.sum(axis=1), axis=0)
Out[27]: 
年龄分层        女         男               
20岁及以下   0.053857  0.946143
21岁到30岁   0.061953  0.938047
31岁到40岁   0.084202  0.915798
41岁及以上   0.390227  0.609773

#按列进行占比计算,不同性别的年龄段占比
ptResult.div(ptResult.sum(axis=0), axis=1)
Out[28]: 
年龄分层         女         男        
20岁及以下   0.025718  0.035594
21岁到30岁   0.672614  0.802318
31岁到40岁   0.170297  0.145916
41岁及以上   0.131372  0.016172

3.相关分析

研究两个或两个以上随机变量之间相互依存关系的方向和密切程度的方法

  • 线性相关:当一个连续变量发生变动时,另一个连续变量相应的呈线性关系变动
  • 采用皮尔逊相关系数r的绝对值来度量连续变量之间线性相关强度
线性相关系数r(取绝对值)的范围 相关程度
0 ≤ r < 0.3 低度
0.3 ≤ r < 0.8 中度
0.8 ≤ r ≤ 1 高度

相关分析函数:

  • DataFrame.corr()
  • Series.corr(other)

函数说明:

  • 如果由数据框调用corr方法,将会计算每个列两两之间的相似度
  • 如果由序列调用corr方法,只计算该序列与传入的序列之间的相似度

返回值:

  • DataFrame调用:返回DataFrame
  • Series调用:返回一个数值型,大小为相关度
# -*- coding -*-
import pandas
data = pandas.read_csv(
    '/users/bakufu/desktop/5.6/data.csv'
)
Out[31]: 
    小区ID     人口  平均收入  文盲率  超市购物率  网上购物率  本科毕业率
0      1   3615  3624  2.1   15.1   84.9   41.3
1      2    365  6315  1.5   11.3   88.7   66.7
2      3   2212  4530  1.8    7.8   92.2   58.1
3      4   2110  3378  1.9   10.1   89.9   39.9
4      5  21198  5114  1.1   10.3   89.7   62.6
5      6   2541  4884  0.7    6.8   93.2   63.9
6      7   3100  5348  1.1    3.1   96.9   56.0
7      8    579  4809  0.9    6.2   93.8   54.6
8      9   8277  4815  1.3   10.7   89.3   52.6
9     10   4931  4091  2.0   13.9   86.1   40.6
10    11    868  4963  1.9    6.2   93.8   61.9

#两个列之间的相关度计算
data['人口'].corr(data['文盲率'])
Out[32]:
0.10762237339473261

#多列之间的相关度计算
#选择多列的方法
data[[
    '超市购物率', '网上购物率', '文盲率', '人口'      
]]
data[[
    '超市购物率', '网上购物率', '文盲率', '人口'      
]].corr()
Out[33]: 
          超市购物率   网上购物率     文盲率      人口
超市购物率  1.000000  -1.000000   0.702975   0.343643
网上购物率 -1.000000   1.000000  -0.702975  -0.343643
文盲率     0.702975  -0.702975   1.000000   0.107622
人口       0.343643  -0.343643   0.107622   1.000000

相关文章

  • 09.交叉&结构&相关分析

    1.交叉分析 用于分析两个或两个以上,分组变量之间的联系,以交叉表形式进行变量间关系的对比分析。 定量 & 定量分...

  • 简单数据分析

    简单数据分析1.基本统计分析2.分组分析3.分布分析4.交叉分析5.结构分析6.相关分析 1.基本统计分析描述性统...

  • 第二部分

    时间:2017年8月26日-8月31日 主要内容:对比分析、结构分析、分布分析、交叉分析、矩阵分析、多表关联分析、...

  • 数据分析的几种常用方法概览

    数据分析常用方法概览(之一) 对数据进行分析的方法很多,常用的有对比分析法、分组分析法、结构分析法、交叉分析法、漏...

  • 数据分析方法

    基本的分析方法有对比分析法、分组分析法、交叉分析法、结构分析法、漏斗图分析法、综合评价分析法、因素分析法和矩阵关联...

  • 谁说菜鸟不会数据分析--入门篇第一章 数据分析简述

    一、数据分析类别 描述性分析一般包括:对比分析法、平均分析法、交叉分析法; 探索性及验证性数据分析:相关分析、因子...

  • 数据分析的几种常用方法概览(之二)

    数据分析常用方法概览(之二) 上一篇,我们了解了数据分析时常用的对比分析法、分组分析法、结构分析法、交叉分析法、漏...

  • VFIO PCI Device

    VFIO PCI源码分析,包括主要初始化函数,以及相关结构体。

  • SPSS的基础语法解释

    本篇文章对基础语法进行解释,做到知其然,知其所以然!简单介绍的数据分析方法具体有:频率分析、描述统计、交叉表、相关...

  • 数据分析基础—5.6 交叉分析法

    交叉分析法是用于分析两个变量之间的相互关系的一种基本数据分析法。 交叉分析法含义 把统计分析数据制作成二维交叉表格...

网友评论

      本文标题:09.交叉&结构&相关分析

      本文链接:https://www.haomeiwen.com/subject/vevguftx.html