30
44

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Pythonで株価情報を取得して、MySQLに格納する

Posted at

やりたいこと

データ分析用に永続データとして日本の株価情報を取得して、MySQLに格納します。
MySQLの環境は、MetabaseとMySQL環境をDockerで作るで作成したMySQLに格納します。

データソース

データソースはQuandlというサイトを利用します。
有料データもありますが、無料でも使えます。
今回はQuandlで収集されているデータの中から、東京証券取引所が提供しているデータを利用します。

環境

  • Mac OS X 10.14.2
  • Python 3.7.1
  • Quandl 3.4.5

手順

アカウント登録

APIキーを取得するためにQuandlのアカウント登録を行います。
登録は無料です。

APIキーの確認

アカウントを作成したら、右上のメニューから[ACCOUNT SETTINGS]を選択します。
プロフィール画面に遷移すると、[YOUR API KEY]にAPIが記載されているのでメモします。

データの取得

実際にデータを取得してみます
※必要なライブラリは適宜インストールしてください。

#!/usr/local/bin/python3
# -*- coding: utf-8 -*-

import datetime
import quandl
import pandas as pd

# 各種設定
## 取得したい日付レンジの指定
start = datetime.datetime(2007, 1, 1)
end = datetime.datetime(2019, 1, 19)

# 取得したい会社のティックシンボルを記載します。
## 例えばの武田薬品工業の場合 TSE/4502 となります。
## https://www.quandl.com/data/TSE/4502-Takeda-Pharmaceutical-Co-Ltd-4502
company_id = 'TSE/4502'

# APIキーの設定
quandl.ApiConfig.api_key = '前の手順で確認したAPIキーをここに記載'

# データ取得
df = quandl.get(company_id ,start_date=start,end_date=end)

データが以下のように取得できていることを確認します。

>>> df.head()
              Open    High     Low   Close     Volume
Date
2007-01-04  8180.0  8210.0  8170.0  8180.0  1401400.0
2007-01-05  8180.0  8180.0  7970.0  8010.0  3020100.0
2007-01-09  8000.0  8010.0  7940.0  7950.0  2696200.0
2007-01-10  7950.0  7960.0  7760.0  7760.0  3807700.0
2007-01-11  7820.0  7890.0  7710.0  7760.0  3286800.0

MySQLにデータを格納する。

取得したデータをMySQLに格納します。
上の続きと思ってください。

import sqlalchemy as sa

## Indexが日付なので行に取り込んで、データ型を変更する。
df = df.reset_index()
df['Date'] = pd.to_datetime(df['Date'])

## 表名の指定
table_name = 'TAKEDA'

## 接続情報設定
engine = sa.create_engine('mysql+mysqlconnector://stock:stock@127.0.0.1/stock', echo=True)

# MySQLにデータを格納
df.to_sql(table_name, engine , index=False, if_exists='replace')

データの確認

MySQLにアクセスして、データを確認します。

$ mysql --host=127.0.0.1 --user=stock --password

mysql> use stock
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

mysql> show tables;
+-----------------+
| Tables_in_stock |
+-----------------+
| AAPL            |
| TAKEDA          |
+-----------------+

mysql> desc TAKEDA;
+--------+----------+------+-----+---------+-------+
| Field  | Type     | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
| Date   | datetime | YES  |     | NULL    |       |
| Open   | double   | YES  |     | NULL    |       |
| High   | double   | YES  |     | NULL    |       |
| Low    | double   | YES  |     | NULL    |       |
| Close  | double   | YES  |     | NULL    |       |
| Volume | double   | YES  |     | NULL    |       |
+--------+----------+------+-----+---------+-------+
6 rows in set (0.00 sec)

30
44
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
44

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?