「Python」と「Google Colaboratory」で株価データ分析に挑戦:「Python」×「株価データ」で学ぶデータ分析のいろは(1)
日々変動する株価データを題材にPythonにおけるデータ分析のいろはを学んでいく本連載。第1回はPythonを実行する環境とデータの前準備について。
はじめに
連載第1回は「Google Colaboratory」でサンプルプログラムを実行するための環境を用意する方法や利用するPythonのライブラリを説明します。「Google Chrome」と「Googleアカウント」を用意して読み進めてください。
なお、連載の趣旨がデータ分析であるため、Pythonの言語仕様や文法の詳細を割愛する場合があることをご了承ください。
Google Colaboratoryの準備
Google Colaboratoryとは、Googleが提供するブラウザ上でPythonのコードを実行できるサービスです。Google Colaboratoryを初めて利用する場合は、以下の連載「Google Colaboratory入門」の手順に従って、Google ドライブからGoogle Colaboratoryを利用できるようにしてください。
参考記事:Google Colaboratory(Jupyter Notebook)の準備と、ノートブックの作成
Google Colaboratoryでは、Pythonのコードをブロックごとに保存して実行できるため、さまざまな方法を試したり模索したりしながらの作業に向いています。本連載のサンプルコードは、全てGoogle Colaboratoryで実行するものとして進めます。サンプルファイルを実行する場合は、サンプルファイルのリンクを開いた後に、メニューの「ファイル」から「ドライブにコピーを保存」を選択して保存したコピーをGoogle Colaboratoryで実行してください。
利用するライブラリについて
ライブラリとは、プログラムを組むための汎用(はんよう)的な機能を再利用しやすい形でまとめたものです。Pythonでは、標準で用意されている標準ライブラリとインストールが必要な外部ライブラリの2種類があります。データ分析を行う場合は「Numpy」「Pandas」というデータ分析用の2つの外部ライブラリを利用します。
- Numpy:高度な数値計算を処理するライブラリです。配列間の演算や、多次元配列の計算などの複雑な演算処理を高速で実行できます。
- Pandas:効率良くデータ解析を進めるための機能を提供するライブラリです。データを管理する表のオブジェクトを管理し、データの加工や解析ができます。
Numpy、Pandasの両ライブラリは、Pythonのデータ分析においてセットでよく利用されています。そのため、Google Colaboratoryに標準で組み込まれており、特別にインストールすることなく利用できます。
株価を分析するための準備
Google Colaboratoryで株価データを分析する上で必要になる事柄を説明します。
「データフレーム」について
データフレームとは、Pandasライブラリで定義されているデータ分析によく利用される構造体のことです。以下の図のように、行と列の2次元の構造をしています。
データフレームでは、行にはインデックス、列にはカラムという名前が割り当てられます。インデックスはその名前の通り、行を検索する際の索引として利用できます。特別にインデックスを設けずに、カラムをインデックスとして利用することもできます。データフレーム内の1列のみのデータは、シリーズ(Series)というデータ型で扱われます。シリーズは、Python標準のリスト型のように値をまとめて管理するとともに、インデックスを伴います。
データフレームの構造は、表計算ソフトのシートのように考えてみると分かりやすいでしょう。
株価データ分析で知っておきたい用語について
株価データを分析する上で必要になる用語を簡単にまとめます。株価に詳しくない方でもニュースサイトや新聞などで一度は目にしたことがあると思います。
名称 | 意味 |
---|---|
銘柄 | 株式を発行する企業名のこと |
銘柄コード | 上場企業に割り当てられている4桁の番号 |
始値 | ある期間の中で、初めて取引された株価 |
高値 | ある期間の中で、一番高い株価 |
低値 | ある期間の中で、一番低い株価 |
終値 | ある期間の中で、最後に取引された株価 |
出来高 | ある期間の中で、成立した売買の数 |
株価データを扱う場合は、銘柄コードを使って株価を区別します。日単位で株価を見る場合には、始値/高値/低値/終値は1日の中での株価を指します。本連載では、日単位での株価データを分析する例を挙げますので、始値/高値/低値/終値は1日単位で扱います。
始値/高値/低値/終値の4つの中で最も重視するのは終値です。終値は、明日どのように株価が動くかという判断に最も近い価格であるためです。株価データを分析するに当たっては、終値をベースに分析を進めます。
Pythonライブラリを利用して株価データを取得する
Pandasライブラリの拡張モジュールである「pandas-datareader」を利用すると、インターネットで公開されている金融データや人口データを取得できます。pandas-datareaderを利用してStooqから株価データを取得してみます。
Stooqはポーランドの企業が運営する金融ポータルサイトです。pandas-datareaderを利用すると、Stooqが公開している株価データを無料で取得できます。9984 ソフトバンクグループ(株)の直近の株価データの取得方法は以下のようになります。
import pandas_datareader.data as pdr df = pdr.DataReader("9984.JP","stooq")
pandas_datareader.dataのDataReaderメソッドを呼び出すだけで、インターネットから株価データをデータフレームの形式で取得することができます。DataReaderメソッドの書式は次の通りです。
%pandas_datareader.dataオブジェクト%.DataReader(%銘柄コード%.%国コード%, %サービス名%)
銘柄コードと国コードを間違えないように注意が必要です。日本の企業なら国コードは「JP」を利用します。取得する株価の銘柄コードが分からない場合は、日本取引所グループ(https://www.jpx.co.jp/)や各証券会社のサイトなどで検索できます。
補足
本連載では短いコードで株価データを取得するために、Stooqの無料サービスを利用しています。しかし、Stooqが公開するデータは、最新かつ正確なものである保証はありません。より正確な株価分析をする場合は、証券会社が提供する株価データを利用するなどしてください。
取得したデータを確認する
Google Colaboratoryでは、ブロックの最後にオブジェクトを記述すると、その内容を出力します。前項で取得した9984 ソフトバンクグループ(株)の株価データは次のようにして確認できます。
import pandas_datareader.data as pdr df = pdr.DataReader("9984.JP","stooq") df
データフレームのカラムはそれぞれ前節で説明した用語に対応しています。
カラム名 | 意味 |
---|---|
Date | 日付、インデックス |
Open | 始値 |
High | 高値 |
Low | 低値 |
Close | 終値 |
Volume | 出来高 |
データフレームのカラム |
Dateカラムはインデックスも兼ねているため、他カラムと異なり最も左側に1段下げでインデックスだと分かるように表示されています。また最下部で行数とカラム数が表示されています。サンプルでは1218行×5列の株価データを取得できたことが分かります。
データフレームのインデックスを確認する
取得した株価データのインデックスを確認してみます。データフレームのインデックスはindexプロパティで参照できます。
df.index
indexプロパティで参照したオブジェクトはDatetimeIndexというDateTime型のオブジェクトになります。前項で出力したデータフレームのDateカラムはYYYY-MM-DDの書式の日付で文字列のように表示されていました。確認してみると、日付の実体はDateTime型です。つまり、日付順に並べ替えたり、日付の範囲を指定してデータを参照したりできるというわけです。
株価データを取得するメソッドを作成する
DataReaderメソッドで取得した株価データでは、インデックスである日付が降順で表示されます。取得した株価を時系列のデータとして扱うためには、日付を昇順にしておかなければなりません。先ほど確認したように、インデックスである日付はDateTime型なので、並べ替えが可能です。次のように取得した株価のデータフレームを日付のインデックスで昇順にソートするメソッドを作成します。
def get_stock_data(code): df = pdr.DataReader("{}.JP".format(code), "stooq").sort_index() return df
データフレームをソートするメソッドには、インデックスでソートするsort_indexメソッド、カラムの値でソートするsort_valuesメソッドがあります。それぞれのメソッドの書式は次の通りです。
メソッド | 概要 |
---|---|
sort_index([ascending=%昇順にするか%]) | インデックスでソート |
sort_values(%カラム名%[, ascending=%昇順にするか%]) | カラムの値でソート |
データフレームをソートするメソッド |
sort_valuesメソッドは、ソートするカラム名を指定します。両メソッドとも昇順にするかをTrue/Falseで指定します。既定はFalseです。サンプルでは、sort_indexメソッドでデータフレームをインデックスである日付で昇順にソートしています。作成したサンプルの実行結果は次の通りです。
df = get_stock_data(9984) df.tail()
株価データが取得できることは確認済みですので、株価データの最後の5行だけを確認のために表示しました。データフレームとシリーズの最初/最後を表示するためには、次のメソッドを利用します。
メソッド | 概要 |
---|---|
head([%n%]) | 最初のn行を表示、既定は5行 |
tail([%n%]) | 最後のn行を表示、既定は5行 |
データフレームの最初と最後を表示するメソッド |
次回以降でもデータフレームの内容を確認する場合は、「tail()」メソッドで最後の5行を確認することとします。Google Colaboratoryでは、前のブロックで記述した処理を以降のブロックでも利用できます。次回以降でも、ここで作成した株価を取得するメソッドを使い続けます。
終値をグラフで表示する
前項までで日付順にソートした株価データを取得できました。せっかくなので、取得した株価データの終値を簡単なグラフに表示してみましょう。まず先に終値のデータを確認してみます。終値は取得した株価データのCloseカラムに格納されています。データフレームのカラムにアクセスするには、角かっこ([ ])にキーとしてカラム名を指定します。
df['Close']
データフレームのインデックスとともにシリーズのオブジェクトが表示されます。Pandasライブラリのplotメソッドを利用すると、X軸にインデックス、Y軸にカラムの値の形式でシリーズの内容をグラフに描画できます。Closeカラムのグラフに描画した結果は次の通りです。
df['Close'].plot()
終値のデータが日付のインデックスの範囲でグラフに表示されることが確認できます。矢印の部分は新型コロナウイルス感染症(COVID-19)の影響で株価が一斉に下がった時期です。ここから1年以内に株価が3倍以上に上昇したことが分かります。
Google Colaboratoryを利用することでコードの記述と同時にグラフの描画もできるのでplotメソッドをデバッグのように利用できます。
plotメソッドには、グラフを詳細に表示するオプションも多数用意されています。詳細は公式ドキュメントを参照してください。
まとめ
連載第1回としてPythonで株価を分析するに当たって基本的な事柄を説明しました。次回から取得した株価データを使って分析や可視化に取り組んでいきましょう。
Copyright © ITmedia, Inc. All Rights Reserved.