2013-10-25 12 views
7

में डेटाफ्रेम से कैंडलस्टिक डेटा प्लॉट करना मैं पांडा का उपयोग करके याहू से डाउनलोड किए गए डेटा से दैनिक कैंडलस्टिक प्लॉट बनाना चाहता हूं। मुझे इस संदर्भ में candlestick matplotlib फ़ंक्शन का उपयोग करने का तरीका पता लगाने में परेशानी हो रही है।पायथन

#The following example, downloads stock data from Yahoo and plots it. 
from pandas.io.data import get_data_yahoo 
import matplotlib.pyplot as plt 

from matplotlib.pyplot import subplots, draw 
from matplotlib.finance import candlestick 

symbol = "GOOG" 

data = get_data_yahoo(symbol, start = '2013-9-01', end = '2013-10-23')[['Open','Close','High','Low','Volume']] 

ax = subplots() 

candlestick(ax,data['Open'],data['High'],data['Low'],data['Close']) 

धन्यवाद

एंड्रयू: यहाँ कोड है।

उत्तर

1

यह प्रश्न तब मिला जब मैं यह भी देख रहा था कि get_data_yahoo जैसे डेटारिएडर सेवाओं में से एक से लौटाए गए पांडा डेटाफ्रेम के साथ कैंडलस्टिक का उपयोग कैसे किया जाए। मैंने अंततः इसे समझ लिया। चाब मैककिनी और आरजेआरवी द्वारा उत्तर दिया गया यह एक अन्य सवाल था। यहाँ है कि लिंक है:

Pandas convert dataframe to array of tuples

कुंजी candlestick.py समारोह परिभाषा निर्धारित करने के लिए कि यह कैसे डेटा प्राप्त करने की उम्मीद को पढ़ने के लिए गया था। तारीख को पहले परिवर्तित करने की आवश्यकता है, तो पूरे डेटाफ्रेम को टुपल्स की सरणी में परिवर्तित करने की आवश्यकता है।

यहां अंतिम कोड है जो मेरे लिए काम करता है। शायद वहां कुछ अन्य कैंडलस्टिक चार्ट हैं जो स्टॉक कोट सेवाओं में से किसी एक से लौटाए गए पांडा डेटाफ्रेम पर सीधे काम करता है। ये तो बहुत अच्छा रहेगा।

# Imports 
from pandas.io.data import get_data_yahoo 
from datetime import datetime, timedelta 
import matplotlib.dates as mdates 
from matplotlib.pyplot import subplots, draw 
from matplotlib.finance import candlestick 
import matplotlib.pyplot as plt 

# get the data on a symbol (gets last 1 year) 
symbol = "TSLA" 
data = get_data_yahoo(symbol, datetime.now() - timedelta(days=365)) 

# drop the date index from the dateframe 
data.reset_index(inplace = True) 

# convert the datetime64 column in the dataframe to 'float days' 
data.Date = mdates.date2num(data.Date) 

# make an array of tuples in the specific order needed 
dataAr = [tuple(x) for x in data[['Date', 'Open', 'Close', 'High', 'Low']].to_records(index=False)] 

# construct and show the plot 
fig = plt.figure() 
ax1 = plt.subplot(1,1,1) 
candlestick(ax1, dataAr) 
plt.show() 
3

मैंने एक महान पेस्टबिन प्रविष्टि में ठोकर खाई: http://pastebin.com/ne7Fjdiq यह अच्छी तरह से करता है। मुझे भी कॉलिंग सिंटैक्स सही होने में परेशानी हो रही थी। यह आमतौर पर कार्य को सही तरीके से काम करने के लिए सरल तरीके से अपने डेटा को बदलने के आसपास घूमता है। मेरा मुद्दा डेटाटाइम के साथ था। मेरे प्रारूप डेटा में कुछ होना चाहिए। एक बार जब मैंने तिथि श्रृंखला को रेंज (maxdata) से बदल दिया तो यह काम करता था।

data = pandas.read_csv('data.csv', parse_dates={'Timestamp': ['Date', 'Time']}, index_col='Timestamp') 
ticks = data.ix[:, ['Price', 'Volume']] 
bars = ticks.Price.resample('1min', how='ohlc') 
barsa = bars.fillna(method='ffill') 
fig = plt.figure() 
fig.subplots_adjust(bottom=0.1) 
ax = fig.add_subplot(111) 
plt.title("Candlestick chart") 
volume = ticks.Volume.resample('1min', how='sum') 
value = ticks.prod(axis=1).resample('1min', how='sum') 
vwap = value/volume 
Date = range(len(barsa)) 
#Date = matplotlib.dates.date2num(barsa.index)# 
DOCHLV = zip(Date , barsa.open, barsa.close, barsa.high, barsa.low, volume) 
matplotlib.finance.candlestick(ax, DOCHLV, width=0.6, colorup='g', colordown='r', alpha=1.0) 
plt.show() 
4

मैं @ रान्डेल-गुडविन जवाब टिप्पणी करने के लिए कोई प्रतिष्ठा है, लेकिन पांडा 0.16.2 लाइन के लिए:

# convert the datetime64 column in the dataframe to 'float days' 
data.Date = mdates.date2num(data.Date) 

होना चाहिए:

data.Date = mdates.date2num(data.Date.dt.to_pydatetime()) 

क्योंकि matplotlib का समर्थन नहीं करता numpy datetime64 dtype

2

यहां समाधान है:

from pandas.io.data import get_data_yahoo 
import matplotlib.pyplot as plt 
from matplotlib import dates as mdates 
from matplotlib import ticker as mticker 
from matplotlib.finance import candlestick_ohlc 
import datetime as dt 
symbol = "GOOG" 

data = get_data_yahoo(symbol, start = '2014-9-01', end = '2015-10-23') 
data.reset_index(inplace=True) 
data['Date']=mdates.date2num(data['Date'].astype(dt.date)) 
fig = plt.figure() 
ax1 = plt.subplot2grid((1,1),(0,0)) 
plt.ylabel('Price') 
ax1.xaxis.set_major_locator(mticker.MaxNLocator(6)) 
ax1.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d')) 

candlestick_ohlc(ax1,data.values,width=0.2) 
5

का उपयोग बोकेह:

import io 
from math import pi 
import pandas as pd 
from bokeh.plotting import figure, show, output_file 

df = pd.read_csv(
    io.BytesIO(
     b'''Date,Open,High,Low,Close 
2016-06-01,69.6,70.2,69.44,69.76 
2016-06-02,70.0,70.15,69.45,69.54 
2016-06-03,69.51,70.48,68.62,68.91 
2016-06-04,69.51,70.48,68.62,68.91 
2016-06-05,69.51,70.48,68.62,68.91 
2016-06-06,70.49,71.44,69.84,70.11 
2016-06-07,70.11,70.11,68.0,68.35''' 
    ) 
) 

df["Date"] = pd.to_datetime(df["Date"]) 

inc = df.Close > df.Open 
dec = df.Open > df.Close 
w = 12*60*60*1000 

TOOLS = "pan,wheel_zoom,box_zoom,reset,save" 

p = figure(x_axis_type="datetime", tools=TOOLS, plot_width=1000, title 
= "Candlestick") 
p.xaxis.major_label_orientation = pi/4 
p.grid.grid_line_alpha=0.3 

p.segment(df.Date, df.High, df.Date, df.Low, color="black") 
p.vbar(df.Date[inc], w, df.Open[inc], df.Close[inc], fill_color="#D5E1DD", line_color="black") 
p.vbar(df.Date[dec], w, df.Open[dec], df.Close[dec], fill_color="#F2583E", line_color="black") 

output_file("candlestick.html", title="candlestick.py example") 

show(p) 

Candlestick plot from a Pandas DataFrame

कोड यहाँ से काँटेदार ऊपर: http://bokeh.pydata.org/en/latest/docs/gallery/candlestick.html