首先聲明下這篇文字不是賣課的,也不是無腦吹Python,咱只講事實,認認真真討論下Python是不是數據分析領域最好的語言。
因為我在知乎上看到非常多人在問這個問題,想必大家是關心的。 我的觀點是,目前來看所有程式語言裏,做數據分析Python是最好的選擇,沒有之一。
列舉幾個事實:
1、Kaggle、天池等數據比賽用的最多的語言是Python,其次是R語言。
2、最新4月TIOBE程式語言排名,Python斷層第一,流行度16.41%,第二是C語言,約10.21%。
3、NASA處理黑洞圖片所用的工具是Python,Python在NASA內部被廣泛用於航天數據處理分析。
4、Chatgpt演算法和後端大規模使用Python,其官方介面就有Python api。
Python作為數據分析的熱門語言有它的必然性,我理解有三個方面原因。
一、Python擁有大量數據科學第三方庫
這些第三方庫拿來即用,廣泛用於數學計算、數據處理、數據建模、數據視覺化、機器學習等等,極大的節省了數據分析的軟硬體成本。
pandas:python中的Excel,用於數據處理、分析,非常方便。
numpy:用於陣列計算的庫,大部份機器學習、深度學習都基於numpy。
scipy:用於數學和工程計算的庫,堪比Matlab。
Scikit-Learn:集合了幾乎所有機器學習模型的庫,拿來即用,非常方便。
Matplotlib:用於繪制視覺化圖表的庫,沒有什麽是它畫不了的圖。
其他的就更多了,不一一贅述。
二、Python有Jupyter notebook這樣專門用於數據科學的開發平台
Kaggle、天池就是基於notebook提供數據分析服務,很多公司的數據分析平台也是基於notebook,搭建在私有或公有雲上。
Jupyter是集編程、筆記、數據分析、機器學習、視覺化、教學演示、互動協作等於一體的超級web套用,而且支持python、R、Julia、Scala等超40種語言。
雖然說支持這麽多語言,但Python是Jupyter最好的搭檔,因為Python有IPython。
Jupyter最大的特點是程式碼即寫可即執行,其可被套用於全過程計算:開發、文件編寫、執行程式碼和展示結果。比如我用matplotlib繪制一張曲線圖,只需要輸入指令碼程式碼並執行,便可以在Jupyter上顯示相應圖表。
Jupyter中所有互動計算、編寫說明文件、數學公式、圖片以及其他富媒體形式的輸入和輸出,都是以文件的形式體現的。
這些文件是保存為字尾名為.ipynb的JSON格式檔,不僅便於版本控制,也方便與他人共享。
此外,文件還可以匯出為:HTML、LaTeX、PDF等格式。Jupyter還支持安裝外掛程式,和VsCode類似。外掛程式型別也很豐富,包括了程式碼偵錯、視覺化、文本編輯等等。
既然同樣是編程工具,那Jupyter和Pycharm、VsCode的使用場景有什麽區別呢?
Jupyter主要是用來做數據科學,其包含數據分析、數據視覺化、機器學習、深度學習、機器人等等,任何Python數據科學第三方庫都能在Jupyter上得到很好的套用和支持。
現在幾乎所有的數據比賽平台都以Jupyter作為編輯工具,在上面實作各種數據分析場景。
在產品上,Jupyter不僅有簡潔的Notebook ,還有工作台式的Lab,甚至線上平台化部署的Hub,對個人、團隊、企業都可以完美支持。
三、最重要的原因,Python易學、易用、易讀
這實在太關鍵了,做數據分析不會太去關註程式語言本身的復雜特性,越是簡單越有利於提高效率。
首先,我不需要關註程式碼的細節,比如申明型別、編譯、偵錯等,因為我只是用來分析處理數據,又不要開發大型軟體,執行他個十幾年。
其次能用第三方庫,就不需要自己去開發工具,能極大地提升數據分析效率。
只要結果完美,其他的並不重要。
Python就是有這樣的優勢,程式碼簡潔,有上千個數據科學相關第三方庫供你使用。
所以相比其他語言,python最大程度上降低了使用門檻。
比如說構建一個簡單的分類模型。
這是Python程式碼:
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn import metrics
# 範例數據
X = np.array([[1, 2], [2, 3], [3, 1], [2, 1], [3, 3], [4, 4], [5, 5]])
y = np.array([0, 0, 1, 1, 0, 1, 1])
# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 建立邏輯回歸模型
model = LogisticRegression()
# 訓練模型
model.fit(X_train, y_train)
# 預測測試集
y_pred = model.predict(X_test)
# 評估模型
print("Accuracy:", metrics.accuracy_score(y_test, y_pred))
這是Java程式碼:
import weka. classifiers. classifier;
import weka. classifiers.functions.SMO;
import weka.core.Instances;
import weka.core.converters.ConverterUtils.DataSource;
public class classificationExample{
publicstaticvoidmain(String[] args)throws Exception {
// 載入數據
DataSource source = new DataSource("data.csv");
Instances data = source.getDataSet();
// 設定類別索引(通常是最後一列)
if (data. classIndex() == -1)
data.set classIndex(data.numAttributes() - 1);
// 構建分類器(這裏使用SMO,一種支持向量機演算法)
classifier cls = new SMO();
// 訓練模型
cls.build classifier(data);
// 測試模型
double[] testInstance = {4.5, 4.5}; // 一個新的測試例項
Instances test = new Instances(data, 1); // 建立一個只包含一個例項的數據集
test.add(testInstance);
// 對測試例項進行分類
double predicted class = cls. classifyInstance(test.firstInstance());
String className = data. classAttribute().value((int) predicted class);
// 輸出預測結果
System.out.println("Predicted class for instance [4.5, 4.5]: " + className);
}
}
這是C++程式碼:
import weka. classifiers. classifier;
import weka. classifiers.functions.SMO;
import weka.core.Instances;
import weka.core.converters.ConverterUtils.DataSource;
public class classificationExample {
publicstaticvoidmain(String[] args) throws Exception {
// 載入數據
DataSource source = new DataSource("data.csv");
Instances data = source.getDataSet();
// 設定類別索引(通常是最後一列)
if (data. classIndex() == -1)
data.set classIndex(data.numAttributes() - 1);
// 構建分類器(這裏使用SMO,一種支持向量機演算法)
classifier cls = new SMO();
// 訓練模型
cls.build classifier(data);
// 測試模型
double[] testInstance = {4.5, 4.5}; // 一個新的測試例項
Instances test = new Instances(data, 1); // 建立一個只包含一個例項的數據集
test.add(testInstance);
// 對測試例項進行分類
double predicted class = cls. classifyInstance(test.firstInstance());
String className = data. classAttribute().value((int) predicted class);
// 輸出預測結果
System.out.println("Predicted class for instance [4.5, 4.5]: " + className);
}
}
對比下,很明顯地能看出來,Python程式碼會更加簡潔,少了很多語法上的規則限制,其第三方庫的使用也更加容易。
綜上來說,從事數據分析想要選一個程式語言,Python是最好的選擇,會讓你少走一些彎路。
最後,分享幾本不錯的Python數據分析入門資料,大家可以在公眾號後台回復: data ,即可獲得
加入知識星球 【我們談論數據科學】
600+ 小夥伴一起學習!