【Python】pandasのresample()で株価データを月/日/時ごとに再集計

pandas_datareaderでデータを用意する

まずはデータを用意します。もう既にある場合は別にこれでなくともかまいません。

#ライブラリのインストール
import pandas_datareader.data as web
import datetime

# 日経平均株価を取得する
start = '1996-4-1'
end = '2019-4-1'
nikkei=web.DataReader('^N225', 'yahoo', start, end)
df=nikkei.copy()

pandas-datareaderをインストールしていない場合はコマンドプロンプトなどからPIPでインストールしてください。

#pandas-datareaderをインストールする
pip install pandas-datareader

関連記事:【Python】pandasを使って日経平均株価のデータをスクレイピングで取得する

取得したデータを確認する

データが取得出来たら、まずが異常値がないか確認します。

# データに欠損値がないか確認する
df.isnull().any(axis=0)

欠損値を確認する関数であるisnull()の後ろにany(axis=0)と指定することで列ごとに欠損値がないかを返すように設定しています。axis=1にすると行になります。

High         False
Low          False
Open         False
Close        False
Volume       False
Adj Close    False
dtype: bool

全ての列がfalseと返ってきているおり、欠損値がないことがわかるので、特に欠損値処理はしません。

時系列データを一定期間(月/週/時/分)ごとに再集計する

いよいよ今回の本題に入っていきます。pandasでは、データフレームのインデックスをdatetimeにしておくことで、resample()という関数を使用して集計することが可能です。pandasでの時系列データ処理ではresample()は超便利なので絶対に覚えておきましょう。

それではresample()を使用して先ほどの株価データを再集計してみます。

#日ごとに再集計する
df.resample('D').mean()

今回の場合はデータが既に一日ごとにまとめられているので、使用しませんが、分時単位のデータとかを一日分ごとにデータのまとめるときとかに重宝します。

#週ごとに再集計する
df.resample('W').mean()

<実行結果>
Date High Low Open Close Volume Adj Close
1996-04-07 21690.073828 21432.056250 21522.628125 21558.440234 0.0 21558.440234
1996-04-14 21781.271875 21581.612109 21675.159766 21663.001953 0.0 21663.001953
1996-04-21 21956.631641 21749.537891 21823.351953 21852.753906 0.0 21852.753906

#月ごとに再集計する
df.resample('M').mean()

<実行結果>
Date      High Low Open Close Volume Adj Close
1996-04-30 21936.505580 21732.291946 21810.289528 21828.725353 0.000000 21828.725353
1996-05-31 21917.828869 21631.406901 21782.001395 21770.738095 0.000000 21770.738095
1996-06-30 22297.111035 22077.245508 22172.985547 22185.516113 0.000000 22185.516113
1996-07-31 21705.521739 21456.902599 21630.849609 21558.508152 0.000000 21558.508152

mean()(平均値)だけではなく、median()(中央値)、sum()(合計)などのメソッドを呼ぶことで集約された値が算出されます。加えて、引数は’D’や’M’や’W’だけでなく、’6H’や’2Dみたいな感じで指定することも可能です。

終わり

ほかにもPandasには、ohlc()rolling()など関数1つで簡単にできるのがいろいろあります。Python&Pandasでの時間処理系関数は知っているか知らないかだけで作業に大きな差が出てくるので知っておくようにしておきたいですね。

知らないでfor文とかで地道にやろうとするとスクリプト言語なのででかいデータの処理だと地獄を見ます(笑)。

プログラミングの独学はとても難しい


プログラミングは小学校の義務教育にも導入され始めており、これから社会人として生きていく上でプログラミングはもはや出来て当たり前、出来なれば論外というエクセルレベルの必須スキルになりつつあります。そしてそういう話を聞いて参考書なりを購入して独学でプログラミング勉強しようと思っている人も少なくないでしょう。しかしプログラミングを独学で勉強し始めようと思うものの



・「分からない箇所で詰まって挫折してしまった」

・「勉強する時間が足りない」

・「ネットの記事だと情報が断片的でよくわからない」

・「コードのエラーの原因が分からない」



という壁にぶち当たって、プログラミングの勉強を止めてしまう方が少なくありません。独学でプログラミングを勉強してる時間のほとんどはつまづいている時間です。実際僕も最初のころ独学でプログラミングを勉強していた頃はエラーの原因が分からず丸1日を不意にしてしまった・・・そんな苦い経験がありました。



それで僕は一度はプログラミングの学習を諦めてしまいましたが、就活で現実を知る中で「プログラミングを勉強して、いずれフリーランスとして自由な生き方がしたい」「エンジニアとして若いうちから高収入を得たい」という気持ちから一念発起して「侍エンジニアのwebサービスコース」に申し込み、プロのエンジニアの方に対面でマンツーマンでPythonによるWebサービス作り方とWeb技術の基本を教えてもらい、ようやくプログラミングが理解でき、今ではエンジニアとしてそこそこの暮らしができるようになりました。





侍エンジニアでは、とりあえずプログラミングやインターネットの基本を知っておきたい人から、HTML・cssなどでWebサイトやWebアプリを作ってみたい人やPythonを勉強してデータサイエンティストやAIエンジニアになりたい人まで幅広いニーズに応えた様々なコースが用意されています。



IT業界と言ってもエンジニアの仕事はプログラミング言語次第でサーバーから機械学習・ディープラーニングまで多種多様ですし、侍エンジニアの無料レッスン(カウンセリング)を受けてみて、自分のやりたいITの仕事は何なのか?を見つけるのがエンジニアへの第一歩になります。ちなみに今侍エンジニアの無料レッスンを受けると1000円分のAmazonギフト券がもらえるので、試しに受けてみるだけもお得です。


自分は半端に独学やオンラインスクールで勉強して金と時間を無駄にするくらいなら、リアルのプログラミングスクールに通ってしっかりプログラミングを勉強した方がいいと思います。ちなみに今、侍エンジニアに申し込むと、25歳以下の学生の方であれば、受講料が20%OFFになるので超お得です。


そして、プログラミングは大勢で授業を受けたり漫然とオンライン学習をするよりも自分が分からない箇所をピンポイントでプロの講師に直接質問して、ちゃんと納得するというスタイルの方がお金は確かに少し掛かりますが、独学で学ぶよりも絶対にモノになります。


シェアする

  • このエントリーをはてなブックマークに追加

フォローする