標籤:維護 聚類 paste 選擇 統計分析 特徵選取 一個 成熟 重要
第一章 準備工作1.3 重要的python資料庫Numpy:是python科學計算的基礎包,本書大部分內容都基於numpy以及構建於其上的庫功能如下:
-快速高效的多維陣列對象ndarray。
-用於對數組執行元素級計算以及直接對數組執行數學運算的函數
-用於讀寫硬碟上基於數組的資料集的工具
-線性代數運算、傅立葉變換、以及隨機數的產生
-成熟的c API,用於python外掛程式和原生的c c++ fortran代碼訪問numpy的資料結構和計算工具
pandas:提供了快速便捷處理結構化資料的大量資料結構和函數。本書使用最多的pandas對象時dataframe,它是一個面向列(column-oriented)的一個二維表結構,另一個是series,一個一維的標籤化數組對象,pandas兼具numpy高效能的數組計算功能以及試算表和關係型資料庫(如sql)靈活的資料處理功能。它提供了複雜精細的索引功能,以便於更為便捷的的完成重塑、切片和切換,彙總以及選取資料子集的操作,因為資料操作、準備、清洗是資料分析最重要的技能。pandas是本書的重點。
-功能:為一款適用於金融和商務分析的工具
-有標籤化的資料結構,支援自動或清晰的資料對齊,這可以防止由於資料不對齊和處理來源不同的索引,不同的資料造成的錯誤。
-整合時間序列功能
-相同的資料結構用於處理時間序列資料和非時間序列資料
-儲存中繼資料的算數運算和壓縮
-靈活處理缺失的資料
-合并和其他流行的資料庫(例如基於sql的資料庫)的關係操作
matplotlib:是最流行的用於繪製圖表和其他二維資料的可視化python庫。非常適合用於建立出版物上用的圖表。
-Scipy:是一組專門解決科學計算中各種標準問題域的包的集合,包括下列包:
-Scipy.integrate:數值積分常式和微分方程求解器。
-Scipy.linalg:擴充了由numpy.linalg提供的線性代數常式和矩陣分解功能。
-Scipy.optimize:函數最佳化器(最小化器)以及根尋找演算法
-Scipy.signal:訊號處理工具
-Scipy.sparse:疏鬆陣列和稀疏線性系統求解器。
-Scipy.stats:標準連續和離散機率分布(如密度分布、採樣器、連續分布函數等)、各種統計檢驗方法以及更好的描述性統計法
-numpy和scipy結合使用,便形成了一盒相當完備和成熟的計算平台,可以處理所中傳統的科學計算的問題
scikit-learn:是python通用的機器學習工具包。子模組包括:
-分類:svm,近鄰,隨機森林,羅吉斯迴歸等等
-迴歸:lasso,嶺迴歸等等
-聚類:k-均值,譜聚類等等
-降維:pca、特徵選取,矩陣分解等等
-選型:網格搜尋,交叉驗證、度量。
-預先處理:特徵提取,標準化。
stats models:是一個統計分析包,包含經典統計學和計量經濟學的演算法,有以下子模組:
-迴歸模型:線性迴歸,廣義線性模型,健壯線性模型,線性混合效應模型等等。
-方差分析anova
-時間序列分析:ar arma arima var 和其他模型
-非參數方法:核密度估計,核迴歸。
-統計模型結果可視化。
第二章 python文法基礎,ipython,jupyter自省:在變數的前後使用?,可顯示對象的資訊:
b = [1,2,3]b?
-使用??會顯示函數的源碼
-?還有一個用途,就是搜尋Ipython的命名空間。字元和萬用字元結合,可以匹配所有的名字。
%run命令:可以用來運行所有的python程式,假設有一個python檔案:shili.py,可以如下運行:
%run shili.py
-這段指令碼運行在空的命名空間,因此結果和普通的運行方式python script.py相同,檔案中所有定義的變數(import,函數和全域變數,除非報錯了)都可以在ipython命令中隨後訪問。
*筆記:如果向讓一個指令碼訪問ipython中已經定義過的變數,可以使用%run -i,在jupyter中,你也可以使用%load,它將指令碼倒入到一個代碼格子中:
-中斷運行中代碼:按ctrl-c
從剪下板執行程式:
%paste#%paste可以直接運行剪下板中的代碼%cpaste#%cpaste有類似的功能,但是會給出一條提示
鍵盤快速鍵
魔術命令:ipython中特殊的命令,被稱作魔術命令,這些命令可以使普通的任務更快捷,更容易控制ipython系統,魔術命令難過是在指令之前添加%的首碼。例如,可以用%timeit會測量任何python語句的執行時間,魔術命令可以看作是ipython中啟動並執行命令列,許多魔術命令有命令列選項,可以通過?查看。魔術函數預設可以不使用%首碼,但是不能有變數和函數名稱相同,這個特點被稱為自動魔術,可以使用%automatic開啟和關閉。一些魔術函數和python函數很像,他的結果可以直接賦值給一個變數。
一些常用的ipython魔術命令:
整合matplotlib:ipython在分析極端領域能夠流行的原因之一是它非常好的整合了資料視覺效果和其他使用者介面,比如matplotlib
-在IPython shell中,運行%matplotlib可以進行設定,可以建立多個繪圖視窗,而不會干擾控制台session:
%matplotlibUsing matplotlib backend: Qt4Agg
-在jupyter中命令有所不同:
%matplotlib inlineimport matplotlib,pyplot as pltplt.plot(np.random.randn(50).cumsum())
可變對象與不可變對象:python中的大多數對象都是可變的,比如列表,字典,numpy數組,和使用者定義的類型(類)都是可變的,其他的,例如字串和元組,是不可變的。位元組和unicode:假定知道字元編碼,可以將其轉換為unicode,例如:
val = “dhfhfff”val
-可以用encode將這個unicode字串編碼為utf-8:
val_utf8 = val.encode(‘utf8’)
-如果你知道一個位元組對象的unicode編碼,用decode方法可以解碼:
val_utf8.decode(‘utf8’)
-工作中碰到的檔案很多都是位元組對象,盲目的將所有資料編碼為unicode是不可取的。雖然用的不多,但是你可以在位元組文本的前面加上一個b:
a = b‘this is shuju’b‘this is shuju’decoded = a.decode(’utf8’)‘this is shuju’
日期和時間:python內建函數的datetime模組提供了datetime,date和time類型。datetime類型結合了date和time,是最常用的:
from date time import date time, date,timedt = datetime(20,11,10,29,20,30,21)print(day)print(minute)
-根據datetime執行個體,你可以用date和time提取各自的對象:
print(dt.data)#輸出dt.date()為(20,11,10,29)print(dt.time)#輸出dt.time為(20,30,21)#strftime方法可以將detetime格式化為字串#strptime可以將字串轉換為datetime對象
-當你聚類活著對時間序列進行分組,替換datetime的time欄位有時候會很有用,例如,用0替換分和秒:
dt.replace(minute=0,second=0)print(datatime.datatime)#輸出datetime.datetime為(2011,10,29,20,0)
-因為datetime是不可變類型上面的方法會產生一個新的對象。兩個datetime對象的差會產生一個datetime類型,結果(17,7179)指明了將17天7179秒的編碼方式。
第三章 python的資料結構、函數和檔案排序:sort()
-可以用sort將一個列表進行原地排序(不建立新的對象)
-sort有一些選擇性參數,例如sort(key=len)可以按照字串的長度對字串進行排序
-sorted函數———稍後學習
二分搜尋和維護已排序的列表:bisect()
-bisect模組支援二分查詢,和向已經排序的列表中插入值。bisect.bisect可以找到插入值後先不插入,而是返回可以插入的位置下標。保持排序的位置。bisect.insort是向可以插入的這個位置插入值:
*注意:bisect模組不會檢查列表是否已經排了序,因此,對沒有排序的列表進行操作,不會報錯,但是結果不一定正確
切片:列表名稱(開始位置下標:結束位置下標)例如:list(1:5)
-切片還可以被序列賦值:
list = 【1,2,3,4,5,6】list[3:4]= [6,3]#會將列表list中位置下標為3的元素換成列表[6,3]也就是說,序列賦值之後的list比原來的列表多了一個元素。
-開始位置的下標和結束位置的下表都可以省略,此時,預設開頭和結尾———負數表明從後向前切片
-還可以設定切片的步長:list【1:2:2】的意思是,切下來list列表中下標為1到2的內容,切片方法為隔一個取一個。當第三個參數為-1的話,可以將原來的列表顛倒過來。
用Python進行資料分析-1