質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1981閲覧

[Python][JupyterNotebook]ローソク足でnp.vstackを使用している部分に関して

kei-kappa564

総合スコア19

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/11/07 07:29

編集2018/11/07 07:47

前提・実現したいこと

Jupyter Notebookで株価を使用したローソク足の作成しようとテンプレート的な物から作成は出来たのですが、
コードの一部で理解できない処理があって躓いております、ご教授願います。
以下にコードの全体を記載します。

コード全体

python

1%matplotlib inline 2import numpy as np 3import matplotlib.pyplot as plt 4import pandas_datareader 5import pandas as pd 6import seaborn as sns 7import mpl_finance as mpf 8import datetime 9import matplotlib.dates as mdates 10 11# 開始日 12start_date = datetime.date(2017, 12, 1) 13# ブラウザ 14browser = "yahoo" 15# アップル 16df_appl = pandas_datareader.data.DataReader("AAPL", browser, start_date) 17# 必要の無い所を削除 18df_appl_drop = df_appl.drop(["Adj Close","Volume"], axis=1) 19 20# open close high low のデータだけを取得 21df_ohlc = pd.DataFrame(df_appl_drop[["Open", "High", "Low", "Close"]]) 22# df_ohlcから日付の部分を取得 23x_date = df_ohlc.index 24# 何をしているのか!? 25ochl = np.vstack((mdates.date2num(x_date), df_ohlc.T)).T 26# グラフのサイズ 27fig = plt.figure(figsize=(20, 10)) 28ax = plt.subplot() 29# ローソク足作図 30mpf.candlestick_ohlc(ax, ochl, width=2.5, colorup="b", colordown="r") 31# グリッド線を追加 32ax.grid() 33# x軸の範囲 34ax.set_xlim(df_ohlc.index[0].date(),df_ohlc.index[-1].date()) 35# x軸の体裁を整える 36fig.autofmt_xdate() 37 38

該当のコード

Python

1# 何をしているのか!? 2ochl = np.vstack((mdates.date2num(x_date), df_ohlc.T)).T

理解できていること

  • np.vstackを用いて配列を結合。
  • .Tを用いて行と列を転地。

理解できていないこと

  • date2num(x_date)をprintで見てみた結果6桁の数字がarrayで出てきたがこれは何なのか。
  • 上記の6桁の数字を行列の転地を行った株価のデータに対して何故、結合する必要があるのか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hayataka2049

2018/11/07 07:37

そのコードはdate2numが定義されていないので実行できないと思います
kei-kappa564

2018/11/07 07:45

ご指摘ありがとうございます、記入が漏れておりました。
guest

回答1

0

ベストアンサー

date2num(x_date)をprintで見てみた結果6桁の数字がarrayで出てきたがこれは何なのか。

Unix時間0 (1970年1月1日午前0時0分0秒) からの経過日数

date2num() 参照

上記の6桁の数字を行列の転地を行った株価のデータに対して何故、結合する必要があるのか。

candlestick_ohlc() の第2引数 quotes に渡すための各要素が (time, open, high, low, close) である (NumTimes, 5) の配列を作るのが目標

x_date を見ると 235 個分の時間が入っています。

python

1print(mdates.date2num(x_date).shape) # (235,)

df_ohlc を見ると、235 個分のデータが入っています。

python

1print(df_ohlc.shape) # (235, 4)

これら2つの配列を結合し、(235, 5) の配列を作っているのが以下です。

python

1np.vstack((mdates.date2num(x_date), df_ohlc.T))

mdates.date2num(x_date) は (235,) で、df_ohlc.T が (4, 235) なので、numpy.vstack() で縦方向に結合し、(5, 235) となります。
さらにそれの転置をとることで、(235, 5) になります。

一列目が時間で2~5列目は4つのデータが入っています。

python

1print(ochl.shape) # (235, 5)

投稿2018/11/07 08:37

tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問