見出し画像

待望のJ-QuantsAPI始動!始め方などゆる~く解説しながら、KABU+との差も比較!【株シストレ談義】#10|Youtube要約(Pythonコード付き)

動画要約

概要

この動画は、J-QuantsAPIの始め方やKABU+との差について、株シストレーダーの局長大内が分かりやすく解説しています。

要点

  • 💰 J-QuantsAPIとは、日本取引所グループ公式の株データ提供サービスである。

  • 📈 提供されるデータは、株価や上場銘柄、売買内訳データなど様々である。

  • 🤑無料プランから全データ取得まで様々な選択肢がある。

ハイライト

J-QuantsAPIは、過去の上場情報や投資部門、四半期の決算発表予定日など、多岐に渡るデータを提供しているという点が注目に値します。

動画内で紹介しているPythonコード

基本コード

import timeit

import jquantsapi
import pandas as pd

# 文字コードをShiftJis変換する
def convert_to_shift_jis(text):
    if text is None:
        return None
    return text.encode('shift_jis', 'ignore').decode('shift_jis')

 #jquantsでデータ取得 
my_mail_address:str ="メールアドレス"
my_password: str = "パスワード"
cli = jquantsapi.Client(mail_address=my_mail_address, password=my_password)

最新上場銘柄の株価データCSVで全取得

#################################################################
# 上場銘柄のデータ全部読み込み

def my_func():

    # 上場銘柄一覧
    print("[report]jquantsで上場銘柄一覧取得開始")
    df = cli.get_listed_info()
    print("[report]jquantsで上場銘柄一覧取得終了")

    for index, row in df.iterrows():
        code = row['Code']

        print('[report]jquantsで'+code+'データ取得開始')
        df2 = cli.get_prices_daily_quotes(code)
        print('[report]jquantsで'+code+'データ取得終了')

        # 文字列列に対して文字コード変換を適用する
        df2[df2.select_dtypes(include=['object']).columns] = df2.select_dtypes(include=['object']).applymap(convert_to_shift_jis)

        # DataFrameをCSVファイルに出力する
        df2.to_csv('c'+code+'.csv', encoding='shift_jis',  index=False)

elapsed_time = timeit.timeit(my_func, number=1)
print(f"処理時間: {elapsed_time:.6f}秒")

exit()

翌日決算発表銘柄の一覧取得

#################################################################
# 決算発表予定日(翌日発表予定の決算情報)
# 3月期・9月期決算の会社の決算発表予定日を取得できます。(その他の決算期の会社は今後対応予定です)
#
# 下記のサイトで、3月期・9月期決算会社分に更新があった場合のみ19時ごろに更新されます。
# https://www.jpx.co.jp/listing/event-schedules/financial-announcement/index.html
# 本APIは翌営業日に決算発表が行われる銘柄に関する情報を返します。
# 本APIから得られたデータにおいてDateの項目が翌営業日付であるレコードが存在しない場合は、3月期・9月期決算会社における翌営業日の開示予定はないことを意味します。

print("[report]jquantsでデータ取得開始")
df = cli.get_fins_announcement()
print("[report]jquantsでデータ取得終了")
 #イザナミで使いやすいようデータ置換 
# Code列の各文字列の末尾1文字を削除する
df['Code'] = df['Code'].str[:-1]
# 第〇四半期かのデータを数値化する
df = df.replace('第1四半期', '1')
df = df.replace('第2四半期', '2')
df = df.replace('第3四半期', '3')
df = df.replace('第4四半期', '4')

# 文字列列に対して文字コード変換を適用する
df[df.select_dtypes(include=['object']).columns] = df.select_dtypes(include=['object']).applymap(convert_to_shift_jis)

# DataFrameをCSVファイルに出力する
df.to_csv('get_fins_announcement.csv', encoding='shift_jis',  index=False)

exit()

四半期の財務情報

#################################################################
# 財務情報(/fins/statements)
# 四半期の財務情報が取得できます
#
# 上場企業の四半期毎の決算短信サマリーや業績・配当情報の修正に関する開示情報(主に数値データ)を取得することができます。
#
# 会計基準について
# APIから出力される各項目名は日本基準(JGAAP)の開示項目が基準となっています。
# そのため、IFRSや米国基準(USGAAP)の開示データにおいては、経常利益の概念がありませんので、データが空欄となっています。

# 上場銘柄一覧
print("[report]jquantsで上場銘柄一覧取得開始")
df_tmp = cli.get_listed_info()
print("[report]jquantsで上場銘柄一覧取得終了")

for index, row in df_tmp.iterrows():
    code = row['Code']

    print('[report]jquantsで'+code+'データ取得開始')
    if 'df' not in locals():
        df = cli.get_fins_statements(code)
    else:
        df_item = cli.get_fins_statements(code)
        df = pd.concat([df, df_item], ignore_index=True)
    print('[report]jquantsで'+code+'データ取得終了')
    # break

# 文字列列に対して文字コード変換を適用する
df[df.select_dtypes(include=['object']).columns] = df.select_dtypes(include=['object']).applymap(convert_to_shift_jis)

# LocalCode列を一番左に移動する
cols = df.columns.tolist()
cols.insert(0, cols.pop(cols.index('LocalCode')))
df = df[cols]

# 'LocalCode'列名を'Code'に変更する
df = df.rename(columns={'LocalCode': 'Code'})
# 'DisclosedDate'列名を'date'に変更する
df = df.rename(columns={'DisclosedDate': 'date'})
# 必要な列名を和訳
df = df.rename(columns={'NetSales': '売上高(百万)'})
df = df.rename(columns={'OperatingProfit': '営業利益(百万)'})
df = df.rename(columns={'OrdinaryProfit': '経常利益(百万)'})
df = df.rename(columns={'Profit': '当期純利益(百万)'})
df = df.rename(columns={'EarningsPerShare': '一株あたり当期純利益'})

# Code列の各文字列の末尾1文字を削除する
df['Code'] = df['Code'].str[:-1]

# 残したい列の名前を指定する
keep_col = ['Code', 'date','売上高(百万)','営業利益(百万)','経常利益(百万)','当期純利益(百万)','一株あたり当期純利益']
# 指定した列以外を削除する
df = df.loc[:, keep_col]

#桁の大きい列は100万で割る
df['売上高(百万)'] = pd.to_numeric(df['売上高(百万)'], errors='coerce') / 1000000
df['営業利益(百万)'] = pd.to_numeric(df['営業利益(百万)'], errors='coerce')  / 1000000
df['経常利益(百万)'] = pd.to_numeric(df['経常利益(百万)'], errors='coerce')  / 1000000
df['当期純利益(百万)'] = pd.to_numeric(df['当期純利益(百万)'], errors='coerce')  / 1000000

# 欠損値が含まれる行を削除する
df = df.dropna(subset=['売上高(百万)'])

# DataFrameをCSVファイルに出力する
df.to_csv('get_fins_statements.csv', encoding='shift_jis',  index=False)

exit()

チャンネル登録よろしくお願いします!


この記事が気に入ったらサポートをしてみませんか?