本體數(shù)據(jù)處理 Python and R

最近做數(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]就將后面的鍵和值存起來(lái)

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   |       |

通過(guò)'\t|\t'進(jìn)行分割,在用Python時(shí),感覺(jué)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ǔ)法問(wèn)題。轉(zhuǎn)用Python 的mysql-python包,安裝失敗,按著網(wǎng)上的方法試了很多次,卒。

最后還是回到R, 用RODBC搞定,就是覺(jué)得寫入速度太慢,200w行數(shù)據(jù)寫了半個(gè)多小時(shí)才寫了一半,希望以后找到更好的替代方法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容