數據科學項目開篇(一)

 這篇文章重點是介紹,數據挖掘,機器學習項目做爲一個完整的流程是怎麼樣的,意義是制定本身一個規範,因此裏面的具體細節並無花太多的心思,效果很差在所不免。重點是體會這個過程!!!html

   這篇文章是這個系列的開篇立論,學了一年的機器學習方面的知識,可是當本身上手去作的時候,問題就來了,好像什麼都知道一些,可是又什麼都作不了,各類困難,實際工做中,沒有人爲你收集處理數據,而數據集質量的好壞,特徵工程的質量,將決定最後模型的性能上限。數據科學,機器學習是一門實踐的知識,而原理的東西彷佛永遠都學不完。實際工做中,真正拉開差距的更可能是對客戶需求,具體業務的理解,和工程的熟練度和深度。而這些東西是課本上學不到的,因此但願在研二這一年,投入到實際的工程中去,作一些真正貼近實際的項目。python

  在項目中我會用到python中兩個重要的庫,咱們會使用 Pandas 和 scikit-learn ,tensorflow等庫。咱們會大量用到 Pandas 的DataFrame,這使得在 Python 中讀取和處理表格數據變得很是簡單。這個系列,我會把重點放在:git

特徵工程,github

業務理解,算法

不一樣機器學習算法的適用場合,機器學習

相同場合下不一樣算法的表現,性能

對結果多指標的評價上,因此在實現上咱們直接調用各類輪子來實現咱們的模型。學習

下面這段複製了 知乎上的一篇文章,這篇文章寫的很好,介紹了一個完整的數據科學項目的嚴格流程,按照這個流程作事情,會讓人的頭緒清楚,建議你們直接看下面連接的原文。網站

第一步,咱們要尋找有價值的數據集。    ui

做者:EarlGrey
連接:https://zhuanlan.zhihu.com/p/22894651
來源:知乎
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

 尋找優質數據集進行完整的項目分析很困難。數據集須要足夠大,大到出現內存和性能的限制。還須要具有業務價值。舉個例子,這個數據集中包含了美國大學的招生條件、畢業率和畢業生將來收入的數據。這就是一個能夠用來說故事的優質數據集。然而,若是你仔細想一想,就會發現這裏面沒有足夠的細節來創建一個完整的項目。

舉例說,你能夠告訴別人若是他們去某些(好)大學,他們將來的潛在收入就會更高,可是這隻須要一個很快的查找比較就能夠完成,沒有足夠的空間去展現你的技術能力。你也能夠發現若是大學有更高的入學條件,它們的畢業生就更有可能得到高薪,但這些就更偏向於講故事,而非業務價值了。

當你有 GB 以上的數據量時,或者當你想要預測一些數據細節,內存和性能限制就會逐漸凸現出來,由於得對數據集運行算法運算。

一個優質數據集容許你編寫一系列腳本對數據作變形,從而回答一些動態問題。股票價格就是一個很好的數據集。你能夠根據這些數據預測次日的股價走勢,而且在閉市的時候把新數據提供給算法。這能夠幫助你執行交易,甚至是獲取利潤。這就不是在講故事了 — 而是直接產生價值。

下面是一些可以找到優質數據集的地方:

  • /r/datasets — 一個有着上百有趣的數據集的 subreddit
  • Google Public Datasets — 一些在 Google BigQuery 上的公共數據集
  • Awesome datasets — 一個託管在 Github 上的數據集清單
  • 。。。。。。。。有個新的數據集網站的時候會更新在這裏。

瀏覽這些數據集時,想想若是有這些數據集,人們可能會問什麼問題,而後再想一想這些問題是不是一次性的(「S&P 500 和房價的相關性是怎樣的?」),或是持續性的(「你能預測股票價格嗎?」)。這裏的關鍵在於找到那些持續性的問題,這些問題須要屢次運行,並輸入不一樣的數據才能回答。

第二步,選擇分析角度。

  重要的事是要堅持一個角度。一次專一於太多事情會很難作成一個優秀的項目。選擇一個有足夠細節的角度這點也很重要。

  

第三步,理解數據。

做者:EarlGrey
連接:https://zhuanlan.zhihu.com/p/22894651
來源:知乎
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

咱們首先快速查看原始數據文件。下面是 2012 年第一季度收購數據的前幾行:

100000853384|R|OTHER|4.625|280000|360|02/2012|04/2012|31|31|1|23|801|N|C|SF|1|I|CA|945||FRM|
100003735682|R|SUNTRUST MORTGAGE INC.|3.99|466000|360|01/2012|03/2012|80|80|2|30|794|N|P|SF|1|P|MD|208||FRM|788
100006367485|C|PHH MORTGAGE CORPORATION|4|229000|360|02/2012|04/2012|67|67|2|36|802|N|R|SF|1|P|CA|959||FRM|794

下面是 2012 年第一季度的表現數據的前幾行:

100000853384|03/01/2012|OTHER|4.625||0|360|359|03/2042|41860|0|N||||||||||||||||
100000853384|04/01/2012||4.625||1|359|358|03/2042|41860|0|N||||||||||||||||
100000853384|05/01/2012||4.625||2|358|357|03/2042|41860|0|N||||||||||||||||

在編寫代碼以前,花點時間去理解數據是頗有用的。尤爲對於業務型項目而言,由於咱們沒有互動式地去探索數據,很難發現某些細節,除非一開始就找到它們。這種狀況下,第一步就是去房利美的網站上讀一讀有關數據集的材料:

讀完這些材料以後,咱們知道了一些有用的關鍵信息:

  • 從 2000 年到如今,每一個季度都有一個收購文件和表現文件。數據滯後一年,因此最近的數據是 2015 年的
  • 這些文件是文本形式,用 | 做爲分隔符
  • 這些文件沒有頭文檔,可是咱們有全部列名稱的列表
  • 所有加起來,這些文件共包含 2.2 千萬個房貸的數據
  • 由於表現文件涵蓋了以前的房貸信息,因此早些時候的房貸會有更多的表現數據(舉個例子,2014 年收購的房貸不會有太多表現信息)

在設計項目結構和處理數據時,這些信息能幫助咱們節省一大筆時間。

做者:EarlGrey
連接:https://zhuanlan.zhihu.com/p/22894651
來源:知乎
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

第四步,設計項目結構

在開始下載和探索數據以前,設計好項目結構是很是重要的。在打造一個完整的項目時,咱們的主要目標是:

  • 輸出一個可行的解決方案
  • 解決方案運行快且消耗最少資源
  • 讓他人能夠很容易地擴展項目
  • 讓他人能夠容易地理解代碼
  • 寫的代碼越少越好

爲了達到這些目標,咱們要設計好項目的結構。一個結構良好的項目聽從如下規範:

  • 數據文件和源代碼分開
  • 原始數據和生成數據分開
  • 有一個 README.md 文件,介紹如何安裝並使用這個項目
  • 有一個 requirements.txt 文件,包含項目所需的全部模塊
  • 有一個 settings.py 文件,包含全部其餘文件所需的設置
    • 例如,若是有不少Python腳本都讀取同一個文件,就不如讓它們都導入settings並從這一個地方來獲得文件
  • 有一個 .gitignore 文件,來防止一些特別大的或者私密的文件被提交到 Git
  • 把任務分紅幾步,並分別放在能夠單獨執行的文件裏
    • 例如, 用一個文件讀取數據,一個文件創建特徵,一個文件執行預測
  • 儲存中間值。例如,一個腳本可能會輸出一個文件,這個文件又會被另一個腳本讀取
    • 這使得咱們能夠在數據處理的流程中作一些改動,而又不須要從新計算

該項目的文件結構以下:

loan-prediction
├── data
├── processed
├── .gitignore
├── README.md
├── requirements.txt
├── settings.py