【強推】優雅高效地數據挖掘——基於Python的sklearn_pandas庫

2021-02-20 數據挖掘機養成記
【!!原創,轉載請『保留此聲明』,並註明來自公眾號『數據挖掘機養成記』及作者『穆文』】目錄

前言

1. 關於DataFrameMapper

2. 用DataFrameMapper做特徵工程

2.2. 單列變換

2.3. 多列變換

2.3.1. 多列各自用同樣的變換

2.3.2. 多列整體變換

2.4. 對付稀疏變量

2.5. 保留指定列

2.6. 自定義列變換

2.7. 小小的總結

3. 實戰

3.1. 數據探查

3.2. 特徵工程

3.2. 交叉驗證

3.3. 預測

4. 思考

5. 參考資料

打賞

Bonus

前言

在數據挖掘流程中,特徵工程是極其重要的環節,我們經常要結合實際數據,對某些類型的數據做特定變換,甚至多次變換,除了一些常見的基本變換(參考我之前寫的『數據挖掘比賽通用框架』)外,還有很多非主流的奇技淫巧。所以,儘管有sklearn.pipeline這樣的流水線模式,但依然滿足不了一顆愛折騰數據的心。好在,我找到了一個小眾但好用的庫——sklearn_pandas,能相對簡潔地進行特徵工程,使其變得優雅而高效。

目前這個項目還在維護,大家有什麼想法可以到 sklearn_pandas 的 github 主頁提問題,以及獲取最新的版本。

本文的pdf版本和數據集可通過關注『數據挖掘機養成記』公眾號並回復我還要獲取,pdf版本排版比公眾號給力

1. 關於DataFrameMapper

sklearn_pandas 起初是為了解決這樣一個問題:在 sklearn 的舊版本中,很多常見模塊(特徵變換器、分類器等)對 pandas 的DataFrame類型不支持,必須先用DataFrame自帶的 .values、.as_matrix之類的方法,將DataFrame類型轉換成 numpy 的ndarray類型,再輸入到 sklearn 的模塊中,這個過程略麻煩。因此 sklearn_pandas 提供了一個方便的轉換接口,省去自己轉換數據的過程。

但當我花了幾天時間探索了 sklearn_pandas 的庫及其跟 pandas、sklearn 相應模塊的聯繫後,我發現 sklearn 0.16.0 向後的版本對 DataFrame的兼容性越來越好,經我實際測試,現在最新的 0.17.1 版本中, model、preprocessing等模塊的大部分函數已完全支持 DataFrame 類型的輸入,所以我認為:

sklearn_pandas 的重點不再是數據類型轉換,而是通過其自創的DataFrameMapper 類,更簡潔地、把 sklearn 的 transformer靈活地運用在 DataFrame 當中,甚至可以發揮你的聰明才智,將幾乎大部分特徵變換在幾行代碼內完成,而且一目了然

sklearn_pandas 官方文檔提供的例子比較少,我看了下它的源碼,有以下重要發現

DataFrameMapper 繼承自 sklearn 的 BaseEstimator 和 TransformerMixin ,所以 DataFrameMapper 可以看做 sklearn 的 TransformerMixin 類,跟 sklearn 中的其他 Transformer 一樣,比如可以作為 Pipeline 的輸入參數

DataFrameMapper 內部機制是先將指定的 DataFrame 的列轉換成 ndarray 類型,再輸入到 sklearn 的相應 transformer中

DataFrameMapper 接受的變換類型是 sklearn 的 transformer 類,因而除了 sklearn 中常見的變換 (標準化、正規化、二值化等等)還可以用 sklearn 的 FunctionTransformer 來進行自定義操作

本文先介紹下如何用DataFrameMapper類型進行特徵工程,再將 skleanr_pandas、sklearn、pandas 這三個庫結合,應用到一個具體的數據挖掘案例中。

2. 用DataFrameMapper做特徵工程

[注意]在正式進入本節前,建議先閱讀本人之前寫的『[scikit-learn]特徵二值化編碼函數的一些坑』,了解 sklearn 和 pandas 常見的二值化編碼函數的特性和一些注意點。

若輸入數據的一行是一個樣本,一列是一個特徵,那簡單的理解,『特徵工程』就是列變換。本節將講解如何用DataFrameMapper結合 sklearn 的Transformer類,來進行列變換

首先import本文將會用到的所有類(默認已裝好 scikit-learn, pandas, sklearn_pandas 等庫)

import random

import sklearn

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

# frameworks for ML

from sklearn_pandas import DataFrameMapper

from sklearn.pipeline import make_pipeline

from sklearn.cross_validation import cross_val_score

from sklearn.grid_search import GridSearchCV

# transformers for category variables

from sklearn.preprocessing import LabelBinarizer

from sklearn.preprocessing import MultiLabelBinarizer

from sklearn.preprocessing import LabelEncoder

from sklearn.preprocessing import OneHotEncoder

# transformers for numerical variables

from sklearn.preprocessing import MinMaxScaler

from sklearn.preprocessing import StandardScaler

from sklearn.preprocessing import Normalizer

# transformers for combined variables

from sklearn.decomposition import PCA

from sklearn.preprocessing import PolynomialFeatures

# user-defined transformers

from sklearn.preprocessing import FunctionTransformer

# classification models

from sklearn.ensemble import RandomForestClassifier

from sklearn.linear_model import LogisticRegression

# evaluation

from sklearn.metrics import scorer 


我們以如下的數據為例

testdata = pd.DataFrame({'pet':      ['cat', 'dog', 'dog', 'fish', 'cat', 'dog', 'cat', 'fish'],                         'age': [4., 6, 3, 3, 2, 3, 5, 4],                         'salary':   [90, 24, 44, 27, 32, 59, 36, 27]})

2.2. 單列變換

『單列』可以是 1-D array,也可以是 2-D array,為了迎合不同的 transformer,但最終輸出都是 2-D array,具體我們看以下例子

mapper = DataFrameMapper([        ('pet', LabelBinarizer()),        ('age', MinMaxScaler()),        (['age'], OneHotEncoder())    ])mapper.fit_transform(testdata)

我們分別對這三列做了二值化編碼、最大最小值歸一化等,但要注意,OneHotEncoder接受的是 2-D array的輸入,其他是 1-D array,具體請參考我之前寫的『[scikit-learn]特徵二值化編碼函數的一些坑』。上面代碼的運行結果如下

array([[ 1.  ,  0.  ,  0.  ,  0.5 ,  0.  ,  0.  ,  1.  ,  0.  ,  0.  ],       [ 0.  ,  1.  ,  0.  ,  1.  ,  0.  ,  0.  ,  0.  ,  0.  ,  1.  ],       [ 0.  ,  1.  ,  0.  ,  0.25,  0.  ,  1.  ,  0.  ,  0.  ,  0.  ],       [ 0.  ,  0.  ,  1.  ,  0.25,  0.  ,  1.  ,  0.  ,  0.  ,  0.  ],       [ 1.  ,  0.  ,  0.  ,  0.  ,  1.  ,  0.  ,  0.  ,  0.  ,  0.  ],       [ 0.  ,  1.  ,  0.  ,  0.25,  0.  ,  1.  ,  0.  ,  0.  ,  0.  ],       [ 1.  ,  0.  ,  0.  ,  0.75,  0.  ,  0.  ,  0.  ,  1.  ,  0.  ],       [ 0.  ,  0.  ,  1.  ,  0.5 ,  0.  ,  0.  ,  1.  ,  0.  ,  0.  ]])

分別對應三種變換,前三列和後五列是pet和age的二值化編碼,第四列是age的最大最小值歸一化。

同樣,我們也可以將這些變換『級聯』起來(類似 sklearn 裡的pipeline):

mapper = DataFrameMapper([        (['age'],[ MinMaxScaler(), StandardScaler()]),    ])mapper.fit_transform(testdata)

將age列先最大最小值歸一化,再標準化,輸出結果:
   array([[ 0.20851441],
          [ 1.87662973],
          [-0.62554324],
          [-0.62554324],
          [-1.4596009 ],
          [-0.62554324],
          [ 1.04257207],
          [ 0.20851441]])

2.3. 多列變換

除了上面的單列變換,DataFrameMapper也能處理多列

2.3.1. 多列各自用同樣的變換

有時候我們要對很多列做同樣操作,比如二值化編碼、標準化歸一化等,也可以藉助於DataFrameMapper,使得執行更高效、代碼更簡潔。

mapper = DataFrameMapper([        (['salary','age'], MinMaxScaler())    ])mapper.fit_transform(testdata)

這裡同時對age和salary進行歸一化,結果如下

array([[ 1.        ,  0.5       ],       [ 0.        ,  1.        ],       [ 0.3030303 ,  0.25      ],       [ 0.04545455,  0.25      ],       [ 0.12121212,  0.        ],       [ 0.53030303,  0.25      ],       [ 0.18181818,  0.75      ],       [ 0.04545455,  0.5       ]])

同樣,這些變換也可以級聯

mapper = DataFrameMapper([        (['salary','age'], [MinMaxScaler(),StandardScaler()])    ])mapper.fit_transform(testdata)array([[ 2.27500192,  0.20851441],       [-0.87775665,  1.87662973],       [ 0.07762474, -0.62554324],       [-0.73444944, -0.62554324],       [-0.49560409, -1.4596009 ],       [ 0.79416078, -0.62554324],       [-0.30452782,  1.04257207],       [-0.73444944,  0.20851441]])

2.3.2. 多列整體變換

多列變換時,除了分別對每列變換,我們有時還需要對某些列進行整體變換,比如 降維(PCA, LDA) 和 特徵交叉等,也可以很便捷地藉助DataFrameMapper實現

mapper = DataFrameMapper([        (['salary','age'], [MinMaxScaler(), PCA(2)]),        (['salary','age'],[MinMaxScaler(), PolynomialFeatures(2)])          ])mapper.fit_transform(testdata)array([[-0.57202956, -0.4442768 ,  1.        ,  1.        ,  0.5       ,         1.        ,  0.5       ,  0.25      ],       [ 0.53920967, -0.32120213,  1.        ,  0.        ,  1.        ,         0.        ,  0.        ,  1.        ],       [-0.12248009,  0.14408706,  1.        ,  0.3030303 ,  0.25      ,         0.09182736,  0.07575758,  0.0625    ],       [ 0.09382212,  0.28393922,  1.        ,  0.04545455,  0.25      ,         0.00206612,  0.01136364,  0.0625    ],       [-0.10553503,  0.45274661,  1.        ,  0.12121212,  0.        ,         0.01469238,  0.        ,  0.        ],       [-0.31333498,  0.0206881 ,  1.        ,  0.53030303,  0.25      ,         0.2812213 ,  0.13257576,  0.0625    ],       [ 0.2507869 , -0.20998092,  1.        ,  0.18181818,  0.75      ,         0.03305785,  0.13636364,  0.5625    ],       [ 0.22956098,  0.07399884,  1.        ,  0.04545455,  0.5       ,         0.00206612,  0.02272727,  0.25      ]])

以上我們對age和salary列分別進行了 PCA 和生成二次項特徵

2.4. 對付稀疏變量

(寫完此文後發現該功能並不是很work)

sklearn 中OneHotEncoder類和某些處理文本變量的類(比如CountVectorizer)的默認輸出是 sparse類型,而其他很多函數輸出是普通的 ndarray, 這就導致數據拼接時可能出錯。為了統一輸出,DataFrameMapper提供sparse參數來設定輸出稀疏與否,默認是False。

2.5. 保留指定列

(穩定版 1.1.0 中沒有此功能,development 版本中有 )

從上面的實驗中我們可以看到,對於我們指定的列,DataFrameMapper將忠誠地執行變換,對於未指定的列,則被拋棄。

而真實場景中,對於未指定的列,我們可能也需要做相應處理,所以DataFrameMapper提供default參數用於處理這類列:
False: 全部丟棄(默認)
None: 原封不動地保留
other transformer: 將 transformer 作用到所有剩餘列上

2.6. 自定義列變換

不難發現,上面我們利用DataFrameMapper所做的列變換,大多是調用sklearn中現有的模塊(OneHotEncoder,MinMaxEncoder, PCA 等),那如果遇到一些需要自己定義的變換,該怎麼做呢?比如常見的對長尾特徵做log(x+1)之類的變換?

對 sklearn 熟悉的同學開動一下腦筋,答案馬上就有了——那就是FunctionTransformer,該函數的具體參數細節可參考 sklearn 的官方文檔,這裡簡單給個例子

mapper = DataFrameMapper([        (['salary','age'], FunctionTransformer(np.log1p))    ])mapper.fit_transform(testdata)Out[32]:array([[ 4.51085951,  1.60943791],       [ 3.21887582,  1.94591015],       [ 3.80666249,  1.38629436],       [ 3.33220451,  1.38629436],       [ 3.49650756,  1.09861229],       [ 4.09434456,  1.38629436],       [ 3.61091791,  1.79175947],       [ 3.33220451,  1.60943791]])

以上我們將 numpy 中的函數log1p(作用等同於log(x+1))通過FunctionTransformer包裹成一個 sklearn 的transformer類,就能直接作用在不同列上啦。

動手能力強的同學還可以自己定義函數,提示一下,用 numpy 的ufunc,這裡就不贅述了,留給大家探索吧。

2.7. 小小的總結

基於以上內容,以及我對 sklearn、pandas 相關函數的了解,我總結了以下對比表格:

DataFrameMappersklearn 、pandas對列的變換比較靈活,可篩選出一個或多個列,並用一個或多個 sklearn 的 transformer 作用,組合起來極其強大;同時通過繼承機制,它本身也可以看做是 sklearn 的 transformer 類,輸入 sklearn 的相關類(如Pipeline, FeatureUnion)pandas.get_dummies只能簡單地對一列或多列進行二值化變換,去掉某些列時得用 drop;sklearn.pipeline裡的featureUnion只能對整個 DataFrame 做不同變換並簡單拼接返回的是ndarray類型,每列feature沒有名字(不過,可以通過自己添加 column 的名字生成新的 DataFrame)pandas.get_dummies可以給新生成的變量取名;對於dict類型的樣本,sklearn的DictVectorizer有get_feature_name方法獲取變換後的變量名

至此,DataFrameMapper 的精髓已悉數傳授,想必大家已摩拳擦掌躍躍欲試了吧。OK,接下來進入實戰!

鑑於不少網站私自爬取我的原創文章,我決定在文中插入二維碼以維護來源,希望不會打擾到各位閱讀


3. 實戰

在進入實戰前,先結合本人前作——『新手數據挖掘的幾個常見誤區』,簡單梳理一下數據挖掘的流程:

數據集被分成訓練集、驗證集、測試集,其中訓練集驗證集進行交叉驗證,用來確定最佳超參數。在最優參數下,用整個訓練集+驗證集上進行模型訓練,最終在測試集看預測結果

我們這裡結合一個實際的業務數據集(獲取方式:關注公眾號『數據挖掘機養成記』回復我還要即可),來進行流程講解。首先加載數據集

df = pd.read_csv("toy_data_sample.csv", dtype = {'Month': object,'Day':object, 'Saler':object}) df.head()

數據集欄位如下

這是一個常見的時間序列數據集,所以我們按照時間上的不同,將其劃分為訓練集(1~5月)和測試集(6月)

Train = df[df.Month<'06'][df.columns.drop('Month')] Test = df.ix[df.index.difference(Train.index), df.columns.drop(['Month'])]Trainy = Train.ix[:, -1]; Testy = Test.ix[:, -1]

3.1. 數據探查3.1.1. 缺失值處理

常見的缺失值處理手段有

我們先簡單統計一下每個欄位的空值率

Train.count().apply(lambda x: float(Train.shape[0]-x)/Train.shape[0]) Out[5]:Day          0.000000

Cost         0.000000

Continent    0.000000

Country      0.000000

TreeID       0.000000

Industry     0.000000

Saler        0.329412

Label        0.000000

dtype: float64

這組數據比較理想,只有Saler欄位是缺失的,所以我們只需要看下Saler和目標變量之間的關係

tmp = pd.DataFrame({'null': Train.Label[Train.Saler.isnull()].value_counts(),                    'not_null': Train.Label[Train.Saler.notnull()].value_counts()})tmp = tmp.apply(lambda x: x/sum(x))tmp.T.plot.bar(stacked = True)

結果如下


以上結果表明空值對預測結果似乎有些影響,所以我們暫且將空值看做一類新的類別:

Train['Saler'] = Train.Saler.apply(lambda x: "NaN" if pd.isnull(x) else x)Test['Saler'] = Test.Saler.apply(lambda x: "NaN" if pd.isnull(x) else x)

3.1.2. 長尾特徵

長尾分布也是一種很常見的分布形態,常見於數值類型的變量,最簡單的方法是用log(x+1)處理。在我們的數據集當中,Cost這個欄位便是數值類型,我們看下它的分布:

plt.figure(1)Train.Cost.apply(lambda x: x/10).hist()plt.figure(2)Train.Cost.apply(lambda x: np.log(x+1).round()).hist()


log 變化的效果還是不錯的,變量的分布相對均衡了。

3.2. 特徵工程

通過上面簡單的數據探查,我們基本確定了缺失值和長尾特徵的處理方法,其他類別變量我們可以做簡單的 One-hot 編碼,整個策略如下

欄位變換『Cost』Standardization『Cost』Log -> Binarization『TreeID』Cut-off -> Binarizationother categorial featureBinarization

在確定好特徵工程的策略後,我們便可以上我們的大殺器——DataFrameMapper了,把所有的變換集成到一起

feature_mapper = DataFrameMapper([        (['Cost'], [FunctionTransformer(np.log1p), FunctionTransformer(np.round), LabelBinarizer()]),        (['Cost'],[Normalizer(),StandardScaler()]),        (['Day'],OneHotEncoder()),        (['Day'], FunctionTransformer(lambda x: x%7)),        ('Continent', LabelBinarizer()),        ('Country', LabelBinarizer()),        ('Industry', LabelBinarizer()),        ('Saler', [LabelBinarizer()]),        ('TreeID', [FunctionTransformer(lambda x: string_cut(x,0,2), validate=False), LabelBinarizer()]),        ('TreeID', [FunctionTransformer(lambda x: string_cut(x,2,4), validate=False), LabelBinarizer()]),    ])

3.2. 交叉驗證

特徵工程完畢後,便是交叉驗證。交叉驗證最重要的目的是為了尋找最優的超參數(詳見本人前作『新手數據挖掘的幾個常見誤區』),通常我們會藉助 sklearn 中的KFold ,train_test_split, metric.score等來進行交叉驗證,這裡簡化起見,我們直接用 GridSearchCV,但要注意的是,GridSearchCV對FunctionTransformer類的支持不好,尤其有 lambda 函數時。所以為簡化起見,我們注釋掉上面使用了 lambda 函數的FunctionTransformer類(有興趣的同學可以嘗試拋棄GridSearchCV,手動進行交叉驗證)。

這裡我們選用最常見的LogisticRegression,並調整它的超參數——正則係數C和正則方式penalty(對此不熟悉的同學趕緊補下『邏輯回歸』的基礎知識)。同時如前面所講,我們用pipeline把特徵工程和模型訓練都流程化,輸入到GridSearchCV中:

pipe = make_pipeline(feature_mapper,LogisticRegression())pipe.set_params(logisticregression__C=1,logisticregression__penalty='l1' )grid = GridSearchCV(pipe, cv=3,param_grid={'logisticregression__C':np.arange(0.1,2,0.3),'logisticregression__penalty': ['l1','l2']}, n_jobs = 4, scoring ='accuracy')grid.fit(Train, Trainy)

我們定義了三折交叉驗證(cv = 3),並選用準確率(scoring = 『accuracy』)作為評估指標,運行結果如下:

print grid.best_params_ , grid.best_score_

Out:{'logisticregression__penalty': 'l2', 'logisticregression__C': 0.10000000000000001} 0.752941176471

最佳超參數是取 L2 正則,並且正則係數為 0.1

3.3. 預測

在得到模型的最優超參數後,我們還需要在訓練集+驗證集上進行特徵變換,並在最優超參數下訓練模型,然後將相應特徵變換和模型施加到測試集上,最後評估測試集結果。

而現在,這一系列流程被GridSearchCV大大簡化,只需兩行代碼即可搞定:

predy = grid.predict(Test)scorer.accuracy_score(predy, Testy)

最後結果為0.6166666666666667,即測試集上的分類準確率。

4. 思考

行文至此,洋洋灑灑千言,但依然只是完成了數據挖掘中最基本的流程,所做的特徵變換和選用的模型也都非常簡單,所以還有很大的提升空間。

此處以下留兩個點,可以動手實踐,也歡迎在群裡探討(群二維碼見第6節『Bonus』)

當選用的 model 不是 sklearn 中的模塊時(比如 xgboost),特徵工程還可以用 sklearn_pandas 的 DataFrameMapper, 但 sklearn 中傻瓜模式的 pipeline 就無從作用了,必須自己搭建 cross validation 流程

bad case 也有分析的價值

從單模型到模型的 ensemble

5. 參考資料

sklearn_pandas 官方文檔、源碼及 github 上的 issues

pandas、scikit-learn 官方文檔

寒小陽的博客(http://blog.csdn.net/han_xiaoyang/article/details/49797143)

打賞

寫公眾號文章耗費大量腦細胞和時間
歡迎打賞一枚高貴的茶葉蛋,感謝~

Bonus

一個人寫作難免有紕漏,所以建了個微信群,希望大家能多提批評建議,多提問題,深入交流,共同進步。這次我將把本文數據集和代碼放到群裡

本群宗旨

討論交流(但不限於)本公眾號文章所涉及的技術問題

分享你讀過之後有收穫的文章,或者你的優質原創

群二維碼(9月6日前有效):

相關焦點

  • python推薦 | 面向地學領域的Python庫匯總
    這是一篇告訴你如何更好的使用Python來解決地學領域問題的文章。數據處理•NetCDF格式 : netCDF4-python,h5py,h5netcdf,xarray等。除了上述簡單的數據處理庫之外,python還提供了NCO和CDO工具的封裝,pynco和cdo,提供了更多的便捷操作。
  • 學習筆記,從NumPy到Scrapy,學習Python不能錯過這些庫
    3.PandasPandas最初被作為金融數據分析工具而開發出來,因此,pandas為時間序列分析提供了很好的支持。 Pandas的名稱來自於面板數據(panel data)和python數據分析(data analysis)。pandas提供了大量能使我們快速便捷地處理數據的函數和方法。
  • 基於 Python 語言的機器學習工具Sklearn
    本篇介紹了Sklearn機器學習基礎,從Sklearn的簡介,模塊以及與tensorflow的優劣勢對比來了解基於Python語言的機器學習工具
  • Python數學建模技巧之pandas數據處理
    Python眾多的第三方庫提供了這種可能。最常見的庫有進行矩陣運算的Numpy、進行數據處理的pandas、進行科學計算的Scipy、進行圖形繪製及科學可視化的matplotlib、進行符號計算的Sympy以及方便進行機器學習任務的Sklearn。由於今年美賽官方公告中稱,將會提前在賽題公布之前就提供下載C題數據集的方式。
  • Python自動化用這些知識點就夠了!
    這些庫可以很方便地實現對excel文件的增刪改寫、格式修改等,當然並不推薦你全部都去嘗試一下,這樣時間成本太大了。使用xlwings和pandas這兩個就夠了,基本能解決excel自動化的所有問題。xlwing不光可以讀寫excel,還能進行格式調整、VBA操作,非常強大且易於使用。
  • Python數據分析:pandas讀取和寫入數據
    我的公眾號是關於自己在數據分析/挖掘學習過程中的一些技術和總結分享,文章會持續更新......繼續深入學習pandas相關操作,數據讀取寫入、分組、合併,轉換等等。前面一篇文章裡已經寫了關於描述性統計以及常用的基本操作。接下來的一段時間裡,我將陸續地去掌握並輸出。這篇文章是關於數據讀取與寫入的知識點。
  • Python Excel 辦公自動化系列——win32com/pandas庫使用詳解
    Excel08 Python win32com 讀取 寫入 修改 操作Excel09 Python pandas 讀取 寫入 操作ExcelPython win32com讀取 寫入 修改 操作Excelpython
  • 基於python的大數據分析-pandas數據讀取(代碼實戰)
    書籍推薦《大話軟體測試》出版啦,內容包括但不限於性能、自動化、接口、安全、移動APP非功能測試、抓包、loadrunner、jmeter、soapui、Appium、python
  • Python數據處理庫pandas入門教程
    pandas提供了快速,靈活和富有表現力的數據結構,目的是使「關係」或「標記」數據的工作既簡單又直觀。它旨在成為在Python中進行實際數據分析的高級構建塊。入門介紹pandas適合於許多不同類型的數據,包括:由於這是一個Python語言的軟體包,因此需要你的機器上首先需要具備Python語言的環境。
  • python數據分析常用庫之pandas入門(2)
    索引、選擇和賦值昨天介紹了pandas的模塊引入、創建和讀取數據,今天主要看看怎麼從數據結構中獲得想要的值,也就是數據的索引查找、
  • Python機器學習·微教程
    而是引導你從一個機器學習初級開發者,到能夠基於python生態開展機器學習項目的專業開發者。教程目錄第2節:熟悉使用python、numpy、matplotlib和pandas希望大家在學習的過程中能夠自主尋找解決困難的辦法,網上資源很豐富,這也是自我提升很關鍵的一步。當然也可以在評論區留言哦!
  • 技術乾貨 | Sklearn機器學習基礎
    scikit-learn簡稱sklearn,支持包括分類、回歸、降維和聚類四大機器學習算法。還包含了特徵提取、數據處理和模型評估三大模塊。sklearn是Scipy的擴展,建立在NumPy和matplotlib庫的基礎上。利用這幾大模塊的優勢,可以大大提高機器學習的效率。
  • 菜鳥學機器學習,Sklearn庫主要模塊功能簡介
    ,當我初次接觸數據分析三劍客(numpy、pandas、matplotlib)時,感覺每個庫的功能都很多很雜,所以在差不多理清了各模塊功能後便相繼推出了各自教程(文末附連結);後來,當接觸了機器學習庫sklearn之後,才發現三劍客也不外如是,相比sklearn簡直是小巫見大巫;再後來,又開始了pyspark的學習之旅,發現無論是模塊體積還是功能細分,pyspark又都完爆sklearn;最近,逐漸入坑深度學習
  • 牛逼的Python書,你看過幾本?
    可以讓初學者在一兩天就能快速入門,非常經典,也是我首推的入門書,非常適合小白,沒有之一.5.集體智慧編程看著書名好像跟python沒有半毛錢關係,但是這本書是學機器學習,數據挖掘非常經典的一本書,書裡面的例子全部都是用python寫的。
  • Python與人工智慧的關係原來是這樣的...
    從上圖可以看出,人工智慧包含常用機器學習和深度學習兩個很重要的模塊,而右圖中python擁有matplotlib、Numpy、sklearn、keras等大量的庫,像pandas、sklearn、matplotlib這些庫都是做數據處理
  • Python學習120課 pandas簡介kaggle下載數據及pandas讀取外部數據
    【每天幾分鐘,從零入門python編程的世界!】numpy的基本的東西我們學習差不多了,後面具體應用中遇到問題具體分析,然後去深入了解遇到的新的知識點就行。現在我們開始學習pandas,pandas一般用的更多,pandas是基於numpy去寫的。pandas是一個專門做數據結構和數據分析的庫。
  • 盤點數據科學20個最好的Python庫(附連結)
    Pandas (Commits: 17144, Contributors: 1165)官網:https://pandas.pydata.org/Pandas 是一個 Python 庫,提供高級的數據結構和各種各樣的分析工具。這個軟體包的主要特點是能夠將相當複雜的數據操作轉換為一兩個命令。
  • Python做數據分析-簡潔、易讀、強大
    在數據分析和交互、探索性計算以及數據可視化等方面,相對於R、MATLAB、SAS、Stata等工具,Python都有其優勢。近年來,由於Python庫的不斷發展(如pandas),使其在數據挖掘領域嶄露頭角。結合其在通用編程方面的強大實力,我們完全可以只使用Python這一種語言去構建以數據為中心的應用程式。
  • 十二、Python 第三方庫
    這個庫建立在 Python 語言的 urllib3 庫基礎上。scrapy 庫是 Python 開發的一個快速的、高層次的 Web 獲取框架。不同於簡單的網絡爬蟲功能,scrapy 框架本身包含了成熟網絡爬蟲系統所應該具有的部分共用功能,scrapy用途廣泛,可以應用於專業爬蟲系統的構建、數據挖掘、網絡監控和自動化測試等領域。
  • python的常用擴展庫以及使用方式
    一、常用庫(標準庫+擴展庫)標準庫 說明math 數學模塊random 隨機數以及隨機化相關模塊datetime