python大數據挖掘系列之基礎知識入門


preface

Python在大數據行業非常火爆近兩年,as a pythonic,所以也得涉足下大數據分析,下面就聊聊它們。

Python數據分析與挖掘技術概述

所謂數據分析,即對已知的數據進行分析,然后提取出一些有價值的信息,比如統計平均數,標准差等信息,數據分析的數據量可能不會太大,而數據挖掘,是指對大量的數據進行分析與挖倔,得到一些未知的,有價值的信息等,比如從網站的用戶和用戶行為中挖掘出用戶的潛在需求信息,從而對網站進行改善等。
數據分析與數據挖掘密不可分,數據挖掘是對數據分析的提升。數據挖掘技術可以幫助我們更好的發現事物之間的規律。所以我們可以利用數據挖掘技術可以幫助我們更好的發現事物之間的規律。比如發掘用戶潛在需求,實現信息的個性化推送,發現疾病與病狀甚至病與葯物之間的規律等。

預先善其事必先利其器

我們首先聊聊數據分析的模塊有哪些:

  1. numpy 高效處理數據,提供數組支持,很多模塊都依賴它,比如pandas,scipy,matplotlib都依賴他,所以這個模塊都是基礎。所以必須先安裝numpy。
  2. pandas 主要用於進行數據的采集與分析
  3. scipy 主要進行數值計算。同時支持矩陣運算,並提供了很多高等數據處理功能,比如積分,微分方程求樣等。
  4. matplotlib 作圖模塊,結合其他數據分析模塊,解決可視化問題
  5. statsmodels 這個模塊主要用於統計分析
  6. Gensim 這個模塊主要用於文本挖掘
  7. 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() # 這一步開始畫圖,默認是至線圖

畫出的圖是這樣的:
image

下面說說修改圖的樣式

關於圖形類型,有下面幾種:
  1. 直線圖(默認)
  2. - 直線
  3. -- 虛線
  4. -. -.形式
  5. : 細小虛線
關於顏色,有下面幾種:
  1. c-青色
  2. r-紅色
  3. m-品紅
  4. g-綠色
  5. b-藍色
  6. y-黃色
  7. k-黑色
  8. w-白色
關於形狀,有下面幾種:
  1. s 方形
  2. * 星形
  3. p 五角形

我們還可以對圖稍作修改,添加一些樣式,下面修改圓點圖為紅色的點,代碼如下:

pylab.plot(x,y,'or') # 添加O表示畫散點圖,r表示red pylab.show()

image

我們還可以畫虛線圖,代碼如下所示:

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()

image

直方圖

利用直方圖能夠很好的顯示每一段的數據。下面使用隨機數做一個直方圖。

data1 = numpy.random.normal(5.0,4.0,10) # 正態隨機數 pylab.hist(data1) pylab.show()

image
Y軸為出現的次數,X軸為這個數的值(或者是范圍)

還可以指定直方圖類型通過histtype參數:

圖形區別語言無法描述很詳細,大家可以自信嘗試。

  1. bar :is a traditional bar-type histogram. If multiple data
    are given the bars are aranged side by side.
  2. barstacked :is a bar-type histogram where multiple
    data are stacked on top of each other.
  3. step :generates a lineplot that is by default
    unfilled.
  4. stepfilled :generates a lineplot that is by default
    filled.

舉個例子:

sty=numpy.arange(1,30,2) pylab.hist(data1,histtype='stepfilled') pylab.show() 

image

子圖功能

什么是子圖功能呢?子圖就是在一個大的畫板里面能夠顯示多張小圖,每個一小圖為大畫板的子圖。
我們知道生成一個圖是使用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()

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM