Skip to content

Instantly share code, notes, and snippets.

@va2577
Created May 15, 2018 08:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save va2577/f8b20698656d679b948b76660868972e to your computer and use it in GitHub Desktop.
Save va2577/f8b20698656d679b948b76660868972e to your computer and use it in GitHub Desktop.
ヒストリカルデータリサンプリング
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import pandas as pd"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# データ\n",
"\n",
"```shell\n",
"$ head USDJPY_1\\ Min_Bid_2000.01.01_2018.01.01.csv\n",
"Time (UTC),Open,High,Low,Close,Volume\n",
"2003.05.04 21:00:00,118.94,118.952,118.94,118.952,253\n",
"2003.05.04 21:01:00,118.961,118.967,118.958,118.967,154.6\n",
"2003.05.04 21:02:00,118.972,118.972,118.955,118.955,219.7\n",
"2003.05.04 21:03:00,118.953,118.961,118.949,118.949,309.9\n",
"2003.05.04 21:04:00,118.953,118.953,118.946,118.946,229.4\n",
"2003.05.04 21:05:00,118.952,118.954,118.944,118.944,112.2\n",
"2003.05.04 21:06:00,118.95,118.952,118.945,118.945,170.2\n",
"2003.05.04 21:07:00,118.947,118.956,118.947,118.947,124.5\n",
"2003.05.04 21:08:00,118.946,118.954,118.934,118.934,355\n",
"$ wc -l USDJPY_1\\ Min_Bid_2000.01.01_2018.01.01.csv\n",
"5509561 USDJPY_1 Min_Bid_2000.01.01_2018.01.01.csv\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# データを読み込む"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 13.2 s, sys: 3.8 s, total: 17 s\n",
"Wall time: 20.2 s\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>open</th>\n",
" <th>high</th>\n",
" <th>low</th>\n",
" <th>close</th>\n",
" <th>volume</th>\n",
" </tr>\n",
" <tr>\n",
" <th>time</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2003-05-04 21:00:00</th>\n",
" <td>118.940</td>\n",
" <td>118.952</td>\n",
" <td>118.940</td>\n",
" <td>118.952</td>\n",
" <td>253.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2003-05-04 21:01:00</th>\n",
" <td>118.961</td>\n",
" <td>118.967</td>\n",
" <td>118.958</td>\n",
" <td>118.967</td>\n",
" <td>154.6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2003-05-04 21:02:00</th>\n",
" <td>118.972</td>\n",
" <td>118.972</td>\n",
" <td>118.955</td>\n",
" <td>118.955</td>\n",
" <td>219.7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2003-05-04 21:03:00</th>\n",
" <td>118.953</td>\n",
" <td>118.961</td>\n",
" <td>118.949</td>\n",
" <td>118.949</td>\n",
" <td>309.9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2003-05-04 21:04:00</th>\n",
" <td>118.953</td>\n",
" <td>118.953</td>\n",
" <td>118.946</td>\n",
" <td>118.946</td>\n",
" <td>229.4</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" open high low close volume\n",
"time \n",
"2003-05-04 21:00:00 118.940 118.952 118.940 118.952 253.0\n",
"2003-05-04 21:01:00 118.961 118.967 118.958 118.967 154.6\n",
"2003-05-04 21:02:00 118.972 118.972 118.955 118.955 219.7\n",
"2003-05-04 21:03:00 118.953 118.961 118.949 118.949 309.9\n",
"2003-05-04 21:04:00 118.953 118.953 118.946 118.946 229.4"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# type を指定した方がよいそうなのでコメントアウト\n",
"#%time df = pd.read_csv(filepath_or_buffer='USDJPY_1 Min_Bid_2000.01.01_2018.01.01.csv', index_col='Time (UTC)')\n",
"# CPU times: user 13.9 s, sys: 4.19 s, total: 18.1 s\n",
"# Wall time: 18.3 s\n",
"\n",
"dtype1 = { 'time': str, 'open': float, 'high': float, 'low': float, 'close': float, 'volume': float }\n",
"names1 = ['time', 'open', 'high', 'low', 'close', 'volume']\n",
"%time df = pd.read_csv(filepath_or_buffer='USDJPY_1 Min_Bid_2000.01.01_2018.01.01.csv', dtype=dtype1, header=0, index_col='time', names=names1, parse_dates=['time'])\n",
"# CPU times: user 14 s, sys: 3.95 s, total: 18 s\n",
"# Wall time: 19.1 s\n",
"\n",
"df.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 日足のローソク足を 5 本にするため時間の計算"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 93.8 ms, sys: 312 ms, total: 406 ms\n",
"Wall time: 531 ms\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>open</th>\n",
" <th>high</th>\n",
" <th>low</th>\n",
" <th>close</th>\n",
" <th>volume</th>\n",
" </tr>\n",
" <tr>\n",
" <th>time</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2003-05-05 00:00:00</th>\n",
" <td>118.940</td>\n",
" <td>118.952</td>\n",
" <td>118.940</td>\n",
" <td>118.952</td>\n",
" <td>253.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2003-05-05 00:01:00</th>\n",
" <td>118.961</td>\n",
" <td>118.967</td>\n",
" <td>118.958</td>\n",
" <td>118.967</td>\n",
" <td>154.6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2003-05-05 00:02:00</th>\n",
" <td>118.972</td>\n",
" <td>118.972</td>\n",
" <td>118.955</td>\n",
" <td>118.955</td>\n",
" <td>219.7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2003-05-05 00:03:00</th>\n",
" <td>118.953</td>\n",
" <td>118.961</td>\n",
" <td>118.949</td>\n",
" <td>118.949</td>\n",
" <td>309.9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2003-05-05 00:04:00</th>\n",
" <td>118.953</td>\n",
" <td>118.953</td>\n",
" <td>118.946</td>\n",
" <td>118.946</td>\n",
" <td>229.4</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" open high low close volume\n",
"time \n",
"2003-05-05 00:00:00 118.940 118.952 118.940 118.952 253.0\n",
"2003-05-05 00:01:00 118.961 118.967 118.958 118.967 154.6\n",
"2003-05-05 00:02:00 118.972 118.972 118.955 118.955 219.7\n",
"2003-05-05 00:03:00 118.953 118.961 118.949 118.949 309.9\n",
"2003-05-05 00:04:00 118.953 118.953 118.946 118.946 229.4"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# timezone を指定しても resample に反映されないのでコメントアウト\n",
"#%time df.index.tz_localize('UTC').tz_convert('EET')\n",
"\n",
"# DataFrame の内容を変えたくないのでコメントアウト\n",
"# できるだけ変数は不変にしたい\n",
"#%time df.index += pd.offsets.Hour(3)\n",
"# CPU times: user 93.8 ms, sys: 78.1 ms, total: 172 ms\n",
"# Wall time: 170 ms\n",
"\n",
"# EEST(Eastern European Summer Time)\n",
"# Eastern European Summer Time (EEST) is 3 hours ahead of Coordinated Universal Time (UTC).\n",
"# 入力したデータが UTC なので、 +3 時間にする\n",
"# 2003-05-04 21:00:00(Sun) が 2003-05-05 00:00:00(Mon) となる\n",
"# 月曜日から開始になるため日足のローソク足が 6 本ではなく 5 本になる\n",
"data1 = { 'open': df['open'].values, 'high': df['high'].values, 'low': df['low'].values, 'close': df['close'].values, 'volume': df['volume'].values }\n",
"columns1 = ['open', 'high', 'low', 'close', 'volume']\n",
"index1 = df.index + pd.DateOffset(hours=3)\n",
"%time df2 = pd.DataFrame(data=data1, columns=columns1, index=index1)\n",
"# CPU times: user 125 ms, sys: 406 ms, total: 531 ms\n",
"# Wall time: 524 ms\n",
"\n",
"df2.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* [pandas.DataFrame.resample — pandas 0.22.0 documentation](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.resample.html)\n",
"* [pandas.core.resample.Resampler.ohlc — pandas 0.22.0 documentation](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.resample.Resampler.ohlc.html)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# リサンプリング"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 250 ms, sys: 78.1 ms, total: 328 ms\n",
"Wall time: 456 ms\n",
"CPU times: user 172 ms, sys: 93.8 ms, total: 266 ms\n",
"Wall time: 274 ms\n",
"CPU times: user 0 ns, sys: 0 ns, total: 0 ns\n",
"Wall time: 3.03 ms\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>open</th>\n",
" <th>high</th>\n",
" <th>low</th>\n",
" <th>close</th>\n",
" <th>volume</th>\n",
" </tr>\n",
" <tr>\n",
" <th>time</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2003-05-05</th>\n",
" <td>118.940</td>\n",
" <td>119.046</td>\n",
" <td>118.461</td>\n",
" <td>118.603</td>\n",
" <td>592866.9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2003-05-06</th>\n",
" <td>118.591</td>\n",
" <td>118.751</td>\n",
" <td>117.290</td>\n",
" <td>117.500</td>\n",
" <td>581707.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2003-05-07</th>\n",
" <td>117.456</td>\n",
" <td>117.830</td>\n",
" <td>116.052</td>\n",
" <td>116.303</td>\n",
" <td>584496.2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2003-05-08</th>\n",
" <td>116.311</td>\n",
" <td>116.969</td>\n",
" <td>115.940</td>\n",
" <td>116.823</td>\n",
" <td>588236.7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2003-05-09</th>\n",
" <td>116.835</td>\n",
" <td>117.612</td>\n",
" <td>116.794</td>\n",
" <td>117.151</td>\n",
" <td>583132.9</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" open high low close volume\n",
"time \n",
"2003-05-05 118.940 119.046 118.461 118.603 592866.9\n",
"2003-05-06 118.591 118.751 117.290 117.500 581707.0\n",
"2003-05-07 117.456 117.830 116.052 116.303 584496.2\n",
"2003-05-08 116.311 116.969 115.940 116.823 588236.7\n",
"2003-05-09 116.835 117.612 116.794 117.151 583132.9"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# resample のパラメーターの how は pandas 0.22.0 では deprecated になっているためコメントアウト\n",
"#%time df3 = df.resample(rule='D', how='ohlc')\n",
"# /path/to/dir/lib/python3.5/site-packages/ipykernel_launcher.py:1: FutureWarning: how in .resample() is deprecated\n",
"# the new syntax is .resample(...).ohlc()\n",
"\n",
"# 日足の始値、高値、安値、終値を計算する\n",
"# Series ごとに始値、高値、安値、終値の計算結果が得られる\n",
"# 始値を参照する場合は df['open']['open'] のように記述する\n",
"%time df3 = df2.resample(rule='D').ohlc()\n",
"# CPU times: user 250 ms, sys: 78.1 ms, total: 328 ms\n",
"# Wall time: 348 ms\n",
"\n",
"# 日足の出来高を計算する\n",
"%time df4 = df2.resample(rule='D').sum()\n",
"# CPU times: user 156 ms, sys: 93.8 ms, total: 250 ms\n",
"# Wall time: 241 ms\n",
"\n",
"# 日足の DataFrame\n",
"# 土日も計算結果に含まれるため dropna で取り除く\n",
"data2 = { 'open': df3['open']['open'].values, 'high': df3['high']['high'].values, 'low': df3['low']['low'].values, 'close': df3['close']['close'].values, 'volume': df4['volume'].values }\n",
"columns2 = ['open', 'high', 'low', 'close', 'volume']\n",
"%time df5 = pd.DataFrame(data=data2, columns=columns2, index=df3.index).dropna()\n",
"# CPU times: user 0 ns, sys: 0 ns, total: 0 ns\n",
"# Wall time: 2.91 ms\n",
"\n",
"df5.head()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 78.1 ms, sys: 0 ns, total: 78.1 ms\n",
"Wall time: 184 ms\n"
]
},
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7fbb306e9518>"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%time df5.plot(y='close')\n",
"# CPU times: user 125 ms, sys: 46.9 ms, total: 172 ms\n",
"# Wall time: 198 ms"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"df5.to_csv(path_or_buf='USDJPY_daily.csv')"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment