中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開(kāi)通VIP
使用Python,pandas,seaborn和scikit-Learn進(jìn)行探索性數(shù)據(jù)分析

在這篇文章中,我將使用流行的Python軟件包在Titanic機(jī)器學(xué)習(xí)數(shù)據(jù)集(https://www.kaggle.com/francksylla/titanic-machine-learning-from-disaster)上執(zhí)行EDA :pandas,matplotlib,seaborn和scikit-learn。

大綱:

  • 什么是數(shù)據(jù)
  • 分類分析
  • 定量分析
  • 聚類
  • 基于樹(shù)的估算器的特征重要性
  • 儀表板技術(shù)

1.什么是數(shù)據(jù)

首先是一些理論?!皵?shù)據(jù)”一詞于1946年首次用于表示“可傳輸和存儲(chǔ)的計(jì)算機(jī)信息”。在最高層次上,數(shù)據(jù)可以大致分為兩大類:結(jié)構(gòu)化和非結(jié)構(gòu)化。結(jié)構(gòu)化數(shù)據(jù)是預(yù)先定義的數(shù)據(jù)模型,通常駐留在具有固定模式的關(guān)系數(shù)據(jù)庫(kù)或數(shù)據(jù)倉(cāng)庫(kù)中。常見(jiàn)的示例包括事務(wù)信息、客戶信息和日期等。非結(jié)構(gòu)化數(shù)據(jù)沒(méi)有預(yù)先定義的數(shù)據(jù)模型,并且存在于NoSQL數(shù)據(jù)庫(kù)和數(shù)據(jù)湖中。示例包括圖像、視頻文件和音頻文件。

在這篇文章中,我們將專注于結(jié)構(gòu)化數(shù)據(jù),我將提出一種系統(tǒng)的方法來(lái)快速顯示您數(shù)據(jù)中的潛在統(tǒng)計(jì)數(shù)據(jù)。在結(jié)構(gòu)化數(shù)據(jù)的框架下,我們可以進(jìn)一步將它們分類為分類和定量。對(duì)于分類數(shù)據(jù),算術(shù)規(guī)則不適用。在分類中,我們有定類數(shù)據(jù)和定序數(shù)據(jù),而在定量中,我們有區(qū)間和比率。重要的是,我們需要花一些時(shí)間來(lái)清楚地定義和理解每個(gè)術(shù)語(yǔ)之間的細(xì)微差別,因?yàn)檫@將影響我們以后的分析和預(yù)處理技術(shù)。

4種不同類型的數(shù)據(jù)

定類數(shù)據(jù)(Nominal data)

“nominal”這個(gè)名字來(lái)自拉丁語(yǔ)nomen,意思是名字。定類數(shù)據(jù)是通過(guò)一個(gè)簡(jiǎn)單的命名系統(tǒng)進(jìn)行區(qū)分的對(duì)象。需要注意的一件重要事情是,定類數(shù)據(jù)可能也有分配給它們的數(shù)字。這可能看起來(lái)是有序,但它們不是。編號(hào)僅用于捕獲和引用。一些例子包括:

  • 一個(gè)國(guó)家集。
  • 運(yùn)動(dòng)員編號(hào)

定序數(shù)據(jù)(Ordinal data)

定序數(shù)據(jù)是順序重要的項(xiàng)。更正式地說(shuō),它們?cè)谛蛱?hào)上的相對(duì)位置為我們提供了意義。默認(rèn)情況下,定序數(shù)據(jù)的順序是通過(guò)給它們分配數(shù)字來(lái)定義的。但是,字母或其他順序符號(hào)也可使用。一些例子包括:

  • 比賽的比賽排名(第1名,第2名,第3名)
  • 組織中的工資等級(jí)(Associate,AVP,VP,SVP)。

定距數(shù)據(jù)(Interval data)

與定序數(shù)據(jù)類似,定距數(shù)據(jù)沿著每個(gè)對(duì)象的位置彼此等距的標(biāo)度來(lái)測(cè)量。這個(gè)獨(dú)特的屬性允許算術(shù)應(yīng)用于它們。一個(gè)例子是

  • 以華氏度為單位的溫度,其中78度和79度之間的差值與45度和46度之間的差值相同。

定比數(shù)據(jù)(Ratio data)

與Interval數(shù)據(jù)一樣,Ratio數(shù)據(jù)的差異也很有意義。定比數(shù)據(jù)具有附加功能,使得對(duì)象的比率也有意義,即它們具有真正的零點(diǎn)。零表示缺少某種財(cái)產(chǎn)。因此,當(dāng)我們說(shuō)某些東西是零重量時(shí),我們的意思是那個(gè)東西沒(méi)有質(zhì)量。一些例子包括:

  • 一個(gè)人在體重秤上的重量

定距與定比

定距和定比之間的區(qū)別就是一個(gè)沒(méi)有真正的零點(diǎn),而另一個(gè)有。這個(gè)例子很好地說(shuō)明了這一點(diǎn):當(dāng)我們說(shuō)某物是華氏0度時(shí),它并不意味著它沒(méi)有熱量。這種獨(dú)特的特性使得“華氏80度是華氏40度的兩倍”等比率的說(shuō)法不成立。

在我們深入研究其他部分之前,我想對(duì)一些概念進(jìn)行形式化,以便您在思考過(guò)程中明確我們?yōu)槭裁匆獔?zhí)行下面所示的操作。

首先我要說(shuō)的是,快速顯示數(shù)據(jù)摘要的最佳方法是通過(guò)2D圖。盡管我們生活在3D空間世界中,但發(fā)現(xiàn)難以感知第三維度,例如深度,3D繪圖在2D屏幕上的投影。因此,在隨后的章節(jié)中,您會(huì)看到我們只使用定類數(shù)據(jù)的條形圖和定量數(shù)據(jù)的箱形圖,因?yàn)樗鼈兎謩e簡(jiǎn)潔地表達(dá)了數(shù)據(jù)分布。我們只關(guān)注單變量分析和雙變量分析與目標(biāo)變量。

我們主要使用seaborn和pandas來(lái)實(shí)現(xiàn)這一目標(biāo)。眾所周知,統(tǒng)計(jì)數(shù)據(jù)是任何數(shù)據(jù)科學(xué)家工具包的重要組成部分,而seaborn可以快速方便地使用matplotlib來(lái)精確地顯示數(shù)據(jù)的統(tǒng)計(jì)數(shù)據(jù)。matplotlib功能強(qiáng)大,但有時(shí)會(huì)變得復(fù)雜。Seaborn提供了matplotlib的高級(jí)抽象,使我們能夠輕松地繪制有吸引力的統(tǒng)計(jì)圖。為了充分利用seaborn,我們還需要pandas,因?yàn)閟eaborn最適合使用pandas的DataFrames。

2.定類分析

我們可以開(kāi)始使用pd.read_csv()讀取數(shù)據(jù)。通過(guò)在數(shù)據(jù)框架上執(zhí)行.head(),我們可以快速查看數(shù)據(jù)的前5行。其他有用的方法是 .desribe(), .info():

后者會(huì)顯示:

我們現(xiàn)在看到,

定類數(shù)據(jù):

  • PassengerId,
  • Survived,
  • Pclass,
  • Name,
  • Sex,
  • Ticket,
  • Cabin,
  • Embarked

而定量數(shù)據(jù):

  • Age,
  • SibSp,
  • Parch,
  • Fare

現(xiàn)在,憑借這些知識(shí)以及我們?cè)诘?部分中學(xué)到的知識(shí),讓我們編寫一個(gè)自定義輔助函數(shù),可以用來(lái)處理大多數(shù)類別的定類數(shù)據(jù),并快速總結(jié)它們。我們將借助panda方法和seaborn .countplot()方法來(lái)完成這些工作 。調(diào)用輔助函數(shù)categorical_summarized,Python實(shí)現(xiàn)如下所示。

def categorical_summarized(dataframe, x=None, y=None, hue=None, palette='Set1', verbose=True): ''' Helper function that gives a quick summary of a given column of categorical data Arguments ========= dataframe: pandas dataframe x: str. horizontal axis to plot the labels of categorical data, y would be the count y: str. vertical axis to plot the labels of categorical data, x would be the count hue: str. if you want to compare it another variable (usually the target variable) palette: array-like. Colour of the plot Returns ======= Quick Stats of the data and also the count plot ''' if x == None: column_interested = y else: column_interested = x series = dataframe[column_interested] print(series.describe()) print('mode: ', series.mode()) if verbose: print('='*80) print(series.value_counts()) sns.countplot(x=x, y=y, hue=hue, data=dataframe, palette=palette) plt.show()

categorical_summary的作用是它接受一個(gè)data frame,一些輸入?yún)?shù)和輸出如下:

  • 數(shù)值數(shù)據(jù)的計(jì)數(shù),平均值,std,最小值,最大值和四分位數(shù),或非數(shù)值數(shù)據(jù)的頂級(jí)類別的計(jì)數(shù),唯一,頂級(jí)類和非數(shù)值數(shù)據(jù)的頂級(jí)類的頻率。
  • 感興趣列的類頻率,如果verbose設(shè)置為True
  • 感興趣的列的每個(gè)類的計(jì)數(shù)的條形圖

我們來(lái)談?wù)勢(shì)斎雲(yún)?shù)。x和y采用str類型,它對(duì)應(yīng)于我們想要研究的感興趣的列。將列的名稱設(shè)置為x將創(chuàng)建一個(gè)條形圖,其中x軸顯示不同的類及其在y軸上的計(jì)數(shù)。將感興趣的列的名稱設(shè)置為y將翻轉(zhuǎn)先前圖的軸,其中不同的類將在y軸上,x軸顯示該計(jì)數(shù)。通過(guò)將色相設(shè)置為目標(biāo)變量(在本例中Survived ),該函數(shù)將顯示目標(biāo)變量w.r.t.對(duì)感興趣列的依賴關(guān)系。顯示categorical_summary用法的一些示例代碼如下:

單變量分析

# Target Variable: Survivalc_palette = ['tab:blue', 'tab:orange']categorical_summarized(train_df, y = 'Survived', palette=c_palette)

會(huì)給出以下內(nèi)容:

雙變量分析

# Feature Variable: Gendercategorical_summarized(train_df, y = 'Sex', hue='Survived', palette=c_palette)

會(huì)給出以下內(nèi)容:

在性別變量上輸出categorical_summarized,其中hue設(shè)置為Survived

3.定量分析

現(xiàn)在,從技術(shù)上講,我們可以使用條形圖進(jìn)行定量數(shù)據(jù)處理,但它通常會(huì)相當(dāng)混亂(您可以嘗試在Age列上使用categorical_summary)。一個(gè)更整潔的方法是使用一個(gè)箱型圖,它會(huì)根據(jù)一個(gè)5個(gè)數(shù)字的摘要來(lái)顯示分布,最小,Q1,中位數(shù),Q3,和最大值。

下一個(gè)調(diào)用的輔助函數(shù)quantitative_summarized 定義如下:

def quantitative_summarized(dataframe, x=None, y=None, hue=None, palette='Set1', ax=None, verbose=True, swarm=False): ''' Helper function that gives a quick summary of quantattive data Arguments ========= dataframe: pandas dataframe x: str. horizontal axis to plot the labels of categorical data (usually the target variable) y: str. vertical axis to plot the quantitative data hue: str. if you want to compare it another categorical variable (usually the target variable if x is another variable) palette: array-like. Colour of the plot swarm: if swarm is set to True, a swarm plot would be overlayed Returns ======= Quick Stats of the data and also the box plot of the distribution ''' series = dataframe[y] print(series.describe()) print('mode: ', series.mode()) if verbose: print('='*80) print(series.value_counts()) sns.boxplot(x=x, y=y, hue=hue, data=dataframe, palette=palette, ax=ax) if swarm: sns.swarmplot(x=x, y=y, hue=hue, data=dataframe, palette=palette, ax=ax) plt.show()

類似于categorical_summarized ,quantitative_summarized輸入data frame和一些輸入?yún)?shù)來(lái)輸出潛在統(tǒng)計(jì)數(shù)據(jù),以及一個(gè)box plot和swarm plot(如果swarm被設(shè)置為true)。

quantitative_summary可以接受一個(gè)定量變量和兩個(gè)定類變量,其中定量變量必須分配給y,其他兩個(gè)定類變量可以分別分配給x和hue。下面是一些示例代碼,展示了它的用法:

單變量分析

# univariate analysisquantitative_summarized(dataframe= train_df, y = 'Age', palette=c_palette, verbose=False, swarm=True)

會(huì)給出以下內(nèi)容:

雙變量分析

# bivariate analysis with target variablequantitative_summarized(dataframe= train_df, y = 'Age', x = 'Survived', palette=c_palette, verbose=False, swarm=True)

會(huì)給出以下內(nèi)容:

多變量分析

# multivariate analysis with Embarked variable and Pclass variablequantitative_summarized(dataframe= train_df, y = 'Age', x = 'Embarked', hue = 'Pclass', palette=c_palette3, verbose=False, swarm=False)

會(huì)給出以下內(nèi)容:

在Age變量上輸出quant_summarized,其中x設(shè)置為Survived,hue設(shè)置為Pclass

4.聚類

k-Means聚類

k-means聚類屬于劃分聚類。在劃分群集中,我們必須指定我們想要的聚類數(shù)k。這可以通過(guò)選擇下圖的“below”點(diǎn)來(lái)完成。

由于K Means計(jì)算特征之間的距離以確定以下觀察是否屬于某個(gè)質(zhì)心,我們必須通過(guò)編碼定類變量并填充缺失值來(lái)預(yù)處理我們的數(shù)據(jù)。一個(gè)簡(jiǎn)單的預(yù)處理函數(shù)如下所示。

def simple_preprocessing(dataframe, train=True): le = LabelEncoder() X = dataframe.drop(['PassengerId', 'Cabin', 'Name', 'Ticket'], axis=1) X['Age'] = X['Age'].fillna(value=X['Age'].mode()[0]) X['Embarked'] = le.fit_transform(X['Embarked'].fillna(value=X['Embarked'].mode()[0])) X['Sex'] = np.where(X['Sex'] == 'male', 1, 0) if train: X = X.drop(['Survived'], axis=1) y = np.where(dataframe['Survived'] == 1, 'Alive', 'Dead') y = pd.get_dummies(y, columns=['Survived']) return X, y else: return X

現(xiàn)在我們已經(jīng)處理了數(shù)據(jù),我們必須執(zhí)行特征縮放,以便可以比較特征之間的距離。這可以通過(guò)sklearn.preprocessing庫(kù)輕松完成。。運(yùn)行k-means算法后,我們?cè)O(shè)置k = 2,我們可以繪制變量,Python如下所示。

import matplotlib as mplfig = plt.figure(figsize = (8,10))mpl.rcParams['image.cmap'] = 'jet'labels = pipeline.predict(sample_train)x_label = 'Survived'y_label = 'Age'plt.scatter(sample_train[x_label], sample_train[y_label], c = labels, alpha = 0.3)plt.xlabel(x_label)plt.xticks(sample_train[x_label])plt.ylabel(y_label)plt.show()

凝聚層次聚類

對(duì)于本小節(jié),我將介紹另一種通過(guò)聚類執(zhí)行EDA的快速方法。凝聚聚類使用自下而上的方法,其中個(gè)體觀察基于它們的距離迭代地連接在一起。我們將使用該scipy.cluster.hierarchy包來(lái)執(zhí)行鏈接并使用樹(shù)形圖顯示我們的結(jié)果。兩個(gè)聚類之間的距離通過(guò)最近鄰方法計(jì)算。

from scipy.cluster.hierarchy import linkagefrom scipy.cluster.hierarchy import dendrogramsample_train,sample_val, gt_train, gt_val = train_test_split(train_df, train_df['Survived'], test_size=0.05, random_state=99)sample_val_processed = simple_preprocessing(sample_val, train = False)sample_val_processed = scaler.fit_transform(sample_val_processed)mergings = linkage(sample_val_processed, method='complete')fig = plt.figure(figsize = (16,10))dendrogram(mergings, labels=np.array(sample_val['Name']), leaf_rotation=90, leaf_font_size=10)plt.show()

5.基于樹(shù)的估算器的特征重要性

另一種執(zhí)行EDA的快速方法是通過(guò)基于樹(shù)的估算器。決策樹(shù)在最終輸出預(yù)測(cè)的葉節(jié)點(diǎn)之前學(xué)習(xí)如何“最佳”地將機(jī)器學(xué)習(xí)數(shù)據(jù)集拆分成較小的子集。拆分通常由諸如基尼或信息增益熵的雜質(zhì)標(biāo)準(zhǔn)定義。由于這是關(guān)于EDA而不是決策樹(shù)的帖子,我不會(huì)詳細(xì)解釋它們背后的數(shù)學(xué),但我將向您展示如何使用它們更好地理解您的特征。

基于雜質(zhì)標(biāo)準(zhǔn),可以通過(guò)greedily picking有助于獲得最多信息增益的特征來(lái)構(gòu)建樹(shù)。為了說(shuō)明這一點(diǎn),我將使用該scikit-learn庫(kù)。

構(gòu)建隨機(jī)森林分類器

我們首先構(gòu)建一個(gè)隨機(jī)森林分類器。默認(rèn)情況下,雜質(zhì)標(biāo)準(zhǔn)設(shè)置為Gini。使用以下Python代碼,我們可以看到我們的Titanic機(jī)器學(xué)習(xí)數(shù)據(jù)集的相應(yīng)特征重要性。

from sklearn.ensemble import RandomForestClassifierrf_clf = RandomForestClassifier(n_estimators = 500, max_depth=12)rf_clf.fit(X_train, y_train)rf_y_pred = rf_clf.predict(X_val)pd.Series(rf_clf.feature_importances_, index = X_train.columns).nlargest(12).plot(kind = 'barh', figsize = (10, 10), title = 'Feature importance from RandomForest').invert_yaxis();

XGBoost

另一種創(chuàng)建決策樹(shù)集合的方法是通過(guò)XGBoost,它是梯度提升框架系列的一部分。使用以下Python代碼,我們可以看到哪個(gè)相應(yīng)的特征對(duì)我們的XGBoost很重要。同樣,默認(rèn)情況下,雜質(zhì)標(biāo)準(zhǔn)設(shè)置為Gini。

from xgboost import XGBClassifierxgb_clf = XGBClassifier(max_depth=12, learning_rate=1e-4,n_estimators=500)xgb_clf.fit(X_train, np.argmax(np.array(y_train), axis = 1))xgb_y_pred = xgb_clf.predict(X_val)pd.Series(xgb_clf.feature_importances_, index = X_train.columns).nlargest(12).plot(kind = 'barh', figsize = (10, 10), title = 'Feature importance from XGBoost').invert_yaxis();

6.Dashboarding 技術(shù)

與圖表不同,Dashboarding 的創(chuàng)建是為了在一個(gè)屏幕上以干凈,簡(jiǎn)潔的方式客觀地顯示重要信息,目的是告知并不誤導(dǎo)其讀者。通常,Dashboarding 是利用我們的視覺(jué)感知能力以擴(kuò)大認(rèn)知的數(shù)據(jù)的表示。他們展示的信息具有很高的圖形優(yōu)勢(shì),所有人都能理解,不需要補(bǔ)充信息進(jìn)行解釋。

要實(shí)現(xiàn)圖形卓越,必須遵循以下兩個(gè)關(guān)鍵方面:

  • 最大化數(shù)據(jù):Ink 和最小化Chartjunk
  • 具有高圖形完整性

數(shù)據(jù):Ink 和Chartjunk

數(shù)據(jù):Ink 定義為用于表示數(shù)據(jù)的墨水,而Chartjunk就是圖中垃圾元素,這些元素不單讓閱讀者分心失去數(shù)據(jù)要表達(dá)的重點(diǎn)。

圖像顯示了一個(gè)男人的臉的側(cè)面,同時(shí)也能可看到他的正面。

實(shí)現(xiàn)圖形完整性

有六個(gè)原則來(lái)確保圖形完整性:

  • 使數(shù)字的表示與數(shù)量成比例
  • 使用清晰,詳細(xì)和完整的標(biāo)簽
  • 顯示數(shù)據(jù)變化,而不是設(shè)計(jì)變化
  • 使用標(biāo)準(zhǔn)化單位,而不是標(biāo)稱值
  • 用小于或等于'n'個(gè)可變維度描述'n'數(shù)據(jù)維度
  • 引用完整上下文中的數(shù)據(jù)

因此,我們避免使用餅狀圖或3D圖形或區(qū)域尺寸。條形圖和箱形圖是實(shí)現(xiàn)圖形完整性的良好示例,因?yàn)樗鼈兒?jiǎn)單(每個(gè)人都可以理解而沒(méi)有歧義)且強(qiáng)大。同樣重要的是不要忽略上下文,比如讓軸將定量數(shù)據(jù)顯示為0。

圖形完整性差的誤導(dǎo)圖形示例

到目前為止,Tableau在儀表板方面可能是行業(yè)領(lǐng)導(dǎo)者。他們采用最佳的儀表板實(shí)踐,并且通過(guò)拖放操作完成為您繪制圖表的繁重工作。我強(qiáng)烈建議任何對(duì)此領(lǐng)域感興趣的人來(lái)看看Tableau。另一個(gè)與Tableau類似的開(kāi)源項(xiàng)目叫做Apache Superset。

結(jié)論

總而言之,有許多方法可以進(jìn)行EDA。EDA是整個(gè)數(shù)據(jù)科學(xué)過(guò)程的一部分,這是一個(gè)高度迭代的過(guò)程。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Seaborn入門系列(三)
[數(shù)據(jù)可視化]Seaborn簡(jiǎn)單介紹
第二熱門語(yǔ)言:從入門到精通,Python數(shù)據(jù)科學(xué)簡(jiǎn)潔教程
數(shù)據(jù)可視化干貨:使用pandas和seaborn制作炫酷圖表(附代碼)
手把手|數(shù)據(jù)科學(xué)速成課:給Python新手的實(shí)操指南
最新頂尖數(shù)據(jù)分析師必用的15大Python庫(kù)(上)
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服