Python數(shù)據(jù)分析常用方法手冊(共12頁)_第1頁
Python數(shù)據(jù)分析常用方法手冊(共12頁)_第2頁
Python數(shù)據(jù)分析常用方法手冊(共12頁)_第3頁
Python數(shù)據(jù)分析常用方法手冊(共12頁)_第4頁
Python數(shù)據(jù)分析常用方法手冊(共12頁)_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上1. Python數(shù)據(jù)處理和分析常用語句數(shù)據(jù)分析的一般步驟包括數(shù)據(jù)獲取、數(shù)據(jù)整理、數(shù)據(jù)描述、數(shù)據(jù)分析1.1 數(shù)據(jù)獲取1.1.1 數(shù)據(jù)獲取方式1.1.2 查看數(shù)據(jù)屬性Data.shape 查看數(shù)據(jù)多少行、多少列Data.columns 查看數(shù)據(jù)列Data.dtypes 查看各數(shù)據(jù)字段的屬性1.2 數(shù)據(jù)整理#第二步: 做一些數(shù)據(jù)的基本處理:1.2.1 數(shù)據(jù)基本處理(類excel)#0.數(shù)據(jù)類型的轉(zhuǎn)換例如:如果要做時(shí)間序列分析,首先要將交易日期從通用對象(object)轉(zhuǎn)換為日期對象(datetime)df'date' = pd.to_datetime(df

2、'date')#1.如何獲取導(dǎo)入的數(shù)據(jù)有幾行幾列?直接用df.shape,返回一個(gè)維度(幾行,幾列)的元組;df.columns.size #獲取列數(shù)df.iloc:, 0.size #獲取行數(shù)#2.如何查看指定行、列、子集?#df = pandas.read_excel('1.xls',sheetname= '店鋪分析日報(bào)')df = df.loc:,'股票代碼','股票名稱', '營業(yè)總收入'#訪問指定的列#df=df'股票代碼' #查看指定列#DataFrame.ix'

3、index_name' #查看指定行#dataframem:n #選擇多行#dataframedataframe'col3'>5 #條件篩選#dataframe.ix0:3,0:5 #選擇子集#3.如何添加新的列例1:添加一個(gè)總和欄來顯示Jan、Feb和Mar三個(gè)月的銷售總額df'total' = df'Jan'+df'Feb'+df'Mar'例2:把計(jì)算結(jié)果添加為一個(gè)新的列df'P/E' = df.收盤價(jià)/df.基本每股收益 #新的列名,后面是對應(yīng)的數(shù)值例3:在excel表最后加一行

4、求各列和sum_row=df'Jan','Feb','Mar','total'.sum()#4.如何刪除行列#df_delete=df.drop('result',axis=1) #刪除列#DataFrame.drop('index1','index2'.) #刪除行#5.如何對數(shù)據(jù)進(jìn)行排序?df'P/E'.size #獲取P/E 這列共有多少行newdf=df_delete.sort('P/E') #默認(rèn)升序排列sort_index也可以進(jìn)行排序#6

5、.如何對數(shù)據(jù)進(jìn)行篩選?#1.篩選出predictaqi_norm1這一列大于100的行;aqicsvaqicsv"predictaqi_norm1">100 也可以寫為:datadata.收盤價(jià)>100#2.使用&(并)與| (或)實(shí)現(xiàn)多條件篩選aqicsv(aqicsv"FID">37898) & (aqicsv"FID"<38766) aqicsv(aqicsv.predictaqi_norm1>150) |(aqicsv.predictaqi_norm1<100) #3.篩選后

6、取另外兩列數(shù)據(jù)如果只需要其中兩列數(shù)據(jù),而同時(shí)利用另外兩列進(jìn)行篩選時(shí)可以這樣.如果只需要其中的某幾列可以寫為aqicsv'FID','x','y'aqicsv'x','y'(aqicsv.FID >10000) | (aqicsv.predictaqi_norm1 >150) #4.isin()用法:篩選某一列數(shù)據(jù)符合等于規(guī)定值(它使得我們可以定義一個(gè)列表,里面包含我們所希望查找的值);data7=datadata'股票代碼'.isin('sh','sh',

7、'sh','sh')#同樣,以上這個(gè)語句可以用query()函數(shù)來查詢,需要安裝numexpr;data8=data.query('股票代碼 = 'sh','sh','sh','sh'')#map()函數(shù)也有這個(gè)功能,樣式如下:dfdf"sku".map(lambda x: x.startswith('B1') &amp; (df"quantity" &gt; 22).head()#5.字符串方法:篩選某一列內(nèi)容

8、包含特定值例如找出MA金叉死叉列所有含金叉的行,但列不能含空值data8=data7data7'MA金叉死叉'.str.contains('金叉')#6.如果列中存在空值,空值處理方法:#6.1 用fillna()方法將空值填充data7=data.fillna(value='你好')#6.2 或者將列中的空值刪除;stock_data = stock_datastock_data'市盈率TTM'.notnull()#或6.2 用dropna刪除缺失值stock_data.dropna(subset='下個(gè)月漲跌幅'

9、;, inplace=True)#7.pandas能夠理解日期,在對日期數(shù)據(jù)篩選方面可以對某年、某月進(jìn)行篩選;datadata'交易日期'='2014-03'datadata'交易日期'='2015'data(data'交易日期' >='') & (data'交易日期' <= '').head()#8.對時(shí)間序列數(shù)據(jù),設(shè)置交易日期為新的索引df2 = data.set_index('交易日期')#通過切分來獲得一段區(qū)間df2&quo

10、t;":""df2'2014'df2'2014-Dec'#9.用unique()函數(shù)來獲取一個(gè)不含重復(fù)項(xiàng)的小列表df"name".unique()#如果這個(gè)小列表同時(shí)要包含其他列信息,可以用drop_duplicates()函數(shù)df.drop_duplicates(subset="account number","name").head()#7.數(shù)據(jù)轉(zhuǎn)置df_sum=pd.DataFrame(data=sum_row).T#8.簡單的統(tǒng)計(jì)與篩選1.2.2 將分割數(shù)據(jù)讀取到一

11、張DataFrame# 第五步: 數(shù)據(jù)跟文件夾的交互讀取、保存#1.用for循環(huán)和append函數(shù)將文件夾中不同表格的數(shù)據(jù)經(jīng)過篩選后加載到同一張表格import pandas as pd import os stock_code_list=for root,dirs,files in os.walk('overview-data-sh/'): if files: for f in files: if'sh6'in f: stock_code_list.append(f.split('.csv')0)all_stock_sh=pd.DataFram

12、e()for code in stock_code_list: stock_data=pd.read_csv('overview-data-sh/'+code+'.csv',encoding='gbk') stock_data=stock_data'交易日期','股票代碼', '股票名稱','漲跌幅', '成交額', '換手率', '流通市值','市盈率TTM', '市銷率TTM', '市現(xiàn)率TT

13、M', '市凈率', 'MA_5', 'MA_10','MA_20', 'MA_30', 'MA_60','MA金叉死叉','MACD_金叉死叉','KDJ_金叉死叉','收盤價(jià)','開盤價(jià)' stock_data'交易日期' = pd.to_datetime(stock_data'交易日期') stock_data=stock_datastock_data'交易日期

14、9;='2016/9/30' all_stock_sh=all_stock_sh.append(stock_data,ignore_index=True)all_stock_sh.shape#2.用pd.concat將不同文件夾中數(shù)據(jù)加載到一個(gè)DateFrame#3.數(shù)據(jù)保存all_stock_sh.to_csv('全部股票當(dāng)天市場數(shù)據(jù)sh.csv',encoding='gbk')1.3 數(shù)據(jù)描述1.3.1 繪圖與可視化%pylabimport matplotlib.pyplot as pltimport numpy as npimport pa

15、ndas as pd data=pd.read_csv('sh.csv',encoding='gbk')data1=data'收盤價(jià)'data2=data'交易日期'# 在一張figure里面畫多張圖fig=plt.figure()ax1=fig.add_subplot(221)ax1.plot(data1,'g')# 設(shè)置X軸,Y軸,標(biāo)題ax1.set_xlabel('Time')ax1.set_ylabel('Price')ax1.set_title('my first

16、matplotlib plot')ax1.set_xlim(data'交易日期')# 時(shí)間序列趨勢圖-設(shè)置label如果要在同一個(gè)圖中顯示多個(gè)label,可以用plt.legend()函數(shù)代碼:%pylabimport matplotlib.pyplot as pltimport pandas as pddata=pd.read_csv('overview-data-sh/sh.csv',encoding='gbk')data.交易日期=pd.to_datetime(data.交易日期)data1=data.set_index('

17、交易日期')'收盤價(jià)'.ix'2009'data2=data.set_index('交易日期')'開盤價(jià)'.ix'2009'plt.title('Trend')plt.xlabel('Time')plt.ylabel('Price')plt.plot(data1,'k',label='1') plt.plot(data2,'g',label='2')plt.legend() #用legend()函

18、數(shù)可以在一張圖里顯示多個(gè)labelplt.show()# 餅圖plt.subplot(233)x = 1,2,3,4,5y = 2.3,3.4,1.2,6.6,7.0scatter(x,y)# 保存savefig("demo.png")例子:繪制股價(jià)的時(shí)間序列圖Pandas最基本的時(shí)間序列類型是以時(shí)間戳(Datatimeindex,Periodindex)為索引的Series。Set_index()方法將時(shí)間列(column)設(shè)置為indexdata=data.set_index('Unnamed: 0')='time&

19、#39;將index轉(zhuǎn)為datatimeindexdata.index=pd.to_datetime(data.index)data=data.resample('B',fill_method='ffill')代碼:#利用Python繪制時(shí)間序列圖%pylabimport matplotlib.pyplot as pltimport numpy as npimport pandas as pd data=pd.read_csv('sh.csv',encoding='gbk')data=data'收盤價(jià)','

20、交易日期'data=data.set_index('交易日期')data.index=pd.to_datetime(data.index)data=data.resample('M',fill_method='ffill')fig=plt.figure()ax1=fig.add_subplot(211)ax1.plot(data,'g')ax1.set_xlable('Time')ax1.set_ylable('Price')ax1.set_title('my first matpl

21、otlib plot')1.4 數(shù)據(jù)分析1.4.1 數(shù)據(jù)聚合與分組運(yùn)算#1.groupby技術(shù)from pandas import DataFrame,Seriesimport numpy as npdf=DataFrame('key1':'a','a','b','b','a', 'key2':'one','two','one','two','one', 'data1':np.ra

22、ndom.randn(5), 'data2':np.random.randn(5)#1.1 按照key1進(jìn)行分組,計(jì)算data1的平均值mean?grouped=df'data1'.groupby(df'key1').mean()或者:index_datas=index_datas.groupby('股票代碼').count()#1.2 按照key1進(jìn)行分組,計(jì)算data1、data2的平均值?df.groupby('key1').mean()#1.3 按照key1進(jìn)行分組,計(jì)算data1、data2求和?mean

23、s=df.groupby('key1','key2').sum()means.unstack() #用unstack()來取消堆疊/拆分列#1.4 選取部分列進(jìn)行聚合means_data1=df.groupby('key1','key2')'data2'.mean() #或means_data1=df.groupby('key1','key2')'data2'.mean()#或means_data1=df'data2'.groupby(df'k

24、ey1',df'key2').mean()#1.5 如何向DataFrame添加一個(gè)列tips'tip/total_bill'=tips'tip'/tips'total_bill'tips.count() #獲取每個(gè)column共有多少列#或者用tips.iloc:.size #獲取共有多少列#1.6 找出tips1里面,tip大于10的,并降序排列?tips_10=tipstips.tip>6.sort('tip',ascending=False)#1.7 對列sex分組后,對另一列(tip/tot

25、al_bill)進(jìn)行排序def top(self,n): return self.sort('tip/total_bill',ascending=False):n#top(tips)tips.groupby('sex').apply(top,n=5)#1.8 按照某一列內(nèi)容的部分字母進(jìn)行分組排序比如,某一列由不同星期+日期組成,但只想按照這一列的星期進(jìn)行排序?#get_day=lambda day: tips.day:1 # 選擇列中的第一個(gè)字母,按第一個(gè)字母排序#tips.groupby(get_day).apply(top,n=5) #groupby 可以調(diào)

26、用函數(shù)#1.9 采用多個(gè)聚合函數(shù)返回多個(gè)聚合值tips2=tips1.groupby('sex','smoker')'total_bill','tip'tips2.agg('mean','sum','std','max')#2.0 計(jì)算tip和total_bill之間的相關(guān)系數(shù) #corr=lambda x: x.corrwith(x'tips')tips_corr=tips.groupby('sex')tips_corr.apply(lambda g: g'tip'.corr(g'total_bill')#2.1 根據(jù)日價(jià)格變化計(jì)算各股票之間的年度相關(guān)系數(shù)by_year=data.groupby(l

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論