python 大資料入門教程
Python在大資料行業非常火爆近兩年,as a pythonic,所以也得涉足下大資料分析,下面就聊聊它們。
Python資料分析與挖掘技術概述
所謂資料分析,即對已知的資料進行分析,然後提取出一些有價值的資訊,比如統計平均數,標準差等資訊,資料分析的資料量可能不會太大,而資料探勘,是指對大量的資料進行分析與挖倔,得到一些未知的,有價值的資訊等,比如從網站的使用者和使用者行為中挖掘出使用者的潛在需求資訊,從而對網站進行改善等。
資料分析與資料探勘密不可分,資料探勘是對資料分析的提升。資料探勘技術可以幫助我們更好的發現事物之間的規律。所以我們可以利用資料探勘技術可以幫助我們更好的發現事物之間的規律。比如發掘使用者潛在需求,實現資訊的個性化推送,發現疾病與病狀甚至病與藥物之間的規律等。
預先善其事必先利其器
我們首先聊聊資料分析的模組有哪些:
- numpy 高效處理資料,提供陣列支援,很多模組都依賴它,比如pandas,scipy,matplotlib都依賴他,所以這個模組都是基礎。所以必須先安裝numpy。
- pandas 主要用於進行資料的採集與分析
- scipy 主要進行數值計算。同時支援矩陣運算,並提供了很多高等資料處理功能,比如積分,微分方程求樣等。
- matplotlib 作圖模組,結合其他資料分析模組,解決視覺化問題
- statsmodels 這個模組主要用於統計分析
- Gensim 這個模組主要用於文字挖掘
- sklearn,keras 前者機器學習,後者深度學習。
下面就說說這些模組的基礎使用。
numpy模組安裝與使用
安裝:
下載地址是:http://www.lfd.uci.edu/~gohlke/pythonlibs/
我這裡下載的包是1.11.3版本,地址是:http://www.lfd.uci.edu/~gohlke/pythonlibs/f9r7rmd8/numpy-1.11.3+mkl-cp35-cp35m-win_amd64.whl
下載好後,使用pip install "numpy-1.11.3+mkl-cp35-cp35m-win_amd64.whl"
安裝的numpy版本一定要是帶mkl版本的,這樣能夠更好支援numpy
numpy簡單使用
import numpy
x=numpy.array([11,22,33,4,5,6,7,]) #建立一維陣列
x2=numpy.array([['asfas','asdfsdf','dfdf',11],['1iojasd','123',989012],["jhyfsdaeku","jhgsda"]]) #建立二維陣列,注意是([])
x.sort() #排序,沒有返回值的,修改原處的值,這裡等於修改了X
x.max() # 最大值,對二維陣列都管用
x.min() # 最小值,對二維陣列都管用
x1=x[1:3] # 取區間,和python的列表沒有區別
生成隨機數
主要使用numpy下的random方法。
#numpy.random.random_integers(最小值,最大值,個數) 獲取的是正數
data = numpy.random.random_integers(1,20000,30) #生成整形隨機數
#正態隨機數 numpy.random.normal(均值,偏離值,個數) 偏離值決定了每個數之間的差 ,當偏離值大於開始值的時候,那麼會產生負數的。
data1 = numpy.random.normal(3.2,29.2,10) # 生成浮點型且是正負數的隨機數
pandas
使用pip install pandas即可
直接上程式碼:
下面看看pandas輸出的結果, 這一行的數字第幾列,第一列的數字是行數,定位一個通過第一行,第幾列來定位:
print(b)
0 1 2 3
0 1 2 3 4.0
1 sdaf dsaf 18hd NaN
2 1463 None None NaN
常用方法如下:
import pandas
a=pandas.Series([1,2,3,34,]) # 等於一維陣列
b=pandas.DataFrame([[1,2,3,4,],["sdaf","dsaf","18hd"],[1463]]) # 二維陣列
print(b.head()) # 預設取頭部前5行,可以看原始碼得知
print(b.head(2)) # 直接傳入引數,如我寫的那樣
print(b.tail()) # 預設取尾部前後5行
print(b.tail(1)) # 直接傳入引數,如我寫的那樣
下面看看pandas對資料的統計,下面就說說每一行的資訊
# print(b.describe()) # 顯示統計資料資訊
3 # 3表示這個二維陣列總共多少個元素
count 1.0 # 總數
mean 4.0 # 平均數
std NaN # 標準數
min 4.0 # 最小數
25% 4.0 # 分位數
50% 4.0 # 分位數
75% 4.0 # 分位數
max 4.0 # 最大值
轉置功能:把行數轉換為列數,把列數轉換為行數,如下所示:
print(b.T) # 轉置
0 1 2
0 1 sdaf 1463
1 2 dsaf None
2 3 18hd None
3 4 NaN NaN
通過pandas匯入資料
pandas支援多種輸入格式,我這裡就簡單羅列日常生活最常用的幾種,對於更多的輸入方式可以檢視原始碼後者官網。
CSV檔案
csv檔案匯入後顯示輸出的話,是按照csv檔案預設的行輸出的,有多少列就輸出多少列,比如我有五列資料,那麼它就在prinit輸出結果的時候,就顯示五列
csv_data = pandas.read_csv('F:\Learnning\CSDN-python大資料\hexun.csv')
print(csv_data)
excel表格
依賴於xlrd模組,請安裝它。
老樣子,原滋原味的輸出顯示excel本來的結果,只不過在每一行的開頭加上了一個行數
excel_data = pandas.read_excel('F:\Learnning\CSDN-python大資料\cxla.xls')
print(excel_data)
讀取SQL
依賴於PyMySQL,所以需要安裝它。pandas把sql作為輸入的時候,需要制定兩個引數,第一個是sql語句,第二個是sql連線例項。
conn=pymysql.connect(host="127.0.0.1",user="root",passwd="root",db="test")
sql="select * from fortest"
e=pda.read_sql(sql,conn)
讀取HTML
依賴於lxml模組,請安裝它。
對於HTTPS的網頁,依賴於BeautifulSoup4,html5lib模組。
讀取HTML只會讀取HTML裡的表格,也就是隻讀取<table>
標籤包裹的內容.
html_data = pandas.read_html('F:\Learnning\CSDN-python大資料\shitman.html') # 讀取本地html檔案。
html_from_online = pandas.read_html('https://book.douban.com/') # 讀取網際網路的html檔案
print(html_data)
print('html_from_online')
顯示的是時候是通過python的列表展示,同時添加了行與列的標識
讀取txt檔案
輸出顯示的時候同時添加了行與列的標識
text_data = pandas.read_table('F:\Learnning\CSDN-python大資料\dforsay.txt')
print(text_data)
scipy
安裝方法是先下載whl格式檔案,然後通過pip install “包名”
安裝。whl包下載地址是:http://www.lfd.uci.edu/~gohlke/pythonlibs/f9r7rmd8/scipy-0.18.1-cp35-cp35m-win_amd64.whl
matplotlib 資料視覺化分析
我們安裝這個模組直接使用pip install即可。不需要提前下載whl後通過 pip install安裝。
下面請看程式碼:
from matplotlib import pylab
import numpy
# 下面2行定義X軸,Y軸
x=[1,2,3,4,8]
y=[1,2,3,4,8]
# plot的方法是這樣使用(x軸資料,y軸資料,展現形式)
pylab.plot(x,y) # 先把x,y軸的資訊塞入pylab裡面,再呼叫show方法來畫圖
pylab.show() # 這一步開始畫圖,預設是至線圖
畫出的圖是這樣的:
下面說說修改圖的樣式
關於圖形型別,有下面幾種:
- 直線圖(預設)
-
直線- -- 虛線
- -. -.形式
- : 細小虛線
關於顏色,有下面幾種:
- c-青色
- r-紅色
- m-品紅
- g-綠色
- b-藍色
- y-黃色
- k-黑色
- w-白色
關於形狀,有下面幾種:
- s 方形
*
星形- p 五角形
我們還可以對圖稍作修改,新增一些樣式,下面修改圓點圖為紅色的點,程式碼如下:
pylab.plot(x,y,'or') # 新增O表示畫散點圖,r表示red
pylab.show()
我們還可以畫虛線圖,程式碼如下所示:
pylab.plot(x,y,'r:')
pylab.show()
還可以給圖新增上標題,x,y軸的標籤,程式碼如下所示
pylab.plot(x,y,'pr--') #p是圖形為五角星,r為紅色,--表示虛線
pylab.title('for learnning') # 圖形標題
pylab.xlabel('args') # x軸標籤
pylab.ylabel('salary') # y軸標籤
pylab.xlim(2) # 從y軸的2開始做線
pylab.show()
直方圖
利用直方圖能夠很好的顯示每一段的資料。下面使用隨機數做一個直方圖。
data1 = numpy.random.normal(5.0,4.0,10) # 正態隨機數
pylab.hist(data1)
pylab.show()
Y軸為出現的次數,X軸為這個數的值(或者是範圍)
還可以指定直方圖型別通過histtype引數:
圖形區別語言無法描述很詳細,大家可以自信嘗試。
- bar :is a traditional bar-type histogram. If multiple data
are given the bars are aranged side by side. - barstacked :is a bar-type histogram where multiple
data are stacked on top of each other. - step :generates a lineplot that is by default
unfilled. - stepfilled :generates a lineplot that is by default
filled.
舉個例子:
sty=numpy.arange(1,30,2)
pylab.hist(data1,histtype='stepfilled')
pylab.show()
子圖功能
什麼是子圖功能呢?子圖就是在一個大的畫板裡面能夠顯示多張小圖,每個一小圖為大畫板的子圖。
我們知道生成一個圖是使用plot功能,子圖就是subplog。程式碼操作如下:
#subplot(行,列,當前區域)
pylab.subplot(2,2,1) # 申明一個大圖裡面劃分成4塊(即2*2),子圖使用第一個區域(座標為x=1,y=1)
pylab.subplot(2,2,2) # 申明一個大圖裡面劃分成4塊(即2*2),子圖使用第二個區域(座標為x=2,y=2)
x1=[1,4,6,9]
x2=[3,21,33,43]
pylab.plot(x1,x2) # 這個plot表示把x,y軸資料塞入前一個子圖中。我們可以在每一個子圖後使用plot來塞入x,y軸的資料
pylab.subplot(2,1,2) # 申明一個大圖裡面劃分成2塊(即),子圖使用第二個區域(座標為x=1,y=2)
pylab.show()
實踐小例子
我們現在可以通過一堆資料來繪圖,根據圖能夠很容易的發現異常。下面我們就通過一個csv檔案來實踐下,這個csv檔案是某個網站的文章閱讀數與評論數。
先說說這個csv的檔案結構,第一列是序號,第二列是每篇文章的URL,第三列每篇文章的閱讀數,第四列是每篇評論數。
我們的需求就是把評論數作為Y軸,閱讀數作為X軸,所以我們需要獲取第三列和第四列的資料。我們知道獲取資料的方法是通過pandas的values方法來獲取某一行的值,在對這一行的值做切片處理,獲取下標為3(閱讀數)和4(評論數)的值,但是,這裡只是一行的值,我們需要是這個csv檔案下的所有評論數和閱讀數,那怎麼辦?聰明的你會說,我自定義2個列表,我遍歷下這個csv檔案,把閱讀數和評論數分別新增到對應的列表裡,這不就行了嘛。呵呵,其實有一個更快捷的方法,那麼就是使用T轉置方法,這樣再通過values方法,就能直接獲取這一評論數和閱讀數了,此時在交給你matplotlib裡的pylab方法來作圖,那麼就OK了。瞭解思路後,那麼就寫吧。
下面看看程式碼:
csv_data = pandas.read_csv('F:\Learnning\CSDN-python大資料\hexun.csv')
dt = csv_data.T # 裝置下,把閱讀數和評論數轉為行
readers=dt.values[3]
comments = dt.values[4]
pylab.xlabel(u'reads')
pylab.ylabel(u'comments') # 打上標籤
pylab.title(u"The Article's reads and comments")
pylab.plot(readers,comments,'ob')
pylab.show()