2013-12-08 3 views
1

나는 pandas Dataframe에서 읽은 두 개의 데이터 세트가 있습니다. 그것들을 1로 설정하고 2로 설정하겠습니다. set 1과 set 2는 텍스트 문서를 포함합니다. 세트 1에있는 텍스트 문서 중 일부는 세트 2에서 발생하며 그 사본을 찾는 방법을 찾고 있습니다. 먼저 데이터 세트의 교차 부분에있는 모든 요소의 목록을 반환하는 세트 사용에 대해 생각했습니다.데이터 세트에서 중복을 찾아서 주문하는 방법

set_1 = set(set_1) 
set_2 = set(set_2) 
duplicates = set1.intersection(set_2) 

그러나 할 일이 하나 더 있습니다. 복제본은 집합 2의 순서 여야합니다. 왜? Well set 1에는 교육용 세트로 사용하는 데이터 예제 및 레이블이 많이 있으며 세트 2는 테스트 세트입니다. 그러나 주어진 예제가 중복 된 것이라면 레이블을 예측하는 대신 집합 1에서 같은 예제의 레이블을 할당하고 싶습니다.

그래서 의사 코드에서 : 내가 어떻게 할 수 있니?

duplicates = set_1.intersection(set_2) 
for example in set_2: 
    if example in duplicates: 
     assign labels from set_1 to example 
    else: 
     predict the labels 

편집

내 질문의 첫 번째 부분은 혼동 될 수 있으므로, 의사 코드가 정말 무엇을 찾고 사실이다. 당신이 혼란 위의 문제의 내 설명을 찾을 그래서 만약 내가 무엇을 달성하고자하는 단지의 요약에 대한 내 의사를 보라 :

의사 코드

duplicates = set_1.intersection(set_2) 
    for example in set_2: 
     if example in duplicates: 
      assign labels from set_1 to example 
     else: 
      predict the labels 

를 불행히도, 난 가야 이제는 어떤 의견에도 즉시 답변 할 수 없지만 돌아 오면 응답하겠습니다.

업데이트 :

이 내 실제 코드의 일부입니다 먼저 나는 팬더 데이터 프레임 개체로 기차 및 테스트 세트에서 읽고 나는 개인에 액세스 할 수 있어요 있도록 배열을 NumPy와로 변환 열.

train = pd.read_csv(os.path.join(dir,"Train.csv")) 
test = pd.read_csv(os.path.join(dir,"Test.csv")) 

#getting train and test sets and the labels 
train = np.array(train)[:,2]            
test = np.array(test)[:,2] 
labels = np.array(train)[:,3] 

내 생각은 테스트 예제는 중복 어떠했는지를 확인하기 위해 중복의 목록을 얻으려면, 그래서는 중복을 얻기 위해 세트로 기차 및 테스트 세트를 변환합니다.

train = set(train) 
test = set(test) 
duplicates = train.intersection(test) 

이 시점부터 어떻게해야하는지 잘 모르겠습니다. 제 목표는 중복 샘플에 라벨을 지정하는 것입니다. 라벨은 열차 세트에서 가져와야합니다. 다른 모든 샘플은 내 견적서 (기계 학습 알고리즘)에 의해 할당 된 레이블을 가져야합니다.

간단히 말해서, 내가 다시 작업하는 데이터는 텍스트 문서입니다. 열차와 시험 세트 모두에서 발생하는 텍스트 문서가 있고, 열차 세트에는 모든 예제에 지정된 레이블이 있습니다. 내 테스트 세트에있는 모든 복제물에 대해 필자는 열차 세트에서 중복 된 예를 찾아야하며보다 정확하게는 해당 레이블을 찾아야합니다. 그 레이블을 테스트 예제에 지정해야합니다. 내 테스트 세트의 모든 비 중복 항목은 내 기계 학습 알고리즘에 의해 예측되어야합니다. 이 경우 확인

+0

팬더를 구체적으로 모르겠다. 대답에 문자열 목록으로'set_1'과'set_2'을 사용할 수 있습니까? – Roberto

+0

나는 그렇게 생각한다. – Learner

+0

set1의 레이블을'example'에 할당하는 예가 혼란 스럽습니다 ... example은 set2의 항목이므로 set1의 레이블을 set1의 각 항목에 할당하고 있습니까? 그래서 set1은 iterables로 만들어 졌습니까? – Roberto

답변

2

는, 내가보고, 편집 한 더 많거나 적은 당신이 필요로하는 무엇을 : 당신이 요청에 따라

set_1 = [["yes", 1], ["maybe", 1], ["never", 0], ["nopes", 0], ["si", 1]] 
set_2 = ["of course", "yes", "always", "never", "no way", "no"] 

def predict_label(item): 
    return 2 # just to check which items got predicted 

dset_1 = dict(set_1) 

labeled_set_2 = [[item, dset_1.get(item, predict_label(item))] for item in set_2] 
print labeled_set_2 

이 set_2 순서를 유지합니다. 그러나 set_1과 set_2의 구조에 대한 내 가정이 맞는지 확인하십시오.

그것은 결과로 제공됩니다

[['of course', 2], ['yes', 1], ['always', 2], ['never', 0], ['no way', 2], ['no', 2]] 

이 지능형리스트는 쌍으로 이루어진 새 목록 생성 (여기에 목록을하지만, 만약 당신이 좋아하면, 당신은 튜플을 사용할 수 있습니다). 핵심 아이디어는 사전을 set_1에서 없애는 것이므로 사전 get 메서드를 사용하여 키가 있는지 여부를 확인할 수 있습니다. get을 사용하면 키가없는 경우 기본값은 predict_label(item)에 의해 반환되는 값으로 설정됩니다. 목록 이해는 set_2의 모든 항목을 거쳐 사전에 키로 존재하는지 확인합니다. 일치하는 경우 쌍의 두 번째 항목은 해당 항목의 사전 항목 값입니다. false 인 경우 두 번째 항목은 predict_label (item)에 의해 계산됩니다.

이 다른 코드 대신에 지능형리스트의 함수 내부 for 루프와 같은 일을 수행

set_1 = [["yes", 1], ["maybe", 1], ["never", 0], ["nopes", 0], ["si", 1]] 
set_2 = ["of course", "yes", "always", "never", "no way", "no"] 

def predict_label(item): 
    return 2 # just to check which items got predicted 

def labeled_set(set1, set2): 
    dset_1 = dict(set1) 
    labeled_set_2 = [] 
    for item in set2: 
     if item in dset_1.keys(): 
      labeled_set_2.append([item, dset_1[item]]) 
     else: 
      labeled_set_2.append([item, predict_label(item)]) 
    return labeled_set_2 

print labeled_set(set_1, set_2) 

이 같은 결과를 제공합니다. 이 경우에는 dset_1.keys()를 사용하므로 get 메소드를 사용할 필요가 없습니다.

+0

이게 내가 찾고있는 것이 아닙니다. 나는 exratr 설명을 추가 할 것이다 – Learner

+0

내가 편집 했어, 지금은 어때? – Roberto

+0

나는 목록 이해력과 약간 혼동 스럽다. set_2의 모든 항목에 대해 set_1에서 해당 레이블을 가져 옵니까? 내가 맞습니까? – Learner

관련 문제