一文帶你入門圖論和網絡分析(附Python代碼)

2021-02-24 數據派THU

本文約6300字,建議閱讀20+分鐘。

本文從圖的概念以及歷史講起,並介紹了一些必備的術語,隨後引入了networkx庫,並以一個航班信息數據集為例,帶領讀者完成了一些基本分析。

簡介

俗話說一圖勝千言。但是「圖」(Graph)說的遠不止於此。以圖形式呈現的數據可視化能幫助我們獲得見解,並基於它們做出更好的數據驅動型決策。

 

但要真正理解圖是什麼以及為什麼使用它們,我們需要理解一個稱為圖論(Graph Theory)的概念。理解它可以使我們成為更好的程式設計師。

如果你曾經嘗試理解這個概念,應該會遇到大量的公式和乾澀的理論。這便是為什麼我們要寫這篇博文的原因。我們先解釋概念,然後提供實例,以便你可以跟隨並弄明白它的執行方式。這是一篇詳細的文章,因為我們認為提供概念的正確解釋要比簡潔的定義更受歡迎。

 

在本文中,我們將了解圖是什麼,它們的應用以及一些歷史背景。我們還將介紹一些圖論概念,然後使用進行案例研究以鞏固理解。

 

準備好了嗎?我們開始吧。

目錄

圖及其應用

圖論的歷史、為何使用圖論

必備術語

圖論概念

熟悉Python中的圖

數據分析案例

 

圖及其應用

讓我們看一個簡單的圖(Graph)來理解這個概念。如下圖所示:

假設此圖代表某個城市的熱門景點位置,以及遊客所遵循的路徑。我們把V視為景點位置,將E視為從一個地方到另一個地方的路徑。

V = {v1, v2, v3, v4, v5}

 

E = {(v1,v2), (v2,v5), (v5, v5), (v4,v5), (v4,v4)}

邊(u,v)與邊(v,u)相同 - 它們是無序對。

 

具體而言,圖(Graph)是用於研究對象和實體之間成對關係的數學結構。它是離散數學的一個分支,在計算機科學,化學,語言學,運籌學,社會學等領域有多種應用。

 

數據科學和分析領域也使用圖來模擬各種結構和問題。作為一名數據科學家,你應該能以有效的方式解決問題,如果數據是以特定方式排列的,則圖可以提供一種解決問題的機制。

 

形式上看,

圖是一對集合。G = (V, E),V是頂點集合,E是邊集合。 E由V中的元素對組成(無序對)

有向圖(DiGraph)也是一對集合。D = (V, A),V是頂點集合,A是弧集合。A由V中的元素對組成(有序對)

 

在有向圖的情況下,(u,v)和(v,u)之間存在區別。通常在這種情況下,邊被稱為弧,以指示方向的概念。

 

R和Python中都有使用圖論概念分析數據的包。在本文中,我們將簡要介紹一些概念並使用Networkx Python包分析一個數據集。

from IPython.display import Image

Image('images/network.PNG')

 

Image('images/usecase.PNG')

從上面的例子可以清楚地看出,圖在數據分析中的應用是廣泛的。我們來看幾個用例場景:

 

圖可用於找出社交網絡中最有影響力的人。廣告商和營銷人員可以通過社交網絡中最有影響力的人員傳達他們的信息,從而估算最大的營銷價格。

 

圖可用於查找有助於減少欺詐交易的異常模式。有一些例子可以通過分析銀行網絡的資金流動來偵測恐怖主義活動。

 

圖有助於確定送貨卡車的最佳路線以及識別倉庫和交付中心的位置。

 

製藥公司可以使用圖論優化銷售人員的路線。這有助於降低成本並縮短銷售人員的行程時間。

 

電信公司通常使用圖(Voronoi圖)來了解基站的數量和位置,以確保最大的覆蓋範圍。

圖的歷史以及為何使用圖


圖的歷史

 

如果想更多地了解關於圖的想法是如何形成的,請繼續閱讀!

該理論的起源可以追溯到柯尼斯堡七橋問題(大約1730年代)。它提問是否可以在以下限制條件下遍歷柯尼斯堡市的七座橋梁

 

 

小故事:歐拉於1736年研究並解決了此問題,他把問題歸結為如「一筆畫」問題。他的《柯尼斯堡七橋》的論文圓滿解決了這一問題,同時開創了數學一個新分支---圖論。

 

這等價於詢問4個節點和7個邊的多圖(multigraph)是否具有歐拉環(歐拉環是在同一個頂點上開始和結束的歐拉路徑。而歐拉路徑是指在圖中僅僅遍歷每個邊一次的路徑。更多術語後文中給出)。這個問題引出了歐拉圖的概念。柯尼斯堡七橋問題的答案是否定的,它最早由歐拉解答。

 

譯者註:在圖論中,多圖(相對於簡單圖)是指圖中允許出現多邊(也叫平行邊),即兩個頂點可以有多條邊連接,如下圖中的紅色就是多邊,所以該圖屬於多圖。

1840年,A.F Mobius提出了完全圖(complete graph)和二分圖(bipartite graph)的概念,Kuratowski通過趣味謎題證明它們是平面的。樹的概念(沒有環的連通圖)由Gustav Kirchhoff於1845年提出,他在計算電網或電路中的電流時使用了圖論思想。

 

1852年,Thomas Gutherie發現了著名的四色問題。然後在1856年,Thomas P. Kirkman和William R.Hamilton研究了多面體的循環,並通過研究僅訪問某些地點一次的旅行,發明了稱為哈密頓圖的概念。1913年,H.Dudeney提到了一個難題。儘管發明了四色問題,但Kenneth Appel和Wolfgang Haken在一個世紀後才解決了這個問題。這一次被認為是圖論真正的誕生。

 

Caley研究了微分學的特定分析形式來研究樹。這在理論化學中有許多含義。這也導致了枚舉圖論(enumerative graph theory)的發明。不管怎麼說,「圖」這個術語是由Sylvester在1878年引入的,他在「量子不變量」與代數和分子圖的協變量之間進行了類比。

1941年,Ramsey致力於著色問題,這產生了另一個圖論的分支 - 極值圖論(Extremal graph theory)。1969年,Heinrich使用計算機解決了四色問題。對漸近圖連通性的研究產生了隨機圖論。圖論和拓撲學的歷史也密切相關,它們有許多共同的概念和定理。

Image('images/Konigsberg.PNG', width = 800)

為何使用圖?

 

以下幾點可以激勵你在日常數據科學問題中使用圖:

 

圖提供了一種處理關係和交互等抽象概念的更好的方法。它還提供了直觀的視覺方式來思考這些概念。圖很自然地成了分析社會關係的基礎。

圖資料庫已成為一種常用的計算工具,並且是SQL和NoSQL資料庫的替代方案。

圖用於以DAG(定向非循環圖)的形式建模分析工作流。

一些神經網絡框架還使用DAG來模擬不同層中的各種操作。

圖理論用於研究和模擬社交網絡,欺詐模式,功耗模式,社交媒體的病毒性和影響力。社交網絡分析(SNA)可能是圖理論在數據科學中最著名的應用。

它用於聚類算法 - 特別是K-Means。

系統動力學也使用一些圖理論 - 特別是循環。

路徑優化是優化問題的一個子集,它也使用圖的概念。

從計算機科學的角度來看,圖提供了計算效率。某些算法的Big O複雜度對於以圖形式排列的數據更好(與表格數據相比)。

必備術語

在進一步閱讀本文之前,建議你熟悉這些術語。

 

頂點u和v稱為邊(u,v)的末端頂點。

如果兩條邊具有相同的末端頂點,則它們是平行的。

形式為(v,v)的邊是循環。

如果圖沒有平行邊和循環,則圖被稱為簡單圖。

如果圖沒有邊,則稱其為Empty,即E是空的。

如果圖沒有頂點,則稱其為Null,即V和E是空的。

只有1個頂點的圖是一個Trivial graph。

具有共同頂點的邊是相鄰的。具有共同邊的頂點是相鄰的。

頂點v的度,寫作d(v),是指以v作為末端頂點的邊數。按照慣例,我們把一個循環計作兩次,並且平行邊緣分別貢獻一個度。

孤立頂點是度數為1的頂點。d(1)頂點是孤立的。

如果圖的邊集合包含了所有頂點之間的所有可能邊,則圖是完備的。

圖G =(V,E)中的步行(Walk)是指由圖中頂點和邊組成的一個形如ViEiViEi的有限交替序列。

如果初始頂點和最終頂點不同,則Walk是開放的(Open)。如果初始頂點和最終頂點相同,則Walk是關閉的(Closed)。

如果任何邊緣最多遍歷一次,則步行是一條Trail。

如果任何頂點最多遍歷一次,則Trail是一條路徑Path(除了一個封閉的步行)。

封閉路徑(Closed Path)是一條迴路Circuit,類似於電路。


圖論概念

在本節中,我們將介紹一些對數據分析有用的概念(無特定順序)。請注意,另外還有很多概念的深度超出了本文的範圍。我們開始吧。

 

平均路徑長度

 

所有可能節點對應的最短路徑長度的平均值。給出了圖的「緊密度」度量,可用於了解此網絡中某些內容的流動速度。

 

BFS和DFS

 

廣度優先搜索深度優先搜索是用於在圖中搜索節點的兩種不同算法。它們通常用於確定我們是否可以從給定節點到達某個節點。這也稱為圖遍歷

 

BFS的目的是儘可能接近根節點遍歷圖,而DFS算法旨在儘可能遠離根節點。

 

中心性(Centrality)

 

用於分析網絡的最廣泛使用和最重要的概念工具之一。中心性旨在尋找網絡中最重要的節點。可能存在對「重要」的不同理解,因此存在許多中心性度量標準。中心性標準本身就可以分成好多類。有一些標準是以沿著邊的流動為特徵,還有一些標準以步行結構(Walk Structure)為特徵。

 

一些最常用的標準是:

 

度中心性(Degree Centrality) - 第一個也是概念上最簡單的中心性定義。表示連接到某節點的邊數。在有向圖中,我們可以有2個度中心性度量。流入和流出的中心性。

緊密中心性(Closeness Centrality) - 從某節點到所有其他節點的最短路徑的平均長度。

中介中心性(Betweenness Centrality) - 某節點在多少對節點的最短路徑上。

 

這些中心性度量有不同變種,並且可以使用各種算法來實現定義。總而言之,這方面有大量的定義和算法。

 

網絡密度

 

圖的邊數的度量。實際定義將根據圖的類型和所提問問題的上下文而不同。對於完備的無向圖,密度為1,而空圖(empty)為0。在某些情況下(包含循環時),圖密度可能大於1。

 

圖隨機化(Graph Randomization)

 

儘管一些圖度量指標可能很容易計算,但要理解它們的相對重要性並不容易。在這種情況下,我們使用網絡/圖隨機化。我們計算了手頭的圖和隨機生成的另一些類似圖的度量。例如,這些相似圖可以有相同數量的密度和節點。通常我們生成1000個相似的隨機圖並計算每個圖的度量標準,然後與手頭圖的相同度量進行比較,以得出某些基準(benchmark)。

 

在數據科學中,當嘗試對某個圖進行聲明時,如果與某些隨機生成的圖進行對比,則會有所幫助。

熟悉Python中的圖

我們將在Python中使用networkx包。它可以安裝在Anaconda的Root環境中(如果你使用的是Anaconda的Python分發版)。你也可以pip install安裝它。

 

讓我們看一下使用Networkx軟體包可以完成的一些常見事情。包括導入和創建圖以及可視化圖的方法。

圖形創建


import networkx as nx

 

# Creating a Graph

G = nx.Graph() # Right now G is empty

 

# Add a node

G.add_node(1)

G.add_nodes_from([2,3]) # You can also add a list of nodes by passing a list argument

 

# Add edges

G.add_edge(1,2)

 

e = (2,3)

G.add_edge(*e) # * unpacks the tuple

G.add_edges_from([(1,2), (1,3)]) # Just like nodes we can add edges from a list

通過傳遞包含節點和屬性dict的元組,可以在創建節點和邊的時候添加節點和邊的屬性。

 

除了逐個節點或逐個邊地構建圖形之外,還可以通過一些經典的圖操作來生成它們,例如:

subgraph(G, nbunch)      - induced subgraph view of G on nodes in nbunch

union(G1,G2)             - graph union

disjoint_union(G1,G2)    - graph union assuming all nodes are different

cartesian_product(G1,G2) - return Cartesian product graph

compose(G1,G2)           - combine graphs identifying nodes common to both

complement(G)            - graph complement

create_empty_copy(G)     - return an empty copy of the same graph class

convert_to_undirected(G) - return an undirected representation of G

convert_to_directed(G)   - return a directed representation of G

對於不同類型的圖,存在單獨的類。例如,nx.DiGraph類允許創建有向圖。可以使用單個方法直接創建包含路徑的特定圖。有關圖創建方法的完整列表,請參閱完整文檔。連結在本文末尾給出。

Image('images/graphclasses.PNG', width = 400)

訪問邊和節點

 

可以使用G.nodes和G.edges方法訪問節點和邊。可以使用括號/下標法訪問各個節點和邊。

G.nodes()

NodeView((1, 2, 3))

G.edges()

EdgeView([(1, 2), (1, 3), (2, 3)])

G[1] # same as G.adj[1]

AtlasView({2: {}, 3: {}})

G[1][2]

{}

G.edges[1, 2]

{}

 

圖可視化

 

Networkx提供了可視化圖的基本功能,但其主要目標是幫助圖分析而不是圖的可視化。圖可視化很難,我們將使用專門用於此任務的工具。Matplotlib提供了一些便利功能。但是GraphViz可能是最好的工具,因為它提供了一個PyGraphViz的Python接口(連結在文檔的末尾)。

%matplotlib inline

import matplotlib.pyplot as plt

nx.draw(G)

首先必須安裝Graphviz。然後使用該命令pip install pygraphviz --install-option =「<>。在安裝選項中,你必須提供Graphviz 中lib和include文件夾的路徑。

import pygraphviz as pgv

d={'1': {'2': None}, '2': {'1': None, '3': None}, '3': {'1': None}}

A = pgv.AGraph(data=d)

print(A) # This is the 'string' or simple representation of the Graph

 

Output:

 

strict graph "" {

1 -- 2;

2 -- 3;

3 -- 1;

}

PyGraphviz可以很好地控制邊和節點的各個屬性。我們可以使用它獲得非常漂亮的可視化。

 

# Let us create another Graph where we can individually control the colour of each node

B = pgv.AGraph()

# Setting node attributes that are common for all nodes

B.node_attr['style']='filled'

B.node_attr['shape']='circle'

B.node_attr['fixedsize']='true'

B.node_attr['fontcolor']='#FFFFFF'

 

# Creating and setting node attributes that vary for each node (using a for loop)

for i in range(16):

 B.add_edge(0,i)

 n=B.get_node(i)

 n.attr['fillcolor']="#%2x0000"%(i*16)

 n.attr['height']="%s"%(i/16.0+0.5)

 n.attr['width']="%s"%(i/16.0+0.5)

B.draw('star.png',prog="circo") # This creates a .png file in the local directory. Displayed below.

 

Image('images/star.png', width=650) # The Graph visualization we created above.

通常,可視化被認為是與圖分析獨立的任務。分析後的圖將導出為Dotfile。然後單獨顯示該Dotfile以展示我們想表達的內容。

數據分析案例

我們將尋找一個通用數據集(不是專門用於圖的數據集)並進行一些操作(在pandas中),以便它可以以邊列表(edge list)的形式輸入到圖中。邊列表是一個元組列表,其中的元組包含定義每條邊的頂點

 

我們將關注的數據集來自航空業。它有一些關於航線的基本信息。有某段旅程的起始點和目的地。還有一些列表示每段旅程的到達和起飛時間。如你所想,這個數據集非常適合作為圖進行分析。想像一下通過航線(邊)連接的幾個城市(節點)。如果你是航空公司,你可以問如下幾個問題:

 

import pandas as pd

import numpy as np

 

data = pd.read_csv('data/Airlines.csv')

data.shape

(100, 16)

 

data.dtypes

year                int64

month               int64

day                 int64

dep_time          float64

sched_dep_time      int64

dep_delay         float64

arr_time          float64

sched_arr_time      int64

arr_delay         float64

carrier            object

flight              int64

tailnum            object

origin             object

dest               object

air_time          float64

distance            int64

dtype: object

# converting sched_dep_time to 'std' - Scheduled time of departure

data['std'] = data.sched_dep_time.astype(str).str.replace('(\d{2}$)', '') + ':' + data.sched_dep_time.astype(str).str.extract('(\d{2}$)', expand=False) + ':00'

# converting sched_arr_time to 'sta' - Scheduled time of arrival

data['sta'] = data.sched_arr_time.astype(str).str.replace('(\d{2}$)', '') + ':' + data.sched_arr_time.astype(str).str.extract('(\d{2}$)', expand=False) + ':00'

 

# converting dep_time to 'atd' - Actual time of departure

data['atd'] = data.dep_time.fillna(0).astype(np.int64).astype(str).str.replace('(\d{2}$)', '') + ':' + data.dep_time.fillna(0).astype(np.int64).astype(str).str.extract('(\d{2}$)', expand=False) + ':00'

# converting arr_time to 'ata' - Actual time of arrival

data['ata'] = data.arr_time.fillna(0).astype(np.int64).astype(str).str.replace('(\d{2}$)', '') + ':' + data.arr_time.fillna(0).astype(np.int64).astype(str).str.extract('(\d{2}$)', expand=False) + ':00'

現在時間列被轉換成了我們想要的格式。最後,我們可能希望將年,月和日列合併到日期列中。這一步不是絕對必要的。但是,一旦轉換為日期時間(datetime)格式,我們就可以輕鬆獲取年,月,日(和其他)信息。

data['date'] = pd.to_datetime(data[['year', 'month', 'day']])

 

# finally we drop the columns we don't need

data = data.drop(columns = ['year', 'month', 'day'])

現在使用networkx函數導入數據集,該函數直接讀如pandas DataFrame。就像圖創建一樣,多種方法可以將數據從多種格式中輸入到圖中。

import networkx as nx

FG = nx.from_pandas_edgelist(data, source='origin', target='dest', edge_attr=True,)

 

FG.nodes()

輸出:

NodeView(('EWR', 'MEM', 'LGA', 'FLL', 'SEA', 'JFK', 'DEN', 'ORD', 'MIA', 'PBI', 'MCO', 'CMH', 'MSP', 'IAD', 'CLT', 'TPA', 'DCA', 'SJU', 'ATL', 'BHM', 'SRQ', 'MSY', 'DTW', 'LAX', 'JAX', 'RDU', 'MDW', 'DFW', 'IAH', 'SFO', 'STL', 'CVG', 'IND', 'RSW', 'BOS', 'CLE'))

 

FG.edges()

輸出:

EdgeView([('EWR', 'MEM'), ('EWR', 'SEA'), ('EWR', 'MIA'), ('EWR', 'ORD'), ('EWR', 'MSP'), ('EWR', 'TPA'), ('EWR', 'MSY'), ('EWR', 'DFW'), ('EWR', 'IAH'), ('EWR', 'SFO'), ('EWR', 'CVG'), ('EWR', 'IND'), ('EWR', 'RDU'), ('EWR', 'IAD'), ('EWR', 'RSW'), ('EWR', 'BOS'), ('EWR', 'PBI'), ('EWR', 'LAX'), ('EWR', 'MCO'), ('EWR', 'SJU'), ('LGA', 'FLL'), ('LGA', 'ORD'), ('LGA', 'PBI'), ('LGA', 'CMH'), ('LGA', 'IAD'), ('LGA', 'CLT'), ('LGA', 'MIA'), ('LGA', 'DCA'), ('LGA', 'BHM'), ('LGA', 'RDU'), ('LGA', 'ATL'), ('LGA', 'TPA'), ('LGA', 'MDW'), ('LGA', 'DEN'), ('LGA', 'MSP'), ('LGA', 'DTW'), ('LGA', 'STL'), ('LGA', 'MCO'), ('LGA', 'CVG'), ('LGA', 'IAH'), ('FLL', 'JFK'), ('SEA', 'JFK'), ('JFK', 'DEN'), ('JFK', 'MCO'), ('JFK', 'TPA'), ('JFK', 'SJU'), ('JFK', 'ATL'), ('JFK', 'SRQ'), ('JFK', 'DCA'), ('JFK', 'DTW'), ('JFK', 'LAX'), ('JFK', 'JAX'), ('JFK', 'CLT'), ('JFK', 'PBI'), ('JFK', 'CLE'), ('JFK', 'IAD'), ('JFK', 'BOS')])

 

nx.draw_networkx(FG, with_labels=True) # Quick view of the Graph. As expected we see 3 very busy airports

nx.algorithms.degree_centrality(FG) # Notice the 3 airports from which all of our 100 rows of data originates

nx.density(FG) # Average edge density of the Graphs

輸出:

0.09047619047619047

 

nx.average_shortest_path_length(FG) # Average shortest path length for ALL paths in the Graph

輸出:

2.36984126984127

 

nx.average_degree_connectivity(FG) # For a node of degree k - What is the average of its neighbours' degree?

輸出:

{1: 19.307692307692307, 2: 19.0625, 3: 19.0, 17: 2.0588235294117645, 20: 1.95}

從可視化中(上面的方式)可以明顯看出 - 從一些機場到其他機場有多條路徑。 假如想要計算2個機場之間的最短路線。我們可以想到幾種方法:

 

我們可以通過距離或飛行時間來給路徑賦予權重,並用算法計算最短路徑。請注意,這是一個近似的解決方案 - 實際問題是計算當你到達中轉機場時的航班可用性加候機的等待時間,這才是一種更完整的方法,也是人們計劃旅行的方式。出於本文的目的,我們將假設你到達機場時可以隨時使用航班並使用飛行時間作為權重,從而計算最短路徑。

 

讓我們以JAX和DFW機場為例:

# Let us find all the paths available

for path in nx.all_simple_paths(FG, source='JAX', target='DFW'):

 print(path)

# Let us find the dijkstra path from JAX to DFW.

# You can read more in-depth on how dijkstra works from this resource - https://courses.csail.mit.edu/6.006/fall11/lectures/lecture16.pdf

dijpath = nx.dijkstra_path(FG, source='JAX', target='DFW')

dijpath

輸出:

['JAX', 'JFK', 'SEA', 'EWR', 'DFW']

 

# Let us try to find the dijkstra path weighted by airtime (approximate case)

shortpath = nx.dijkstra_path(FG, source='JAX', target='DFW', weight='air_time')

shortpath

輸出:

['JAX', 'JFK', 'BOS', 'EWR', 'DFW']

結語

本文充其量只是對圖論和網絡分析這一非常有趣的領域進行了粗淺的介紹。對理論和Python軟體包的了解將為任何數據科學家的工具庫增加一個有價值的工具。 對於上面使用的數據集,可以提出一系列其他問題,例如:

 

在給定成本,飛行時間和可用性的情況下,找到兩個機場之間的最短路徑?

作為一家航空公司,你們擁有一隊飛機。你了解航班的需求。假設你有權再運營2架飛機(或者為你的機隊添加2架飛機),把這兩架飛機投入到哪條航線可以最大限度地提高盈利能力?

你可以重新安排航班和時刻表以優化某個參數嗎?(如時效性或盈利能力等)

 

如果你解決了這些問題,請在下面的評論中告訴我們!

 

網絡分析將有助於解決一些常見的數據科學問題,並在更大規模和抽象的情況下對其進行可視化。如果想了解更多有關其他內容的信息,請發表評論。

 

參考文獻

1. History of Graph Theory || S.G. Shrinivas et. al

2. Big O Notation cheatsheet

3. Networkx reference documentation

4. Graphviz download

5. Pygraphvix

6. Star visualization

7. Dijkstra Algorithm


原文標題:An Introduction to Graph Theory and Network Analysis (with Python codes)

連結:  

https://www.analyticsvidhya.com/blog/2018/04/introduction-to-graph-theory-network-analysis-python-codes/

和中華,留德軟體工程碩士。由於對機器學習感興趣,碩士論文選擇了利用遺傳算法思想改進傳統kmeans。目前在杭州進行大數據相關實踐。加入數據派THU希望為IT同行們儘自己一份綿薄之力,也希望結交許多志趣相投的小夥伴。

工作內容:需要一顆細緻的心,將選取好的外文文章翻譯成流暢的中文。如果你是數據科學/統計學/計算機類的留學生,或在海外從事相關工作,或對自己外語水平有信心的朋友歡迎加入翻譯小組。

你能得到:定期的翻譯培訓提高志願者的翻譯水平,提高對於數據科學前沿的認知,海外的朋友可以和國內技術應用發展保持聯繫,THU數據派產學研的背景為志願者帶來好的發展機遇。

其他福利:來自於名企的數據科學工作者,北大清華以及海外等名校學生他們都將成為你在翻譯小組的夥伴。

點擊文末「閱讀原文」加入數據派團隊~

轉載須知

如需轉載,請在開篇顯著位置註明作者和出處(轉自:數據派ID:datapi),並在文章結尾放置數據派醒目二維碼。有原創標識文章,請發送【文章名稱-待授權公眾號名稱及ID】至聯繫郵箱,申請白名單授權並按要求編輯。

發布後請將連結反饋至聯繫郵箱(見下方)。未經許可的轉載以及改編者,我們將依法追究其法律責任。


點擊「閱讀原文」擁抱組織

相關焦點

  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    python教程大合集,包含python所有就業方向,每套課程均來自市面上主流培訓機構的原版教程,價值都在數百元以上 每套課程均包含:視頻課程+課件+原始碼 重要:建議根據自己工作方向和需求,重點選擇2到3套課程學精,吃透,然後在工作 重要:零基礎小白建議先選擇零基礎全能篇的一套課程學精,然後再根據自 己的需求和規劃選擇學習其他方向課程,學完後一定要多實踐
  • Python趣味打怪:60秒學會一個例子,147段代碼助你從入門到大師
    入門簡單如十進位轉二進位,盡顯Python簡潔之美:In [1]: bin(10)Out[1]: '0b1010'冬天到了,就算沒有點亮手繪技能,也能用簡單幾行代碼繪出漫天雪花:>例子是有趣的例子,教程也是正經教程,學習路徑清晰、系統,先一起來看看完整目錄:學習路徑施工完成:1、Python基礎2、Python字符串和正則化3、Python文件4、Python日期5、Python利器6、Python畫圖7、Python實戰施工中:Python基礎算法
  • 《Python程式設計師面試算法寶典》PDF超清版開源了文末附下載方式
    全面介紹Python程式設計師面試筆試技巧和方法,教你如何以「不變應萬變」。√ 兩萬多行代碼,100多個知識點,全面覆蓋Python程式設計師各類面試題型。√ 15年開發經驗、實戰技巧總結,站在「巨人」的肩膀上,讓學習走捷徑。
  • 深度學習入門教程:手把手帶你用Numpy實現卷積神經網絡(一)
    本教程由深度學習中文社區(Studydl.com)持續發布與更新, 教程中完整代碼已上傳至github上, 可關注我百家號後發送消息"CNN代碼", 獲得地址.前言Numpy是一個非常好用的python科學計算的庫,CNN是現在視覺領域深度學習的基礎之一。
  • 如何開始寫你的第一個python腳本——簡單爬蟲入門!
    好多朋友在入門python的時候都是以爬蟲入手,而網絡爬蟲是近幾年比較流行的概念,特別是在大數據分析熱門起來以後,學習網絡爬蟲的人越來越多,哦對,現在叫數據挖掘了!其實,一般的爬蟲具有2個功能:取數據和存數據!好像說了句廢話。。。
  • 一文總結數據科學家常用的Python庫(下)
    TensorFlow提供簡單的模型構建,強大的機器學習生成,以及強大的實驗工具和庫。TensorFlow提供多個抽象級別供您根據需要進行選擇。它通過使用高級Keras API用於構建和訓練模型,這使得TensorFlow入門和機器學習變得容易。瀏覽此連結以查看安裝過程:https://www.tensorflow.org/install。
  • 想入門機器學習?機器之心為你準備了一份中文資源合集
    機器之心也介紹過許多數學基礎與概念:基礎入門:深度學習矩陣運算的概念和代碼實現想了解概率圖模型?你要先理解圖論的基本定義與形式深度神經網絡中的數學,對你來說會不會太難?Reddit 熱門話題:如何閱讀並理解論文中的數學內容?
  • 《小灰教你零基礎學python》-Python入門語言
    一、什麼是程序?Python是一種清晰而強大的面向對象程式語言,不過還沒入門的小白不要想多了哈,不是你的對象(女朋友?)所以可以與Perl、Ruby、和Java等語言相媲美。Python目前是分成2個大版本,python2 和python3,python是完全免費的,所以不用擔心版權問題,因為python2已經廢棄,所以咱們這套課程完全基於python3。
  • python入門第四課:列表的排序、元素遍歷
    本教程使用的課本是《Python編程:從入門到實踐》,作者:[美] Eric Matthes本節介紹列表的操作,包括列表的排序、元素遍歷等操作。一、列表的排序有時候我們需要按升序或降序排列列表的元素,可以用sort()方法,sort方法默認是升序,如果加個參數,變成sort(reverse=True)就會按降序排列,見下面的代碼:Mylists = [2,58,64,21,33,5,8,9,4,15,23,45,60,88
  • 【算法系列】凸優化的應用——Python求解優化問題(附代碼)
    37:02 來源: 統計學家 舉報   優化問題一般可分為兩大類:無約束優化問題和約束優化問題
  • 我們能用Python做什麼?學Python有前途嗎?
    毫無疑問,Python已經成為未來的語言,代碼簡潔、語法清晰,對於非開發人員來說,尤其是對於網絡、安全、運維人員來說,它也是最佳編程入門語言。數據科學、機器學習等行業相對一般人來說,能夠接觸到的機會還是比較小。相反,數據分析卻是各行各業都會使用的,接觸的機會也比較多。有些工作的效率低,並不是你的錯,而是「工作的錯」。
  • 資料| Practical Python and OpenCV 一周時間帶你入門CV
    資料 | Practical Python and OpenCV 一周時間帶你入門CV
  • 計算機網絡安全之python入門基礎
    python介紹 (A)python安裝 (B)一起動手做一個小腳本(C)專注網絡安全A:Python 是一個高層次的結合了解釋性、編譯性、互動性和面向對象的腳本語言。
  • Python入門基礎之socket多線程編程,TCP伺服器和客戶端通信
    在上一篇文章中,我介紹了一下python3 socket編程的基礎,包括TCP、UDP客戶端和伺服器的建立過程(連結在最下方)。不過那個只是單線程的,伺服器一次只能和一個客戶端會話,多個客戶端的話只能等待。
  • 懂Excel輕鬆入門Python數據分析包pandas(二十七):IF函數代替者
    此系列文章收錄在:數據大宇宙 > 數據處理 > E-pd轉發本文並私信我"python",即可獲得Python資料以及更多系列文章(持續更新的)經常聽別人說 Python 在數據領域有多厲害,結果學了很長時間,連數據處理都麻煩得要死。
  • NLP入門+實戰必讀:一文教會你最常見的10種自然語言處理技術
    從自動翻譯、文本分類到情緒分析,自然語言處理成為所有數據科學家的必備技能之一。在這篇文章中,你將學習到最常見的10個NLP任務,以及相關資源和代碼。為什麼要寫這篇文章?博文1:本文重點對電影推文進行情感分析(https://www.analyticsvidhya.com/blog/2016/02/step-step-guide-building-sentiment-analysis-model-graphlab/)博文2:本文重點對印度金奈洪水期間的推文進行情感分析。
  • Python趣味打怪:147段簡單代碼完成從入門到大師
    入門簡單如十進位轉二進位,盡顯Python簡潔之美:In [1]: bin(10)Out[1]: '0b1010'冬天到了,就算沒有點亮手繪技能,也能用簡單幾行代碼繪出漫天雪花:例子是有趣的例子,教程也是正經教程,學習路徑清晰、系統,先一起來看看完整目錄:
  • 中科大統計學python_python 中科大 - CSDN
    ,都能讓你輕易入門。學完這門課,你將能夠:理解驅動深度學習的主要技術趨勢;能夠搭建、訓練並且運用全連接的深層神經網絡;了解如何實現高效的(向量化)的神經網絡;理解神經網絡架構中的關鍵參數。此次2019年新課,有很多更新,除了增加一些新內容外,最大的一點大概是代碼由Tensorflow遷移到PyTorch。這門課程的主要目標是希望學生能學到現代深度學習相關知識,特別是和NLP相關的一些知識點;能從宏觀上了解人類語言以及理解和產生人類語言的難度;能理解和用代碼(PyTorch)實習NLP中的一些主要問題和人物,例如詞義理解、依存句法分析、機器翻譯、問答系統等。
  • 機器學習算法一覽(附python和R代碼)
    原標題:機器學習算法一覽(附python和R代碼) 比如,如果你想了解一個不認識的人,你可能就會從這個人的好朋友和圈子中了解他的信息。 還記得你是怎樣從墨水漬中辨認形狀的麼?K均值算法的過程類似,你也要通過觀察集群形狀和分布來判斷集群數量!
  • gRPC Python 入門到生產環境
    所有的代碼在 https://github.com/xsren/learning_record/tree/master/grpc,歡迎star。一、先了解幾個概念RPCRPC(Remote Procedure Call)—遠程過程調用,它是一種通過網絡從遠程電腦程式上請求服務,而不需要了解底層網絡技術的協議。