标签: pairwise

将成对距离的长格式数据帧转换为python中的距离矩阵

我有一个成对距离的 pandas 数据框,其形式为:

    SampleA   SampleB  Num_Differences
0  sample_1  sample_2                1
1  sample_1  sample_3                4
2  sample_2  sample_3                8
Run Code Online (Sandbox Code Playgroud)

请注意,没有自我比较(例如,不会表示sample_1 与sample_1)。我想将此表转换为方形距离矩阵,如下所示:

            sample_1      sample_2  sample_3
sample_1                       1              4
sample_2         1                            8
sample_3         4             8    
Run Code Online (Sandbox Code Playgroud)

任何人都可以给我一些关于如何在 python 中进行此类转换的指示吗?该问题类似于 R 中的上一个问题(将成对距离转换为 R 中的距离矩阵),但我不知道要使用相应的 python 函数。这个问题似乎也与这个问题相反(Convert a distance matrix to a list ofpairwise distances in Python)。

以我正在使用的形式重现数据框的一些代码:

    SampleA   SampleB  Num_Differences
0  sample_1  sample_2                1
1  sample_1  sample_3                4
2  sample_2  sample_3                8
Run Code Online (Sandbox Code Playgroud)

python matrix pandas pairwise

8
推荐指数
1
解决办法
1600
查看次数

如何有效地识别重复的有序对

我正在使用原始目的地(OD)数据,该数据在单独的列中包含一个原始ID和一个目标ID。有时,重要的是汇总相同的OD对,但要交换起点和终点。

OD数据如下所示:

orign             dest      value
E02002361         E02002361 109
E02002361         E02002363  38
E02002361         E02002367  10
E02002361         E02002371  44
E02002363         E02002361  34
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,第一行和最后一行可以被视为同一对,但方向相反。面临的挑战是如何有效地识别它们是否重复。

我创建了一个包stplanr,它可以回答这个问题,如下面的可重现示例所示:

x = read.csv(stringsAsFactors = FALSE, text = "orign,dest,value
E02002361,E02002361,109
E02002361,E02002363,38
E02002361,E02002367,10
E02002361,E02002371,44
E02002363,E02002361,34")
duplicated(stplanr::od_id_order(x)[[3]])
#> Registered S3 method overwritten by 'R.oo':
#>   method        from       
#>   throw.default R.methodsS3
#> [1] FALSE FALSE FALSE FALSE  TRUE
Run Code Online (Sandbox Code Playgroud)

reprex软件包(v0.3.0)创建于2019-07-27

这种方法的问题在于,对于大型数据集,它的速度很慢。

我已经研究了从矩阵的每一列中获取最小值的最快方法?这表明这pmin是跨多个列(而不是2个)获取最小值的最有效方法,而我们已经在使用它。

删除重复组合(不考虑顺序)不同,此问题是关于仅两列的重复标识和效率。删除重复组合中发布的解决方案(与顺序无关)似乎比以下时间所示的最慢解决方案要慢。

szudzik_pairing我的同事马尔科姆·摩根(Malcolm Morgan)创建的功能更快的解决方案是基于Matthew Szudzik开发的方法 …

performance r pairwise od

7
推荐指数
1
解决办法
188
查看次数

如何计算 R 中任意两个给定值连续出现的次数?

我正在使用这样的数据框,其中的ID列指示特定的出版物:

ID AuthorA AuthorB AuthorC
1   Chris   Lee     Jill
2   Jill    Tom     Lee 
3   Tom     Chris   Lee
4   Lee     Jill    NA
5   Jill    Chris   NA
Run Code Online (Sandbox Code Playgroud)

我想为社交网络分析生成sourcetarget、 和专栏。count换句话说,计算两位作者出现在同一出版物上的次数。然而,我正在使用的数据框有 18 个作者列。这应该是最终输出:

Source Target Count
Chris   Lee     2
Chris   Jill    2
Lee     Jill    3
Jill    Tom     1
Tom     Lee     2
Tom     Chris   1
Run Code Online (Sandbox Code Playgroud)

r frequency count hyperlink pairwise

7
推荐指数
1
解决办法
327
查看次数

寻找成对元素的索引

鉴于目标('b', 'a')和投入:

x0 = ('b', 'a', 'z', 'z')
x1 = ('b', 'a', 'z', 'z')
x2 = ('z', 'z', 'a', 'a')
x3 = ('z', 'b', 'a', 'a')
Run Code Online (Sandbox Code Playgroud)

目的是找到连续('b', 'a')元素的位置并获得输出:

>>> find_ba(x0)
0
>>> find_ba(x1)
0
>>> find_ba(x2)
None
>>> find_ba(x3)
1
Run Code Online (Sandbox Code Playgroud)

使用pairwise食谱:

from itertools import tee
def pairwise(iterable):
    "s -> (s0,s1), (s1,s2), (s2, s3), ..."
    a, b = tee(iterable)
    next(b, None)
    return zip(a, b)
Run Code Online (Sandbox Code Playgroud)

我可以这样做以获得所需的输出:

def find_ba(x, target=('b', 'a')):
    try:
        return next(i for i, pair …
Run Code Online (Sandbox Code Playgroud)

python indexing tuples pairwise

6
推荐指数
1
解决办法
598
查看次数

Kotlin:迭代集合中的每一对(或通常固定大小的子集)

是否有一种简短/惯用的方法来迭代集合中的每对元素?

更好的是迭代集合的所有固定基数子集的方法。

经典而丑陋的方法是:

val s = setOf(1, 2, 3, 4)

for (i in s) {
    for (j in s) {
        if (i != j) {
            println("$i $j")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

为了拥有更大的子集,需要更多的循环,因此这是不可扩展的。

iterator set subset kotlin pairwise

6
推荐指数
1
解决办法
3944
查看次数

在另一列中给出条件的两列组合展开data.table

我有一个data.table给我在不同的公交路线()的位置(origindestination)之间的连接route_id.

library(data.table)
library(magrittr)

# data for reproducible example
  dt <- data.table( origin = c('A','B','C', 'F', 'G', 'H'), 
                    destination = c('B','C','D', 'G', 'H', 'I'),
                    freq = c(2,2,2,10,10,10),
                    route_id = c(1,1,1,2,2,2), stringsAsFactors=FALSE )
# > dt
#    origin destination freq route_id
# 1:      A           B    2        1
# 2:      B           C    2        1
# 3:      C           D    2        1
# 4:      F           G   10        2
# 5:      G           H   10        2
# 6:      H …
Run Code Online (Sandbox Code Playgroud)

r combinatorics dataframe data.table pairwise

5
推荐指数
1
解决办法
559
查看次数

如何在Python 3中使用xarray/dask/pandas/deepgraph进行并行成对相关矩阵?

xarray我正在尝试遵循文档上的教程: http://xarray.pydata.org/en/stable/dask.html#automatic-parallelization

我的最终目标是从具有约 100,000 个属性的数据集中获取成对的斯皮尔曼相关矩阵,这使我找到了上面提到的教程。我正在测试iris datasetfrom的实现sklearn,但我遇到了问题,因为这种类型的并行化语法与joblib.

我不知道如何获取下面的代码来制作成对的斯皮尔曼相关矩阵,其结果形状为(150,150)。我展示了一个执行此操作的示例,pandas但这不是并行的,并且在我的实际数据集上将花费很长时间。

有谁知道如何调整此xarray代码以创建对称相关性度量?如果没有,有人可以指导我一种更好的方法来进行成对相似性测量。我知道,sklearns pairwise_distance但我想知道这是否是唯一的实现?

import bottleneck
import pandas as pd
import xarray as xr
from sklearn.datasets import load_iris

X_iris = pd.DataFrame(load_iris().data,
                       index = ["iris_%d" % i for i in range(load_iris().data.shape[0])],
                       columns = [x.split(" (cm)")[0].replace(" ","_") for x in load_iris().feature_names])
da_iris = xr.DataArray(X_iris, dims=["samples", "attributes"])

def covariance_gufunc(x, y):
    return ((x - x.mean(axis=-1, keepdims=True))
            * (y - y.mean(axis=-1, keepdims=True))).mean(axis=-1)

def pearson_correlation_gufunc(x, y): …
Run Code Online (Sandbox Code Playgroud)

python parallel-processing correlation dask pairwise

5
推荐指数
0
解决办法
740
查看次数

在 SQL Server 中仅使用一次记录查找匹配对

我需要在 SQL Server 中找到匹配的记录对,但每条记录只能包含在1 pair 中。一旦记录与一对匹配,就应该将其从任何未来对的考虑中删除。

我已经尝试过涉及ROW_NUMBER()and 的解决方案LEAD(),但我无法完全到达那里。

这将用于根据信用评分、收入等多个客户属性,将金融账户与类似账户配对进行审查。

陈述:

declare @test table (ID numeric, Color varchar(20))
insert into @test values
        (1,'Blue'),(2,'Red'),(3,'Blue'),(4,'Yellow'),(5,'Blue'),(6,'Red')

select* 
from @test t1
join @test t2 
    on t1.Color = t2.Color
    and t1.ID < t2.ID           -----removes reverse-pairs and self-pairs
Run Code Online (Sandbox Code Playgroud)

当前结果:

ID  Color   ID  Color
--- ------- --- --------
1   Blue    3   Blue
1   Blue    5   Blue        -----should not appear because 1 has already been paired
3   Blue    5   Blue        -----should not appear …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server pairwise

5
推荐指数
1
解决办法
162
查看次数

如何在一系列软件图上打印成对比较条和效果大小值?

我正在努力创建一系列高质量的 ggboxplots,如下所示:

在此输入图像描述

  1. 带有带有 F(df) 测试值、p 值和效应大小的方差分析标签
  2. 通过多对比较,条形图和星形图具有显着差异。

对于上面的示例,事后比较的统计数据已通过您可以在此链接页面找到的方式获得,并且我运行了以下代码

#Compute the post-hocs
postHocs <- df %>%
  tidyr::pivot_longer(., -c(A, C, D),'s')%>%
  mutate(s = fct_relevel(s, 
                               c("E", "F", "G", 
                                 "H", "I", "J", 
                                 "K", "L", "M", 
                                 "N", "O", "P")) %>% 
  arrange(s) %>%
  group_by(s) %>% 
  pairwise_t_test(
    value ~ D, paired = TRUE,
    p.adjust.method = "bonferroni"
  ) %>% 
  #dplyr::select(., -'s')%>% 
  print()
Run Code Online (Sandbox Code Playgroud)

同时得到方差分析统计:

    res.aov <- df %>% 
      tidyr::pivot_longer(., -c(A, C, D),'s')%>%
      mutate(s = fct_relevel(s,c("E", "F", "G", 
                                 "H", "I", "J", 
                                 "K", "L", "M", 
                                 "N", "O", "P") 
                                   )))%>% 
      arrange(s) …
Run Code Online (Sandbox Code Playgroud)

loops r boxplot pairwise

5
推荐指数
1
解决办法
627
查看次数

Levene检验的多重比较事后检验

我想在R中的Levene的测试中进行成对比较事后测试。我知道如何使用PROC GLM在SAS中进行测试,但是我似乎不知道如何在R中进行测试。有人吗?理念?在下面的示例中,我希望能够测试“ cat”的所有级别(即AB,AC,AD,BC,BD,CD)之间的方差均匀性。我发现最好的方法是将我的数据子集到每个对中,然后对每个子集运行一次Levene检验,然后在最后进行Bonferroni校正。但是,当我的因素数量很大时,这不是实际的解决方案。

library(car)
dat <- rnorm(100, mean=50, sd=10)
cat <- rep(c("A", "B", "C","D"), each=25)
df <- data.frame(cat,dat)
df$cat <- as.factor(df$cat)

LT <- leveneTest(dat ~ cat, data = df)
Run Code Online (Sandbox Code Playgroud)

r posthoc r-car pairwise

4
推荐指数
1
解决办法
1372
查看次数