《數據驅動安全:數據安全分析、可視化和儀表盤》一3.4 探索數據
本節書摘來異步社區《數據驅動安全:數據安全分析、可視化和儀表盤》一書中的第3章 ,第3.4節,[美]傑·雅克布(Jay Jacobs)鮑布·魯迪斯(Bob Rudis) 著 薛傑 王占一 張卓 胡開勇 蔣夢颺 趙爽 譯, 更多章節內容可以訪問雲棲社區“異步社區”公眾號查看。
3.4 探索數據
你大致了解變量及其形式,現在是時候把你的安全領域專業知識加進來以探索與發現數據中的奧秘。這將促使你提出和回答好的問題。即便有近26萬條記錄,也會有很多工具隨時告知你數據中有什麼內容。
在開始深入探索數據之前,我們總結了一些關於數據的信息:
Reliability、Risk和x是整型。
IP、Type、Country、Locale和Coords是字符串。
IP地址使用點分四組表示法存儲,而不是主機名或十進製格式。
每個記錄與唯一的IP地址關聯,所以共有258 626個IP地址(在本次下載中)。
每個IP地址已經通過Coords字段被地理定位為經度和緯度,且記錄在同一個字段中並用逗號分隔。如果你希望使用該字段,就必須進一步解析。
當你有描述數量的變量(這是一種奇特的方式說“代表數量的數字”),你可以嚐試分析變量的基本描述性統計數據。這些統計數據包括:
最小和最大值;求差可以得到範圍(範圍=最大值–最小值)。
中位數(數據集正中的數值)。
第一和第三個四分位數(是第25和75百分位數,或者你可以認為它是第一個半部分數據的中間值和最後一個半部分數據的中間值)。
均值(所有數據值求和然後除以數據數量)。
你可以認為最大值、最小值、中位數和兩個四分位數是一個數據集的五數概括法(由Tukey發明),並且兩種語言都有內置函數計算它們,即R中的summary()和Python中的describe(),兩種語言同樣有函數可以計算均值。請閱讀Reliability和Risk(程序清單3-7和程序清單3-8)兩個主要數據行的概要。
程序清單3-7
正如這些結果,Reliability列可能存在於[1…10]的範圍(https://www.slideshare.net/alienvault/building-an-ip-reputation-engine-tracking-the-miscreants的第十頁),而Risk列(AlienVault說其可能的歸格範圍是[1…10]),實際上隻存在於[1…7]範圍。你也可以看到,Risk和Reliability都以2為中心。
你現在可以深入一些,共同使用Reliability、Risk、Type和Country這些字段定義數據集的種類。盡管我們認為Reliability和Risk僅是數值,但是它們實際上是序數,這意味著各列中的每個項都可以賦予一個整數,在Reliability和Risk中數值4實際意義不一定指的是數值2的兩倍,這意味著當Reliability和Risk的值為4時僅表示相比於它們值為2時程度更高。換言之,這些數據更像是標簽而不是僅代表數值大小。分類數據也看做“標稱值”(nominal values)、“因子”(factor),或在某些情況下是“定性變量”(qualitative variables)。
“數據”不僅僅是“數據”嗎?
你可能已經習慣了從整體的角度處理數據,認為日誌文件內容和數據庫提取的信息僅僅是數據。如果你習慣了處理電子表格形式的數據(如Microsoft的Excel),你很難改變對它的固有認識。實際上,單個的數據元素可以分為兩類:定量(quantitative)數據和定性(qualitative)數據。定量數據元素代表實際數量,而定性數據(或分類數據)元素是對性質的描述。
TCP或UDP的端口號是數字,但是它們不代表數量;當使用數據命名實體時,它們隻是分類信息的一部分。接口“22”實際上並不大於或小於接口“7070”。相反,“傳輸的字節數”或者“染毒主機數”代表了具體數量並且可以對比大小。
分類數據在R中作為factor進行操作被控製,在Python中作為pandas Categorical類。實際上R和Python都有豐富的函數來實現因子的組建、分割、提取和分析。在程序清單3-4中,在掃描了AlienVault IP信譽數據文件後,R做出了合理的推測,IP、類型、國家和區域在本質上都是分類。國家名稱和惡意軟件類型簡單定義為類型(統計方麵的標稱數據)。你也會發現R不能正確地識別出Reliability和Risk的定性性質,盡管有意義明確的序列數值,例如風險級別“5”高於“1”,但是序列數值不代表具體數量。(這意味著你不能計算Risk的均值或與其他Risk值做減法。)
在R中,定性和定量變量的差別由summary()函數自動處理(見程序清單3-9),而且它會顯示每個類別的計數。這個工作對定量變量不起作用。當變量中存在太多獨立數值時,為了得到計數,可以使用table()函數。在Python中,你可以生成一個簡短的函數,利用pandas轉換數據幀的列(它隻是一個數組),將其轉換為一個命名恰當的Categorical對象(見程序清單3-10),你可以適當調整來得到相似的有用輸出。
程序清單3-9
這些數值表能幫助你了解數據的概況,但是一個數據分布圖能提供一個全新的視角,讓人們了解到單純的數字不足以展示數據。我們以一個簡單的柱狀圖給出Country、Risk和Reliability因子快速直觀的概述(分別參見圖3-2到圖3-4)。你將需要單獨運行每個R代碼來得到每幅圖。
程序清單3-11
這些可視化程序的Python版本在程序清單3-14、程序清單3-15和程序清單3-16中。
程序清單3-14
圖3-5所示的國家圖說明了確實有一些國家明顯存在更多的惡意節點,你可以通過一個時刻的數量來觀察列表中前十個國家的數量比例(程序清單3-17和程序清單3-18)。
程序清單3-17
這個快速計算展示了列表中中國和美國共統計出大約46%的惡意節點,而俄羅斯大約有2.4%。在這裏,探索的關鍵點之一是如何比較各種行業報告,因為你期望這些國家中的多個都出現在前十位。然而,一些國家的節點數量顯示出數據集可能有一些偏差。你還可以看到,3%的節點不能地理定位(在R程序輸出中的[other]分類)。
第5章包含了IP地址的地理定位的挑戰與陷阱,所以我們不在這裏進一步討論。
對於Risk變量,你會發現大多數節點的風險都是微不足道的(非常低以至於可以忽略)。有一些其他元素很有特點,實際上沒有端點在1、5、6或7類別中,同時也沒有端點存在於剩餘的定義範圍[8-10]中。這種異常是一種標誌,值得深入挖掘,這個異常是數據集內容不均衡的直接證據。
最後,節點的Reliability率也顯得有些偏斜(也就是其分布偏向了均值或呈集中趨勢)。大部分數值被分類到級別2和級別4中,大於級別4的評級不多。可信度評級完全沒有級別3,這個現象應引發一些思考。它也許說明了評級分配的一種係統缺陷,也可能你至少有兩個獨立的數據集。無論如何,大量數據集中在級別2和級別4而少量集中在級別3這個現象是一個標誌,你應進一步探索,因為它有些奇怪並令人驚訝。
你現在有些線索並對數據核心內容的構成有了更清晰的認識。這個初步的分析給你足夠的信息來製定研究問題。
最後更新:2017-06-21 18:02:34