最近做數(shù)據(jù)預(yù)處理桶略,需要將兩個(gè)本體數(shù)據(jù)集處理成字典,簡(jiǎn)單記錄下遇到的坑
1.obo本體
[Term]
id: OBT:000591
name: PCE contaminated site
synonym: "perchloroethylene contaminated site" EXACT []
synonym: "tetrachloroethene contaminated site" EXACT []
is_a: OBT:000524 ! site contaminated with organic compound
數(shù)據(jù)格式大概是這樣,總共1w多行际歼,一個(gè)term記錄了本體的id惶翻、name、同義詞鹅心、繼承關(guān)系吕粗,這個(gè)本體處理比較方便,用Python讀取每行旭愧,遇到[term]就將后面的鍵和值存起來
def parse_lines(lines):
for line in lines:
i = line.find('!')
if i == 0:
line = line[0:i]
line = line.strip()
if line:
yield line
def read_stanzas(lines):
def unescape(str):
return str.strip()
single_valued = set(['synonym'])
stanza = defaultdict(list)
stanza['@type'] = 'Header'
for line in lines:
if line.startswith('['):
yield stanza
stanza = defaultdict(list)
else:
k, v = line.split(':', 1)
key = unescape(k)
val = unescape(v)
if key in single_valued:
stanza[key].append(val)
else:
stanza[key] = val
yield stanza
2.NBCI_Taxonomy
這個(gè)數(shù)據(jù)集有六七個(gè)文件颅筋,最多的一個(gè)200多w行,每行大概長(zhǎng)這樣
2 | 131567 | superkingdom | | 0 | 0 | 11 | 0 | 0 | 0 | 0 | 0 | |
通過'\t|\t'進(jìn)行分割榕茧,在用Python時(shí)垃沦,感覺pandas對(duì)DataFrame的列進(jìn)行字符串處理不方便。于是轉(zhuǎn)用R用押,發(fā)現(xiàn)方便很多肢簿,推薦dplyr包,讀取速度很快蜻拨,'\t|\t'都不用自己寫池充,讀完就分割好了。
然后進(jìn)行多表鏈接缎讼,最后想把數(shù)據(jù)寫進(jìn)mysql收夸,先是用RMySQL,建立連接成功血崭,但是自己的DataFrame就是寫不進(jìn)去卧惜,提示sql語(yǔ)法問題。轉(zhuǎn)用Python 的mysql-python包夹纫,安裝失敗咽瓷,按著網(wǎng)上的方法試了很多次,卒舰讹。
最后還是回到R, 用RODBC搞定茅姜,就是覺得寫入速度太慢,200w行數(shù)據(jù)寫了半個(gè)多小時(shí)才寫了一半月匣,希望以后找到更好的替代方法钻洒。