Python のコードを読むと、最初に出てくるのが 変数データ型 です。本記事では、株価データを扱う前提でよく使う基本型と、型に起因する落とし穴を整理します。

変数とは

変数とは、値に名前を付けて再利用できるようにするしくみです。

price = 1500
volume = 12000
ticker = "7203" # トヨタ自動車の銘柄コード

= は数学の等号ではなく「右辺の値を左辺の名前にひも付ける」という意味です。

変数名は次のルールで付けます。

  • 半角アルファベット・数字・アンダースコア(_)を使う
  • 数字で始めない(1day は不可、day_1 は可)
  • 予約語(if / for / class など)は使えない
  • スネークケース(current_price のようにアンダースコア区切り)が慣例

基本データ型

Python のコードで最も頻繁に登場する 4 つの型を扱います。

役割
int1500, 0, -3整数。出来高・銘柄数など
float1.23, 3.14, 0.0浮動小数点。リターン・指標値
str"7203", "トヨタ自動車"文字列。銘柄コード・社名
boolTrue, False真偽値。条件判定の結果

型を確認する

type() で変数の型を確認できます。

price = 1500
print(type(price)) # <class 'int'>
ratio = 1500 / 1000
print(type(ratio)) # <class 'float'>
ticker = "7203"
print(type(ticker)) # <class 'str'>
is_above = price > 1000
print(type(is_above)) # <class 'bool'>

暗黙の型変換に注意

整数同士の割り算でも、結果は float になります。

print(10 / 2) # 5.0 (float)
print(10 // 2) # 5 (int、整数除算)
print(10 % 3) # 1 (剰余)

株価分析で「銘柄数を割って比率を出す」ような処理では、想定外に小数が出ます。整数のまま扱いたい場合は // を使います。

文字列と数値の違い

J-Quants API から銘柄コードを取得すると、しばしば 文字列 で返ってきます。先頭の 0 を保持する必要があるためです。

ticker = "7203"
print(ticker + 1) # ❌ TypeError: can only concatenate str
print(int(ticker) + 1) # ⚪ 7204(整数に変換してから)

逆に「数値で計算した結果を文字列に組み込む」場合は f 文字列 を使うと簡潔です。

price = 1500
print(f"現在の株価は {price} 円です")
# 現在の株価は 1500 円です
ratio = 0.0345
print(f"上昇率: {ratio:.2%}")
# 上昇率: 3.45%

{ratio:.2%}:.2% は「小数点以下 2 桁のパーセント表記」を指定する書式指定子です。

浮動小数点の罠

float は実際にはバイナリ表現を使うため、十進数の世界とは微妙にずれます。

print(0.1 + 0.2) # 0.30000000000000004
print(0.1 + 0.2 == 0.3) # False

株価そのもの(円単位)では問題になりにくいのですが、比率・利回り のような小さい値の比較には注意が必要です。完全一致の判定が必要なら、許容誤差を持たせた比較を使います。

import math
print(math.isclose(0.1 + 0.2, 0.3)) # True

True / False と「真偽値らしい」値

bool は条件分岐の結果として登場します。条件式は ==(等値)・!=(不等)・<><=>= などを使います。

price = 1500
print(price > 1000) # True
print(price == 1500) # True
print(price != 0) # True

Python では、整数 0、空文字 ""、空のリスト []None などは False として扱われます(falsy)。ゼロ判定や空判定にこの性質を使うことがあります。

volume = 0
if not volume:
print("出来高がありません")

ただし、株価データのように「0 が意味を持つ可能性のある値」では、明示的に volume == 0 を書いたほうが意図が明確になります。

None という特別な値

None は「値がない」ことを表す特別なオブジェクトです。

target_price = None
if target_price is None:
print("目標株価は未設定です")

データの欠損を表すのに使われます。比較は is None / is not None を使うのが慣例です(== None は動きますが推奨されません)。

生成AI へのプロンプト例

「型でつまずいた」ときに生成AI に質問する例です。エラーメッセージと前後のコードをセットで貼ると、的確な回答が返ってきやすくなります。

次の Python コードを実行すると `TypeError: unsupported operand type(s) for +: 'int' and 'str'` が出ます。
原因と修正案を教えてください。
ticker = "7203"
next_ticker = ticker + 1
print(next_ticker)

回答が来たら、提示された修正版を実行して結果を確認します(詳細は#7-3「エラーを生成AIに直してもらう作法」)。

まとめ

  • 4 つの基本型(int / float / str / bool)を覚えれば、株価データ処理の入口はこなせる
  • 銘柄コードは 文字列 として扱うのが安全
  • 浮動小数点の比較には許容誤差(math.isclose)を使う
  • 欠損値は None で表し、is None で判定する