Python數據分析實用程序

  • 來源 | 願碼(ChainDesk.CN)內容編輯
  • 願碼Slogan | 連接每個程序員的故事
  • 網站 | http://chaindesk.cn
  • 願碼願景 | 打造全學科IT系統免費課程,助力小白用戶、初級工程師0成本免費系統學習、低成本進階,幫助BAT一線資深工程師成長並利用自身優勢創造睡後收入。
  • 官方公衆號 | 願碼 | 願碼服務號 | 區塊鏈部落
  • 免費加入願碼全思維工程師社羣 | 任一公衆號回覆“願碼”兩個字獲取入羣二維碼

本文閱讀時長:13min

本文包含以下部分:

  • 數據分析,數據科學,大數據
  • Python的數據分析簡史
  • dautil的高級概述
  • IPython筆記本實用程序
  • 下載數據
  • 繪製實用程序
  • 揭開Docker的神祕面紗

數據分析,數據科學,大數據


您可能已經看到維恩圖將數據科學描述爲數學/統計學,計算機科學和領域專業知識的交集。數據分析是永恆的,並且在數據科學和計算機科學之前存在。您可以使用筆和紙進行數據分析,並在更現代的時候使用袖珍計算器進行數據分析。

數據分析涉及許多方面,例如做出決策或提出新的假設和問題。圍繞數據科學和大數據的炒作,狀態和經濟回報讓我想起了數據倉庫和商業智能成爲流行語的時間。商業智能和數據倉庫的最終目標是構建管理儀表板。這涉及很多政治和組織方面,但在技術方面,主要是關於數據庫。另一方面,數據科學不是以數據庫爲中心的,而是在很大程度上依賴於機器學習。機器學習由於數據量較大,技術已成爲必要。數據增長是由世界人口的增長和社交媒體和移動設備等新技術的興起引起的。實際上,數據增長可能是我們可以確定的唯一趨勢。構建儀表板和應用機器學習之間的區別與搜索引擎的演變方式類似。

搜索引擎最初只不過是手工創建的組織良好的鏈接集合。最終,自動化方法獲勝。由於將及時創建更多數據(而不是銷燬),我們可以預期自動數據分析會增加。

Python的數據分析簡史

  • 1989年:Guido van Rossum在荷蘭的CWI實施了第一個Python版本,作爲聖誕節愛好項目。
  • 1995年:Jim Hugunin創建了NumPy的前身Numeric。
  • 1999年:Pearu Peterson將f2py描述爲Fortran和Python之間的橋樑。
  • 2000:Python 2.0發佈。
  • 2001:SciPy庫發佈。此外,還創建了Numarray,一個競爭的數字庫。費爾南多佩雷斯發佈了IPython,這是一個下午的黑客攻擊。NLTK作爲一個研究項目發佈。
  • 2002年:John Hunter創建了matplotlib庫。
  • 2005年:NumPy由Travis Oliphant發佈。最初,NumPy是Numeric擴展,其功能受到Numarray的啓發。
  • 2006:NumPy 1.0發佈。SQLAlchemy的第一個版本發佈了。
  • 2007年:scikit-learn項目由David Cournapeau發起爲Google Summer of Code項目。Cython是從Pyrex分叉的。Cython後來被大量用於熊貓和scikit-學習以提高性能。
  • 2008年:Wes McKinney開始研究Pandas。Python 3.0發佈了。
  • 2011:IPython 0.12版本引入了IPython筆記本。Packt發佈了NumPy 1.5初學者指南。
  • 2012年:Packt發佈了NumPy Cookbook。
  • 2013:Packt發佈NumPy初學者指南 - 第二版。
  • 2014年:Fernando Perez宣佈Project Jupyter,旨在打造一款與語言無關的筆記本電腦。Packt發佈了學習NumPy數組和Python數據分析。
  • 2015:Packt發佈NumPy初學者指南 - 第三版和NumPy Cookbook - 第二版。

dautil的高級概述


dautil模塊總結在下表中:

描述 LOC
dautil.collect 包含與集合相關的實用程序 331
dautil.conf 包含配置實用程序 48
dautil.data 包含用於下載和加載數據的實用程序 468
dautil.db 包含與數據庫相關的實用程序 98
dautil.log_api 包含日誌實用程序 204
dautil.nb 包含IPython / Jupyter筆記本小部件和實用程序 609
dautil.options 配置與數據分析相關的多個庫的動態選項 71
dautil.perf 包含與性能相關的實用程序 162
dautil.plotting 包含繪圖實用程序 382
dautil.report 包含報告實用程序 232
dautil.stats 包含統計函數和實用程序 366
dautil.ts 包含時間序列和日期的實用程序 217
dautil.web 包含用於Web挖掘和HTML處理的實用程序 47

IPython筆記本實用程序


IPython筆記本已成爲數據分析的標準工具。該dautil.nb有幾個互動IPython的小部件,以幫助乳膠渲染,matplotlib屬性的設置,和繪圖。Ivan定義了一個Context類,它表示小部件的配置設置。這些設置存儲在當前工作目錄中名爲dautil.json的漂亮打印的JSON文件中。這可以擴展,甚至可以使用數據庫後端。以下是一個示例dautil.json的編輯摘錄(因此它不佔用大量空間):

{

   ...

   "calculating_moments": {

       "figure.figsize": [ 10.4, 7.7 ],

       "font.size": 11.2

   },

   "calculating_moments.latex": [ 1, 2, 3, 4, 5, 6, 7 ],

   "launching_futures": {

       "figure.figsize": [ 11.5, 8.5 ]

   },

   "launching_futures.labels": [ [ {}, {

               "legend": "loc=best",

               "title": "Distribution of Means"

           }

       ],

       [

           {

               "legend": "loc=best",

               "title": "Distribution of Standard Deviation"

           },

           {

                "legend": "loc=best",

               "title": "Distribution of Skewness"

           }

       ]

   ],

...

}

Context對象可以使用字符串構建 - Ivan建議使用筆記本的名稱,但任何唯一標識符都可以。該dautil.nb.LatexRenderer還使用了Context類。它是一個實用程序類,可幫助您在IPython / Jupyter筆記本中編號和渲染Latex方程式,例如,如下所示:

import dautil as dl

 

lr = dl.nb.LatexRenderer(chapter=12, context=context)

lr.render(r'delta! = x - m')

lr.render(r'm' = m + frac{delta}{n}')

lr.render(r'M_2' = M_2 + delta^2 frac{ n-1}{n}')

lr.render(r'M_3' = M_3 + delta^3 frac{ (n - 1) (n - 2)}{n^2}/

- frac{3delta M_2}{n}')

lr.render(r'M_4' = M_4 + frac{delta^4 (n - 1) /

(n^2 - 3n + 3)}{n^3} + frac{6delta^2 M_2}/

{n^2} - frac{4delta M_3}{n}')

lr.render(r'g_1 = frac{sqrt{n} M_3}{M_2^{3/2}}')

lr.render(r'g_2 = frac{n M_4}{M_2^2}-3.')

結果如下:

您可能會發現有用的另一個小部件是RcWidget,它設置matplotlib設置,如以下屏幕截圖所示:

下載數據


有時,我們需要樣本數據來測試算法或原型可視化。在dautil.data模塊中,您將找到許多用於數據檢索的實用程序。模塊中的一些實用程序在現有的pandas函數之上添加了一個緩存層,例如從世界銀行和Yahoo!下載數據的pandas函數。您還可以獲取音頻,人口統計,Facebook和營銷數據。

數據存儲在特殊數據目錄下,該目錄取決於操作系統。以下示例代碼從SPAN Facebook數據集加載數據並計算clique數:

import networkx as nx

import dautil as dl

 

 

fb_file = dl.data.SPANFB().load()

G = nx.read_edgelist(fb_file,

                     create_using=nx.Graph(),

                     nodetype=int)

 

print('Graph Clique Number',

     nx.graph_clique_number(G.subgraph(list(range(2048)))))

繪製實用程序


Ivan在書中經常可視化數據。繪圖有助於我們瞭解數據的結構,並幫助您形成假設或研究問題。通常,我們想要繪製多個變量,但我們希望很容易看出它是什麼。matplotlib中的標準解決方案是循環顏色。但是,Ivan更喜歡循環線寬和線條樣式。以下單元測試演示了他對此問題的解決方案:

 def test_cycle_plotter_plot(self):

       m_ax = Mock()

       cp = plotting.CyclePlotter(m_ax)

       cp.plot([0], [0])

       m_ax.plot.assert_called_with([0], [0], '-', lw=1)

       cp.plot([0], [1])

       m_ax.plot.assert_called_with([0], [1], '--', lw=2)

       cp.plot([1], [0])

       m_ax.plot.assert_called_with([1], [0], '-.', lw=1)

該dautil.plotting模塊目前也有次要情節,直方圖,迴歸圖使用的輔助工具,並處理彩色地圖。下面的示例代碼(標籤的代碼已被省略)演示了條形圖實用程序功能和dautil.data的實用程序功能,它下載了股票價格數據:

import dautil as dl

import numpy as np

import matplotlib.pyplot as plt

 

 

ratios = []

STOCKS = ['AAPL', 'INTC', 'MSFT', 'KO', 'DIS', 'MCD', 'NKE', 'IBM']

 

for symbol in STOCKS:

   ohlc = dl.data.OHLC()

   P = ohlc.get(symbol)['Adj Close'].values

   N = len(P)

   mu = (np.log(P[-1]) - np.log(P[0]))/N

   var_a = 0

   var_b = 0

 

   for k in range(1, N):

       var_a = (np.log(P[k]) - np.log(P[k - 1]) - mu) ** 2

       var_a = var_a / N

 

   for k in range(1, N//2):

       var_b = (np.log(P[2 * k]) - np.log(P[2 * k - 2]) - 2 * mu) ** 2

       var_b = var_b / N

 

   ratios.append(var_b/var_a - 1)

 

_, ax = plt.subplots()

dl.plotting.bar(ax, STOCKS, ratios)

plt.show()

有關最終結果,請參閱以下屏幕截圖:

代碼執行隨機遊走測試並計算股票價格列表的相應比率。每當您運行代碼時都會檢索數據,因此您可能會得到不同的結果。

以下腳本演示了世界銀行數據的線性迴歸實用程序和緩存下載程序(省略了水印和繪圖標籤的代碼):

import dautil as dl

import matplotlib.pyplot as plt

import numpy as np

 

 

wb = dl.data.Worldbank()

countries = wb.get_countries()[['name', 'iso2c']]

inf_mort = wb.get_name('inf_mort')

gdp_pcap = wb.get_name('gdp_pcap')

df = wb.download(country=countries['iso2c'],

                 indicator=[inf_mort, gdp_pcap],

                start=2010, end=2010).dropna()

loglog = df.applymap(np.log10)

x = loglog[gdp_pcap]

y = loglog[inf_mort]

 

dl.options.mimic_seaborn()

fig, [ax, ax2] = plt.subplots(2, 1)

ax.set_ylim([0, 200])

ax.scatter(df[gdp_pcap], df[inf_mort])

ax2.scatter(x, y)

dl.plotting.plot_polyfit(ax2, x, y)

plt.show()

代碼應顯示以下圖像:

該計劃下載2010年世界銀行數據,並將嬰兒死亡率與人均GDP進行對比。還示出了對數變換數據的線性擬合。

揭開Docker的神祕面紗


Docker使用Linux內核功能來提供額外的虛擬化層。它由Solomon Hykes於2013年創建。Boot2Docker允許我們在Windows和Mac OS X上安裝Docker。Boot2Docker使用包含帶有Docker 的Linux環境的VirtualBox VM 。介紹中提到的Ivan的Docker鏡像基於continuumio / miniconda3 Docker鏡像。

安裝Boot2Docker後,需要對其進行初始化。這只需要一次,Linux用戶不需要這一步:$ boot2docker init

Mac OS X和Windows用戶的下一步是啓動VM:

$ boot2docker start

通過啓動示例容器來檢查Docker環境:

$ docker run hello-world

Docker鏡像組織在一個類似於GitHub的存儲庫中。製作人推送圖像,消費者拉動圖像。您可以使用以下命令拉出Ivan的存儲庫。目前的大小爲387 MB。

$ docker pull ivanidris/pydacbk
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章