tottocoslowlifer / tide

2024年のプロジェクト
0 stars 0 forks source link

2月14日 コメント #3

Closed victor-von-pooh closed 7 months ago

victor-von-pooh commented 8 months ago

対応事項

加工後のCSVデータを使ったデータ分析を行う.

  1. Pandas の DataFrame を使う?
  2. 最初の方の欠損値があるデータ部分を削除する(元ファイルはいじらないで, あくまでもデータ分析用のファイル内で行う)
  3. 年月日(と午前午後)の情報を基に時系列ごとにデータを一つのカラムに集約する(年月日情報が失われても構わない)
  4. matplotlib や seaborn, statsmodels でデータの可視化を行う
  5. 自由に分析してみる a. 周期があるか b. 統計学的視点から外れ値があるか c. その他必要に応じて行う(気象関連の知識・知見もあると好ましい)
  6. tide ディレクトリ下に requirements.txt というファイルを作成し, 今回使ったライブラリの名称(pip3 install ~~~ の形で扱うライブラリ名)を1行ずつ追加する
victor-von-pooh commented 8 months ago

先に対応していただきたいことが出てきたので共有.

.gitignore ファイルの作成

参考1: .gitignore の書き方。ファイル/ディレクトリの除外 参考2: 【Xcode/Swift】Xcodeでの.gitignoreの設定方法、自分が使っている.gitignoreの内容を解説

こちらのコミットにより, tide/data/Moji_Tide_2011-2021/.DS_Store というファイルが 追加されています.

スクリーンショット 2024-02-17 0 35 10

ある意味仕方がないのですが, これは Mac で自動生成されてしまうフォルダやファイルに関するメタ情報が記載されているファイルです.

これ以外にも, GitHub にアップロードする際にリポジトリ内に追加したくないファイルが出てくると思います.

そんな時に役に立つのが, .gitignore ファイルです.

tide/.gitignore というファイルを作成し, そこの1行目に .DS_Store と書くとそれ以降この名前のファイルが Git の差分として出てこなくなります.

上手くいかなかった場合はまたご連絡ください.

tottocoslowlifer commented 8 months ago

下の方の対応が完了しましたので,ご確認いただけたら幸いです.

また,PandasのDataFrameを用いて分析を行いたいと考えております. とりあえず, ステップ2と3を行ってみます.

victor-von-pooh commented 8 months ago

確認しました. それでは2, 3からよろしくお願い致します.

tottocoslowlifer commented 8 months ago

まず,2を実行したファイル tide/data/Moji_Tide_2011-2021/csv/9010_2011-2021_edited.csv をアップロードしました.

3を実行する過程で,pandasのto_datetimeを用いたいのですが,このままの書式では時刻が正しく認識されず,エラーとなりました. 上のファイルをさらに変形する必要があると考えたのですが,特に時刻(と午前/午後)に関して,具体的にどのように対処すれば良いか分からず,困っております.

よろしくお願いいたします.

victor-von-pooh commented 8 months ago

お疲れ様です.

まず,2を実行したファイル tide/data/Moji_Tide_2011-2021/csv/9010_2011-2021_edited.csv をアップロードしました.

言い忘れていましたが, CSVやJSON, Text ファイルなどをプログラムを実行して作成した場合に, 作成したファイルのみのアップロードはやめましょう. 作成されたファイルがどのような手順で作られたのか, それが想定通りになっているのかがわかりません. また, あくまでプロジェクトの徹頭徹尾再現ができるように, 使ったプログラムは全て置きましょう.

VSCode で GitHub と連携しているのであれば簡単ですが, git commit ~~~ のようなターミナル上のコマンドで扱う場合は正しく動かしましょう. GitHub 上に直接のアップロードは NG です.

また, 今回アップロードしていただいたファイルですが, 作成は不要です. 理由としては, この後も編集する可能性がある(これ単体を使うことがあるかわからない)からです. 実際にモデル学習のフェーズに入る段階で, inputs の形式に合わせられるようにデータを整形して作成したファイルを置くのは良いと思いますが, 現段階ではそれも難しそうです.

まず, 対応いただくこととしては, データ分析に使っている Notebook ファイルをこまめに commit しましょう. 現在どのようなことを行っていて, どういう結果が得られているのかを常にフィードバックできるようにしましょう.

tottocoslowlifer commented 8 months ago

かしこまりました.

notebooksというフォルダを作り,カラムへの集約を試みた際のNotebookファイルMoji_analysis.ipynbをcommitしました. ご確認及びレビューの程,よろしくお願いいたします.

tottocoslowlifer commented 8 months ago

お休み中のところ,恐れ入ります.

2015〜2016のデータをmatplotlibで分析してみました.

また,明日から26日(月)まで不在のため,修正等ができない状況です. よろしくお願いいたします.

victor-von-pooh commented 8 months ago

2/23 データ分析フィードバック

お疲れ様です. 2月23日のコミットに対するフィードバックコメントになります.

2015~2016年の各時刻ごとの最大値の調査, 1日の中の変位の可視化, 2年間の潮位の変化の傾向分析, 非常に面白い分析ができていると思いました. 特に, 毎日約1時間ずつ波が遅れていくという事象が確認できたのは月の満ち欠けなどに起因すると考えて, 予測モデルの際の重要なファクターになりそうで, なるほどと思いました.

以降, 細かい粒度でのコメントになります.

全体に関して

  1. セクションを分ける マークダウンを活用して, Notebook ファイル内のセクション分けをすると何をしている部分なのかがわかりやすくなると思います. 1個目のセルの上に「モジュール, データフレームの読み込み」というセクションが出来たまま, その後何も無いと不自然な気がします.

  2. コーディングスタイルを統一する Matplotlib を使っているコードが, 15個目と18, 19個目のセルにありますが, それぞれ

のように, 似たようなことが異なるスタイルで書かれています. もちろんどちらかにしかない機能を上手く活用できるように敢えて使い分けをするということはありますが, この場合は似たコードを使い回して統一できると思います.

セル1〜4

セル5〜6

セル7〜9

セル10〜13

セル14

セル15

セル16〜19

次の分析について

上の直し等が確認出来次第, 次の分析に移りましょう. 方針が既に定まっているのであればそのまま続けてください. 手詰まりのようでしたら相談しましょう.

tottocoslowlifer commented 8 months ago

ありがとうございます.これから,直しに取り組みます. また,次の分析に関してはまだ方向性が定まっていない状態なので,相談させていただきたいです.

よろしくお願いいたします.

tottocoslowlifer commented 8 months ago

お疲れ様です. ただいま,手直しが完了したのですが,notebooks/.ipynb_checkpoints/が新たにアップロードされてしまいました. gitignoreを使おうとしたものの,やり方がよく分からずにいます.

ご確認の程,よろしくお願いいたします.

victor-von-pooh commented 8 months ago

@tottocoslowlifer お疲れ様です.

ただいま,手直しが完了したのですが,notebooks/.ipynb_checkpoints/が新たにアップロードされてしまいました. gitignoreを使おうとしたものの,やり方がよく分からずにいます.

秋田の知識不足でした. こちらの対応方法は次のようになるかと思われます(参考).

対応方法

.gitignore ファイルの2行目以降に

notebooks/.ipynb_checkpoints/

と書いておく.

なお, 既に出来ているアップロードされているフォルダについては, 手動で消す必要があると思われます.

今後について

まずはこれについて対応よろしくお願い致します. また, scripts/Moji_to-columns.py の削除もしておきましょう.

よろしくお願い致します.

tottocoslowlifer commented 8 months ago

ありがとうございます. 対応が完了しましたので,ご確認お願いいたします.

victor-von-pooh commented 8 months ago

1個目のセルは, matplotlib と pandas は外部ライブラリなので, 行間を空けずに

import datetime

import matplotlib.pyplot as plt
import pandas as pd

としましょう. こちらが直ったら次に行きましょう.

tottocoslowlifer commented 8 months ago

ご確認ありがとうございます. 対応が完了いたしました.

victor-von-pooh commented 8 months ago

@tottocoslowlifer 確認が取れました. ありがとうございます.

欠損値への対応

まずは, セクション「全て欠損している日の削除」の最後に次の2つのセルを追加しましょう.

nan_index = []
for i in range(len(new_df)):
    if new_df.loc[i].hasnans:
        nan_index.append(i)

new_df.iloc[nan_index]
for index in nan_index:
    print(new_df.iloc[index]["年月日"], ":")
    print("\t", end="")
    for col in time_cols:
        if str(new_df.iloc[index][col]) == "nan":
            print(col[:-8], end=' ')
    print("\n")

1つ目のセルは, おそらく誤って消されてしまったセルになると思いますが, 以前の notebook における部分的な欠損が見られる日付を抽出した DataFrame を作るコードになります.

2つ目のセルは, 上記で出した DataFrame の各日の欠損している時間を print するコードになります.

対応いただきたいこと

これからは, 欠損値を補完する方法を考えていただくことになります.

理由

難しさについて

参考

第286話|知っておいて損のない時系列データの欠測値補完方法

ただし, どれも精度の良い補完が出来ているとは言い難い.

統計的情報を用いた補完

2015年1月1日〜2016年12月31日までの2年間のデータを用いて, 統計的に補完する方法を考えてみる.

例えば,

など.

メタ情報を考慮した補完

月の満ち欠けや, 降水量などのデータを利用して重回帰分析などを試してみる.

tottocoslowlifer commented 8 months ago

ありがとうございます. 貼っていただいたリンクも確認させていただきました.

「メタ情報を考慮した補完」をやってみたいのですが,初めてのデータ分析には難しいでしょうか.その場合,「統計的情報を用いた補完」の1つ目の手段を試してみたいです.

victor-von-pooh commented 8 months ago

@tottocoslowlifer ご確認ありがとうございます.

「メタ情報を考慮した補完」をやってみたいのですが,初めてのデータ分析には難しいでしょうか.

そんなことは無いと思われます. また, 「統計的情報を用いた補完」の方も試し, より良い方またはハイブリッド型を採用することを目標にするという意図でした. まずは統計的なアプローチをかけて, データの性質をより掴んでから「メタ情報を考慮した補完」に移れるようにしましょう.

tottocoslowlifer commented 8 months ago

わかりました.ご返信ありがとうございます. 今後の流れを理解したいのですが,明日2月28日(水)20:00-21:00ごろ,ミーティングに応じていただくことは可能でしょうか.

よろしくお願いいたします.

victor-von-pooh commented 8 months ago

@tottocoslowlifer

今後の流れを理解したいのですが,明日2月28日(水)20:00-21:00ごろ,ミーティングに応じていただくことは可能でしょうか.

了解しました. それでは, Googleカレンダーの方にも予定を入れておいていただけますでしょうか?

よろしくお願い致します.

victor-von-pooh commented 8 months ago

Zoom の URL はこちらになります.

トピック: 欠損値補完の方法検討についてのMTG 時刻: 2024年2月28日 08:00 PM 大阪、札幌、東京

参加 Zoom ミーティング https://tus-ac-jp.zoom.us/j/92156768099?pwd=VU1MOFdiNFVkdzhBZlNTVXRRWnVpUT09

ミーティング ID: 921 5676 8099 パスコード: 302739

tottocoslowlifer commented 8 months ago

ありがとうございます.確認いたしました.

victor-von-pooh commented 8 months ago

データ分析: 欠損値補完についての終わりに伴い, 「統計的情報を用いた補完」はここまでにします.

続いて, 「メタ情報を考慮した補完」に移ろうと思いますが, そのための追加データの取得をしましょう.

こちらより,

の影響を受けているということだったので, 月齢カレンダーデータ気象庁の1時間ごとのデータを取得しましょう. どちらもどこでも使えるように, 潮位データの期間全てを取得しましょう.

気象データは,

は最低でも取得しましょう. その他のオプションは自己判断で追加しましょう.

tottocoslowlifer commented 8 months ago

ダウンロードした月齢データをVSCodeで開いたところ,日本語部分の文字化けが発生しました.

Shift JISのファイルが,VSCode標準のUTF-8でエンコーディングされてしまっているのが原因とみて,調べてみたのですが, 「エンコーディング付きで保存」の機能が反応せず,解決しません.

ご確認の程,お願いいたします.

victor-von-pooh commented 8 months ago

ダウンロードした月齢データをVSCodeで開いたところ,日本語部分の文字化けが発生しました.

あるあるですね.

Shift JISのファイルが,VSCode標準のUTF-8でエンコーディングされてしまっているのが原因とみて,調べてみたのですが

良いですね, おそらく正しいと思われます◎

質問ですが, 月齢データの CSV ファイルを VSCode 上で確認したいということでしょうか?それとも, Python でコーディングする際に Pandas でエンコーディングができないということでしょうか?

前者であれば, ただ確認したいだけなら Google のスプレッドシートで開くのが良いかと思われます(VSCode 上ではセルのようなものはなく, 本当にただカンマ区切りになっているため). また二度手間ですが, スプレッドシートで開いたものをダウンロードすると UTF-8 に自動で変換された記憶があります.

後者であれば,

import pandas as pd

data = pd.read_csv("mooncal2000.csv", encoding="shift-jis")
data.to_csv("2000.csv")

とすれば, 2000.csv という名前のファイルで UTF-8 のデータが取得できます.

おそらく後者の方が楽でしょう.

tottocoslowlifer commented 8 months ago

ありがとうございます. GitHub上で確認した際に,文字化けのために内容が確認できないということが気になっておりました.

ただいま,実験的にmooncal2011.csvをGitHubからダウンロードしたところ,Excel等を使って内容の確認ができました. その場合は気にしなくて大丈夫でしょうか.

victor-von-pooh commented 8 months ago

GitHub上で確認した際に,文字化けのために内容が確認できないということが気になっておりました.

どうやら GitHub はUTF-8 の仕様にしか対応していないようですね. それなら生データではなく, UTF-8 にしたデータを置き直すのが良いかと思われます.

tottocoslowlifer commented 8 months ago

ありがとうございます. Shift-JISのままで大丈夫でしょうか?

victor-von-pooh commented 8 months ago

UTF-8 に直したデータを置き直してください.

tottocoslowlifer commented 8 months ago

かしこまりました.今から取り組みます. 加えて,降水量データ,気温データのアップロードを行い,月毎のデータを10年分まとめたファイルをそれぞれ作成しました. その際のコードはscriptsに載せてあります.

天気データのみ,取得に時間がかかっており,後ほど処理します.

victor-von-pooh commented 8 months ago

加えて,降水量データ,気温データのアップロードを行い,月毎のデータを10年分まとめたファイルをそれぞれ作成しました. その際のコードはscriptsに載せてあります.

ありがとうございます. 降水量と気温, 天気は全て一括でデータ取得ができたと思いますが, 一つずつ分けたということでしょうか?

tottocoslowlifer commented 8 months ago

画像のように,ファイルサイズが大きすぎるため,一括で取得できませんでした.

スクリーンショット 2024-03-05 11 18 53
tottocoslowlifer commented 8 months ago

また,先ほどの

UTF-8 に直したデータを置き直してください.

に関して,11:23現在,GitHub上で表示ができているかと思うのですが,この状態で大丈夫でしょうか. (特に何も手を加えていないのですが...)

victor-von-pooh commented 8 months ago

画像のように,ファイルサイズが大きすぎるため,一括で取得できませんでした.

期間を短くして, 4ヶ月ごとのデータを取るなどはどうでしょうか?

スクリーンショット 2024-03-05 11 23 58

確かに取得の面倒はありますが, データを後の処理で統合する際に, concatenate する必要がなくなります. どちらでも構いません.

11:23現在,GitHub上で表示ができているかと思うのですが,この状態で大丈夫でしょうか.

こちらで確認したところ, 文字化けは直っていないようです.

スクリーンショット 2024-03-05 11 28 43
tottocoslowlifer commented 8 months ago

期間を短くして, 4ヶ月ごとのデータを取るなどはどうでしょうか?

データの取得時にミスをしそうなので,このままにしておきたいです.

こちらで確認したところ, 文字化けは直っていないようです.

下関のデータと勘違いしておりました.申し訳ありません.対応します.

tottocoslowlifer commented 8 months ago

対応が完了いたしました. ご確認の程,よろしくお願いいたします.

victor-von-pooh commented 8 months ago

コメント

ご対応ありがとうございます.

以下コメントになります.

tide/scripts/Moon_convert.py について

import pandas as pd
cnt = 2011
for i in range(10):
    dir = "../data/Moon_2011-2021"
    data = pd.read_csv(dir + "/raw/mooncal" + str(cnt+i) + ".csv", encoding="shift-jis")
    data.to_csv(dir + "/" + str(cnt+i) + ".csv")

まず, import pandas as pd の下は2行空けましょう. また, dir = "../data/Moon_2011-2021" は常に同じものを使っているので, for 文の外に出しましょう. あとは良いと思います.

tide/scripts/Shimonoseki_integrate.py について

get_raw_dir() 関数と get_raw_data() 関数で行っていることが実質同じなように伺えます. 34行目は get_raw_dir() 関数を流用してできるのではないでしょうか? あとは良さそうですね.

tottocoslowlifer commented 8 months ago

ご確認ありがとうございます. ただいまコミットいたしました.

victor-von-pooh commented 8 months ago

コメント

お疲れ様です. 以下コメントになります.

tide/data/Moon_2011-2021 について

こちら2021年のみありません. ご対応よろしくお願い致します.

また, 年ごとに分ける必要もないと思うので, 生データを tide/scripts/Moon_convert.py で UTF-8 に直して置き換え, tide/data/Moon_2011-2021/20xx.csv は全て削除し, 全データを統合した1つのファイルにまとめましょう.

それに伴い, tide/scripts/Moon_convert.py も書き換えましょう.

tide/data/Shimonoseki_2011-2021 について

まず全体的に, 均質番号 の項は要らないと思われます. もちろんデータの性質上大事ではありますが, ほとんど使わない可能性の方が高い(使いづらい)ので削除しましょう. こちらも tide/scripts/Shimonoseki_integrate.py を修正しましょう.

また, 天気のデータですが, すみません, こちらが確認不足でしたが欠損が多いのと判断が難しいため無しにしましょう. せっかく用意していただいたところ申し訳ございません. 削除対応をよろしくお願い致します.

tottocoslowlifer commented 8 months ago

お疲れ様です.

  1. tide/scripts/Moon_convert.py の編集をする過程で,生データをUTF-8に書き換えるコード(コメントアウトされている箇所)を加えたところ,エラーメッセージが出る.
  2. 上の過程で,元のcsvファイル及びMooncal_2011-2021.csvにインデックスが表示されるようになってしまった.
  3. tide/scripts/Shimonoseki_integrate.pyで,均質番号の削除に関するコードを追加しただけにも関わらず,以下のエラーが出るようになった.
    dirnames.remove(".DS_Store")
    ValueError: list.remove(x): x not in list

以上の3点で行き詰まっております. よろしくお願いいたします.

victor-von-pooh commented 8 months ago

一旦コミットを元に戻しましょう. まず, こちらのリンクから元データをダウンロードし直して状態をリセットしましょう.

tottocoslowlifer commented 8 months ago

戻せたかと思います. ご確認の程よろしくお願いいたします.

victor-von-pooh commented 8 months ago

ありがとうございます. ここは少し難しいので, 長めに時間を取れる(2時間程度かそれ以上を目安に)日時で一緒に進めましょう. またカレンダーの中で「空」の部分で都合がつくところに Zoom をセッティングしましょう.

参加 Zoom ミーティング https://www.google.com/url?q=https://tus-ac-jp.zoom.us/j/92156768099?pwd%3DVU1MOFdiNFVkdzhBZlNTVXRRWnVpUT09&sa=D&source=calendar&usd=2&usg=AOvVaw3FQoXTP71gguq1dKpBn3um

ミーティング ID: 921 5676 8099 パスコード: 302739

tottocoslowlifer commented 8 months ago

ありがとうございます. 招待を送信させていただきました.

victor-von-pooh commented 8 months ago

@tottocoslowlifer すみません, 次の issue に移る前に対応して頂きたいことがあります.

先ほどは気が付かなかったのですが, tide/data/Moon_2011-2021/raw/UTF-8_mooncal20xx.csv ファイルについて, 月日 のカラムがありますが, このままだと data/Moon_2011-2021/Mooncal_2011-2021.csv にまとめたときに何年かの情報が抜け落ちてしまうので, tide/scripts/Moon_convert.py を再度書き直しましょう.

具体的には, まず1行目に import datetime を追加し, get_raw_files() 関数

def get_raw_files(dir_path) -> list:
    filenames = []
    cnt = 2011

    for i in range(11):
        name = dir_path + "/raw/mooncal" + str(cnt+i) + ".csv"
        save_name = dir_path + "/raw/UTF-8_mooncal" + str(cnt+i) + ".csv"
        data = pd.read_csv(name, encoding="shift-jis")
        data.to_csv(save_name, index=False)
        filenames.append(save_name)
    return filenames

を,

def get_raw_files(dir_path) -> list:
    filenames = []
    cnt = 2011

    for i in range(11):
        name = dir_path + "/raw/mooncal" + str(cnt+i) + ".csv"
        save_name = dir_path + "/raw/UTF-8_mooncal" + str(cnt+i) + ".csv"

        data = pd.read_csv(name, encoding="shift-jis")
        cols = [col for col in data.columns if col != "月日"]
        sorted_cols = ["年月日"] + cols

        data["年月日"] = [
            datetime.date(
                cnt+i,
                int(data["月日"][j].split("/")[0]),
                int(data["月日"][j].split("/")[1]),
            ) for j in range(len(data))
        ]
        data = data.drop("月日", axis=1).reindex(columns=sorted_cols)

        data.to_csv(save_name, index=False)
        filenames.append(save_name)

    return filenames

のようにしましょう.

tottocoslowlifer commented 8 months ago

対応が完了いたしました. ご確認の程よろしくお願いいたします.

victor-von-pooh commented 8 months ago

ご対応ありがとうございます.

次の issue を立てるのに少し時間が必要そうなので, 先に今までの中で各 README.md ファイルに記載することが無いかを確認し, 対応をお願い致します.

また, 余裕があれば対応事項6の

tide ディレクトリ下に requirements.txt というファイルを作成し, 今回使ったライブラリの名称(pip3 install ~~~ の形で扱うライブラリ名)を1行ずつ追加する

こちらをお願い致します. 書き方の参考を置いておきます.

tottocoslowlifer commented 8 months ago

ありがとうございます.

README.mdファイルの編集と,requirements.txtの追加を行ったのですが,requirements.txtにはnotebook内で使ったライブラリも記入するのでしょうか. または,現在の状態のように,scripts内のファイルでインポートしたものだけで良いでしょうか.

よろしくお願いいたします.

victor-von-pooh commented 8 months ago

notebook も含め, 使った外部ライブラリ名を全て記載しましょう. 内部ライブラリは必要ありません.

tottocoslowlifer commented 8 months ago

かしこまりました. 対応が完了いたしました.

victor-von-pooh commented 8 months ago

コメント

ご対応ありがとうございます. 以下コメントになります.

tide/requirements.txt について

1行目, matplotlib.pyplotmatplotlib にしましょう.

tide/README.md について

スクリプトファイルが追加され, 実行が必要になっているのでこちらにその旨を記載しましょう.