どんな記事
Pythonで今後も絶対使うだろうな、でも忘れちゃうだろうな、というコードの備忘録です。自分のためのまとめ。
記事の更新
2023年11月16日
新しいコードを追加しました。
Pandas
df.apply()
の中で変数を使う
「1行前の値」を変数に格納しながら処理する等。row
は処理中の行、row.name
はその行のindex。
import pandas as pd
def b4_day_close( df ) :
b4_date, b4_close, day_close = None, None, None
def apply_logic( row ):
nonlocal b4_date, b4_close, day_close
today, hour = row.name, row.name.hour
diff_seconds = ( today - b4_date ).seconds if b4_date else None
if diff_seconds and diff_seconds > 60 and hour == 16 :
day_close = b4_close
b4_date, b4_close = today, row["c"]
return day_close
return apply_logic
df['b4_day_c'] = df.apply( b4_day_close( df ), axis=1 )
df.apply()
で複数列を返す
ちょっとしたバックテストならループ処理を作成しなくても解決できる。
import pandas as pd
dt={ "x": [ 1100, 1200, 1300 ],
"y": [ 2100, 2200, 2300 ], }
df = pd.DataFrame(dt)
def fnc( df ) :
return df["x"]+1,df["x"]+2
df[["a","b"]] = df.apply( fnc( df ), axis=1, result_type='expand' )
複数の条件でデータを抽出
import pandas as pd
symbol = 7203
df.loc[
( df['銘柄コード'] == symbol ) & ( df['項目'] == '修正1株益 前年同期比' ),
[ '年月', '数値' ]
].sort_values( [ '年月' ], ascending=[ True ] )
上記のテーブルから、以下のようなデータを抽出できる。
pandas datetimeのnativeをawareに変換
pandasの時系列データのタイムゾーンを処理(tz_convert, tz_localize) | note.nkmk.me
pandasにおいて時系列データのタイムゾーンを処理するにはtz_convert(), tz_localize()を使う。pandas.Series.tz_convert — pandas 1.0.3 documentation pandas.Series.tz_localize — pandas 1.0.3 documentation タイムゾーン情報が設定されている(awareな)データのタイムゾーンを別のタイムゾーンに変換(変更)する...
note.nkmk.me
2つのDFを結合する
横方向に結合
import pandas as pd
df_l = _get_df( "N225f", year )
df_r = _get_df( "Topixf", year )
df = df_l.join( df_r, lsuffix="_n", rsuffix="_t" )
上下に結合
df_append = pd.DataFrame( {
'item1' : [ item1 ],
'item2' : [ item2 ],
'item3' : [ item3 ],
} )
df_target = pd.concat( [ df_target, df_append ], axis=0 )
pickleでのデータの保存
データの保存
df.to_pickle( BASE_DIR + file_name )
データの読み込み
df = pd.read_pickle( BASE_DIR + file_name )
df.plot()
日時のフォーマット
時系列データの可視化:datetime型のx軸操作 - Qiita
はじめにデータをより良く理解したい/伝えたいということで可視化を頑張ってたんですが、時系列のx軸の操作でハマりました。これまでもpandasやseabornを使ってましたが、matplotlibの…
qiita.com
pandas_datareader
yahoo financeのデータを取得
from pandas_datareader import data as pdr
pdr.get_data_yahoo("^GSPC","1980-1-1").dropna()
FREDのデータを取得
from pandas_datareader import data as pdr
pdr.get_data_fred( 'USSLIND', '1980-1-1' ).dropna()
pandas-ta
ta-libでnumpyのエラーが出るようになってしまった。代わりに、pandas_taを用いることにする。
!pip install pandas_ta
Numpy
複数のnp.array
を組み合わせた条件に応じたnp.array
を作成する
def calc_stg( s, m, l ) :
return np.array( list( map(
lambda s, m, l :
1 if s > m and m > l else \
2 if m > s and s > l else \
3 if m > l and l > s else \
4 if l > m and m > s else \
5 if l > s and s > m else \
6 if s > l and l > m else \
np.nan, s, m, l ) ) )
def calc_stg_span( stg ) :
result = []
for i in range( len( stg ) ) :
if i == 0 :
result.append( np.nan )
else :
s = stg[ i ]
b4s = stg[ i - 1 ]
result.append(
0 if ( b4s != 1 and b4s != 2 ) and ( s == 1 or s == 2 ) else\
0 if ( b4s != 4 and b4s != 5 ) and ( s == 4 or s == 5 ) else\
0 if ( b4s == 1 or b4s == 2 ) and ( s != 1 and s != 2 ) else\
0 if ( b4s == 4 or b4s == 5 ) and ( s != 4 and s != 5 ) else\
result[ i - 1 ] + 1 if s == 1 or s == 2 or s == 4 or s == 5 else\
result[ i - 1 ] - 1 )
return np.array( result )
Datetime
日付と時刻の列からDatetimeを作成する
import pandas as pd
import datetime as dt
def _get_df( symbol, year ) :
df = pd.read_excel( f'{BASEDIR}/{symbol}_{year}.xlsx',
names=("date","time","open","high","low","close","volume"),
sheet_name='1min' )
df["time"] = df["time"].astype( str )
df["Datetime"] = pd.to_datetime( df["date"].dt.strftime("%x ") + df["time"] )
# Datetime:取引日(営業日) → カレンダーの調整
df.loc[ df["time"]>="16:30:00", "Datetime" ] = df.loc[ df["time"]>="16:30:00", "Datetime" ] + dt.timedelta( days=-1 )
df = df.set_index("Datetime")
Datetimeの加算・減算
import datetime as dt
sample_datetime + dt.timedelta( days=-1 )
Datetimeの差分を求める
import pandas as pd
diff_seconds = ( this_datetime - b4_datetime ).seconds
よく読み返すPython関連の記事
Python:EDINET企業データの自動取得・スクリーニングを5分ではじめる
EDINETという金融庁が運用している企業情報の開示システム(無料でつかえる企業データ)から、「PER、ROE、配当」などのデータを取得してスクリーニングをする方法。1.無料で取得できるデータ 2.Google Colab をつか えば5分で導入・実行できる 3.全上場銘柄のデータを取得する
programming/google-colab-edinet-screening
Python:投資の「期待値」と 単利・複利の「損益分岐点」を算 出、グラフ化
この記事では、以下の手順とコードを紹介しています。 1.投資の「期待値」の算出 2.投資の「単利・複利の『損益分岐点』」の算出 3.算出結果をもとにグラフを描画
programming/google-colab-calculate-trading-edge
Python:TA-Libでテクニカル分析、Plotlyでローソク足の描画
Python でテクニカル分析ができるライブラリ「TA-Lib」を、Google Colab で使用する方法の備忘録。pandas_datareader で価格データを取得、TA-Lib でテクニカル分析をして、Plotly でローソク足のチャートを出力する手順。
programming/google-colab-install-ta-lib
Python:「破産の確率」の計算とグラフ化(コピペするだけ!)
Google Colab および Python で「『破産の確率』を算出する方法」「破産確率表の作成」「破産確率表のグラフ化」「破産の確率の計算式とコードの解説」などを備忘録としてメモ。コードを公開しているので、Google Colab にコピペして実行すれば1分で計算することができます。
programming/google-colab-calc-ruin-probability
Python:Plotlyでアニメーショングラフを作成する
この記事では、以下の手順とコードをご紹介しています。 1.3DのSurfaceグラフのアニメーション 2.Contour(等高線)グラフのアニメーション
programming/google-colab-plotly-animation-graph-surface-contour
開発を承っています
- Pineスクリプト(インジケーターやストラテジー)
- Google Apps Script
- Python
- MQL4
などの開発を承っています。とくに投資関連が得意です。過去の事例は「実績ページ(不定期更新)」でご確認ください。ご相談は「お問い合わせ」からお願いします。
- 記事をシェア