質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

1220閲覧

時刻と緯度、経度、深さがいらない場合のプログラムを教えて下さい

skp_1212

総合スコア0

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/12/23 13:19

Webサイトにサンプルがあった地震予測プログラムを改良して、「地震の発生日」「震央地名」「規模(M)」「震度」だけで予測を行いたいです。以下コードは「地震の発生日」「地震の発生時刻」「震央地名」「緯度」「経度」「規模(M)」「震度」がある場合のサンプルプログラム(Webサイトで発見したもの)となります。Prophetライブラリを使って予測をしているみたいです。

このプログラムをどのようにして改良すればよいか、アドバイスを下さい。

#インポートするライブラリ
import pandas as pd
pd.options.display.max_columns = None
pd.options.display.max_rows = None
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
import seaborn as sns
sns.set()
sns.set(font=["Yu Gothic", "Hiragino Maru Gothic Pro"])
%matplotlib inline
import warnings
warnings.filterwarnings("ignore")
from sklearn.model_selection import train_test_split
from dateutil.relativedelta import relativedelta
import os
import glob
from datetime import datetime

ディレクトリ変更

os.chdir(r"/Users/yousukesano/Desktop/T18115_Data/02_4年後期/卒業研究/eq_list_test")#csv読み込み

df = pd.DataFrame(columns = [])

for i in glob.glob("地震リスト"): #ディレクトリから「地震リスト」がつくファイル読み込む
tmp = pd.read_csv(i)
df = pd.concat([df, tmp])

df = df.reset_index(drop = True)
df.head()
df1 = df.dropna()
df1.shape

df1.to_csv("eqall3.csv")

df1 = pd.read_csv("eqall3.csv",parse_dates=True, index_col=0)

df1["地震の発生日"][0]#「地震の発生日」で検索をかける
df1["地震の発生時刻"][0] #「地震の発生時刻」で検索をかける

まずは文字列としてdateとtimeを結合

date = df1["地震の発生日"][0]
time = df1["地震の発生時刻"][0]
str_datetime = f"{date} {time}"#日付と時刻を結合させる
str_datetime

datetime型に変換する

from datetime import datetime as dt
datetime = dt.strptime(str_datetime, "%Y/%m/%d %H:%M:%S")
datetime

datetimes = []

for index, datum in df1.iterrows():
date = datum["地震の発生日"]
time = datum["地震の発生時刻"]
str_datetime = f"{date} {time}"
datetime = dt.strptime(str_datetime, "%Y/%m/%d %H:%M:%S")
datetimes.append(datetime) # datetimesというリストに格納する

df1["ds"] = datetimes # 新しいdsというカラムに格納する

df2 = df1.rename(columns={'深さ.1': '深さ', '最大震度.2':'最大震度'})
df2.head()

目的変数をyというカラムに変更する必要がある

df3 = df2.rename(columns={"M":"y"})
df3.head()

df3.dtypes

#学習データとテストデータに分ける
df_test = df3[df3['ds'] > dt(2000,1,1,0,0)] #2000年から2007年までをテストデータとする。
df_test.head()

df_train = df3[df3["ds"] <= dt(2021,1,1,0,0)]
df_train.tail()

print("学習データ:",df_train.shape)#学習データの総数を表示する
print("テストデータ:",df_test.shape) #テストデータの総数を表示する

df3.isnull().sum()
df3.dtypes

Prophetを利用した予測

from fbprophet import Prophet
from fbprophet.plot import add_changepoints_to_plot

#Prophetで予測するためには、目的変数としてy(マグニチュード)、時間データとしてds(年月日時間)を設定する必要がある。
#過去からの経緯で予測を行う。

model = Prophet( growth='linear',
changepoints=None,
n_changepoints=25,
changepoint_range=0.8,
yearly_seasonality='auto',
weekly_seasonality='auto',
daily_seasonality='auto',
holidays=None,
seasonality_mode='multiplicative',
seasonality_prior_scale=20.0,
holidays_prior_scale=10.0,
changepoint_prior_scale=0.05,
mcmc_samples=0,
interval_width=0.8,
uncertainty_samples=1000,
stan_backend=None,)

model.fit(df_train)

将来の予測したいデータを用意する必要がある 箱を用意

future = model.make_future_dataframe(24*7200, freq="h") #24(時間)*800(日数)

future.tail()

予測してみる

forecast = model.predict(future)

model.plot(forecast)
plt.xlim(dt(1919,5,1), dt(2020,12,31))
plt.show()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2021/12/23 14:47

> Webサイトにサンプルがあった地震予測プログラム 引用元を追記しましょう。 コードは「コードの挿入」で記入してください。
guest

回答1

0

「地震の発生日」「震央地名」「規模(M)」「震度」だけで予測を行いたい

とのことですが、時刻、緯度、経度無しでぞれらの 予測は難しいんじゃないかと思いますよ。
結果としてそれらだけ必要なのであれば、それらだけ抜きだして表示なり保存ないすればいいと思います。

データから、ということであれば、元データから、「地震の発生日」「震央地名」「規模(M)」「震度」以外のものを取り除けばいいでしょう。
CSVを読み込んだタイミングで必要なものだけ取り出すのが楽ですね。

投稿2021/12/23 13:45

TakaiY

総合スコア13790

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問