Google Colaboratory(グーグル・コラボラトリー、あるいは略式の呼称でGoogle Colabと呼ばれる。)とは、
教育機関や研究機関において機械学習の普及を目的としたGoogleの研究プロジェクトの一つとなっています
Google Colaboratoryは
環境構築といった学習コストがかからないため
初めての方にとても魅力的です
とりあえず機械学習を使用してみたい人には
pycaret が個人的にはお勧めです
今臨床工学技士の方々と共同研究をしているのですが
AI時代を見据えて医療現場でDXを実施してきた
臨床工学技士の歴史を作られてきた有名な方は 強力な自作データベースがあるのですが
転職したばかりなど理由がある方は
特徴量が足りないという問題点に直面します
そこで気象庁のデータが活用できると思いました
気象庁のデータは一部自由に利用できることのできる魅力的なデータです
気象庁ホームページで公開している情報(以下「コンテンツ」といいます。)は、
どなたでも以下の(1)~(7)に従って、複製、公衆送信、翻訳・変形等の翻案等、自由に利用できます
商用利用も可能です
また、数値データ、簡単な表・グラフ等は著作権の対象ではありませんので、
これらについては本利用ルールの適用はなく、自由に利用できます
と記載されています 気象庁のデータを
効率よく自動で取得する仕組みが必要と思いました
そこで重要なのが
webスクレイピングです!
webスクレイピングとは、ウェブサイトから情報を抽出するコンピュータソフトウェア技術のことをいいます
上記のサイトのソースコードを一部調整し
札幌だけの気象庁データをスクレイピングするソースコードを書きます
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日〜最終日までの1行を網羅し、取得します。
for row in rows:
# 今度はtrのなかのtdをすべて抜き出します
data = row.findAll('td')
#1行の中には様々なデータがあるので全部取り出す。
# ★ポイント
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については以下の記事がわかりやすいです
スクレイピングした気象庁データを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