自由研究2(厚労省のワクチンの成分がどこに行くのかを調べたPDF資料からの取り込みと、ソート)

自由研究2(厚労省のワクチンの成分がどこに行くのかを調べたPDF資料からの取り込みと、ソート)

1 概要

  • ファイザーワクチンの動物実験のデータがあり、どの臓器にどのくらい行くのかがわかる表がある。
    • PDFファイルで、処理しにくいのだが、多く行く臓器と、行く量がピークとなる時間の表を作成されている方がいたので、それをプログラムでやってみることにしました。

2 関連文書

2.1 厚労省の資料

2.2 使ったPythonパッケージ

3 厚労省のPDFファイルから2つの表を抜き出し、外部ファイルに保存

3.1 説明動画


3.2 厚労省のPDFファイルから2つの表を抜き出し、外部ファイルに保存する手順

3.2.1 仮想環境を用意し作業ディレクトリに入る

virtualenv covid-19
cd covid-19
source bin/activate

3.2.2 必要なパッケージインストール

pip install tabula-py
pip install ipython

3.2.3 元のPDFファイルをダウンロードして作業ディレクトリに保存

wget https://www.pmda.go.jp/drugs/2021/P20210212001/672212000_30300AMX00231_I100_1.pdf

3.2.4 PDFファイルのP.16,17から目的の表の一部を取り出して、ファイルに保存

  1. Pythonの対話環境起動
    ipython
    
  2. プログラムを動かして、表を作成して外部ファイルに保存
    import pandas as pd
    import tabula
    
    # pdfからデータ読み込み
    d0 = tabula.read_pdf("672212000_30300AMX00231_I100_1.pdf",pages="16,17")
    #d0 = tabula.read_pdf("672212000_30300AMX00231_I100_1.pdf",pages="16,17",stream=True)
    #d0 = tabula.read_pdf("672212000_30300AMX00231_I100_1.pdf",pages="16,17",lattice=True)
    
    # カラム名の変更
    d0[0].columns=['Sample','v1','v20','v21']
    d0[1].columns=['Sample','v1','v20','v21']
    
    for i,j in enumerate(d0[0]["v1"].isnull()):
      if j:
        d0[0]["Sample"][i-1]=d0[0]["Sample"][i-1]+" "+d0[0]["Sample"][i]
    for i,j in enumerate(d0[1]["v1"].isnull()):
      if j:
        d0[1]["Sample"][i-1]=d0[1]["Sample"][i-1]+" "+d0[1]["Sample"][i]
    
    
    # NaNのデータ削除
    d1=d0[0][d0[0]["v1"].notnull()]
    d2=d0[1][d0[1]["v1"].notnull()]
    
    # 経過時間名の配列作成
    idx=d2["v1"][1].replace(" h","h").split(" ")
    
    # 表の左側のみ残す
    d11=d1.drop([0,1]).drop(["v20","v21"],axis=1)
    d22=d2.drop([0,1]).drop(["v20","v21"],axis=1)
    
    # 列番号のふりなおし
    d111=d11.reset_index(drop=True)
    d222=d22.reset_index(drop=True)
    
    # データを配列に
    d1111=d111["v1"].str.rsplit(" ",expand=True)
    d2222=d222["v1"].str.rsplit(" ",expand=True)
    
    # 配列データが文字列なので、数値に変換
    for i in range(7):
      d1111[i] = pd.to_numeric(d1111[i])
      d2222[i] = pd.to_numeric(d2222[i])
    
    # 列の名前を経過時間に変更
    d1111.columns=idx
    d2222.columns=idx
    
    # 行毎の最高値と、そのインデックスを調べ、maxとtmaxという列を追加して格納
    tmpmax=d1111.max(axis=1)
    tmptmax=d1111.idxmax(axis=1)
    d1111["max"]=tmpmax
    d1111["tmax"]=tmptmax
    
    # 行毎の最高値と、そのインデックスを調べ、maxとtmaxという列を追加して格納2
    tmpmax=d2222.max(axis=1)
    tmptmax=d2222.idxmax(axis=1)
    d2222["max"]=tmpmax
    d2222["tmax"]=tmptmax
    
    # 一番左にenという列を追加して、英語名を入れる
    d1111.insert(0,"en",d111["Sample"])
    d2222.insert(0,"en",d222["Sample"])
    
    # P.16の表とp.17の表を結合してddという表にまとめる
    dd=pd.merge(d1111,d2222,how="outer")
    
    # 英語名を日本語に翻訳したk、jaという配列作成
    ja = ['脂肪組織', '副腎', '膀胱', '骨(大腿骨)', '骨髄(大腿骨)', '脳', '目', '心臓', '注射部位', '腎臓', '大腸', '肝臓', '肺', 'リンパ節(下顎)', 'リンパ節(腸間膜)', '筋', '卵巣(雌)', '膵臓', '脳下垂体', '前立腺(男性)', '唾液腺', '肌', '小腸', '脊髄', '脾臓', 'お腹', 'テスト(悪)', '胸腺', '甲状腺', '子宮(女性)', '全血', '血漿', '血液:血漿比']
    
    # ddの一番右に日本語名を"ja"という列名で追加
    dd.insert(len(dd.columns),"ja",ja)
    
    # pickleパッケージで、作成した表を外部ファイル seibun_data2.pickle に保存
    import pickle
    with open('seibun_data2.pickle', 'wb') as f:
        pickle.dump(dd,f)
    

3.2.5 作成した表データを表示してみる

                         en    0.25h       1h       2h       4h       8h      24h      48h      max   tmax         ja
0            Adipose tissue    0.057    0.100    0.126    0.128    0.093    0.084    0.181    0.181    48h       脂肪組織
1            Adrenal glands    0.271    1.480    2.720    2.890    6.800   13.800   18.200   18.200    48h         副腎
2                   Bladder    0.041    0.130    0.146    0.167    0.148    0.247    0.365    0.365    48h         膀胱
3              Bone (femur)    0.091    0.195    0.266    0.276    0.340    0.342    0.687    0.687    48h     骨(大腿骨)
4       Bone marrow (femur)    0.479    0.960    1.240    1.240    1.840    2.490    3.770    3.770    48h    骨髄(大腿骨)
5                     Brain    0.045    0.100    0.138    0.115    0.073    0.069    0.068    0.138     2h          脳
6                      Eyes    0.010    0.035    0.052    0.067    0.059    0.091    0.112    0.112    48h          目
7                     Heart    0.282    1.030    1.400    0.987    0.790    0.451    0.546    1.400     2h         心臓
8            Injection site  128.000  394.000  311.000  338.000  213.000  195.000  165.000  394.000     1h       注射部位
9                   Kidneys    0.391    1.160    2.050    0.924    0.590    0.426    0.425    2.050     2h         腎臓
10          Large intestine    0.013    0.048    0.093    0.287    0.649    1.100    1.340    1.340    48h         大腸
11                    Liver    0.737    4.630   11.000   16.500   26.500   19.200   24.300   26.500     8h         肝臓
12                     Lung    0.492    1.210    1.830    1.500    1.150    1.040    1.090    1.830     2h          肺
13  Lymph node (mandibular)    0.064    0.189    0.290    0.408    0.534    0.554    0.727    0.727    48h   リンパ節(下顎)
14  Lymph node (mesenteric)    0.050    0.146    0.530    0.489    0.689    0.985    1.370    1.370    48h  リンパ節(腸間膜)
15                   Muscle    0.021    0.061    0.084    0.103    0.096    0.095    0.192    0.192    48h          筋
16        Ovaries (females)    0.104    1.340    1.640    2.340    3.090    5.240   12.300   12.300    48h      卵巣(雌)
17                 Pancreas    0.081    0.207    0.414    0.380    0.294    0.358    0.599    0.599    48h         膵臓
18          Pituitary gland    0.339    0.645    0.868    0.854    0.405    0.478    0.694    0.868     2h       脳下垂体
19         Prostate (males)    0.061    0.091    0.128    0.157    0.150    0.183    0.170    0.183    24h    前立腺(男性)
20          Salivary glands    0.084    0.193    0.255    0.220    0.135    0.170    0.264    0.264    48h        唾液腺
21                     Skin    0.013    0.208    0.159    0.145    0.119    0.157    0.253    0.253    48h          肌
22          Small intestine    0.030    0.221    0.476    0.879    1.280    1.300    1.470    1.470    48h         小腸
23              Spinal cord    0.043    0.097    0.169    0.250    0.106    0.085    0.112    0.250     4h         脊髄
24                   Spleen    0.334    2.470    7.730   10.300   22.100   20.100   23.400   23.400    48h         脾臓
25                  Stomach    0.017    0.065    0.115    0.144    0.268    0.152    0.215    0.268     8h         お腹
26           Testes (males)    0.031    0.042    0.079    0.129    0.146    0.304    0.320    0.320    48h     テスト(悪)
27                   Thymus    0.088    0.243    0.340    0.335    0.196    0.207    0.331    0.340     2h         胸腺
28                  Thyroid    0.155    0.536    0.842    0.851    0.544    0.578    1.000    1.000    48h        甲状腺
29         Uterus (females)    0.043    0.203    0.305    0.140    0.287    0.289    0.456    0.456    48h     子宮(女性)
30              Whole blood    1.970    4.370    5.400    3.050    1.310    0.909    0.420    5.400     2h         全血
31                   Plasma    3.970    8.130    8.900    6.500    2.360    1.780    0.805    8.900     2h         血漿
32      Blood:Plasma ratioa    0.815    0.515    0.550    0.510    0.555    0.530    0.540    0.815  0.25h     血液:血漿比

3.2.6 表を読み込み、その臓器に行った量の多い順にソート、そして、結果をCSVで出力

import pickle
import pandas as pd
import tabula

# データ読み込み
with open('seibun_data2.pickle', 'rb') as f:
    dd=pickle.load(f)

print(dd.sort_values(["max","tmax"], ascending=False).reset_index(drop=True))
print()
print(dd.sort_values(["max","tmax"], ascending=False).reset_index(drop=True)[["en","max","tmax","ja"]])
print()
print(dd.sort_values(["max","tmax"], ascending=False).reset_index(drop=True)[["max","tmax","ja"]])

# csvファイルとして外部出力
dd.to_csv("seibun_out01.csv")
dd.to_csv("seibun_out02.csv", index=None)
  • 最後に出力した表
        max   tmax         ja
0   394.000     1h       注射部位
1    26.500     8h         肝臓
2    23.400    48h         脾臓
3    18.200    48h         副腎
4    12.300    48h      卵巣(雌)
5     8.900     2h         血漿
6     5.400     2h         全血
7     3.770    48h    骨髄(大腿骨)
8     2.050     2h         腎臓
9     1.830     2h          肺
10    1.470    48h         小腸
11    1.400     2h         心臓
12    1.370    48h  リンパ節(腸間膜)
13    1.340    48h         大腸
14    1.000    48h        甲状腺
15    0.868     2h       脳下垂体
16    0.815  0.25h     血液:血漿比
17    0.727    48h   リンパ節(下顎)
18    0.687    48h     骨(大腿骨)
19    0.599    48h         膵臓
20    0.456    48h     子宮(女性)
21    0.365    48h         膀胱
22    0.340     2h         胸腺
23    0.320    48h     テスト(悪)
24    0.268     8h         お腹
25    0.264    48h        唾液腺
26    0.253    48h          肌
27    0.250     4h         脊髄
28    0.192    48h          筋
29    0.183    24h    前立腺(男性)
30    0.181    48h       脂肪組織
31    0.138     2h          脳
32    0.112    48h          目

3.3 この章のまとめ

4 今後

  • 今後文書追加するかも、しないかも

5 この文書のチェンジログ

  • 2021/09/02 初版

著者: NM Max

Created: 2021-09-07 火 12:12

Validate

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です