數據分析零基礎系列(2):數據理解篇

是新朋友嗎?記得先點藍字關注我哦~算法


「業務理解篇」上線以後,很多朋友就火燒眉毛的想要看「數據理解篇」。今天,我就要給你們開啓「數據分析零基礎系列(2):數據理解篇」。dom

開篇以前,我仍是但願和你們繼續聊聊數據和業務的那些事情,由於它實在過重要了。縱覽各行各業的數據應用狀況,數據的價值,始終是要創建在具體的業務場景之上,尤爲是依賴於那些帶有強烈不肯定性的業務場景,不肯定性越高,數據需求越強,創造的價值潛力就越大。ide

好比疫情期間,北京要求外地返京人士隔離14天,那怎麼可以精準識別某我的是否在北京隔離了14天,除了小區居委會開的證實,也可經過運營商收集到的用戶地理位置數據,精準判斷一我的的行爲軌跡,來識別我的最近14天的活動範圍。這個數據對於在疫情期間,作好人口的流動管理,很是有價值。
數據分析零基礎系列(2):數據理解篇工具

因此,我始終堅持,場景第一,數據第二,算法第三。性能

  • 天底下算法都是一個老師教出來的,都是肯定的,可學習的,各類算法的組合也都是肯定的,因此說算法最不會形成一我的或者一個企業的競爭優點。每每數據的獨特性和惟一性,可以造成比較大的競爭優點。好比不少企業看不到消費者的消費記錄,支付寶,它牛逼,它能看到,因此它能把徵信作的很牛逼,使用簡單的邏輯迴歸,都能作的比別人好。可是假若有一個好的場景,不作數據分析都能賺錢,作數據分析就更賺錢了。好比淘寶,流量夠大了,不作數據分析,隨便看看昨天什麼賣的好,今天就推薦什麼,雖不是最優,但也差不到哪去。學習

言歸正傳,咱們今天好好聊聊「數據理解」。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工具,這是數據分析的經常使用工具,須要你們掌握。

數據分析零基礎系列(2):數據理解篇一個數據人的自留地是一個助力數據人成長的你們庭,幫助對數據感興趣的夥伴們明確學習方向、精準提高技能。掃碼關注我,帶你探索數據的神奇奧祕

相關文章
相關標籤/搜索