當前位置: 妍妍網 > 碼農

為啥我敢說Python是數據分析界的扛把子語言?

2024-04-18碼農

首先聲明下這篇文字不是賣課的,也不是無腦吹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([[12], [23], [31], [21], [33], [44], [55]])
    y = np.array([0011011])
    # 劃分訓練集和測試集
    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.54.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.54.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+ 小夥伴一起學習!