一、python基本操作
1、jupyter快捷鍵:a和b添加新行;m是轉(zhuǎn)換為Markdown模式,y是code模式。執(zhí)行:shift+enter;自動補全:tab;幫助文檔:shift+tab。
2、三劍客:numpy/pandas/matplotlib【最好管理員模式安裝,此時jupyter notebook出來是英文,且很卡;以普通用戶身份打開,為中文版,且很順暢】
3、數(shù)組和列表的區(qū)別:①字符串》浮點型》整型;②數(shù)組中存儲的數(shù)據(jù)元素必須是統(tǒng)一類型。
4、三種方式返回數(shù)組:
① array();
② matplotlib.pyplot 【讀取圖片使用.imread(讀入)和.imshow(顯示)】;
③ zero()、one()、linspace()、arange()、random系列。
5、numpy的常用屬性:shape(行數(shù),列數(shù),顏色數(shù))/ndim/size/dtype('元素類型')
6、切片操作:切前兩行/列 =》將圖片上下左右翻轉(zhuǎn),arr[行切片,列切片],arr[::-1,::-1] #將數(shù)組的行列倒置;
7、reshape(行數(shù),列數(shù)):數(shù)組內(nèi)數(shù)據(jù)行列變形。
8、級聯(lián)操作:將多個numpy數(shù)組進行橫向或縱向的拼接 =》將圖片上下左右拼接,numpy.concatenate((數(shù)組1,數(shù)組2),axis=1),為橫向拼接;axis=0,為縱向拼接。若有數(shù)組3,即三維數(shù)組,則有axis=2。必須同一維度!
9、常用的聚合操作:sum、max、min、mean
10、常用的數(shù)學(xué)函數(shù):三角函數(shù)(sin/cos/tan)、numpy.around(數(shù)組,decimals),返回指定數(shù)字的四舍五入值,decimals:舍入的小數(shù)位數(shù)(默認為0,若為負,整數(shù)將四舍五入到小數(shù)點左側(cè)的位置)。
11、矩陣相關(guān)
① numpy.eye() 返回一個單位矩陣。
② array.T 返回該數(shù)組轉(zhuǎn)置后的矩陣。
③ numpy.dot(數(shù)組1,數(shù)組2) 返回數(shù)組乘法之后的矩陣。
二、pandas基本操作
(1) Series(values, index), values:一組數(shù)據(jù);index:相關(guān)數(shù)據(jù)的索引標簽。由列表/numpy/字典創(chuàng)建。僅為一維數(shù)據(jù)源。
(2) DataFrame(values,columes,index)是一個表格型的數(shù)據(jù)結(jié)構(gòu),按照一定順序排列的多列數(shù)據(jù)組成。有行和列索引及值,以此擴展series,是多維。 由ndarray或字典創(chuàng)建。
DataFrame的屬性:values、columns、index、shape,無dtype。
DataFrame的索引操作:對行、隊列、元素進行索引。iloc:隱式索引;loc:顯式索引。
DataFrame的切片操作:對行、列進行切片。
- 索引:
? - df[col]:取列
? - df.loc[index]:取行
? - df.iloc[index,col]:取元素
- 切片:
? - df[index1:index3]:切行
? - df.iloc[:,col1:col3]:切列
(3) 時間數(shù)據(jù)類型的轉(zhuǎn)換:pd.to_datetime(col);將某一列設(shè)置為行索引:df.set_index()。
三、實踐
1、需求:股票分析
① 使用tushare包(財經(jīng)類)獲取某股票的歷史行情數(shù)據(jù)。
df=tushare.get_k_data(code,start)? ?#獲取網(wǎng)上數(shù)據(jù),股票代碼和開始時間
df.to_XXX? # 將網(wǎng)上數(shù)據(jù)存到本地
df=pd.read_csv('./XXX.xxx')? ?#將本地數(shù)據(jù)讀入到df
② 輸出該股票所有收盤比開盤上漲3%以上的日期。
df[(df['close']-df['open'])/df['open']>=0.03].index
③ 輸出該股票所有開盤比前日收盤跌幅超過2%的日期。
df[(df['open']-df['close'].shift(1))/df['close'].shift(1)<=-0.02].index
④ 假如從2010年1日1日開始,每月第一個交易日買入1手股票,每年最后一個交易日賣出所有股票,到今天為止,收益如何?
df.resample('M').first()? ?#數(shù)據(jù)重新取樣,每月第一個交易日
2、雙均線策略
① 均線的計算分析
② 金叉&死叉
③ 練習(xí):假如我從2010年1月1日開始,廚師資金為10萬元,金叉盡量買入,死叉全部賣出,則到今天為止,我的炒股收益率如何?
3、清洗缺失值、空值、重復(fù)值、異常值
①?處理丟失數(shù)據(jù):None和np.nan(NaN),區(qū)別:np.nan是float類型;None是NoneType類型。
注:數(shù)據(jù)分析中常常使用某些形式的運算來處理原始數(shù)據(jù),若原數(shù)據(jù)中的空值為NAN的形式,則不會干擾或中斷運算;NAN可以參與運算;None不可以參與運算。在pandas中,若遇到None形式的空值,則會強制轉(zhuǎn)換成NAN形式。
② 處理空值:isnull連用any,notnull連用all,dropna(可直接刪除缺失的行或列),fillna(覆蓋缺失值)。
③ 去重:df[列索引].unique,該列中有哪些不同的元素。
④ 處理異常值:若占比小,則刪除;若樣本量很小,可考慮使用均值或其他統(tǒng)計量取代;將其視為缺失值,利用統(tǒng)計模型填補。
4、DateFrame的級聯(lián)&合并操作
區(qū)別:merge需要依據(jù)某一共同列來合并,使用pd.merge()時,會自動根據(jù)兩者相同column名稱的那一列,作為key來進行合并;注:每一列元素的順序不要求一致。
map是series的方法,只能被series調(diào)用。
排序?qū)崿F(xiàn)的隨機抽樣:take()【只能使用隱式索引】、np.random.permutation() 【隨機排列序列】。
四、pandas的高級操作:
① 映射:創(chuàng)建一個映射關(guān)系列表,把values元素和一個特定的標簽或字符串綁定(給一個元素值提供不同的表現(xiàn)形式)。
② 分組聚合:groupby()函數(shù),查看分組情況;
高級數(shù)據(jù)聚合:使用groupby分組后,也可使用transform和apply提供的自定義函數(shù)實現(xiàn)更多的運算。
df.groupby('item')['price'].sum() === df.groupby('item')['price'].apply(sum)
③ 透視表:一種可以對數(shù)據(jù)動態(tài)排布并分類匯總的表格格式。
pivot_table(index,values,columns,aggfunc),index參數(shù)是分類匯總的分類條件。
優(yōu)點:靈活性高,操作性強,脈絡(luò)清晰易理解。
練習(xí):查看哈登對陣每個隊伍的得分,則需對每個隊伍進行分類并計算其各類得分的平均值;想看對陣同一對手在不同主客場下的數(shù)據(jù),分類條件為對手和主客場。
④ 交叉表:是一種用于計算分組的特殊透視圖,對數(shù)據(jù)進行匯總。
pd.crosstab(index,colums),index:分類數(shù)據(jù),交叉表的行索引;columns:列索引。
df.describ(),將有數(shù)據(jù)的列統(tǒng)計出均值,最大最小值等數(shù)據(jù)。
df[列索引].value_counts():統(tǒng)計列中各元素出現(xiàn)的次數(shù)。
⑤ plt.plot(x,y):繪制線性圖(單條/多條),設(shè)置坐標系的比例plt.figure(figsize=(a,b)),設(shè)置圖例legend()和軸的標識;圖例保存,figure.savefig()。
柱狀圖:plt.bar(索引,數(shù)據(jù)值,條形寬度);
散點圖:scatter(x,y,s,c),s指標量,c指顏色;
餅圖:pie(x);
直方圖:hist(bins,normed,color,orientation)。