【Tensorflow_DL_Note3】深度學習中的資料處理及其視覺化

馬衛飛發表於2018-04-17
#coding=UTF-8
#=======================================================================================================================
#檔案說明:
#       Python資料類庫的使用---資料的處理及其Python資料視覺化程式設計的實戰
#開發環境:
#       Win10+Tensorflow+OpenCv_python3.4+PyCharm5.0.3+Python3.5
#時間地點:
#       陝西師範大學.文津樓  2018.4.16
#作    者:
#       馬衛飛
#=======================================================================================================================
#=======================================================================================================================
#檔案說明:
#       本節博主將使用Python對【資料的處理】和【資料的視覺化】進行簡單的介紹,主要學習Python和Python資料視覺化方面的內容。
#一 NumPy
#      [1]NumPy(https://pypi.python.org/pypi/numpy)是一個非常有名的Python科學計算工具包,其中包含了大量有用的思想,比如:
#               [1]陣列物件(用來表示向量、矩陣、影象等),以及線性代數函式
#               [2]陣列物件可以幫你實現【陣列】中的重要操作,比如:矩陣的乘積、轉置、解方程系統、向量乘積和歸一化,這些都為影象的變形、
#                  對變形進行建模、影象的分類、影象的聚類提供了基礎。
#      [2]對於機器學習來說,資料是一切的基礎。而一切資料又都不是單一存在的,其構成往往由很多【特徵值】決定。
#      [3]對於【資料】來說,在進行機器學習之前,需要對【資料】進行基本的【分析】和【處理】;首選,需要知道資料集合中資料的多少和每個資料
#         所擁有的屬性的個數,對於程式設計人員和科研人員來說,這些都是很簡單的事,但是,對於機器學習的模型來說,這些事必不可少的。
#      [4]除此之外,對於【資料集合】來說,【缺失值】的處理也是一個非常重要的過程。最簡單的處理方法是對具有【缺失值】資料進行整體的刪除。
#         問題在於,機器學習的資料往往來源於社會,因此,可能資料集合中大多數的資料都會有某些屬性缺失的問題,而解決的方法往往是採用【均值】
#         或者【目標資料】近似的【資料特徵屬性】代替。
#      [5]下面,從一個小例子開始:首先,我們建立一個包含【資料集合】的【資料矩陣】,之後,使用不同的方法對其進行處理。
#=======================================================================================================================
import numpy as np                                #【1】匯入numpy模組

dataSet = np.mat([[1, 200,  105, 3, False],       #【2】使用numpy中的mat()方法,構建一個資料矩陣
                  [2, 165,  80,  2, False],
                  [3, 184.5,120, 2, False],
                  [4, 116,  60.8,1, False],
                  [5, 270,  150, 4, True]])
rowNum    = 0                                     #【3】rowNum是引入的計算行數的變數
columnNum = 0                                     #【4】columnNum是引入的,計算列數的變數

for line in dataSet:                              #【5】使用for迴圈將dataSet中的資料讀入到line中,而Meizu讀一行,rowNum變數加1
    rowNum    += 1
    columnNum += 1

print(rowNum)
print(columnNum)
print(dataSet.size)                               #【6】dataSet.size計算資料集合中全部資料的資料量
#=======================================================================================================================
#檔案說明:
#       【1】對NumPy,讀者只需要知道,NumPy系統是Python的一種開源的數值計算擴充套件。這種工具可用來儲存和處理大型矩陣,比Python自身的巢狀
#            列表結構要高效的多。
#       【2】需要說明的是,numpy工具包將所有的【資料】轉化成一個【矩陣】的形式進行處理,其中,具體的資料可以通過二元的形式讀出,如下所示
#=======================================================================================================================
print(print(dataSet[0,3]))
print(print(dataSet[0,4]))
#=======================================================================================================================
#檔案說明:
#       【1】細心的讀者可能已經注意到,下標為[0,3]的具體資料對應的是矩陣中第1行第4列的資料,其值為3,而列印的結果為3.0
#       【2】如果需要列印全部的資料,就呼叫如下的方法
#=======================================================================================================================
print(dataSet)

#coding=UTF-8
#=======================================================================================================================
#檔案說明:
#       Python資料類庫的使用---資料的處理及其Python資料視覺化程式設計的實戰
#開發環境:
#       Win10+Tensorflow+OpenCv_python3.4+PyCharm5.0.3+Python3.5
#時間地點:
#       陝西師範大學.文津樓  2018.4.16
#作    者:
#       馬衛飛
#=======================================================================================================================
#=======================================================================================================================
#模組說明:
#       基於【統計分析】的資料處理
#知識補充:
#      【1】列表:列表是python的內建物件之一,列表是Python中最具靈活性的【有序】集合的【物件型別】
#               [1]與【字串】不同的是,列表可以包含【任何型別的物件】,數字、字串甚至其他的【列表】
#               [2]同樣,與【字串】不同,【列表】都是【可變物件】,它們支援在原位置處的修改操作,可以通過指定的偏移值和分片、列表方法
#                  呼叫、刪除等方法來實現
#      【2】除了最基本的資料記錄和提取之外,【機器學習】還需要知道一些【基本資料】的【統計量】,例如,每一型別資料的【均值】、【方差】、
#          以及【標準差】等,當然,這些【統計分析】中的【統計量】並不需要你自己去計算,numpy提供了相關的方法。
#=======================================================================================================================
import numpy as np                                #【1】匯入numpy模組

dataSet = np.mat([[1, 200,  105, 3, False],       #【2】使用numpy中的mat()方法,構建一個資料矩陣
                  [2, 165,  80,  2, False],
                  [3, 184.5,120, 2, False],
                  [4, 116,  60.8,1, False],
                  [5, 270,  150, 4, True]])

column1 = []                                      #【3】定義一個空的列表
for rowNum in dataSet:                            #【4】使用for迴圈,每次將dataSet中的一行資料讀入到rowNum變數中
    column1.append(rowNum[0,1])                   #【5】每次將rowNum中的第0行第一列的資料追加到列表變數colnum1中
    print(rowNum[0,1])
print(np.sum(column1))                            #【6】求取【統計變數】的資料和
print(np.mean(column1))                           #【7】求取【統計變數】的資料的【平均值】
print(np.std(column1))                            #【8】求取【統計變數】的資料的【標準差】
print(np.var(column1))                            #【9】求取【統計變數】的【方差】

#coding=UTF-8
#=======================================================================================================================
#檔案說明:
#       圖形化資料處理---Matplotlib包的使用
#開發環境:
#       Win10+Tensorflow+OpenCv_python3.4+PyCharm5.0.3+Python3.5
#時間地點:
#       陝西師範大學.文津樓  2018.4.16
#作    者:
#       馬衛飛
#=======================================================================================================================
#=======================================================================================================================
#模組說明:
#       Matplotlib
#知識補充:
#      【1】我們處理【數學運算】、【繪製圖表】、或者在【影象上繪製點】、直線和曲線時,Matplotlib是個很好類庫。
#      【2】Matplotlib可以繪製出高質量的【圖表】
#模組說明:
#      【1】對於單純的數字來說,僅從【讀資料】的角度並不能直觀的反應數字的【偏差】和【集中度】,因此,需要採用另外一種方法來更好的分析數
#          據,對於資料來說,沒有什麼能夠比用圖形來解釋更為形象和直觀了。
#      【2】差異的視覺化:研究數值差異和異常的方法是繪製資料的【分佈程度】,相對於合適的直線或曲線,其差異程度如何,以幫助確定資料的分佈
#=======================================================================================================================
import numpy as np                                #【1】匯入numpy類庫工具包
import matplotlib as mt                           #【2】匯入matplotlib類庫工具包
import pylab                                      #【3】匯入pylab類庫工具包
import scipy.stats as stats                       #【4】匯入scipython類庫工具包
dataSet = np.mat([[1, 200,  105, 3, False],       #【1】使用numpy中的mat()方法,構建一個資料矩陣
                  [2, 165,  80,  2, False],
                  [3, 184.5,120, 2, False],
                  [4, 116,  60.8,1, False],
                  [5, 270,  150, 4, True]])

column1 = []                                      #【2】定義一個空的列表
for rowNum in dataSet:                            #【3】使用for迴圈,每次將dataSet中的一行資料讀入到rowNum變數中
    column1.append(rowNum[0,1])                   #【4】每次將rowNum中的第0行第一列的資料追加到列表變數colnum1中

stats.probplot(column1,plot=pylab)
pylab.show()
#=======================================================================================================================
#模組說明:
#       【1】scipy是專門的【機器學習】的【資料處理包】
#       【2】probplot計算了column資料集合中資料在【正態分佈】下的【偏離程度】
#=======================================================================================================================
#=======================================================================================================================
#模組說明:
#       【1】scipy是專門的【機器學習】的【資料處理包】
#       【2】probplot計算了column資料集合中資料在【正態分佈】下的【偏離程度】
#=======================================================================================================================
#coding=UTF-8
#=======================================================================================================================
#檔案說明:
#       圖形化資料處理---Matplotlib、scipy、pylab等包的使用
#開發環境:
#       Win10+Tensorflow+OpenCv_python3.4+PyCharm5.0.3+Python3.5
#時間地點:
#       陝西師範大學.文津樓  2018.4.17
#作    者:
#       馬衛飛
#=======================================================================================================================
#=======================================================================================================================
#檔案說明:
#       座標圖的展示
#詳細說明:
#       【1】通過上一個例項對資料視覺化的處理可以看出,視覺化能夠讓【資料】更加直觀的【展現出來】,同時,可以讓【資料的誤差】表現的更為
#           直觀。
#       【2】一個【座標圖】能夠對【資料】進行展示,最基本的要求是可以通過不同的行或者不同的列表現出資料的某些具體價值,不同的標籤使用不
#           同的顏色和樣式可以展示不同的系統關係。
#       【3】pandas--python data analysis Library:pandas是一個強大的用於【資料分析】、【時間序列】、【統計】的資料結構
#       【4】通過選定【不同目標行中不同的屬性】,可以對其進行較好的衡量,比較兩個行之間的屬性關係以及屬性之間的相關性。不同的目標,即使
#           屬性千差萬別,也可以構建【關係圖】。
#       【5】本利中採用的資料較少,隨著資料的增加,屬性之間一般會呈現一種正態分佈。
#=======================================================================================================================
import pandas            as pd                    #【1】匯入pandas這個類庫工具包
import matplotlib.pyplot as plot                  #【2】匯入matplotlib這個類庫中的pyplot模組,記住import匯入的是整個模組檔案

dataSet = pd.DataFrame([[1, 200,  105, 3, False], #【1】使用numpy中的mat()方法,構建一個資料矩陣
                       [2,  165,  80,  2, False],
                       [3,  184.5,120, 2, False],
                       [4,  116,  60.8,1, False],
                       [5,  270,  150, 4, True]])

dataRow1 = dataSet.iloc[1,0:3]
dataRow2 = dataSet.iloc[2,0:3]

plot.scatter(dataRow1,dataRow2)
plot.xlabel("Attributel")
plot.ylabel("Attribute2")
plot.show()

相關文章