Google Colaboratoryで 気象庁データをwebスクレイピング後 pandasに変換 [python]

Google Colaboratory（グーグル・コラボラトリー、あるいは略式の呼称でGoogle Colabと呼ばれる。）とは、
教育機関や研究機関において機械学習の普及を目的としたGoogleの研究プロジェクトの一つとなっています

https://su-gi-rx.com/archives/4670

Google Colaboratoryは
環境構築といった学習コストがかからないため
初めての方にとても魅力的です

とりあえず機械学習を使用してみたい人には
pycaret が個人的にはお勧めです

https://qiita.com/daikikatsuragawa/items/b8218cbe7cdc7afd978b

今臨床工学技士の方々と共同研究をしているのですが
AI時代を見据えて医療現場でDXを実施してきた
臨床工学技士の歴史を作られてきた有名な方は　強力な自作データベースがあるのですが

転職したばかりなど理由がある方は
特徴量が足りないという問題点に直面します

そこで気象庁のデータが活用できると思いました

気象庁のデータは一部自由に利用できることのできる魅力的なデータです

https://www.jma.go.jp/jma/kishou/info/coment.html

気象庁ホームページで公開している情報（以下「コンテンツ」といいます。）は、
どなたでも以下の(1)～(7)に従って、複製、公衆送信、翻訳・変形等の翻案等、自由に利用できます
商用利用も可能です
また、数値データ、簡単な表・グラフ等は著作権の対象ではありませんので、
これらについては本利用ルールの適用はなく、自由に利用できます

と記載されています　気象庁のデータを
効率よく自動で取得する仕組みが必要と思いました

そこで重要なのが
webスクレイピングです！
webスクレイピングとは、ウェブサイトから情報を抽出するコンピュータソフトウェア技術のことをいいます

https://www.gis-py.com/entry/scraping-weather-data

https://qiita.com/Cyber_Hacnosuke/items/122cec35d299c4d01f10

上記のサイトのソースコードを一部調整し
札幌だけの気象庁データをスクレイピングするソースコードを書きます
```
place_codeA = [14]
place_codeB = [47412]
place_name = ["札幌"]   

import requests
from bs4 import BeautifulSoup #ダウンロードしてなかったらpipでできるからやってね。
import csv

# URLで年と月ごとの設定ができるので%sで指定した英数字を埋め込めるようにします。
base_url = "http://www.data.jma.go.jp/obd/stats/etrn/view/daily_s1.php?prec_no=%s&block_no=%s&year=%s&month=%s&day=1&view=p1"

#取ったデータをfloat型に変えるやつ。(データが取れなかったとき気象庁は"/"を埋め込んでいるから0に変える)
def str2float(str):
  try:
    return float(str)
  except:
    return 0.0


if __name__ == "__main__":
  #都市を網羅します
  for place in place_name:
    #最終的にデータを集めるリスト (下に書いてある初期値は一行目。つまり、ヘッダー。)
    All_list = [['年月日', '陸の平均気圧(hPa)', '海の平均気圧(hPa)', '降水量(mm)', '平均気温(℃)', '平均湿度(%)', '平均風速(m/s)', '日照時間(h)']]
    print(place)
    index = place_name.index(place)
    # for文で2016年~2021年までの11回。
    for year in range(2016,2021):
      print(year)
      # その年の1月~12月の12回を網羅する。
      for month in range(1,13):
        #2つの都市コードと年と月を当てはめる。
        r = requests.get(base_url%(place_codeA[index], place_codeB[index], year, month))
        r.encoding = r.apparent_encoding

        # まずはサイトごとスクレイピング
        soup = BeautifulSoup(r.text)
        # findAllで条件に一致するものをすべて抜き出します。
        # 今回の条件はtrタグでclassがmtxになってるものです。
        rows = soup.findAll('tr',class_='mtx')

        # 表の最初の1~4行目はカラム情報なのでスライスする。(indexだから初めは0だよ)
        # 【追記】2020/3/11 申し訳ございません。間違えてました。
        rows = rows[4:]

        # 1日〜最終日までの１行を網羅し、取得します。
        for row in rows:
          # 今度はtrのなかのtdをすべて抜き出します
          data = row.findAll('td')

          #１行の中には様々なデータがあるので全部取り出す。
          # ★ポイント
          rowData = [] #初期化
          rowData.append(str(year) + "/" + str(month) + "/" + str(data[0].string))
          rowData.append(str2float(data[1].string))
          rowData.append(str2float(data[2].string))
          rowData.append(str2float(data[3].string))
          rowData.append(str2float(data[6].string))
          rowData.append(str2float(data[9].string))
          rowData.append(str2float(data[11].string))
          rowData.append(str2float(data[16].string))

          #次の行にデータを追加
          All_list.append(rowData)

    #都市ごとにデータをファイルを新しく生成して書き出す。(csvファイル形式。名前は都市名)
    with open(place + '.csv', 'w') as file:
      writer = csv.writer(file, lineterminator='\n')
      writer.writerows(All_list)
```

その後　リストをpandas にします
pandasについては以下の記事がわかりやすいです

https://www.self-study-blog.com/dokugaku/python-pandas-dataframe-make/

https://qiita.com/hungph_dev_ict/items/60d5b7b44a9b10798a86

### スクレイピングした気象庁データをpandas.DataFrameに変換
```
import pandas as pd
All_df=pd.DataFrame(data=All_list)
#0行目をcolumns用に取り出し
col=All_df.loc[0,:]

#0行目をcolumnsにしたDataFrame
all_data_df_p=pd.DataFrame(data=All_list, columns=col)
df=all_data_df_p

#DataFrameの作成と確認
all_data_df=df.drop(df.index[[0]])
all_data_df
```