国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

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

開通VIP
Python探索性數(shù)據(jù)分析,這樣才容易掌握
作者 | Riti Dass

譯者 | LJY
整理 | Lemonbit
譯文來源 | Python數(shù)據(jù)之道(ID:PythonDataLab)

導(dǎo)語:理解你的數(shù)據(jù)的最佳方法是花時間去研究它。

Python探索性數(shù)據(jù)分析教程


介紹

每個數(shù)據(jù)科學(xué)家都必須掌握的最重要的技能之一是正確研究數(shù)據(jù)的能力。徹底的探索性數(shù)據(jù)分析 (EDA, Exploratory Data Analysis) 是必要的,這是為了確保收集數(shù)據(jù)和執(zhí)行分析的完整性。

本教程使用的示例是對歷史上 SAT 和 ACT 數(shù)據(jù)的探索性分析,以比較不同州 SAT 和 ACT 考試的參與度和表現(xiàn)。在本教程的最后,我們將獲得關(guān)于美國標(biāo)準(zhǔn)化測試的潛在問題的數(shù)據(jù)驅(qū)動洞察力。本教程的重點是演示探索性數(shù)據(jù)分析過程,并為希望練習(xí)使用數(shù)據(jù)的 Python 程序員提供一個示例。

為了這個分析,我在 Jupyter 中檢查和操作了包含 2017 年和 2018 年 SAT 和 ACT 數(shù)據(jù)的 CSV 數(shù)據(jù)文件。通過構(gòu)造良好的可視化和描述性統(tǒng)計來研究數(shù)據(jù),是了解你正在處理的數(shù)據(jù)并根據(jù)你的觀察制定假設(shè)的絕佳方法。

探索性數(shù)據(jù)分析(EDA)目標(biāo)

1)快速描述一份數(shù)據(jù)集:行/列數(shù)、數(shù)據(jù)丟失情況、數(shù)據(jù)的類型、數(shù)據(jù)預(yù)覽。
2)清除臟數(shù)據(jù):處理丟失的數(shù)據(jù)、無效的數(shù)據(jù)類型和不正確的值。
3)可視化數(shù)據(jù)分布:條形圖,直方圖,箱型圖等。
4)計算并可視化展示變量之間的相關(guān)性(關(guān)系):熱圖 (heatmap)。


數(shù)據(jù)驅(qū)動方法的好處

標(biāo)準(zhǔn)化測試程序多年來一直是一個有爭議的話題, 已經(jīng)為眾人所知。通過初步研究,我很快發(fā)現(xiàn)了 SAT 和 ACT 考試中一些明顯的問題。

例如,有些州只要求學(xué)生參加 SAT,有些州只要求學(xué)生參加 ACT,有些州要求學(xué)生兩種考試都要參加,還有些州要求選擇性標(biāo)準(zhǔn)化考試,或者每個學(xué)生都必須參加他們選擇的一種標(biāo)準(zhǔn)化考試。

每個州制定的標(biāo)準(zhǔn)化考試預(yù)期之間的這種差異,應(yīng)該被視為州與州之間考試記錄存在偏差的一個重要來源,比如參與率和平均成績。研究可能是重要的,但采取數(shù)據(jù)驅(qū)動的方法來支持基于定性研究的主張(假設(shè))是必要的。采用數(shù)據(jù)驅(qū)動的方法可以驗證以前提出的斷言/假設(shè),并基于對數(shù)據(jù)的徹底檢查和操作開發(fā)新的見解。

入門

請從 GitHub 鏈接:
https://github.com/cbratkovics/satactanalysis

下載代碼或數(shù)據(jù),以方便跟隨教程:
使用 Python 研究數(shù)據(jù)的第一步是確保導(dǎo)入了正確的庫。

在本文中,我們需要的庫是 NumPy,Pandass,Matplotlib 和 Seaborn。導(dǎo)入庫時,可以為其分配別名,以減少使用每個庫屬性所需的鍵入量。下面的代碼顯示了必要的 import 語句:

使用 Pandas 庫,你可以將數(shù)據(jù)文件加載到容器對象(稱為數(shù)據(jù)幀, dataframe)中。顧名思義,這種類型的容器是一個框架,它使用 Pandas 方法 pd.read_csv() 讀入的數(shù)據(jù),該方法是特定于 CSV 文件的。將每個 CSV 文件轉(zhuǎn)換為 Pandas 數(shù)據(jù)幀對象如下圖所示:

檢查數(shù)據(jù) & 清理臟數(shù)據(jù)

在進(jìn)行探索性分析時,了解您所研究的數(shù)據(jù)是很重要的。幸運(yùn)的是,數(shù)據(jù)幀對象有許多有用的屬性,這使得這很容易。當(dāng)基于多個數(shù)據(jù)集之間比較數(shù)據(jù)時,標(biāo)準(zhǔn)做法是使用(.shape)屬性檢查每個數(shù)據(jù)幀中的行數(shù)和列數(shù)。如圖所示:

注意:左邊是行數(shù),右邊是列數(shù);(行、列)。

我們這份數(shù)據(jù)的第一個問題是 ACT 2017 和 ACT 2018 數(shù)據(jù)集的維度不一致。讓我們使用( .head() )來更好地查看數(shù)據(jù),通過 Pandas 庫展示了每一列的前五行,前五個標(biāo)簽值。我將以 2018 年 ACT 數(shù)據(jù)為例:

在預(yù)覽了其他數(shù)據(jù)的前五行之后,我們推斷可能存在一個問題,即各個州的數(shù)據(jù)集是如何存入的。由于美國有 51 個州,ACT 2017 和 ACT 2018 的“州”欄中很可能有錯誤或重復(fù)的值。然而,在處理數(shù)據(jù)時,我們不能確定這種推斷。我們需要檢查有關(guān)的數(shù)據(jù)來確定確切的問題。

首先,讓我們使用 .value_counts() 方法檢查 ACT 2018 數(shù)據(jù)中 “State” 列的值,該方法按降序顯示數(shù)據(jù)幀中每個特定值出現(xiàn)的次數(shù):

請注意:“Maine” 在 2018 年 ACT 數(shù)據(jù)中出現(xiàn)了兩次。下一步是確定這些值是重復(fù)的還是數(shù)據(jù)輸入不正確引起的。我們將使用一種脫敏技術(shù)來實現(xiàn)這一點,它允許我們檢查滿足指定條件的數(shù)據(jù)幀中的行。例如,讓我們脫敏來查看 2018 ACT 數(shù)據(jù)中所有 “State” 值為 “Maine” 的行:

現(xiàn)在,已將亂碼確認(rèn)為重復(fù)條目。因此,我們可以使用 .drop() 方法,簡單地刪除值,使用 .reset_index()* 重置數(shù)據(jù)幀索引,來解決這個問題:

現(xiàn)在我們已經(jīng)解決了 ACT 數(shù)據(jù)幀之間行數(shù)不一致的問題,然而 SAT 和 ACT 數(shù)據(jù)幀之間仍然存在行數(shù)不一致的問題( ACT 52 行,SAT 51 行)。為了比較州與州之間 SAT 和 ACT 數(shù)據(jù),我們需要確保每個州在每個數(shù)據(jù)幀中都被平等地表示。這是一次創(chuàng)新的機(jī)會來考慮如何在數(shù)據(jù)幀之間檢索 “State” 列值、比較這些值并顯示結(jié)果。我的方法如下圖展示:

函數(shù) compare_values() 從兩個不同的數(shù)據(jù)幀中獲取一列,臨時存儲這些值,并顯示僅出現(xiàn)在其中一個數(shù)據(jù)集中的任何值。讓我們來看看在比較 2017 年和 2018 年 SAT/ACT “State” 列值時,它是如何工作的:

好吧!現(xiàn)在我們知道,需要刪除 ACT 數(shù)據(jù)集中 “State” 列中的 “National” 值。這可以使用與我們在 2018 年 ACT 數(shù)據(jù)集 定位和刪除重復(fù)的 ‘Maine’ 值相同的代碼來完成:

然而,在 2018 年 SAT 和 ACT 數(shù)據(jù)中仍存在關(guān)于 ‘Washington, D.C.’ 和 ‘District of Columbia’ 另一種爭議。我們需要從四個數(shù)據(jù)集中確定能代表華盛頓特區(qū)/哥倫比亞特區(qū)的一貫值。你所做的選擇在這兩個選項中都不重要,但是最好選擇在數(shù)據(jù)集中出現(xiàn)率最高的名稱。由于 2017 年 SAT 和 2017 年 ACT “州”數(shù)據(jù)的唯一區(qū)別在于“國家”值,我們可以假設(shè)'華盛頓特區(qū)'和'哥倫比亞特區(qū)'在兩個數(shù)據(jù)中的'州'列中是一致的。讓我們使用脫敏技術(shù)來檢查 ‘Washington, D.C.’ 和 ‘District of Columbia’ 哪些值出現(xiàn)在 ACT 2017 的‘State’ 一列中:

現(xiàn)在我們有理由詳細(xì)在 ACT 2018 數(shù)據(jù)集中使用 ‘District of Columbia’ 取代 ‘Washington, D.C.’ 是正確的,通過使用 Pandas 庫中的 .replace() 函數(shù),我們就可以做到這一點。然后,我們可以使用 compare_values 函數(shù)確認(rèn)我們的更改是否成功:

成功了!各個州的值現(xiàn)在在每個數(shù)據(jù)集是一致的。現(xiàn)在,我們可以解決 ACT 數(shù)據(jù)集中各個列不一致的問題。讓我們使用 .columns 屬性比較每個數(shù)據(jù)幀之間的列名:

請注意,在顯示 print()的輸出后,添加 “\ n” 表達(dá)式會打印一個新行。

由于這次分析的目的是比較 SAT 和 ACT 數(shù)據(jù),我們越能相似地表示每個數(shù)據(jù)集的值,我們的分析就越有幫助。

因此,我將在每個數(shù)據(jù)幀中保留的唯一列是 “State”、“Participation”、“Total” (僅SAT) 和 “Composite” (僅ACT)。

請注意,如果你的分析目標(biāo)是不同的,比如比較 2017 年和 2018 年 SAT 的績效,那么根據(jù)每個表現(xiàn)類別 (e.g. Math) 保存特定的數(shù)據(jù)將是至關(guān)重要的。為了與當(dāng)前的任務(wù)保持一致,我們可以使用 .drop() 方法刪除多余的列,如下所示:

現(xiàn)在所有的數(shù)據(jù)都具有相同的維度! 不幸的是,仍有許多工作要做。讓我們看看是否有數(shù)據(jù)丟失,并查看所有數(shù)據(jù)的數(shù)據(jù)類型:

使用 .isnull().sum() 檢查丟失的數(shù)據(jù)

用 .dtypes 檢查數(shù)據(jù)類型

好消息是數(shù)據(jù)中不存在不存在的值。壞消息是存在數(shù)據(jù)類型的錯誤,特別是每個數(shù)據(jù)幀中的“參與”列都是對象類型,這意味著它被認(rèn)為是一個字符串。這是有問題的,因為在研究數(shù)據(jù)時要觀察許多有用的可視化,需要數(shù)字類型變量才能發(fā)揮作用,比如熱力圖、箱形圖和直方圖。

同樣的問題也出現(xiàn)在兩個 ACT 數(shù)據(jù)集的 ‘Composite’ 列中。讓我們來看看 2018 年 SAT 和 ACT 數(shù)據(jù)的前五行:

2018 年 SAT 數(shù)據(jù)的前 5 行

2018 ACT 前 5 行數(shù)據(jù)

你可以看到 “Composite” 和 “Participation” 應(yīng)該是 float 類型。好的做法是保持要比較的數(shù)值數(shù)據(jù)類型的一致性,因此將 “Total” 轉(zhuǎn)換為 float 類型也是可以接受的,而不會損害數(shù)據(jù)的完整性(integer = 1166, float = 1166.0)。

這種類型轉(zhuǎn)換的第一步是從每個 ’Participation’ 列中刪除 “%” 字符,以便將它們轉(zhuǎn)換為浮點數(shù)。下一步將把除每個數(shù)據(jù)幀中的 “State” 列之外的所有數(shù)據(jù)轉(zhuǎn)換為浮點數(shù)。這可能是乏味的,這給了我們另一個創(chuàng)建函數(shù)來節(jié)省時間的好機(jī)會!我的解決方案如下函數(shù)所示:

是時候讓這些功能發(fā)揮作用了。首先讓我們使用 fix_participation() 函數(shù):

現(xiàn)在我們可以使用 convert_to_float() 函數(shù)轉(zhuǎn)換所有列的數(shù)據(jù)類型:

但是等等!運(yùn)行 convert_to_float() 函數(shù)應(yīng)該會拋出一個錯誤。錯誤消息是否有用取決于你使用的 IDE。在 Jupyter Notebook 中,錯誤將清楚地指引你到 ACT 2017 數(shù)據(jù)集中的 “Composite” 列。要更仔細(xì)地查看這些值,可以使用 .value_counts() 函數(shù):

看起來我們的罪魁禍?zhǔn)资菙?shù)據(jù)中的一個 “x” 字符,很可能是在將數(shù)據(jù)輸入到原始文件時輸入錯誤造成的。要刪除它,可以在 .apply() 方法中使用 .strip() 方法,如下所示:

太棒了!現(xiàn)在再試著運(yùn)行這段代碼,所有的數(shù)據(jù)都是正確的類型:

在開始可視化數(shù)據(jù)之前的最后一步是將數(shù)據(jù)合并到單個數(shù)據(jù)中。為了實現(xiàn)這一點,我們需要重命名每個數(shù)據(jù)中的列,以描述它們各自代表的內(nèi)容。

例如,2018 年 SAT ‘Participation’ 一欄的一個好名字應(yīng)該是 “satparticipation17”。當(dāng)數(shù)據(jù)合并時,這個名稱更具描述性。

另一個注意事項是下劃線表示法,以消除訪問值時繁瑣的間距錯誤,以及用于加速鍵入的小寫約定。數(shù)據(jù)的命名約定由開發(fā)人員決定,但是許多人認(rèn)為這是一種很好的實踐。你可以這樣重命名列:

為了合并數(shù)據(jù)而沒有錯誤,我們需要對齊 “state” 列的索引,以便在數(shù)據(jù)幀之間保持一致。我們通過對每個數(shù)據(jù)集中的 “state” 列進(jìn)行排序,然后從 0 開始重置索引值:

最后,我們可以合并數(shù)據(jù)。我沒有一次合并所有四個數(shù)據(jù)幀,而是按年一次合并兩個數(shù)據(jù)幀,并確認(rèn)每次合并都沒有出現(xiàn)錯誤。下面是每次合并的代碼:

2017 SAT 與 ACT 合并的數(shù)據(jù)集

2018 年 SAT 和 ACT 合并數(shù)據(jù)框架。

最終合并數(shù)據(jù)集。

一旦你清理了你的數(shù)據(jù),保存它是一個好主意,這樣你就不用再去整理它了。使用 Pandas 中的 pd.to_csv() 方法:

設(shè)置 index = False 保存沒有索引值的數(shù)據(jù)。

是時候可視化呈現(xiàn)數(shù)據(jù)了!現(xiàn)在,我們可以使用 Matplotlib 和 Seaborn 更仔細(xì)地查看我們已經(jīng)清洗和組合的數(shù)據(jù)。在研究直方圖和箱形圖時,我將著重于可視化參與率的分布。在研究熱圖時,將考慮所有數(shù)據(jù)之間的關(guān)系。

可視化數(shù)據(jù)分布- Seaborn 直方圖

直方圖表示數(shù)值數(shù)據(jù)值出現(xiàn)在數(shù)據(jù)集中指定范圍內(nèi)的頻率(例如,數(shù)據(jù)中有多少值出現(xiàn)在 40%-50% 的范圍內(nèi))。從直方圖中我們可以看出,2017 年和 2018 年,ACT 的參與率在 90%-100% 之間的州更多。相反,2017 年和 2018 年 SAT 考試的參與率為 0 -10% 的州更多。我們可以推斷,90%-100% ACT 參與率的州出現(xiàn)頻率較高,可能是由于需要采取 ACT 的某些規(guī)定引起的。

可視化數(shù)據(jù)分布- Matplotlib 框圖

箱形圖表示數(shù)據(jù)的擴(kuò)展,包括最小、最大和四分位數(shù)范圍(IQR)。四分位數(shù)范圍由第一分位數(shù)、中位數(shù)和第三分位數(shù)組成。從上面的方框圖可以看出,2017 年到 2018 年 SAT 的整體參與率有所上升。

我們可以注意到的另一件事是 2017 年到 2018 年 ACT 參與率的一致性。這就提出了一個問題,為什么 SAT 的參與率總體上有所上升,盡管 ACT 的參與率并沒有顯著變化。

計算并可視化相關(guān)性-Seaborn Heat Map

更強(qiáng)的關(guān)系由熱圖中的值表示,更接近于負(fù)值或正值。較弱的關(guān)系由接近于零的值表示。正相關(guān)變量,即零和正相關(guān)的值,表示一個變量隨著另一個變量的增加而增加。負(fù)相關(guān)變量,負(fù)1和0之間的相關(guān)性值表示一個變量隨著另一個變量的增加而減少。

需要進(jìn)一步研究的關(guān)系較強(qiáng)的變量包括 2017 年 SAT 參與情況和 2018 年 SAT 參與情況、2017 年 ACT 綜合得分和 2017 年 ACT 參與情況、2018 年 ACT 參與情況和 2018 年 SAT 參與情況。還有很多關(guān)系需要進(jìn)一步研究,但這些都是很好的起點,可以指導(dǎo)研究為什么這些關(guān)系會存在。

總結(jié)

徹底的探索性數(shù)據(jù)分析可確保你的數(shù)據(jù)清晰,可用,一致且直觀可視化。請記住,沒有所謂的干凈數(shù)據(jù),因此在開始使用數(shù)據(jù)之前探索數(shù)據(jù)是在數(shù)據(jù)分析過程中添加完整性和價值的好方法。通過對數(shù)據(jù)的深入研究來指導(dǎo)外部研究,你將能夠有效地獲得可證明的見解。
文章來源:
https://towardsdatascience.com/exploratory-data-analysis-tutorial-in-python-15602b417445

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
機(jī)器學(xué)習(xí)的必備條件不是數(shù)學(xué)而是...
這4款數(shù)據(jù)自動化探索 Python 神器,解決99%的數(shù)據(jù)分析問題!
從理論到學(xué)習(xí)時間表:教你正月30天速成Python
今日好書丨《Python數(shù)據(jù)分析入門:從數(shù)據(jù)獲取到可視化》
練習(xí)R:單個連續(xù)數(shù)據(jù)的探索性統(tǒng)計可視化函數(shù)EDA
跟艾文學(xué)編程《零基礎(chǔ)入門學(xué)Python》(01)基于Plotly可視化繪圖
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服