《數據驅動安全:數據安全分析、可視化和儀表盤》一1.2.2 編程技能
本節書摘來異步社區《數據驅動安全:數據安全分析、可視化和儀表盤》一書中的第1章 ,第1.2.2節,[美]傑·雅克布(Jay Jacobs)鮑布·魯迪斯(Bob Rudis) 著 薛傑 王占一 張卓 胡開勇 蔣夢颺 趙爽 譯, 更多章節內容可以訪問雲棲社區“異步社區”公眾號查看。
1.2.2 編程技能
不管我們如何將數據科學描繪成對知識、真相的極具魅力的追尋過程,正如我們所提到的,數據科學也會有一些雜亂。這隻是一種保守的說法,和數據打交道具有超出想象的大量的不確定性和混亂,不幸的是,這些混亂經常早早地出現在我們嚐試收集和準備數據的時候。這些過程是很多數據統計的課程從來沒有為學生們準備的,教授直接拿出準備好的相當整潔漂亮的數據集,可以直接導入到數據分析工具內。而一旦學生們離開溫暖的課堂時,他們將會立即意識到世界是不規則的,充滿了混亂的,而數據(以及後續的分析過程)則是這個混亂世界的真實反映。
在數據科學中有一個冰冷、慘痛的教訓:獲取到的數據具有大量的不同的格式、狀態和參差不齊的質量。數據可能嵌入在非結構化或半結構化的日誌文件中,或許需要從網絡站點去搜刮,更有甚者,數據來源於極其複雜令人心煩的數據格式,如XML。但是,我們也需要找到方法來收集、整理數據,將其調整到能支持深入分析的數據格式。雖然這些工作可以憑借極大的耐心、文本編輯器、明智地用暑期實習生來完成,但是長遠看來,編寫程序腳本來完成,可以提供更多的功能性和靈活性和高效性。學習基本的編程技能也會為數據處理提供更多的可能性。這樣可以隨意接受不同格式的數據並將其轉換為最適合分析軟件使用的任意數據格式。即便現在能獲取到很多稱手的數據格式轉換工具,它們也無法預見和適合我們將遇到的每種情況。要做到真正高效地處理數據,需要我們去適應數據,而非相反。
256位的AES密鑰強度是128位密鑰的兩倍嗎?
因為256位AES密鑰長度是128位的兩倍,因此對256位AES密鑰很自然的猜想是前者的安全性是後者的兩倍。由於所謂的“加倍的安全”,我們身邊的信息安全人員要求一些項目使用256位密鑰。既然如此,我們就來看看這裏邊的數學原理吧。第一點,正如我們說到的“位”,雖然256位確實是128位的兩倍長,但是256位密鑰實際上也隻多了2128倍的密鑰數。我們來打破書本常規並試試回答一個簡單地問題:如果你能獲取到世界上最快的超級計算機,那麼能你破譯多少128位的AES密鑰呢?
目前(截止到本書撰寫的時間)世界上最快的超級計算機是中國的“天河-2號”,它能夠每秒進行大約34千萬億次(34×1015次浮點運算)。我們假設其能夠一次運算產生一個密鑰,再一次運算來驗證這個密鑰(這個假設是荒謬且保守的),我們每秒能夠測試驗證驚人的17×1015個密鑰。但是128位密鑰具有3.4×1038個不同的密鑰,意味著用超級計算機整整破解一年後,也隻是僅僅探索了密鑰空間的百分之1.6×10–13。即便讓這超級計算機運行1000年,我們也僅僅是搜尋了密鑰空間的百分之0.0000000000016(而且耗費了巨量的電力資源)。
我們簡化一下這個問題,暴力破解128位AES密鑰的可能性已經如此微小,以至於可以認為是0了。我們可以在這裏很專業地說,將128位密鑰提升到256位是將破解的可能性從超級無窮小變成2128倍的超級無窮小。
任意的現代編程語言都支持基本的數據操作,但是一些如Python、R等腳本語言似乎在數據分析中比Java、C等編譯語言更加常用。即便如此,編程語言其實是無關緊要的,最終的分析結果(以及一個愉快的分析師)比選一門“最好”的語言更重要,能花費最少的精力來完成分析工作就是最好的語言。我們清理、轉換數據格式使用的語言一般在Python(pandas)以及R語言之間來回選擇(或者有些懷舊的人會選取Perl語言),然後再用R語言或者Python來做數據分析、可視化的工作。學習一些Web相關的語言,如HTML、CSS以及JavaScript有助於創建基於Web的交互式可視化,正如我們將在第11章看到的,但是在數據準備和分析的過程中通常不涉及Web語言。
在本章中有個值得一提的工具:“網關工具”,其介於文本工具和編程之間,也就是電子表格(如微軟的Excel或者OpenOffice的Calc)。電子表格可讓非程序員做出一些神奇的東西,能快速地得到一些產出結果。盡管電子表格麵臨一係列的挑戰和缺點,但它們也確實具有一些好處。如果處理的數據量不是很大很複雜,以及處理的任務不如“決定世界經濟未來走向”重要的話,Excel可能是解決問題的最適合工具。我們強烈推薦選用Excel作為臨時的解決方案,其能很好地快速處理一次性任務。但是如果你有一個需要重複分析的任務或者反複使用的模型的話,最好用某種結構化編程語言來處理。
作為一種數據清理工具,使用電子表格初看起來是一個不錯的解決辦法(尤其是對一些熟悉這方麵技能的人來講),但是電子表格是事件驅動的,意味著它們需要通過點擊、打字、拖拽來工作。如果想用來轉換一行數據,你就不得不點擊表格,選中該行數據,然後再轉換數據。這適合一些小的數據集或者快速的任務,但是相信我,你將會(比預期的還頻繁)不得不回溯原始數據然後重新清理它。某一天,也許你有一些新的日誌文件需要處理,也許你會意識到應該再從原始數據中提取另外的數據關係,也許(累得喘息)你在數據清理過程中發現了一個錯誤。也許不止一次地,某個點、某個處理細節會導致你重新回溯原始數據,然後重複數據清理以及轉換的過程,利用電子表格的話,意味著你需要更多的無數次點擊。然而,寫一個腳本來運行的話,就可以很輕易、靈活以及一致地執行數據清理過程。
電子表格的限製
在2013年1月16日,摩根大通向股東發表題為《有關摩根大通有限公司 2012 CIO 損失的管理工作報告》(Report of JPMorgan Chase & Co.Management Task Force Regarding 2012 CIO Losses)的報告(在附錄B可見完整引用),在報告中,他們調查了在交易中損失的60億美元。他們對執行故障做了詳細審查,並將電子表格作為推波助瀾的一個因素。“在審查過程中,額外的操作性問題變得明顯。例如,通過一係列的Excel電子表格來操作的模型中,人們必須手動通過粘貼/複製(複製到另外的表格)來操作。”他們發現了一個對電子表格的巨大挑戰:在數據計算過程中如何保證數據的一致性和完整性。“我們手動上傳的數據缺乏質量控製,以電子表格為基礎的數據計算缺乏足夠的控製,以及充滿了公式、代碼頻繁變更。”他們接著將電子表格數據模型標記為“錯誤”以及“難以擴展”。和任何複雜的係統打交道的時候,大量的故障導致數據的災難,我們很難將電子表格產生的“錯誤數據”指認為導致損失的主要原因,但是可以肯定的是,其中有它的作用。
在數據準備好進行分析之後,如果會編程的話你就會感到得心應手。很多我們在此提到的編程語言都內置了數據分析的特性。例如,統計學家專門出於數據分析的目的開發了R語言。Python及其擴展包NumPy、SciPy以及pandas,提供了豐富可比較的數據分析環境。但是,僅僅準備和分析數據是不夠的,我們還需要表達分析的結果,其中最有效的方法之一就是數據可視化(這個主題占據了本書的好幾個章節)。同樣,Excel也可以產生一些圖表,修改一些Excel的默認設置,就可以得到好的可視化效果。但是在我們看來,複雜的詳盡的數據可視化都是通過編程產生,Python和R語言都有一些功能豐富的工具來產生以及探索數據可視化。在很多實例中,你也可以在同一個腳本中結合所有的步驟和函數,可以寫一個腳本來抓取原始數據、操作和清理數據、分析數據,然後再對分析結果可視化。
最後更新:2017-06-21 17:02:42