Python 单细胞多数据相关性分析

Python 单细胞多数据相关性分析,python,pandas,dataframe,statistics,correlation,Python,Pandas,Dataframe,Statistics,Correlation,我有一个数据集,其中一些行包含单个答案,而另一些行包含多个答案。像这样: year length Animation 0 1971 121 1,2,3 1 1939 71 1,3 2 1941 7 0,2 3 1996 70 1,2,0 4 1975 71 3,2,0 对于单数答案,我设法使用df.corr()创建了一

我有一个数据集,其中一些行包含单个答案,而另一些行包含多个答案。像这样:

       year  length  Animation
0      1971     121       1,2,3
1      1939      71       1,3
2      1941       7       0,2
3      1996      70       1,2,0
4      1975      71       3,2,0
对于单数答案,我设法使用df.corr()创建了一个热图,但我不知道什么是多个答案行的最佳方法

我可以拆分它们并为每个答案添加额外的列,如:

           year  length  Animation
    0      1971     121       1
    1      1971     121       2
    2      1971     121       3
    3      1939      71       1
    4      1939      71       3 ...
然后执行完全相同的dr.corr(),或添加其他动画\u 01、动画\u 02。。。但是必须有一个更聪明的方法来解决这个问题吗


编辑:实际数据片段

要将
动画
(或
数据片段中的首选位置
)分解为一系列的一个热列,原始列中的每个唯一字符串对应一个热列。具有的每个列的值为零或一,其中一个对应于该字符串出现在原始列中的行

首先,您需要在
首选位置
中获得所有唯一的子字符串(有关如何处理列表列的信息,请参阅本文)

然后,您可以根据给定位置是否位于每行的
首选位置
,在循环中创建位置列

for position in positions:
    df[position] = df.Preferred_positions.apply(
        lambda x: 1 if position in x else 0
    )

您希望将
动画
(或数据片段中的
首选位置
)分解为一系列的一个热列,原始列中的每个唯一字符串对应一个热列。具有的每个列的值为零或一,其中一个对应于该字符串出现在原始列中的行

首先,您需要在
首选位置
中获得所有唯一的子字符串(有关如何处理列表列的信息,请参阅本文)

然后,您可以根据给定位置是否位于每行的
首选位置
,在循环中创建位置列

for position in positions:
    df[position] = df.Preferred_positions.apply(
        lambda x: 1 if position in x else 0
    )

您应该使用计算两个分类变量之间的频率表,并基于该表执行后续分析<当
x
y
中的一个是分类的时,无论是否编码为数字,code>df.corr(x,y)在数学上都没有意义

注意:1如果
x
是分类的,而
y
是数字的,则有两个选项来描述它们之间的联系:

  • y
    分组为分位数(BIN),并将其视为分类
  • x
    1个热编码虚拟变量执行
    y
    的线性回归
  • 备选案文2一般更为精确,但统计数字超出了这一问题的范围。这篇文章将关注两个分类变量的情况

    N.B.2有关稀疏矩阵输出,请参见

    样品溶液 数据与预处理 频率表 注:为简单起见,忽略
    长度的分组

    ct = pd.crosstab(df["Animation"], df["length"])
    
    print(ct)
    # Out[65]:
    # length     7    70   71   121
    # Animation
    # 0            1    1    1    0
    # 1            0    1    1    1
    # 2            1    1    1    1
    # 3            0    0    2    1
    
    形象化

    实例分析 根据频率表,您可以询问关于给定某个(子集)
    x
    值的
    y
    分布的问题,反之亦然。这应该更好地描述两个分类变量之间的联系,因为分类变量没有顺序

    比如说,

    Q: What length does Animation=3 produces? 
    
    A: 66.7% chance to give 71
       33.3% chance to give 121
       otherwise unobserved
    

    您应该使用计算两个分类变量之间的频率表,并基于该表执行后续分析<当
    x
    y
    中的一个是分类的时,无论是否编码为数字,code>df.corr(x,y)
    在数学上都没有意义

    注意:1如果
    x
    是分类的,而
    y
    是数字的,则有两个选项来描述它们之间的联系:

  • y
    分组为分位数(BIN),并将其视为分类
  • x
    1个热编码虚拟变量执行
    y
    的线性回归
  • 备选案文2一般更为精确,但统计数字超出了这一问题的范围。这篇文章将关注两个分类变量的情况

    N.B.2有关稀疏矩阵输出,请参见

    样品溶液 数据与预处理 频率表 注:为简单起见,忽略
    长度的分组

    ct = pd.crosstab(df["Animation"], df["length"])
    
    print(ct)
    # Out[65]:
    # length     7    70   71   121
    # Animation
    # 0            1    1    1    0
    # 1            0    1    1    1
    # 2            1    1    1    1
    # 3            0    0    2    1
    
    形象化

    实例分析 根据频率表,您可以询问关于给定某个(子集)
    x
    值的
    y
    分布的问题,反之亦然。这应该更好地描述两个分类变量之间的联系,因为分类变量没有顺序

    比如说,

    Q: What length does Animation=3 produces? 
    
    A: 66.7% chance to give 71
       33.3% chance to give 121
       otherwise unobserved
    

    假设x=动画,那么corr(x,y)的y变量是什么?列出的数据只是示例数据。但可以是corr(动画,年份)或corr(动画,长度)。如果有帮助,可以发布实际数据片段。但我的问题基本上是如何对包含多行的行使用corr()。不确定X是如何影响的。在底部添加了一段实际数据。我的例子是如何找到“当前排名”与“首选位置”或“当前排名”与“你最难处理的事情”之间的相关性。我这样问是因为在
    df.corr()
    中放入分类变量没有意义。这三种关联方法都适用于数值变量。我不明白你想在数学上实现什么。啊,好吧,如果我错了,请随时纠正我。但是将字符串转换成整数以使用相关性,在数学上不是不正确吗?否则,人们将如何找到两个字符串之间的相关性,而不是与字符串值的相关性?由于X值的原因,Y值的可能性或多或少是一样的。假设X=动画,corr(X,Y)的Y变量是什么?列出的数据只是示例数据。但可以是corr(动画,年份)或corr(动画,长度)。如果有帮助,可以发布实际数据片段。但我的问题基本上是如何对包含多行的行使用corr()。不确定X是如何影响的。在底部添加了一段实际数据。我的例子是如何