Python數(shù)據(jù)分析之路如何走?
數(shù)據(jù)分析準備工作
1.數(shù)據(jù)分析工具
- 工欲善其事,必先利其器,網(wǎng)上有很多關(guān)于數(shù)據(jù)剖析的文章,置信大家一定聽過R言語和Python之爭,而且各有所長,R言語在學(xué)術(shù)界更盛行,但是在做項目上面我個人比擬喜歡Python,Python更通用,更簡約,文檔也很多,而且有大量的庫特別是Google,Facebook都開源了很多功用強大的庫,十分不錯.所以言語我們選Python.
- 開發(fā)工具的話,建議大家用Anaconda,是一個強大的科學(xué)計算的Python發(fā)行版,首推數(shù)據(jù)分析開發(fā)工具.支持 Linux, Mac, Windows系統(tǒng),提供了包管理與環(huán)境管理的功能,可以很方便地解決多版本Python并存、切換以及各種第三方包安裝問題。推薦使用里面的spyder和Jupyter Notebook非常不錯,界面美觀而且調(diào)試方便
2.數(shù)據(jù)分析的庫
Python數(shù)據(jù)分析這么流行,其中跟兩個第三方的庫非常相關(guān),一個是Numpy,一個是Pandas,這兩個庫如果你要做數(shù)據(jù)分析,必須要熟練掌握使用~~
- Numpy偏數(shù)組多一點,特別是多維數(shù)組,矩陣,非常靈活方便.內(nèi)置了大量的矩陣的操作,對于科學(xué)計算來說簡直就是神器.
- Pandas偏series多一點,而且跟時序相關(guān),內(nèi)置了大量庫和一些標(biāo)準的數(shù)據(jù)模型,特別是對于大型的數(shù)據(jù)的處理,非常的高效和快捷.
- 比如對于一個1000萬行的CVS數(shù)據(jù)的處理,用字典去處理大概需要60幾秒,而pandas只需要4秒,而且代碼行更少.以后我們會用實戰(zhàn)例子去證明這一點
當(dāng)然上面都是一些入門必學(xué)技能,繼續(xù)修煉的話需要了解大數(shù)據(jù)的處理,以及一些機器學(xué)習(xí)的庫sk-learn和深度學(xué)習(xí)的一些框架

初探numpy
3.什么是NumPy
1).Numpy全稱叫Numeric Python,聽名字就知道跟數(shù)值有關(guān),沒錯numpy,提供了許多高級的數(shù)值編程工具,如:矩陣運算、多維數(shù)組,矢量運算,線性代數(shù),隨機數(shù)的生成,均方差等這些科學(xué)計算操作非常方便.
2).Ndarray 對象
Numpy里面有一個最最有名的Ndarray對象,幾乎所有的操作都圍繞這個Ndarray來,也叫多維數(shù)組.
數(shù)組是主流語言的標(biāo)配數(shù)據(jù)結(jié)構(gòu),Python中的列表其實也是這樣的一種數(shù)據(jù)結(jié)構(gòu),但是列表跟數(shù)組不一樣;比如列表的元素可以是任意的類型,列表需要保存每個對象的指針和對象,很浪費內(nèi)存空間,而且不支持多維數(shù)組
Ndarray會支持多維數(shù)組,而且數(shù)組之間的轉(zhuǎn)換非常方面,內(nèi)置了很多高效的內(nèi)建函數(shù),都是用C寫的,有利于節(jié)省內(nèi)存和提高CPU的計算時間.比如需要計算一百萬數(shù)據(jù)的正弦函數(shù)用numpy比Python里的標(biāo)準函數(shù)要快近10倍~~
4.Ndarray和Python list的相似之處

import numpy
n1=numpy.array(['AA','BB','CC','DD','EE'])
list1=['AA','BB','CC','DD','EE']
a).都可以通過下標(biāo)去訪問
print n1[0]
>>'AA'
print list1[0]
>>'AA'
b).都可以切片去訪問
n1=numpy.array(['AA','BB','CC','DD','EE'])
list1=['AA','BB','CC','DD','EE']
print n1[1:3]
>>['BB' 'CC']
print list1[1:3]
>>['BB', 'CC']
c).都可以用循環(huán)處理
n1=numpy.array([1,2,3,4])
for n in n1:
print n
>>
1
2
3
4
5.Ndarray和Python list的不同之處
a).Ndarray里面的元素必須是同一種類型
(int,float,string_,bool, ...)
要么都是int,要么都是float,要么都是字符串
n1=np.array(['a','b','c',100])
>>
['a' 'b' 'c' '100']
因為ndarray要求所以的類型必須一樣,你會發(fā)現(xiàn)100變成了字符串'100'
b).矢量運算
比如相加
a1=np.array([1,2,3])
a2=np.array([4,5,6])
print a1+a2
>>[5,7,9]
而類似的加操作在list中
list1=[1,2,3]
list2=[4,5,6]
print list1+list2
>>[1,2,3,4,5,6]
比如相乘
a1=np.array([1,2,3])
print a1*3
>>[3,6,9]
而類似的操作在list中
a1=[1,2,3]
print a1*3
>>[1,2,3,1,2,3,1,2,3]
比如乘方
先產(chǎn)生3*3矩陣,每個數(shù)字都是0-9之間
arr1=np.random.randint(0,10,(3,3))
print arr1
>>
[[6 7 5]
[9 6 0]
[5 5 9]]
arr2=arr1**2
print arr2
>>
[[36 49 25]
[81 36 0]
[25 25 81]]
c).內(nèi)置了一些通用(ufunc)函數(shù)
比如max(),min(),argmax(),argmin(),mean()計算中位數(shù),std()計算均方差等函數(shù)

留一個思考題
題目一:
a=np.array([1,2,3,4,5])
b=a
a+=np.array([1,1,1,1,1])
print b
題目二:
a=np.array([1,2,3,4,5])
b=a
a=a+np.array([1,1,1,1,1])
print b
看看題目一和題目二的print b的結(jié)果是什么,會一樣嗎?
用Python數(shù)據(jù)分析起航篇就講到這里,是不是覺得numpy蠻強大的~~這只是開始,今天的文章希望能給初學(xué)者一些啟發(fā)。
馬哥學(xué)習(xí)交流群
馬哥教育-Python開發(fā)-1群 335068227
馬哥教育-Python開發(fā)-2群 608459685