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

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

ただいまの
回答率

90.21%

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 318

kei-kappa564

score 13

 前提・実現したいこと

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

 コード全体

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import pandas_datareader
import pandas as pd
import seaborn as sns
import mpl_finance as mpf
import datetime
import matplotlib.dates as mdates

# 開始日
start_date = datetime.date(2017, 12, 1)
# ブラウザ
browser = "yahoo"
# アップル
df_appl = pandas_datareader.data.DataReader("AAPL", browser, start_date)
# 必要の無い所を削除
df_appl_drop = df_appl.drop(["Adj Close","Volume"],  axis=1)

# open close high low のデータだけを取得
df_ohlc = pd.DataFrame(df_appl_drop[["Open", "High", "Low", "Close"]])
# df_ohlcから日付の部分を取得
x_date = df_ohlc.index
# 何をしているのか!?
ochl = np.vstack((mdates.date2num(x_date), df_ohlc.T)).T
# グラフのサイズ
fig = plt.figure(figsize=(20, 10))
ax = plt.subplot()
# ローソク足作図
mpf.candlestick_ohlc(ax, ochl, width=2.5, colorup="b", colordown="r")
# グリッド線を追加
ax.grid()
# x軸の範囲
ax.set_xlim(df_ohlc.index[0].date(),df_ohlc.index[-1].date())
# x軸の体裁を整える
fig.autofmt_xdate()

 該当のコード

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

 理解できていること

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

 理解できていないこと

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • hayataka2049

    2018/11/07 16:37

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

    キャンセル

  • kei-kappa564

    2018/11/07 16:45

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

    キャンセル

回答 1

checkベストアンサー

+1

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 個分の時間が入っています。

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

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

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

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

np.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つのデータが入っています。

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.21%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る