天天看點

python進行資料顯示_用Python進行資料分析-1

第一章 準備工作

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有類似的功能,但是會給出一條提示

鍵盤快捷鍵

python進行資料顯示_用Python進行資料分析-1

魔術指令:ipython中特殊的指令,被稱作魔術指令,這些指令可以使普通的任務更快捷,更容易控制ipython系統,魔術指令難過是在指令之前添加%的字首。例如,可以用%timeit會測量任何python語句的執行時間,魔術指令可以看作是ipython中運作的指令行,許多魔術指令有指令行選項,可以通過?檢視。魔術函數預設可以不使用%字首,但是不能有變量和函數名稱相同,這個特點被稱為自動魔術,可以使用%automatic打開和關閉。一些魔術函數和python函數很像,他的結果可以直接指派給一個變量。

一些常用的ipython魔術指令:

python進行資料顯示_用Python進行資料分析-1

內建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的話,可以将原來的清單颠倒過來。