2017-12-08 38 views
-1

私は助けが必要です。私はmatplotlibとnumpyの間で学んでいます。私は単に "Matplotlibを使った日中の燭台の図"から自分のcsvファイルを使ってそのコードから学ぶコードを再現しています。それは異なっている私のコードの異なる部分は、以下の通りです:Matplotlibを使ったローソク足チャート週末をスキップ

import numpy as np 
import matplotlib.pyplot as plt 
import datetime 

from mpl_finance import candlestick_ohlc 
from matplotlib.dates import num2date 

# data in a text file, 5 columns: time, opening, close, high, low 
# note that I'm using the time you formated into an ordinal float data = 
np.loadtxt("/Users/paul/Documents/python/Quant/INTC.csv",  delimiter=",") 

私は

ValueError: could not convert string to float: b'Date'. 

は、私もこのラインを使用しようと、まだ私に同じエラーを与えるというエラーを取得していますメッセージ

data = np.genfromtxt("/Users/paul/Documents/python/Quant/INTC.csv", delimiter=",", skip_header=1, usecols=[0,1,2,3,4], dtype=(dt, float,float,float, float))" 

これはおそらく私が理解していない基本的な概念です。いくつかの指導のために多くのappriciated。

サンプルデータ:

Date,Open,High,Low,Close,Volume,Adj Close 
2017-11-06,46.599998,46.740002,46.090000,46.700001,46.700001,34035000 
2017-11-07,46.700001,47.090000,46.389999,46.779999,46.779999,24461400 
2017-11-08,46.619999,46.700001,46.279999,46.700001,46.700001,21565800 
2017-11-09,46.049999,46.389999,45.650002,46.299999,46.299999,25570400 
2017-11-10,46.040001,46.090000,45.380001,45.580002,45.580002,24095400 
2017-11-13,45.259998,45.939999,45.250000,45.750000,45.750000,18999000 

答えて

1

あなたはdatetimeオブジェクトに変換することにより、「日付列」(文字列)をインポートすることができますが、datetimeオブジェクトとしてそれを持っていたら、以下のようにあなたは週末を除外することができます。 matplotlibのは、DateTimeオブジェクトを理解して、あなたはmatplotlibの中にフィルタリングされたデータをプロットすることができます。お役に立てば幸いです。

''' 
data in csv 
Date,Open,High,Low,Close,Volume,Adj Close 
2017-12-06,46.599998,46.740002,46.090000,46.700001,46.700001,34035000 
2017-12-07,46.700001,47.090000,46.389999,46.779999,46.779999,24461400 
2017-12-08,46.619999,46.700001,46.279999,46.700001,46.700001,21565800 
2017-12-09,46.049999,46.389999,45.650002,46.299999,46.299999,25570400 
2017-12-10,46.040001,46.090000,45.380001,45.580002,45.580002,24095400 
2017-12-13,45.259998,45.939999,45.250000,45.750000,45.750000,18999000 
''' 

import numpy as np 
from datetime import datetime 

# use converter to convert a string object to datetime object. Note dtype is object for all columns 
data = np.genfromtxt(r'stock.csv', delimiter = ',', names = True, 
        converters={0: lambda x: datetime.strptime(x, "%Y-%m-%d")}, dtype=object) 

print data 

''' 
[ (datetime.datetime(2017, 12, 6, 0, 0), '46.599998', '46.740002', '46.090000', '46.700001', '46.700001', '34035000') 
(datetime.datetime(2017, 12, 7, 0, 0), '46.700001', '47.090000', '46.389999', '46.779999', '46.779999', '24461400') 
(datetime.datetime(2017, 12, 8, 0, 0), '46.619999', '46.700001', '46.279999', '46.700001', '46.700001', '21565800') 
(datetime.datetime(2017, 12, 9, 0, 0), '46.049999', '46.389999', '45.650002', '46.299999', '46.299999', '25570400') 
(datetime.datetime(2017, 12, 10, 0, 0), '46.040001', '46.090000', '45.380001', '45.580002', '45.580002', '24095400') 
(datetime.datetime(2017, 12, 13, 0, 0), '45.259998', '45.939999', '45.250000', '45.750000', '45.750000', '18999000')] 
''' 

# check if a day is a weekday or not 
def check_weekday_or_not(datetime_object): 
    if datetime_object.weekday() not in [5,6]: 
     # datetime.weekday() returns 5 and 6 for saturday and Sunday 
     return True 
    else: 
     return False 

# create a function to apply on each row of the matrix 
vfunc =np.vectorize(check_weekday_or_not)  
filter_mask = vfunc(data['Date']) 
print filter_mask 
#[ True True True False False True] 

# Apply the filter mask to obtain an array without weekends. 
print data[filter_mask] 
''' 
array([ (datetime.datetime(2017, 12, 6, 0, 0), '46.599998', '46.740002', '46.090000', '46.700001', '46.700001', '34035000'), 
     (datetime.datetime(2017, 12, 7, 0, 0), '46.700001', '47.090000', '46.389999', '46.779999', '46.779999', '24461400'), 
     (datetime.datetime(2017, 12, 8, 0, 0), '46.619999', '46.700001', '46.279999', '46.700001', '46.700001', '21565800'), 
     (datetime.datetime(2017, 12, 13, 0, 0), '45.259998', '45.939999', '45.250000', '45.750000', '45.750000', '18999000')], 
     dtype=[('Date', 'O'), ('Open', 'O'), ('High', 'O'), ('Low', 'O'), ('Close', 'O'), ('Volume', 'O'), ('Adj_Close', 'O')]) 
''' 
+0

こんにちは@のplasmon360。私はちょうど私が、少なくとも概念を理解していることを確認するために)(time.strptime上のすべてを読んでいました。私は解決策がしようとしていることを理解している。それは、日付をセットに変換しようとしている月曜日は0、土曜日は6です。x軸に0-5を揃えたら、それらを日付のために再び変換して表示することができます。しかし、私は "印刷する(データ)"まで働くことはできません。 – fishtang

+0

私はあなたのコードを次のように使っています:numpyをnpとしてインポート datetimeインポートdatetime data = np.genfromtxt( '/ Users/paul/Documents/python/Quant/INTC.csv'、delimiter = '、 '、名前= True、コンバータ= {0:ラムダx:datetime.strptime(x、 "%Y-%m-%d")、dtype =オブジェクト)print(data)そして、このエラーを返しました: TypeError :strptime()引数1は、バイトではなく、strでなければなりません。私はcvsの日付がすでにstrだと思った。それは私のバージョンと関係がありますか?または私はそれを得ていないだけですか?ありがとう。 – fishtang

+0

私はなぜそれが動作していないのかわかりませんが、いくつかの日付文字がユニコードであり、バイトとしてそれらをロードしているかもしれません。あなたはpython3を使用していると思いますか? あなたはこのコンバータを試すことができるかもしれません= {0:lambda x:datetime.strptime(x.decode( 'ascii')、 "%Y-%m-%d")} – plasmon360

関連する問題