1. 程式人生 > >用Python進行數據分析-1

用Python進行數據分析-1

優化 離散概率 采樣 可變對象 測量 pca -o 維表 session

第一章 準備工作

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:

%matplotlib
Using matplotlib backend: Qt4Agg

-在jupyter中命令有所不同:

%matplotlib inline
import matplotlib,pyplot as plt
plt.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,time
dt = 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