【Python】Python初心者から中級者へ:pandas_datareaderで株価データをサクッと取得

最近、株の投資を始めたんだけど、データ分析ってどうやってるんだにゃ?

実は、Pythonを使って簡単に株価データを取得して分析できるんだよ。

え?Pythonだけでそれができるんかにゃ?どうやるんだにゃ?

そうなんだ。特に、pandas_datareader.dataっていうライブラリを使うと、簡単に様々な金融データを取得できるんだ。

そんな便利なツールがあるだにゃんて!でも、使い方とか難しそうだにゃ…

大丈夫!このブログで一緒に学べば、誰でも簡単にデータ分析の第一歩を踏み出せるよ!
こんにちは。モーです。
株や金融市場に興味がある方、またはデータ分析に関心がある方、特に注目していただきたい内容を今日はお届けします。
Pythonはその柔軟性と多様なライブラリにより、さまざまなデータの取得や解析が可能となっています。中でもpandas_datareader.data
は、金融データの取得を驚くほど簡単にしてくれるライブラリです。
このブログでは、このpandas_datareader.data
を使用して、実際に株価データを取得する手順を詳しく解説します。
特定の企業の過去の株価の動きを調べたい、株価の予測モデルを作成したい、といった方々に特におすすめの内容となっています。初心者から中級者まで、Pythonを使って株価データにアクセスする方法を学ぶ最適なガイドとして、本記事を活用いただければ幸いです。
それでは、まずはpandas_datareader.data
の基本的な紹介から始めていきましょう!
1. はじめに

pandas_datareader.data
は、Pythonのデータ解析ライブラリであるpandasの拡張モジュールとして提供されているライブラリの一つです。
主に金融データの取得を目的としており、多くの公開データソースから情報を簡単に取得することができます。

Yahoo FinanceやStooq、Quandlなど、多岐にわたるデータソースにアクセス可能なことが魅力ですね。
そして、取得したデータはpandasのデータフレームとして扱うことができ、データ解析や可視化など、pandasの豊富な機能を活用してさまざまな操作が可能となります。
本ブログの主な目的は、Pythonを使用して株価やその他の金融データを効率的に取得する方法を、具体的な手順と共に解説することです。
初心者から中級者までの読者を対象としており、特に以下の点を目標としています。
pandas_datareader.data
の基本的な使用方法を理解する。- 複数のデータソースから情報を取得する方法を学ぶ。
- 取得したデータの基本的な分析や可視化方法について知識を深める。
金融データの取得や分析に興味がある方、Pythonを活用して何か新しいことを学びたいという方に、本ブログが役立つ情報源となることを期待しています。
2. pandas_datareader.data
とは?

pandas_datareader.dataの主な機能と特徴
pandas_datareader.data
は、Pythonのデータ解析ライブラリであるpandasの拡張モジュールの一部として存在します。
このモジュールの最大の魅力は、複数の公開データソースから直接、金融や経済データを取得できる点にあります。以下に主な特徴を挙げます。
- 直感的なインターフェース: 特に複雑な設定やコーディングなしで、簡単な関数を使ってデータの取得が可能。
- pandasの互換性: 取得したデータは直接pandasのDataFrame形式で提供され、そのまま分析や加工が行いやすい。
- 広範なデータソースの対応: 多くの主要な金融データソースにアクセス可能。
対応しているデータソースの紹介
pandas_datareader.data
は、多岐にわたるデータソースから情報を取得できるのが強みです。以下は対応している主なデータソースの一部です。
- Yahoo Finance: 株価、オプション、経済指標など多岐にわたる金融データを提供。
- Stooq: 全世界の株価データやインデックス情報を取得可能。
- Quandl: 多様な金融・経済データセットにアクセスが可能で、特に代替データやマクロ経済データに強い。
- FRED: アメリカの連邦準備銀行が提供する経済・金融データの取得が可能。
これらのデータソースの中から、研究や分析の目的に合わせて適切なソースを選択して利用することができます。
3. 環境の準備

3.1 ライブラリのインストール
Pythonのデータ解析には様々なライブラリが存在しますが、今回の株価データ取得に関連する主要なライブラリと、それらのインストール方法を紹介します。
必要なライブラリとそのインストール方法
pandas
データ分析のための強力なライブラリで、データフレームという形式でデータを扱うことができます。
#インストール方法:
pip install pandas
pandas-datareader
金融データを取得するためのライブラリ。pandasと直接連携して、取得したデータをデータフレーム形式で提供します。
#インストール方法:
pip install pandas-datareader
インストールが完了したら、PythonスクリプトやJupyter Notebook上で上記のライブラリをインポートし、データ取得や分析を開始することができます。
import pandas as pd
import pandas_datareader.data as pdr

これで、必要なライブラリのインストールが完了しました。
3.2 環境の確認
データ解析を行う前に、予期しないエラーや互換性の問題を避けるために、使用している環境のバージョンを確認しておきましょう。
Pythonのバージョン確認方法
Pythonのバージョンは、コマンドラインやターミナルを開き、以下のコマンドを実行することで確認できます。
python --version
また、ある環境ではpython3
としてPythonを実行する場合があるので、それに応じて以下のコマンドも利用できます。
python3 --version
pandas_datareaderのバージョン確認方法
pandas_datareader
のバージョンを確認するには、PythonのインタラクティブシェルやJupyter Notebookを使用して、以下のコードを実行します。
import pandas_datareader as pdr
print(pdr.__version__)
このコードは、pandas_datareader
ライブラリの__version__
属性を参照して、インストールされているバージョン情報を出力します。

プログラムを使うときはバージョンを気にした方がいいんだにゃ。
4. 株価データの取得方法

4.1 基本的な取得方法
金融データの取得は、pandas_datareader.data
を使用します。このセクションでは、その基本的な取得方法を見ていきましょう。
まず、以下のコードは個人投資家に大人気の「レーザーテック」の株価をStooqというデータソースから取得する例です。
import pandas_datareader.data as pdr
df = pdr.DataReader("6920.JP", "stooq")
print(df.head())
コードの各部分の詳細な説明を以下に示します。
- インポート: ここでは
pandas_datareader.data
をpdrという名前でインポートしています。 - データ取得:
DataReader
関数を使用し、データを取得します。この関数は主に2つの引数を必要とします。- 第一引数(
"6920.JP"
): 取得したい銘柄のティッカーシンボルと国名を指定します。この例では、日本のレーザーテックのティッカーシンボルを指定しています。 - 第二引数(
"stooq"
): 使用したいデータソースを指定します。この例では、Stooqというデータソースを利用しています。
- 第一引数(
- 結果の出力:
print(df.head())
により、取得したデータの最初の5行を表示します。これにより、データの取得が正しく行われたかを確認することができます。

こんな短いコードでわかるんだにゃ!
4.2 日付範囲の指定
データ解析の際、特定の期間に焦点を当てて分析を行いたいことがよくあります。幸い、pandas_datareader.data
は日付の範囲を指定してデータを取得することができます。
以下のコードは、レーザーテックの2022年1月1日から2023年1月1日までの株価をStooqから取得する例です。
import pandas_datareader.data as pdr
import datetime
start_date = datetime.datetime(2022, 1, 1)
end_date = datetime.datetime(2023, 1, 1)
df = pdr.DataReader("6920.JP", "stooq", start_date, end_date)
print(df.head())
コードの詳細な解説を以下に示します。
- 日付の指定:
datetime.datetime
オブジェクトを使って、取得したいデータの開始日と終了日を指定します。この例では、2022年1月1日から2023年1月1日までの範囲を指定しています。 - データ取得:
DataReader
関数の3つ目と4つ目の引数に、それぞれ開始日と終了日を指定します。これにより、指定した期間のデータのみを取得することができます。 - 結果の出力: 以前と同様、
print(df.head())
を使用して取得したデータの最初の5行を表示します。

日付範囲を指定することで、特定の期間の動向や特定のイベントが株価に与えた影響など、様々な分析を行うことができます。
4.3 他のデータソースからの取得
これまでの例では、Stooqからデータを取得していましたが、pandas_datareader.data
はStooqだけでなく、複数の金融データソースから情報を取得することが可能です。
Yahoo Financeからのデータ取得
Yahoo Financeは、株価や金融データを提供するポピュラーなソースの一つです。以下はYahoo Financeからレーザーテックの株価を取得する例です。

以前はStooqと同じようにできていたけど、最近は同じやり方だとエラーが出ます。
「yfinance」というライブラリをインストールして、pandas_datareaderをオーバーロードしてから使う用にしてください。

日本のティッカーには「.T」を付けるんだにゃ。
pip install yfinance
import pandas_datareader.data as pdr
import yfinance as yf
yf.pdr_override() //オーバーロード
df_yahoo = pdr.get_data_yahoo("6920.T") //.Tを付ける
print(df_yahoo.head())
FRED (Federal Reserve Economic Data)からのデータ取得
FREDは、アメリカの経済データを提供するサービスで、株価や金利、雇用統計などのマクロ経済データを取得することができます。
以下はFREDから米国の米失業率を取得する例です。
codedf_fred = pdr.DataReader("UNRATE", "fred")
print(codedf_fred.head())
Quandlからのデータ取得
Quandlは様々な金融データを提供するサービスですが、APIキーが必要です。登録してAPIキーを取得した後、以下のようにしてデータを取得することができます。
pdr.quandl.QuandlReader.api_key = 'YOUR_API_KEY' //ここにAPIキー
df_quandl = pdr.DataReader("WIKI/AAPL", "quandl")
print(df_quandl.head())
注意: YOUR_API_KEY
の部分は、Quandlから取得した実際のAPIキーに置き換えてください。

他にもいろいろなデータソースがありますよ。必要に応じて調べてみてください。
5. データの解析と活用

5.1 データの基本的な分析
データを取得した後、そのデータの概要や特性を把握することは非常に重要です。このセクションでは、取得した金融データの基本的な分析方法を紹介します。
データの最初と最後の部分を確認
データが正しく取得されているか、またどのようなカラムが含まれているかを確認するためには、head()
やtail()
メソッドを使用します。
print(df.head()) # 最初の5行を表示
print(df.tail()) # 最後の5行を表示
基本統計情報の取得
describe()
メソッドを使うと、各カラムの基本的な統計情報(平均、中央値、最小値、最大値など)を取得することができます。
print(df.describe())
##以下のように表示されます。
Open High Low Close Volume
count 244.000000 244.000000 244.000000 244.000000 2.440000e+02
mean 20511.568443 20934.129508 20038.438525 20478.436475 7.719883e+06
std 4098.626700 4154.407910 3916.344907 3991.781233 2.945069e+06
min 14445.000000 15175.000000 14320.000000 14695.000000 3.728700e+06
25% 17643.225000 17849.725000 17148.050000 17483.750000 5.534372e+06
50% 19200.000000 19515.000000 18827.500000 19171.650000 7.165525e+06
75% 22287.875000 22857.450000 21717.500000 22314.700000 8.977051e+06
max 35664.600000 35983.700000 33780.200000 34218.900000 2.126810e+07

データを確認するには、便利なんだにゃ。
データの欠損値の確認
金融データには、欠損値や異常値が含まれていることがあります。isnull()
やsum()
を組み合わせることで、各カラムの欠損値の数を確認できます。
print(df.isnull().sum())
5.2 データをの可視化
時系列の可視化
株価や金融データは時系列データとしての特性を持っているため、その動向を可視化することは重要です。以下は、株価のクロージング価格の時系列をプロットする例です。
import matplotlib.pyplot as plt
df['Close'].plot(figsize=(10, 5))
plt.title('Closing Price Over Time')
plt.ylabel('Price')
plt.xlabel('Date')
plt.grid(True)
plt.show()


こんな感じに綺麗なグラフができます。分析に視覚化は大切ですね。
移動平均のプロット
短期と長期の移動平均を用いて、価格のトレンドを視覚的に捉えます。
df['Short_MA'] = df['Close'].rolling(window=50).mean()
df['Long_MA'] = df['Close'].rolling(window=200).mean()
df[['Close', 'Short_MA', 'Long_MA']].plot(figsize=(12, 6))
plt.title('Moving Averages')
plt.ylabel('Price')
plt.xlabel('Date')
plt.grid(True)
plt.show()

ボリューム(取引量)の可視化
取引量の動向を確認することで、市場の活発さや関心を判断する手がかりとなります。
df['Volume'].plot(kind='bar', figsize=(12, 6))
plt.title('Trading Volume Over Time')
plt.ylabel('Volume')
plt.xlabel('Date')
plt.grid(True)
plt.show()

キャンドルチャートの表示
mplfinance
というライブラリを使用して、キャンドルチャートを表示することができます。これにより、開始価格、終了価格、高値、安値の動きを一目で確認できます。
pip install mplfinance
import mplfinance as mpf
mpf.plot(df[-100:], type='candle', volume=True, figsize=(12, 6))


外部ライブラリを使うと便利で綺麗なグラフをどんどん描けます。積極的に使いたいですね。
このように、初心者の方でも、Pythonの基本的な知識と技術を身につければ、リアルタイムの株価データを取得して、それを基にした視覚的なグラフを描くことが可能となります。そして、そのグラフ上でさまざまな分析テクニックを適用することで、より高度な投資戦略を立てる助けとなります。
例えば、ボリンジャーバンドは投資家やトレーダーにとって非常に重要なテクニカル指標の一つです。また、ゴールデンクロスをはじめとするクロスポイントを見極めることで、株を買う最適なタイミングを計ることができるのです。
株価分析に関する知識は無限です。しかし、Pythonを武器にすれば、その深い海に挑む勇気が湧いてきます。是非、この機会にPythonと株価分析の勉強を始めてみてください。
さらに詳しい情報や技術を学ぶために、以下のリンクからおすすめの本をチェックしてみてください。
6. まとめ

このブログを通じて、pandas_datareader.data
を用いた金融データの取得方法から、基本的なデータの可視化、そして応用的な分析手法までの一連の流れを学びました。
pandas_datareader.data
は、様々な金融データソースからデータを手軽に取得できるツールです。- 基本的なデータの取得方法から日付の範囲指定、さらには異なるデータソースからの取得方法を探求しました。
- 取得したデータを用いての基本的な分析や可視化の技術、そして応用的な分析手法を紹介しました。

私の記事を最後までお読みいただき、ありがとうございます。
プログラミングと株の学びは、時に難解かもしれませんが、その先に広がる可能性は計り知れません。
是非、今後の成長に役立ててくださいね。