Supplement 1 Webスクレイピングの一括処理

「#33 Section 2 URLからデータを読み込む」、「#34 Section 3 データの修正・保存」に関しては、URLからひとつづつExcelファイルを読み込み・修正・保存していきましたが、forループを用いて一括で処理することができます。

レベルが高くなりますが、このような処理はよく遭遇しますので、チャレンジしていきましょう。

コードセルに多くの行のコードが並ぶと、ちょっとビビってしまいますね。

はじめから、このようなコードを書ける人はいないのでご安心を!

みんな、先輩から教わったり、WEBやGitHubで見つけたコードをコピペして必要な修正を加えて、少しづつ慣れて、理解し、コードが描けるようになります。

見ただけで難しいと判断して放り出さず、解説の文章だけでも読んでみてください。同じような処理をすることがあったら思い出すことがあると思います。若干の修正を施し、「ctrl」+「enter」でコードが走った時には、爽快感とともに、あなたの実力もアップしているはずです。


プログラムを解説したスライドをご覧ください!


自分のコラボのノートブックで確認してみましょう。下記の使用した全コードを参照してください。

data = {
    "H26": [
        ("https://www.mhlw.go.jp/file/06-Seisakujouhou-12400000-Hokenkyoku/0000139842.xlsx", "内服外来院内"),
        ("https://www.mhlw.go.jp/file/06-Seisakujouhou-12400000-Hokenkyoku/0000139844.xlsx", "内服外来院外"),
        ("https://www.mhlw.go.jp/file/06-Seisakujouhou-12400000-Hokenkyoku/0000139846.xlsx", "内服入院"),
        ],

       ………………………………….

    "H27": [
        ("https://www.mhlw.go.jp/file/06-Seisakujouhou-12400000-Hokenkyoku/0000177288.xlsx", "内服外来院外"),
        ("https://www.mhlw.go.jp/file/06-Seisakujouhou-12400000-Hokenkyoku/0000177290.xlsx", "内服外来院内"),
        ("https://www.mhlw.go.jp/file/06-Seisakujouhou-12400000-Hokenkyoku/0000177292.xlsx", "内服入院"),
        ],
     "R3": [
        ("https://www.mhlw.go.jp/content/12400000/001122627.xlsx", "内服外来院外"),
        ("https://www.mhlw.go.jp/content/12400000/001122629.xlsx", "内服外来院内"),
        ("https://www.mhlw.go.jp/content/12400000/001122631.xlsx", "内服入院"),
        ],
       }
       
for year, urls in data.items():
  for url, location_type in urls:
    df = pd.read_excel(url, skiprows=[0, 1, 3]
                       , dtype={"薬効\n分類": "object", "医薬品\nコード": "object"
                       , "後発品\n区分": "object"})
    df[["薬効\n分類", "薬効分類名称"]] = df[["薬効\n分類", "薬効分類名称"]].fillna(method="ffill")
    df = df.rename(columns={"薬効\n分類": "薬効分類", "医薬品\nコード": "医薬品コード"
                       , "薬価基準収載\n医薬品コード": "薬価基準収載医薬品コード"
                       , "後発品\n区分": "後発品区分"})
    df[["年度", "剤型_場所"]] = [year, location_type]
    file_path = f'/content/drive/MyDrive/Colab Notebooks/医療/データ2/{year}_{location_type}.csv'
    df.to_csv(file_path, index=False)


コメント