是新朋友嗎?記得先點藍字關注我哦~算法
「業務理解篇」上線以後,很多朋友就火燒眉毛的想要看「數據理解篇」。今天,我就要給你們開啓「數據分析零基礎系列(2):數據理解篇」。dom
開篇以前,我仍是但願和你們繼續聊聊數據和業務的那些事情,由於它實在過重要了。縱覽各行各業的數據應用狀況,數據的價值,始終是要創建在具體的業務場景之上,尤爲是依賴於那些帶有強烈不肯定性的業務場景,不肯定性越高,數據需求越強,創造的價值潛力就越大。ide
好比疫情期間,北京要求外地返京人士隔離14天,那怎麼可以精準識別某我的是否在北京隔離了14天,除了小區居委會開的證實,也可經過運營商收集到的用戶地理位置數據,精準判斷一我的的行爲軌跡,來識別我的最近14天的活動範圍。這個數據對於在疫情期間,作好人口的流動管理,很是有價值。工具
因此,我始終堅持,場景第一,數據第二,算法第三。性能
天底下算法都是一個老師教出來的,都是肯定的,可學習的,各類算法的組合也都是肯定的,因此說算法最不會形成一我的或者一個企業的競爭優點。每每數據的獨特性和惟一性,可以造成比較大的競爭優點。好比不少企業看不到消費者的消費記錄,支付寶,它牛逼,它能看到,因此它能把徵信作的很牛逼,使用簡單的邏輯迴歸,都能作的比別人好。可是假若有一個好的場景,不作數據分析都能賺錢,作數據分析就更賺錢了。好比淘寶,流量夠大了,不作數據分析,隨便看看昨天什麼賣的好,今天就推薦什麼,雖不是最優,但也差不到哪去。學習
言歸正傳,咱們今天好好聊聊「數據理解」。code
數據理解是從原始數據集開始熟悉和了解數據,並初步探索數據知識,或者挖掘有深層含義的數據子集來造成對隱藏信息的假設。數據理解能夠理解爲數據的可行性研究,即經過先期的基本數據認識來肯定當前數據條件是否能夠知足數據挖掘所需條件並初步判斷如何實現的問題。orm
數據理解階段,須要肯定源數據標準如數據來源、範圍、狀態或者時間性特徵,數據集基本特徵如數據類型、最大值、最小值、均值、標準差、偏度、惟一性、有效記錄數及數據分佈規律等。接下來,給你們展現七種方法來幫助你們理解數據。blog
首先,爲了便於理解這些方法,模擬一個虛擬數據集給你們示例下,該數據集共769行和9列,具體的Python代碼以下:支付寶
import numpy as np import pandas as pd pd.set_option('display.float_format', lambda x: '%.3f' % x)#顯示3位小數 perg=np.random.randint(0,27,size=769) plas=np.random.randint(0,199,size=769) pres=np.random.randint(0,122,size=769) skin=np.random.randint(0,99,size=769) test=np.random.randint(0,846,size=769) mass=np.random.uniform(0,68,size=769) pedi=np.random.uniform(0,2.5,size=769) age=np.random.randint(21,81,size=769) Class=np.random.randint(0,2,size=769) data=pd.DataFrame() data['perg']=perg data['plas']=plas data['pres']=pres data['skin']=skin data['test']=test data['mass']=mass data['pedi']=pedi data['age']=age data['Class']=Class
對數據的簡單審視,是增強對數據理解最有效的方法之一。經過對數據的觀察,能夠提早了解數據有哪些字段,每一個字段屬於什麼數據類型,是整數型,仍是浮點型,仍是字符型,這些發現有助於對數據進行整理。接下來經過一個簡單的例子展現一下如何查看數據。這個例子是查看前10行數據。代碼以下:
import numpy as np import pandas as pd #簡單查看數據,顯示前10行 peek=data.head(10)
perg plas pres skin test mass pedi age Class 0 23 81 66 2 817 52.550 0.055 35 0 1 20 84 45 52 558 37.238 1.955 67 1 2 15 14 89 2 593 17.838 0.300 78 1 3 22 42 90 80 325 51.667 0.479 24 0 4 10 50 13 22 328 65.769 0.887 62 0 5 8 89 30 60 754 56.617 0.328 71 0 6 8 48 90 12 582 23.732 2.192 31 1 7 5 180 48 96 169 54.091 2.002 59 1 8 5 169 95 93 220 46.859 0.079 39 1 9 22 26 86 15 680 6.406 1.700 66 0
在數據分析中,數據量過大,假如分析工具選擇不合適,分析效率會比較低。數據量太小,假如數據有太多的特徵,會致使分析結果有效性比較低。因此,咱們須要要注意數據的行和列,必須對所擁有的數據很是瞭解,要知道有多少行和多少列。經過DataFrame的shape屬性,能夠很方便地查看數據集中有多少行和多少列。代碼以下:
import numpy as np import pandas as pd print(data.shape)
(769, 9)
類型是數據很重要的一個屬性。數據的類型,直接會影響到模型的選擇。好比,分類模型,會要求字符串轉化成數值型,以便於計算和分類。能夠經過DataFrame的Type屬性來查看每個字段的數據類型。代碼以下:
import numpy as np import pandas as pd print(data.dtypes)
perg int32 plas int32 pres int32 skin int32 test int32 mass float64 pedi float64 age int32 Class int32 dtype: object
在分類算法中,須要知道每一個分類的數據大概有多少條記錄,以及數據分佈是否平衡。若是數據分佈的平衡性不好,須要在數據加工階段(抽樣)進行數據處理,來提升數據分佈的平衡性。利用Pandas的屬性和方法,能夠很方便地查看數據的分佈狀況。代碼以下:
import numpy as np import pandas as pd print(data.groupby('Class').size())
Class 0 382 1 387 dtype: int64
描述性統計能夠給出一個更加直觀、更加清晰的視角,以增強對數據的理解。在這裏能夠經過DataFrame的describe()方法來查看描述性統計的內容。這個方法給咱們展現了八方面的信息:數據記錄數、平均值、標準方差、最小值、下四分位數、中位數、上四分位數、最大值。這些信息主要用來描述數據的分佈狀況。代碼以下:
import numpy as np import pandas as pd pd.set_option('display.width', 100) print(data.describe())
perg plas pres skin test mass pedi age Class count 769.000 769.000 769.000 769.000 769.000 769.000 769.000 769.000 769.000 mean 12.770 99.945 59.559 49.843 421.537 34.420 1.236 49.191 0.503 std 7.870 56.267 34.603 28.696 240.698 19.250 0.730 17.826 0.500 min 0.000 0.000 0.000 0.000 0.000 0.126 0.000 21.000 0.000 25% 6.000 50.000 30.000 25.000 214.000 18.486 0.581 33.000 0.000 50% 13.000 101.000 60.000 50.000 431.000 34.398 1.214 48.000 1.000 75% 19.000 150.000 89.000 74.000 631.000 51.427 1.905 65.000 1.000 max 26.000 198.000 121.000 98.000 845.000 67.826 2.497 80.000 1.000
各字段的相關性是指數據的兩個字段是否互相影響,以及這種影響是什麼方式的等。通用的計算兩個字段的相關性的方法是皮爾遜相關係數,皮爾遜相關係數是度量兩個變量間相關程度的方法。它是一個介於1和-1之間的值,其中,1表示變量徹底正相關,0表示無關,-1表示徹底負相關。在數據挖掘建模過程當中,當數據的關聯性比較高時,有些算法(如線性迴歸、邏輯迴歸等)的性能會下降。因此在開始訓練算法前,查看一下字段的關聯性是一個很好的方法。當數據字段的相關性比較高時,應該考慮對特徵進行降維處理。下面經過使用DataFrame的corr()方法來計算數據集中數據屬性之間的關聯關係矩陣。代碼以下:
import numpy as np import pandas as pd print(data.corr(method='pearson'))
perg plas pres skin test mass pedi age Class perg 1.000 -0.011 -0.008 -0.029 0.001 0.023 0.052 0.017 0.012 plas -0.011 1.000 0.009 0.031 0.062 0.023 0.050 0.004 0.024 pres -0.008 0.009 1.000 -0.041 0.034 -0.025 0.008 0.017 -0.004 skin -0.029 0.031 -0.041 1.000 0.000 -0.012 -0.041 0.018 -0.032 test 0.001 0.062 0.034 0.000 1.000 -0.007 -0.057 0.072 0.054 mass 0.023 0.023 -0.025 -0.012 -0.007 1.000 -0.022 0.013 -0.002 pedi 0.052 0.050 0.008 -0.041 -0.057 -0.022 1.000 -0.055 0.010 age 0.017 0.004 0.017 0.018 0.072 0.013 -0.055 1.000 -0.061 Class 0.012 0.024 -0.004 -0.032 0.054 -0.002 0.010 -0.061 1.000
經過分析數據的高斯分佈狀況來確認數據的偏離狀況。高斯分佈又叫正態分佈,是在數據、物理及工程等領域都很是重要的機率分佈,在統計學的許多方面有着重大的影響。高斯分佈的曲線呈鐘形,兩頭低,中間高,左右對稱。在高斯分佈圖中,y軸兩點之間的面積是發生的機率。不少算法都會假定數據遵循高斯分佈,先計算數據的高斯偏離情況,再根據偏離情況準備數據。咱們可使用DataFrame的skew()方法來計算全部數據屬性的高斯分佈偏離狀況。代碼以下:
import numpy as np import pandas as pd print(data.skew())
perg 0.034 plas -0.037 pres -0.027 skin -0.030 test -0.032 mass -0.047 pedi 0.043 age 0.105 Class -0.013 dtype: float64
掌握這些方法後,在審查數據的時候,還須要記住如下幾個小技巧。
審查數據:一般描述性分析給出的數據對數據的理解是不充分的,應該多觀察和思考數據的特色,找到數據的內在聯繫和對解決問題有什麼益處。
問爲何:審查數據後多問幾個「爲何」,如你是如何看到和爲何看到這些數據的特殊性的,這些數據和問題如何關聯到一塊兒的,以及這些數據和咱們的問題有什麼關係等。
寫下想法:寫下本身經過觀察獲得的想法,將觀察到的數據各維度的關聯關係和咱們的想法都記錄下來。例如,數據表明什麼,將採用什麼樣的技術繼續挖掘數據等。寫下的這些想法將會給新的嘗試帶來極大的參考價值。
數據分析或者數據挖掘中,經過對數據的理解,能夠選擇有效的算法來創建模型。本篇文章介紹了七種方法來觀察和理解數據,這爲發現數據的特徵和選擇合適的算法提供了思路。你們也能夠嘗試用另一種觀察數據的有效手段,就是經過Python的Matplotlib包提供的可視化圖表來展現數據,以便於發現數據的特徵。
以上介紹,對於零基礎的數據分析小白,也會很困惑,裏面涉及到理論知識,都是統計學中的基本概念,因此要求你們必須熟練掌握統計學的基礎知識。另一個,就是Python工具,這是數據分析的經常使用工具,須要你們掌握。
一個數據人的自留地是一個助力數據人成長的你們庭,幫助對數據感興趣的夥伴們明確學習方向、精準提高技能。掃碼關注我,帶你探索數據的神奇奧祕