part2さて、4ヶ月ほど前に一度「世の全ての化合物を取得する」と意気込んだ後どうなったかと申しますと、苦戦しています。nameを抜き出しました。物質に対してユニークなのはcidとのことなので、cidとnameの組み合わせをユニークにしてデータベースに突っ込んでみました。上記方針を解説します。Substanceにはかなりダブりがあります(SubstanceのIDがSID)。serotoninはSID111677885に登録されていると同時にSID134971779にも同名で登録されています。対してCompoundsはこれら別SIDの同物質をまとめている、というのがPubchemの説明でした。SID111677885もSID134971779も一つのCompounds(CID5205)に紐づけられています。ゆえに、cidとnameをDBに突っ込めばcidのユニーク数が物質の数になりますし、同一のcidを持つnameはある物質の別名であると言える“はず”でした。なったかさて、sidを使ってDBに登録したら同name別sidの物質がたくさん発生してしまうはずです。cidを使えば、同name別cidは発生しないはずです。本当に全ての同name別sidが一つのcidに集約されていればの話ですが。serotoninで検索。8件のダブり!いくつか見てみます。CID5202は確かにserotoninです。微妙に違う!放射性同位体(炭素11)が使われていたり、Hが一つ多かったりC鎖が一つ長かったり。cationなど別の名前が書かれておりserotoninとそのままズバリ表記されている物質はありませんでした。いうことはCompoundがユニークな物質のデータベースであるのは正しそうです。今回情報元にしたSubstanceは参照が間違っていたり、完璧ではありませんでした。他にもInsulinなどのタンパク質はヒト由来、ブタ由来では微妙に分子式が変わっていました。Compoundではこれらは厳密に区分されていましたが、Substance由来の情報ではいずれもInsulinとして扱っているのでserotoninの時と同じように同name別cidが発生していました。現状CompoundのFTPサーバに収められているデータからは名前が取れないのでしょうがないですね。機械的に間違っている名前を修正するにはレコードとサイトの表記を比較しないといけないので現実的ではないです。それやるならそもそもCompoundのFTPサーバじゃなくてWebページからスクレイピングすればいいのですが、もしそれをやろうと思ったら1億弱のWebページにアクセスしなくてはいけません。PubChemスクレイピングのお作法に従って1ページ1秒でスクレイピングした場合、ぶっ通しでやっても3年強かかります。多少精度は落ちますがまずは今回作成したデータベースを使ってどこまでのことができるか試してみます。nameの組み合わせでユニーク制約」などの条件で処理しました。公式サイトではCompoundは9470万と書いてありますが、DBへの登録数は1億6000万ぐらいになりました。technology.MENU自己紹介Swampdog(VR解剖)未定(論文構造解析)。