Closed hushianasan closed 1 year ago
コンソールでの動作は自信あり。 汎用性のあるコードを書き、ノーコード, Webでの動作を出来るように落とし込むことが鍵になると考える。
どう合わせてコード書けばいいかちょっと気になる
ひとまず1を採用する。1をどう汎用性のあるコードにするか。 CLIのみの移植性のないコードを書くのは正直釈然としない。 @igz0 @ddcgm63a すみません助言お願いします。
- コンソールでの動作に落とし込む
>>安牌
- ノーコードでのWeb動作に落とし込む
>>@igz0 がやめとけって。コード書いてから迷宮入り可能性大。
- 適当にHTML, CSS書いてどうにかする
>>Webを円滑に書けるなら。避けるのが安牌。 私の書くコードと接地面に合うWebを軽率に書いてくれる人がいない。無理。
- AI使って適当にWebUIを自動生成する
>>多分無理がある。ChatGPTを使って書くならありだが詰む可能性大。
時間がないので#11 #9 をつまみ食いして調査と手を動かす。
これは難しいですね。グラフ表示が必要ということでPython系統のフレームワークを選定しようかと思いましたが、 Django、Flaskあたりがエラーなく構築できるノウハウがないです。同時にエラーなくデプロイできるノウハウも持ってないと言えます。(わたしの知識不足ですね)
わたしならNext.jsでアプリケーションを作成、Versel(ホスティングサービス)にデプロイ、デプロイしたアプリケーションのURLを成果物として提出します。
Next.jsの選定理由は ・ページペースのルーティングで、ルーティングが他フレームワークと比べて簡単 ・SSR(サーバーサイドレンダリング)可能 ・Verselとの強力タッグでインフラ環境構築の時間を省略→実装時間を確保したい ・グラフはReact系統と相性のいいライブラリに描画させればいけるでしょ(楽観)
気になる点としては ・いきなりJSX記法はキツいのでは ・MVCモデル(Angular)のほうが、普通のHTMLとCSSが使えるので、わかりやすいのでは ・しかしAngularでグラフ…ハマるか…? ・Next.jsでもAngularでも、業務時間が8×5=40時間あっても、作業が終わるか自信ないボリューム感
として悶々と悩んでいます。
今回データはAPIから取ってくるだけなので、フロントエンドの作業ばかりかと考えてます。 (DB作ったり、API作らんでいいって意味。)
あとはigz0お兄さんにバトンタッチです。 全然違うアプローチがあるかも。 むしろあってくれ。
補記:期限が期限なので、わたしならテスト駆動は切り捨てます。 (READMEにあったので)
@ddcgm63a 氏が言わんとすることは理解しました。
これは難しいですね。グラフ表示が必要ということでPython系統のフレームワークを選定しようかと思いましたが、 Django、Flaskあたりがエラーなく構築できるノウハウがないです。同時にエラーなくデプロイできるノウハウも持ってないと言えます。
>>Python3で特別完結する必要もないのではと考えます。 正直わたしもそこまで経験があるわけでもないので(眠たいし)、調査の方進めます。#3 CLIも現在ちょこっと書いてます。
飲むぞ!!
— いぐぞー ✈️ 旅するプログラマー (@igz0) September 30, 2023
オラァ!!!!! pic.twitter.com/WkLb98jFMu
追加だ!! おらぁ!!!! pic.twitter.com/5AEAUI7qcP
— いぐぞー ✈️ 旅するプログラマー (@igz0) September 30, 2023
HUB系列の店舗でウイスキー飲み比べした!!!
— いぐぞー ✈️ 旅するプログラマー (@igz0) September 30, 2023
結論、どれも美味しかった!!!😋 pic.twitter.com/N0Jw6MApVJ
@igz0 お兄さん昨日のまっ昼間から今日の深夜にかけてアルコールをぶち込んでるからダメかもしれない・・・。
補記:期限が期限なので、わたしならテスト駆動は切り捨てます。
完全に同意です。テストコード書く時間はないです。
わたしならNext.jsでアプリケーションを作成、Versel(ホスティングサービス)にデプロイ、デプロイしたアプリケーションのURLを成果物として提出します。
私自身がやるなら、@ddcgm63a さんと同じく 同じくこの選定をすると思います。 ですが、React・Next.jsのキャッチアップ時間を考えると@husianasan にとって不可能に近いです。
新しく言語・フレームワークをキャッチアップする時間がないということを考慮に入れ
にするのがいいと思います。
テスト駆動開発, @ddcgm63a 氏の考え承知しました。 いまCLIと調査に着手しています。
@hushianasan @ddcgm63a [imo] 優先順位としては、CLIの調査よりまずスクレイピングに着手した方がいいかもです。
理由としては、
です。
@igz0 @ddcgm63a imo🍠🥔!!!!👏
これを完成の優先順位として改めました。グラフはひとまず置いておきましょう。
私のミスで気象庁非公式のJSONは一部情報を引っ張れない事が判明しました。
@igz0がはっちゃけすぎてChatGPT4とGitHub Copilotを使ってScraperを秒速で書いた事についてはここのIssueでのみ私は目を瞑りましょう。
import requests
from bs4 import BeautifulSoup
import pandas as pd
from datetime import datetime
import time
from urllib.parse import urlencode
# スクレイピング部分
def scrape_weather_data(year, month,block_no):
# 西条の場合はURLを変更
if block_no == '0958':
base_url = 'https://www.data.jma.go.jp/obd/stats/etrn/view/daily_a1.php'
else:
base_url = 'https://www.data.jma.go.jp/obd/stats/etrn/view/daily_s1.php'
params = {
'prec_no': '73',
'block_no': block_no,
'year': year,
'month': month,
'day': '',
'view': 'p1'
}
# Webページを取得
response = requests.get(base_url, params=params)
response.raise_for_status()
# BeautifulSoupでHTMLを解析
soup = BeautifulSoup(response.content, 'html.parser')
# テーブルを探す
table = soup.find("table", class_="data2_s")
if table is None:
full_url = f"{base_url}?{urlencode(params)}"
print(f"テーブルが見つかりませんでした。: {year}/{month} {full_url}")
# テーブルの中身がなかった場合にデバッグ用にHTMLを保存
# with open(f"weather_{year}_{month}.html", mode="w") as f:
# f.write(str(soup))
return []
# 行を抽出
trs = table.find_all("tr")
data_list = []
for tr in trs:
tds = tr.find_all("td")
if len(tds) == 0:
continue
# 降水量
prec = tds[3].text
# 平均気温
avg_temp = tds[6].text
# 最低気温
min_temp = tds[7].text
# 最高気温
max_temp = tds[8].text
row_data = [year, month, prec, avg_temp, min_temp, max_temp]
data_list.append(row_data)
return data_list
# 現在の年と月を取得
current_year = datetime.now().year
current_month = datetime.now().month
# 直近1年のデータを取得するための年月リストを生成 (現在の月は除外)
dates = []
current_month -= 1 # 現在の月を除外
if current_month == 0:
current_month = 12
current_year -= 1
for _ in range(12):
dates.append((current_year, current_month))
current_month -= 1
if current_month == 0:
current_month = 12
current_year -= 1
# 松山・宇和島・西条の観測地点番号と名称
block_info = {
'47887': '松山',
'47892': '宇和島',
'0958': '西条'
}
#出力データ
weather_data = []
for block, location in block_info.items():
for year, month in dates:
data = scrape_weather_data(year, month, block)
# time.sleep(0.1)
for row in data:
row_data = [location] + row # 地点名をデータに追加
weather_data.append(row_data)
# pandasを使用してデータフレームに変換
df = pd.DataFrame(weather_data, columns=['Location', 'Year', 'Month', 'Precipitation', 'Average Temp', 'Min Temp', 'Max Temp'])
print(df)
到達目標