Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python语言计算特定列上的数据距离_Python_Loops_If Statement_Distance - Fatal编程技术网

使用python语言计算特定列上的数据距离

使用python语言计算特定列上的数据距离,python,loops,if-statement,distance,Python,Loops,If Statement,Distance,我有data.txt,我想用python计算这些数据 id,目标,序号1,序号2,序号3,序号1,序号2,序号4,序号5,序号6 1,T,高,高,高,教师,诺基亚,中,3,低 2,T,高,中,高,教师,诺基亚,中,3,低 3,F,高,中,高,farmer,三星,中,3,低 4,T,高,中,高,律师,索尼,低,1,低 5,F,高,中,高,博士,联想,低,1,低 6,T,高,高,高,警察,iphone,低,1,低 7,F,高,低,高,博士,三星,中,2,低 8,T,高,低,高,农民,索尼,低,2,低

我有data.txt,我想用python计算这些数据

id,目标,序号1,序号2,序号3,序号1,序号2,序号4,序号5,序号6
1,T,高,高,高,教师,诺基亚,中,3,低
2,T,高,中,高,教师,诺基亚,中,3,低
3,F,高,中,高,farmer,三星,中,3,低
4,T,高,中,高,律师,索尼,低,1,低
5,F,高,中,高,博士,联想,低,1,低
6,T,高,高,高,警察,iphone,低,1,低
7,F,高,低,高,博士,三星,中,2,低
8,T,高,低,高,农民,索尼,低,2,低
9,F,高,中,中,律师,联想,中,2,低
10,T,中,高,低,员工,诺基亚,低,1,低

根据这个数据,我想计算d(i,j)=(s-t)/s。其中s是标称的总数(根据该数据s=2),t是处于相同状态的i&j属性(例如:i为第1行,j为第2行,因此t=2)。但我只想用列nominal1和nominal2计算数据

对于t,可将其视为:

    nominal1    nominal2
i      a           b
j      c           d


if a==c && b==d
    t=2
if a==c || b==d
    t=1
else 0
我已经尝试了一些编码,但我仍然不知道如何使列仅为读取时的nominal1和nominal2,以及如何编码s=2和t将具有如上所述的值。谁能告诉我该怎么办

这段代码是我做的

def distance(data,target_attr):
    val_freq = {}
    data_distance = 0.0

    # Calculate the frequency of each of the values in the target attr
    for record in data:
        if (val_freq.has_key(record[target_attr])):
            val_freq[record[target_attr]] += 1.0
        else:
            val_freq[record[target_attr]] = 1.0

    for i in val_freq.values():


    return (s-t)/s

感谢您的帮助。

首先,我将实施:

def distance(list1, list2):
    s = len(list1)
    t = sum(map(lambda x,y: 1 if x == y else 0, list1, list2))

    # note: float() is important here, or you would nearly always get zero!
    return float(s-t)/s
对总和的解释(映射(λx,y:1,如果x==y,则为0,列表1,列表2)):

该方法计算两个元组的距离,其中所有属性都是标准值。如果要减少属性,可以使用:

distance(list1[3:5], list2[3:5]) # take just list[3] and list[4] in consideration
简短说明:以下是一个错误:

if a==c && b==d
    t=2
if a==c || b==d
    t=1
else 0
你的意思是:

if a==c && b==d
    t=2
elif a==c || b==d
    t=1
else 0

elif
在这里很重要,因为否则
t==1
也适用于
a==c&&b==d

如果我使用这个t=sum(map(lambda x,y:1如果x==y,其他0,列表1列表2))。t的值为1或0。因此,如果数据的结果值为t=2,则不能使用该代码。我说的对吗?最后别忘了总数!查看我问题的最后一次编辑(注意:我输入了一个错误,忘记了
list1
list2
之间有一个逗号–我现在更正了它)我以前有1000行的数据。因此,如果我使用函数来说明如何包含它。是这样的:因为我在范围内​​(list1:t=sum(map(lambda x,y:1如果x==y,则为0,list1[i],list2[i]))不,您的代码也将无法工作
map
希望其第二个和第三个参数具有iterables。。。你明白了吗,我发布的代码是如何工作的?
if a==c && b==d
    t=2
elif a==c || b==d
    t=1
else 0