這是書籍《Pandas Cookbook》書籍第03章的代碼復現,所有代碼運行在Jupyter Notebook上,原講解地址是:
https://www.jianshu.com/p/05cb76788c80
我上傳代碼的github地址是:
https://github.com/Asunqingwen/PandasCookbook.git
github上有該書中用到的data,里面代碼會不定期更新(因為工作原因,時間不定),直到本書學習完成!
相比原講解,會穿插一些自己的理解,水平有限,請各路大神指正。
文章目錄
- 1.規劃數據分析路線
- 2.改變數據類型,降低內存消耗
- 3.從最大中選擇最小
- 4.通過排序選取每組的最大值
- 5.用sort_values復現nlargest方法
- 6.計算跟蹤止損價格
1.規劃數據分析路線
這一部分主要是用describe()結合它的include參數,顯示導入數據的一些基本信息,顯示所用的函數不是常用的print(),而是IPython庫的display()
import pandas as pd
import numpy as np
from IPython.display import display
pd.options.display.max_columns = 50
2.改變數據類型,降低內存消耗
這段主要用到了一個函數——memory_usage(deep=True),用來計算導入數據所占的內存,而如果某個column的數據類型可以修改為占內存更小的數據類型,那就能進一步降低內存消耗
#選取五列
college = pd.read_csv('data/college.csv')
different_cols = ['RELAFFIL','SATMTMID','CURROPER','INSTNM','STABBR']
col2 = college.loc[:,different_cols]
col2.head()
#查看數據類型
col2.dtypes
# 用memory_usage方法查看每列的內存消耗
original_mem = col2.memory_usage(deep=True)
original_mem
我們可以通過astype()對column的數據類型進行轉換,當然不能隨便轉換,要先確定是否占內存更小的數據類型可以表示其整列值——比如RELAFFIL原來是int64,但是它整列值都是0/1,所以完全可以用int8來表示;再看STABBR,是object類型,但是它的值只有59個是不同的,那么就可以用category來表示,category類似于tensorflow的one_hot編碼,在這里就相當于將STABBR59分類了,這樣就比原來少占很多內存了。category的具體講解,可以看下面這篇博客 https://blog.csdn.net/FrankieHello/article/details/81220116
pandas中規定,只要數值類型列,有缺失值,那么這一列的數據類型就是浮點型,所以不能強制轉換為整型,不然會報錯——ValueError: Cannot convert non-finite values (NA or inf) to integer
3.從最大中選擇最小
這段用到了兩個函數nlargest(n,column_name)和nsmallest(n,column_name),顧名思義,主要是獲取導入數據某一列值最大的前n個,某一列值最小的前n個,不需要排序
4.通過排序選取每組的最大值
這段主要用了兩函數sort_values(columns_name,ascending)和drop_duplicates(columns_name),
sort_values主要用來排序,第一個參數是要排序的列名,如果有多列,需要傳入list類型,依次排序每一列;而第二個參數是決定使用降序還是升序的bool變量;
drop_duplicates()用來去除,第一個參數的含義和sort_values一樣。
5.用sort_values復現nlargest方法
nlargest(n,)函數就是選取最大的前n個,而通過sort_values()降序排列,再通過head(n),我們能達到和nlargest()函數一樣的效果,但是可能選取的rows會有差異,因為最大值個數如果大于n的話,head(n)和nlargest(n)選取出來n個可能會有差別了,因為如何選擇n個的機制不一樣
6.計算跟蹤止損價格
這里用到了一個新module——pandas_datareader
這個module是用來遠程獲取金融數據的,主要是從yahoo獲取(用google的源沒有獲取成功),用DataReader(公司,數據源,開始時間),對應的官方文檔
https://pandas-datareader.readthedocs.io/en/latest/
import pandas_datareader as pdr
#查詢特斯拉在2017年第一天的股價
tsla = pdr.DataReader('tsla',data_source='yahoo',start='2017-1-1')
tsla.head(8)
#只關注每天的收盤價,使用cummax得到迄今為止的收盤價最大值
tsla_close = tsla['Close']
tsla_cummax = tsla_close.cummax()
tsla_cummax.head(8)
#將下行區間限制到10%,將tsla_cummax乘以0.9
tsla_trailing_stop = tsla_cummax * .9
tsla_trailing_stop.head(8)
#將上述功能包裝成一個函數
def set_trailing_loss(symbol,purchase_date,perc):
close = pdr.DataReader(symbol,'yahoo',start=purchase_date)['Close']
return close.cummax() * perc
tsla_close = set_trailing_loss('tsla','2017-6-2',.18)
tsla_cummax = tsla_close.cummax()
tsla_cummax.head(8)
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
