01-02 Working with multiple stocks

處理多只股票

  • 創(chuàng)建空的DataFrame
#Build a DataFrame in pandas
import pandas as pd
def test_run():
    start_date = '2010-01-22'
    end_date = '2010-01-26'
    dates = pd.date_range(start_date, end_date)
    df1 = pd.DataFrame(index = dates)

if __name__ == "__main__":
    test_run()
  • 連結(jié)SPY數(shù)據(jù)
#SPY(標(biāo)普500指數(shù)) 可以用來參考是不是交易日
import pandas as pd
def test_run():
    #Define date range
    start_date = '2010-01-22'
    end_date = '2010-01-26'
    dates = pd.date_range(start_date, end_date)

    #Create an empty dataframe
    df1 = pd.DataFrame(index = dates)

    #Read SPY data into temporary DataFrame
    dfSPY = pd.read_csv("data/SPY.csv", 
            index_col = "Date", 
            parse_dates = True, 
            usecols = ['Date', 'Adj Close'], 
            na_values = ['nan'])
    
    #Rename 'Adj Close' column to 'SPY' to prevent clash
    dfSPY = dfSPY.rename(columns = {'Adj Close' : 'SPY'})

    #Join the two DataFrames, Drop NaN values
    df1 = df1.join(dfSPY)
    df1 = df1.dropna()
    #也可以用 df1 = df1.join(dfSPY, how = 'inner') 來實現(xiàn)
  • 讀取更多股票數(shù)據(jù)
#Read in more stocks:
symbols = ['GOOG', 'IBM', 'GLD']
df_temp = pd.read_csv("data/{}.csv".format(symbol),
          index_col = 'Date',
          parse_dates = True,
          usecols = ['Date', 'Adj Close'],
          na_values = ['nan'])
#Rename to prevent clash
df_temp = df_temp.rename(columns = {'Adj Close' : symbol})
df1 = df1.join(df_temp)
#use default how = left
  • 讀取數(shù)據(jù)的實用函數(shù)
import os
import pandas as pd

def symbol_to_path(symbol, base_dir = "data"):
    #Return CSV file path given ticker symbol
    return os.path.join(base_dir, "{}.csv".format(str(symbol)))

def get_data(symbols, dates)
    #Read stock data (Adj Close) for given syb from csv
    df = pd.DataFrame(index = dates)
    if 'SPY' not in symbols:
        #Add SPY for referance if absent
        #symbols.insert(0, 'SPY')
    for symbol in symbols:
        df_temp = pd.read_csv(symbol_to_path(symbol),
                  index_col = 'Date',
                  parse_dates = True,
                  usecols = ['Date', 'Adj Close'],
                  na_values = ['nan'])
        df_temp = df.temp.rename(columns = {'Adj Close' : symbol})
        df = df.join(df_temp)
        if symbol == 'SPY': #drop dates SPY did not trade
        df = df.dropna(subset=["SPY"])

    return df
#More slicing
def test_run():
    #Define a date range
    dates = pd.date_range('2010-01-01', '2010-12-31')

    #Choose stock symbols to read
    symbols = ['GOOG', 'IBM', 'GLD'] 
    #SPY will be added in get_data()

    #Get stock data
    df = get_data(symbols, dates)

    #Slice by row range (dates) using DataFrame.ix[] selector
    print df.ix['2010-01-01':'2010-01-31'] 
    #the month of January
  • 繪制多只股票的圖形
def plot_data(df, title = 'Stock prices')
    #plot stock prices
    ax = df.plot(title = title)
    #you can imagine it as an object, axis
    ax.set_xlabel("Date")
    ax.set_ylabel("Price")
    #ax = df.plot(title = title, fontsize = 2) 可改字體
    plt.show()
  • movement(變動):股票的相對漲跌

  • 標(biāo)準化 Normalizing
    best way to normalize price data so that all prices start at 1.0:
    df1 = df1 / df1.ix[0]
    or: df1 = df1 / df1.ix[0,i]

def normalize_data(df):
    return df / df.ix[0,i]
  • 切片和繪制兩只股票的圖形
def plot_selected(df, columns, start_index, end_index)
    plot_data(df.ix[start_index:end_index, columns], 
              title = "Selected data")

pandas可處理帶有大量統(tǒng)計函數(shù)的ndarry

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末殉农,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子惨奕,更是在濱河造成了極大的恐慌椭蹄,老刑警劉巖茴迁,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衅檀,死亡現(xiàn)場離奇詭異铛嘱,居然都是意外死亡,警方通過查閱死者的電腦和手機篡腌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門褐荷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來勾效,“玉大人嘹悼,你說我怎么就攤上這事叛甫。” “怎么了杨伙?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵其监,是天一觀的道長。 經(jīng)常有香客問我限匣,道長抖苦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任米死,我火速辦了婚禮锌历,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘峦筒。我一直安慰自己究西,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布物喷。 她就那樣靜靜地躺著卤材,像睡著了一般。 火紅的嫁衣襯著肌膚如雪峦失。 梳的紋絲不亂的頭發(fā)上扇丛,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天,我揣著相機與錄音尉辑,去河邊找鬼帆精。 笑死,一個胖子當(dāng)著我的面吹牛隧魄,可吹牛的內(nèi)容都是我干的实幕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼堤器,長吁一口氣:“原來是場噩夢啊……” “哼昆庇!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起闸溃,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤整吆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后辉川,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體表蝙,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年乓旗,在試婚紗的時候發(fā)現(xiàn)自己被綠了府蛇。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡屿愚,死狀恐怖汇跨,靈堂內(nèi)的尸體忽然破棺而出务荆,到底是詐尸還是另有隱情,我是刑警寧澤穷遂,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布函匕,位于F島的核電站,受9級特大地震影響蚪黑,放射性物質(zhì)發(fā)生泄漏盅惜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一忌穿、第九天 我趴在偏房一處隱蔽的房頂上張望抒寂。 院中可真熱鬧,春花似錦掠剑、人聲如沸蓬推。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沸伏。三九已至,卻和暖如春动分,著一層夾襖步出監(jiān)牢的瞬間毅糟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工澜公, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留姆另,地道東北人。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓坟乾,卻偏偏與公主長得像迹辐,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子甚侣,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 我的朋友不多明吩,但每個都暖到我心里。 超貼心的殷费。
    你好橘子皮閱讀 316評論 0 1
  • 今天兒子自己出了口算題印荔,自己完成了所有的作業(yè),因為今天太累也有點不舒服的原因本想不給他檢查作業(yè)的详羡,可是又一想不行仍律,...
    新的一天從早上開始閱讀 69評論 0 1
  • 前幾日閑來無事,翻了翻自己以前的朋友圈实柠,有條說“我有難你鼎力相助水泉,你遇困我義不容辭”。雖然已經(jīng)記不清事情的具體緣由...
    楚舒大人閱讀 446評論 5 3