Help us understand the problem. What is going on with this article?

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

やりたいこと

データ分析用に永続データとして日本の株価情報を取得して、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)

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away