2011-08-25 46 views
0

我正在與兩組數據工作集:搜索大的數據爲多個串

集1具有在單個列500個成員(所有字符串) 組2具有兩列(製表符分隔)其中30000個成員第1列是數字ID號,第2列是字符串分隔列表(10,000種可能性)。

我需要搜索第2集第2集中的字符串,並用至少1個匹配標記(或隔離)第2集中的所有行。點擊也需要非常具體(即,我想抓住「傑克有一個網球」,但不是「我喜歡傑克有一個網球袋」)。如果有幫助,我可以找出所有需要特別避免的字符串。我開始使用excel(「if(isnumber(search(」),但是發現嵌套的if語句的數量是有限的)我也使用grep獲得了一些成功,但是我意識到它是隔離的我特別需要避免的線條(「我喜歡傑克有一個網球球包」型線)。

我開始認爲Python是要走的路,但我不知道如何去。它的代碼在其他人有任何建議

這裏是集2(ID的僞造保護匿名)樣品給什麼我的工作有更好的瞭解:

1230 DEVELOPMENTAL DELAY, LANGUAGE DELAY, MOTOR DELAY 
2257 MULTIPLE CONGENITAL ANOMALIES 
2344 MICROCEPHALY, AUTISM SPECTRUM DISORDER, SHORT STATURE 
3342 DEVELOPMENTAL DELAY, SEIZURE DISORDER, ATAXIA 
7651 CONGENITAL ANOMALY, UNSPECIFIED 
7869 FAMILY HISTORY OF AUTISM SPECTRUM DISORDER 

在這種情況下,我會尋找術語「自閉症譜系障礙」,我想ID 2344,但不是ID 7869.

感謝您的幫助!

回答

0

不知道你如何持有你的集合,但不知何故你必須在一些python數據結構中轉換/導入它們。看起來,這樣做的一個非常簡單的方法是將set1放在python集合(或列表)中,set2放在一個字典中,用id作爲鍵和字符串作爲值。然後通過鍵和適當的值搜索進行簡單的迭代就可以得到您想要的結果。這應該足夠了

set1 = set(...) # your 500 members must be here 
set2 = dict(...) # your 30000 other ids-strings stuff 

# and a simple function to make queries 

def handle_query(query_string): 
    for id in set2: 
     if query_string in set2[id].split(","): 
      yield id 

# now you can call it for every string in set1 (or whatever...) 

for string in set1: 
    print string, [ i for i in handle_query(string) ] 

,是的,蟒蛇是去:)

不過順便說一下,這是不是最佳的(和擴展嚴重,如果數據集很大),因爲你必須遍歷所有的IDS 。這對於30000個ID是可以的,但「幾乎完美」在於所謂的「倒排索引」,這是搜索引擎的核心概念。所以,最佳的方式爲「持有」的設定2的數據在某種意義上:

DEVELOPMENTAL DELAY -> 1230, another_id, yet_another_id, ... 
LANGUAGE DELAY -> 1230, ... 
MOTOR DELAY -> 1230, ... 
MULTIPLE CONGENITAL ANOMALIES -> 2257, ... 
etc 

現在,字符串鍵和(名單)ID是值。因此,「嚴格」字符串查詢應該產生所有期望的ID ...實現留給讀者作爲exersice :)

+0

我一直希望在Excel中拼湊一些東西,因爲我是一個令人沮喪的編碼器,但這顯然是做到這一點的「正確」方式。非常感謝您花時間解釋這一切! – Ian

0

如果你只是想與集合1完全匹配,你可以做這個查找。 在第2組第3列的第1行中輸入此公式,其中SET1是SET1的範圍地址 = IF(ISERROR(MATCH($ a1,SET1,0),「Miss」,「Hit」) 然後複製公式下降30000行(雙擊單元格東南角的黑色方塊) (如果您可以對第1組進行排序,還有一個更有效的變體)

+0

我喜歡這個主意,但我似乎無法讓它正常工作 - 如果設置爲2,第2列包含多個字符串(即「AUTISM」返回「Hit」但返回「AUTISM」,則返回「MISS」代謝紊亂「返回」小姐「)。而且我可以按照我喜歡的方式對這兩組進行排序。什麼是更高效的變體?非常感謝您的幫助。 – Ian

+0

MATCH比較一個完整的細胞與另一個整個細胞,所以它不會做你想要的,除非你將第二組分開(你可以在逗號分開嗎?) –