{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# EDA\nこの分野のど素人なので、調べたことをメモし共有する。  \n順次アップデートしてます。","metadata":{}},{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-06-18T13:13:05.126976Z","iopub.execute_input":"2023-06-18T13:13:05.127293Z","iopub.status.idle":"2023-06-18T13:13:05.143455Z","shell.execute_reply.started":"2023-06-18T13:13:05.127266Z","shell.execute_reply":"2023-06-18T13:13:05.142095Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## train_sequences.fasta","metadata":{}},{"cell_type":"code","source":"!head -50 \"/kaggle/input/cafa-5-protein-function-prediction/Train/train_sequences.fasta\"","metadata":{"execution":{"iopub.status.busy":"2023-06-18T13:13:05.145382Z","iopub.execute_input":"2023-06-18T13:13:05.145891Z","iopub.status.idle":"2023-06-18T13:13:06.252084Z","shell.execute_reply.started":"2023-06-18T13:13:05.145845Z","shell.execute_reply":"2023-06-18T13:13:06.250811Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"train_sequences.fastaは、FASTA形式で書かれている。  \n“>”から始まる列はヘッダーである。ヘッダ行では、\">\" の次にシーケンスデータを識別するための文字列を記述し、続けてそのシーケンスデータを説明する文字列を記述する（両方とも省略してよい）。  \nヘッダーには、その情報がどのデータベースから取得されたのか記載されてる.  \n詳しい記述はここにあった. https://www.uniprot.org/help/fasta-headers  \n  \n以下は、train_sequences.fastaの1番目に記述されているヘッダー情報を調べてみたもの.  \n> \\>P20536 sp|P20536|UNG_VACCC Uracil-DNA glycosylase OS=Vaccinia virus (strain Copenhagen) OX=10249 GN=UNG PE=1 SV=1  \nMNSVTVSHAPYTITYHDDWEPVMSQLVEFYNEVASWLLRDETSPIPDKFFIQLKQPLRNK  \nRVCVCGIDPYPKDGTGVPFESPNFTKKSIKEIASSISRLTGVIDYKGYNLNIIDGVIPWN  \nYYLSCKLGETKSHAIYWDKISKLLLQHITKHVSVLYCLGKTDFSNIRAKLESPVTTIVGY  \nHPAARDRQFEKDRSFEIINVLLELDNKVPINWAQGFIY  \n  \n- **sp|P20536|UNG_VACCC**  \nUniProt ID P20536で遺伝子名UNG_VACCCのタンパク質情報は、Swiss-Prot (sp)から取得されたことを示す. TrEMBLから取得された場合はtrになる. Swiss-Prot and TrEMBL are both parts of UniProtKB.  \n- **Uracil-DNA glycosylase**  \n後述の`GN`と同じ情報のように見える. `GN`は略称である一方、これは正式名称っぽい. ウラシルDNA グリコシラーゼという名前らしい. ググるとこういうのがヒットする.  \nhttps://www.nippongene.com/siyaku/product/qpcr/ung/uracil-dna-glycosylase.html  \n- **OS=Vaccinia virus (strain Copenhagen)**  \nOSとはタンパク質が由来する生物種(OrganismName)を指すらしい.  \nVaccinia virus (strain Copenhagen)というのはワクチニアウイルスのコペンハーゲン株を示すらしい.  \nつまり、ワクチニアウイルスのコペンハーゲン株から採取された？タンパク質ということ？  \n- **OX=10249**  \nOrganismIdentifierつまり、TaxonomyIDの事らしい.  \n- **GN=UNG**  \nGeneNameということで、遺伝子名称.  \n- **PE=1**  \nそのタンパク質が存在することを示す根拠を表す数値らしい. 5つに分類される.  \n1:タンパク質レベルでの実験的証拠  \n2:転写産物レベルでの実験的証拠  \n3:相同性から推定されるタンパク質  \n4:予測されるタンパク質  \n5:不明なタンパク質  \n参考：　https://www.uniprot.org/help/protein_existence  \n- **SV=1**  \nSequence Version. よくわかんない.  \n  \nヘッダーの次の列は該当タンパク質のアミノ酸配列を示す。","metadata":{}},{"cell_type":"markdown","source":"## testsuperset.fasta\ntestの場合はヘッダー情報が変わってる.  \n以下、コンペ説明をDeepl先生に翻訳してもらったもの.  \n\n---\ntestsuperset.fastaには、参加者が予測を提出するよう求められているタンパク質配列が含まれています。testsuperset.fastaの各配列のヘッダーには、タンパク質のUniProtアクセッションIDと、このタンパク質が属する種のTaxon IDが含まれています。これらの配列のうち、機能的なアノテーションが蓄積されるのはごく一部で、テストセットを構成することになる。testuperset-taxon-list.tsvは、テストスーパーセット内のタンパク質のTaxon IDのセットである。\n","metadata":{}},{"cell_type":"code","source":"!head -50 \"/kaggle/input/cafa-5-protein-function-prediction/Test (Targets)/testsuperset.fasta\"","metadata":{"execution":{"iopub.status.busy":"2023-06-18T13:13:06.25418Z","iopub.execute_input":"2023-06-18T13:13:06.254621Z","iopub.status.idle":"2023-06-18T13:13:07.3723Z","shell.execute_reply.started":"2023-06-18T13:13:06.254575Z","shell.execute_reply":"2023-06-18T13:13:07.370273Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## testsuperset-taxon-list.tsv","metadata":{}},{"cell_type":"markdown","source":"このファイルをpd.read_csvで読み込むと、以下のようなエラーが出た.  \nUnicodeDecodeError: 'utf-8' codec can't decode byte 0xa8 in position 1480: invalid start byte  \nので、こちらのディスカッションに基づき、読み込むことにした.  \nhttps://www.kaggle.com/competitions/cafa-5-protein-function-prediction/discussion/403053","metadata":{}},{"cell_type":"code","source":"df_taxonomy_test = pd.read_csv('/kaggle/input/cafa-5-protein-function-prediction/Test (Targets)/testsuperset-taxon-list.tsv', sep='\\t', error_bad_lines=False, encoding= 'unicode_escape')\ndf_taxonomy_test.head()","metadata":{"execution":{"iopub.status.busy":"2023-06-18T13:13:07.375149Z","iopub.execute_input":"2023-06-18T13:13:07.376742Z","iopub.status.idle":"2023-06-18T13:13:07.403282Z","shell.execute_reply.started":"2023-06-18T13:13:07.376687Z","shell.execute_reply":"2023-06-18T13:13:07.401597Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## go-basic.obo","metadata":{}},{"cell_type":"code","source":"!head -50 \"/kaggle/input/cafa-5-protein-function-prediction/Train/go-basic.obo\"","metadata":{"execution":{"iopub.status.busy":"2023-06-18T13:13:07.405219Z","iopub.execute_input":"2023-06-18T13:13:07.40603Z","iopub.status.idle":"2023-06-18T13:13:08.512244Z","shell.execute_reply.started":"2023-06-18T13:13:07.40598Z","shell.execute_reply":"2023-06-18T13:13:08.510439Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Gene Ontology (GO)のOBO形式のファイルの一部を示しています。OBO形式は、生物学的な概念やエンティティ、その関係を表現するための形式です。主にオントロジー（知識を階層的に分類したもの）を表現するために使われます。  \n  \n`format-version: 1.2`：このファイルがOBO形式のバージョン1.2で書かれていることを示しています。  \n`data-version: releases/2023-01-01`：このファイルのデータのバージョンが2023年1月1日のリリースであることを示しています。  \n`subsetdef`：オントロジーのサブセット（部分集合）を定義しています。例えば、goslim_generic \"Generic GO slim\"は一般的なGOのスリム版を示す。  \n`default-namespace: gene_ontology`：このファイルがgene ontologyの情報を含んでいることを示しています。  \n`[Term]`：オントロジーの一つの項目（エンティティ）を示しています。それぞれの項目は、id（一意な識別子）、name（項目の名前）、namespace（項目が属するカテゴリ）、def（項目の定義）などの情報を含んでいます。  \n`is_a`：項目間の階層的な関係を示しています。例えば、is_a: GO:0007005 ! mitochondrion organizationは、現在の項目（GO:0000002）が別の項目（GO:0007005）の下位に位置することを示しています。  \n  \nこれらの情報は、特定のタンパク質が持つ機能を表現するために使用されます。また、それらのタンパク質の機能が他のタンパク質の機能とどのように関連しているのか、あるいはそれらが体内でどのように動作するのかを理解するのに役立てることが可能。","metadata":{}},{"cell_type":"markdown","source":"この辺も詳しそう。人工知能学会より「生命科学におけるオントロジーとその利用」。  \nhttps://www.jstage.jst.go.jp/article/jjsai/22/1/22_70/_pdf","metadata":{}},{"cell_type":"markdown","source":"試しに、GO:0008152 というタンパク質？が`go-basic.obo` 内でどのような表記をされるのか見てみる.  \ngrepコマンドで、ヒット行の前後5行を行数付きで表示させてみる.","metadata":{}},{"cell_type":"code","source":"!grep -5 -n \"GO:0008152\" \"/kaggle/input/cafa-5-protein-function-prediction/Train/go-basic.obo\"","metadata":{"execution":{"iopub.status.busy":"2023-06-18T13:13:08.514503Z","iopub.execute_input":"2023-06-18T13:13:08.515586Z","iopub.status.idle":"2023-06-18T13:13:09.657557Z","shell.execute_reply.started":"2023-06-18T13:13:08.515543Z","shell.execute_reply":"2023-06-18T13:13:09.656076Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## IA.txt\n`情報付加量(Information accretion)`と呼ばれる指標が与えられている. この指標は、評価セクションで説明したように、重み付き精度およびRecallを計算するために使用される. つまり**IAを正確に予測することが、このコンペティションで求められている**.  \nIAはこのGithubのリポジトリを用いて算出されたそう.  \nhttps://github.com/claradepaolis/InformationAccretion  \n上記リポジトリにはこんな記述がある.  \nCompute Information Accretion (Information Content) of ontology terms from a dataset. \nInformation accretion (ia), introduced in [Clark and Radivojac, 2013], is a measure of how much information is added to an ontology annotation by node `v` given that its parents `Pa(v)` are already annotated.  \nデータセットからオントロジー用語の情報付加量（情報量）を計算する。\n情報付加（ia）は、[Clark and Radivojac, 2013]で紹介されたもので、ノードvが、その親Pa（v）がすでに注釈されていることを前提に、オントロジー注釈にどれだけの情報を付加するかを示す尺度である。  \n![image.png](attachment:7f96a785-5ae7-46f9-a6b0-ffd4a486cde5.png)  \nこの確率を計算するために、データセットで観測されたアノテーションを、確率を推定するための経験的分布として使用します. したがってPr(v|Pa(v))は、ノードに対応する用語でアノテーションされた例（タンパク質）の数として計算されます. とノードに対応する用語 \n ノードに対応する用語でアノテーションされた例の数で割ったものである。\n. なお、ノードに対応する用語のアノテーションは、ノードに対応する用語のアノテーションを必然的に意味する。\n に対応する用語のアノテーションは、必然的に用語のアノテーションを意味する。\n の注釈が必要であることに注意してください。これは、以下のことを意味する。\n となり、分母は単純にノードに対応する用語でアノテーションされた例の数として計算することができる \n.","metadata":{},"attachments":{"7f96a785-5ae7-46f9-a6b0-ffd4a486cde5.png":{"image/png":"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"}}},{"cell_type":"markdown","source":"まだ正確に理解できていないこと  \n- IAの説明における`annotation`とは、具体的にどのような操作を指しているのか？情報を付与するということだろうけど、何にどのような情報を付与することをannotationと言っているのか？\n- IAは、とあるノード`v`とその親のノード`Pa(v)`を使って算出されるため、この2つのノード以外は考慮しなくて良い？（考慮してあげた方がいい気もするが、具体的にどうしたらいいかがまだわからない）\n- 親が複数ある場合は、全ての親を考慮する？（is_aを複数持つ奴がある）\n- IA = 0 ってどういう状態？ 親ノードが注釈された前提で子ノードが注釈されたとしても（ Pr(v|Pa(v)) ）、それによって追加される情報がないということ？","metadata":{}},{"cell_type":"code","source":"!head -40 \"/kaggle/input/cafa-5-protein-function-prediction/IA.txt\"","metadata":{"execution":{"iopub.status.busy":"2023-06-18T13:13:09.659637Z","iopub.execute_input":"2023-06-18T13:13:09.660161Z","iopub.status.idle":"2023-06-18T13:13:10.764406Z","shell.execute_reply.started":"2023-06-18T13:13:09.660122Z","shell.execute_reply":"2023-06-18T13:13:10.7631Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!wc -l \"/kaggle/input/cafa-5-protein-function-prediction/IA.txt\"","metadata":{"execution":{"iopub.status.busy":"2023-06-18T13:13:10.765847Z","iopub.execute_input":"2023-06-18T13:13:10.766254Z","iopub.status.idle":"2023-06-18T13:13:11.883761Z","shell.execute_reply.started":"2023-06-18T13:13:10.766218Z","shell.execute_reply":"2023-06-18T13:13:11.882246Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"43248個のIA情報があるっぽい。","metadata":{}},{"cell_type":"markdown","source":"## train_terms.tsv\nここが分かりやすそう。  \nhttps://kazumaxneo.hatenablog.com/entry/2022/07/31/012539  \naspect列にある、BPO, CCO, MFOはオントロジーを指しており、  \nBPO: 生物プロセスオントロジー  \nCCO: 細胞成分オントロジー  \nMFO: 分子機能オントロジー  \nを示す。  \n`term`と、go-basic.oboの`id`を使って関連付けられそう.","metadata":{}},{"cell_type":"code","source":"df_train_terms = pd.read_csv(\"/kaggle/input/cafa-5-protein-function-prediction/Train/train_terms.tsv\", sep=\"\\t\")\ndf_taxonomy = pd.read_csv(\"/kaggle/input/cafa-5-protein-function-prediction/Train/train_taxonomy.tsv\", sep=\"\\t\")","metadata":{"execution":{"iopub.status.busy":"2023-06-18T13:13:11.88633Z","iopub.execute_input":"2023-06-18T13:13:11.886738Z","iopub.status.idle":"2023-06-18T13:13:14.944602Z","shell.execute_reply.started":"2023-06-18T13:13:11.886702Z","shell.execute_reply":"2023-06-18T13:13:14.943196Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train_terms.shape","metadata":{"execution":{"iopub.status.busy":"2023-06-18T13:13:14.946333Z","iopub.execute_input":"2023-06-18T13:13:14.946695Z","iopub.status.idle":"2023-06-18T13:13:14.955892Z","shell.execute_reply.started":"2023-06-18T13:13:14.94666Z","shell.execute_reply":"2023-06-18T13:13:14.954743Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train_terms.EntryID.nunique()","metadata":{"execution":{"iopub.status.busy":"2023-06-18T13:13:14.957433Z","iopub.execute_input":"2023-06-18T13:13:14.957889Z","iopub.status.idle":"2023-06-18T13:13:15.519558Z","shell.execute_reply.started":"2023-06-18T13:13:14.957848Z","shell.execute_reply":"2023-06-18T13:13:15.518244Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train_terms.term.nunique()","metadata":{"execution":{"iopub.status.busy":"2023-06-18T13:13:15.521256Z","iopub.execute_input":"2023-06-18T13:13:15.521678Z","iopub.status.idle":"2023-06-18T13:13:16.083354Z","shell.execute_reply.started":"2023-06-18T13:13:15.521645Z","shell.execute_reply":"2023-06-18T13:13:16.082096Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train_terms.aspect.value_counts()","metadata":{"execution":{"iopub.status.busy":"2023-06-18T13:13:16.084963Z","iopub.execute_input":"2023-06-18T13:13:16.085424Z","iopub.status.idle":"2023-06-18T13:13:16.970227Z","shell.execute_reply.started":"2023-06-18T13:13:16.085382Z","shell.execute_reply":"2023-06-18T13:13:16.96906Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train_terms.info()","metadata":{"execution":{"iopub.status.busy":"2023-06-18T13:13:16.978863Z","iopub.execute_input":"2023-06-18T13:13:16.979247Z","iopub.status.idle":"2023-06-18T13:13:16.991945Z","shell.execute_reply.started":"2023-06-18T13:13:16.979215Z","shell.execute_reply":"2023-06-18T13:13:16.990317Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train_terms.EntryID = df_train_terms.EntryID.astype(\"category\")\ndf_train_terms.term = df_train_terms.term.astype(\"category\")\ndf_train_terms.aspect = df_train_terms.aspect.astype(\"category\")","metadata":{"execution":{"iopub.status.busy":"2023-06-18T13:13:16.994151Z","iopub.execute_input":"2023-06-18T13:13:16.994761Z","iopub.status.idle":"2023-06-18T13:13:19.532925Z","shell.execute_reply.started":"2023-06-18T13:13:16.994712Z","shell.execute_reply":"2023-06-18T13:13:19.531554Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train_terms.info()","metadata":{"execution":{"iopub.status.busy":"2023-06-18T13:13:19.534535Z","iopub.execute_input":"2023-06-18T13:13:19.53501Z","iopub.status.idle":"2023-06-18T13:13:19.664264Z","shell.execute_reply.started":"2023-06-18T13:13:19.534975Z","shell.execute_reply":"2023-06-18T13:13:19.662976Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train_terms.head()","metadata":{"execution":{"iopub.status.busy":"2023-06-18T13:13:19.666419Z","iopub.execute_input":"2023-06-18T13:13:19.66802Z","iopub.status.idle":"2023-06-18T13:13:19.680821Z","shell.execute_reply.started":"2023-06-18T13:13:19.667972Z","shell.execute_reply":"2023-06-18T13:13:19.679607Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"単一の`EntryID`に対して、複数の`term`が紐づくらしい.","metadata":{}},{"cell_type":"code","source":"# Null check\nprint(f\"null count Entryid: {df_train_terms.EntryID.isnull().sum()}\")\nprint(f\"null count term: {df_train_terms.term.isnull().sum()}\")\nprint(f\"null count Entryid: {df_train_terms.aspect.isnull().sum()}\")","metadata":{"execution":{"iopub.status.busy":"2023-06-18T13:13:19.682406Z","iopub.execute_input":"2023-06-18T13:13:19.682761Z","iopub.status.idle":"2023-06-18T13:13:19.710117Z","shell.execute_reply.started":"2023-06-18T13:13:19.682731Z","shell.execute_reply":"2023-06-18T13:13:19.708776Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### train_taxonomy\ntrain_taxonomy.tsv contains the list of proteins and the species to which they belong, represented by a \"taxonomic identifier\" (taxon ID) number. The first column is the protein UniProt accession ID and the second is the taxon ID. More information about taxonomies can he found here(https://www.uniprot.org/help/taxonomic_identifier).  \nタンパク質とその属する生物種のリストが含まれ、「分類学的識別子」= taxon ID 番号で表される.  \n1列目: UniProt accession ID  \n2列目: taxon ID (taxonomic identifier, 分類学的識別子)  \n`EntryID`を使って、train_terms.tsvと関連付けることができそう.","metadata":{}},{"cell_type":"code","source":"df_taxonomy.head()","metadata":{"execution":{"iopub.status.busy":"2023-06-18T13:13:19.711836Z","iopub.execute_input":"2023-06-18T13:13:19.712187Z","iopub.status.idle":"2023-06-18T13:13:19.723526Z","shell.execute_reply.started":"2023-06-18T13:13:19.712157Z","shell.execute_reply":"2023-06-18T13:13:19.722228Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_taxonomy.EntryID.nunique()","metadata":{"execution":{"iopub.status.busy":"2023-06-18T13:13:19.725426Z","iopub.execute_input":"2023-06-18T13:13:19.725908Z","iopub.status.idle":"2023-06-18T13:13:19.784706Z","shell.execute_reply.started":"2023-06-18T13:13:19.725865Z","shell.execute_reply":"2023-06-18T13:13:19.782704Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_taxonomy.taxonomyID.nunique()","metadata":{"execution":{"iopub.status.busy":"2023-06-18T13:13:19.786534Z","iopub.execute_input":"2023-06-18T13:13:19.786993Z","iopub.status.idle":"2023-06-18T13:13:19.795977Z","shell.execute_reply.started":"2023-06-18T13:13:19.786952Z","shell.execute_reply":"2023-06-18T13:13:19.794865Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_taxonomy.info()","metadata":{"execution":{"iopub.status.busy":"2023-06-18T13:13:19.797641Z","iopub.execute_input":"2023-06-18T13:13:19.797973Z","iopub.status.idle":"2023-06-18T13:13:19.858274Z","shell.execute_reply.started":"2023-06-18T13:13:19.797943Z","shell.execute_reply":"2023-06-18T13:13:19.856978Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_taxonomy.EntryID = df_taxonomy.EntryID.astype(\"category\")\ndf_taxonomy.taxonomyID = df_taxonomy.taxonomyID.astype(\"category\")","metadata":{"execution":{"iopub.status.busy":"2023-06-18T13:13:19.860195Z","iopub.execute_input":"2023-06-18T13:13:19.860773Z","iopub.status.idle":"2023-06-18T13:13:20.250037Z","shell.execute_reply.started":"2023-06-18T13:13:19.860738Z","shell.execute_reply":"2023-06-18T13:13:20.248751Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_taxonomy.info()","metadata":{"execution":{"iopub.status.busy":"2023-06-18T13:13:20.25167Z","iopub.execute_input":"2023-06-18T13:13:20.252014Z","iopub.status.idle":"2023-06-18T13:13:20.390798Z","shell.execute_reply.started":"2023-06-18T13:13:20.251986Z","shell.execute_reply":"2023-06-18T13:13:20.389512Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"train_terms.tsvのEntryIDのユニークID数と一致する。","metadata":{}},{"cell_type":"code","source":"# Null check\nprint(f\"null count Entryid: {df_taxonomy.EntryID.isnull().sum()}\")\nprint(f\"null count term: {df_taxonomy.taxonomyID.isnull().sum()}\")","metadata":{"execution":{"iopub.status.busy":"2023-06-18T13:13:20.392161Z","iopub.execute_input":"2023-06-18T13:13:20.392536Z","iopub.status.idle":"2023-06-18T13:13:20.40081Z","shell.execute_reply.started":"2023-06-18T13:13:20.392502Z","shell.execute_reply":"2023-06-18T13:13:20.399484Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}