需一行代碼,即可直觀了解數據的結構
Source:
第一次導入新數據集時,要做的第一件事就是了解數據。 這包括確定特定預測變量的范圍,識別每個預測變量的數據類型以及計算每個預測變量的缺失值的數量或百分比之類的步驟。
pandas庫為EDA提供了許多非常有用的功能。 但是,在應用其中的大多數功能之前,通常必須先從更通用的功能開始,例如df.describe()。 但是,此類功能所提供的功能是有限的,而且對于每個新數據集,您最初的EDA工作流程通常都非常相似。 作為一個在完成重復性任務時并沒有感到非常高興的人,我最近尋找了替代方法,并遇到了對Pandas進行剖析的情況。 Pandas概要分析不僅使您僅獲得單個輸出,還使用戶可以快速生成結構非常廣泛的HTML文件,其中包含您可能需要了解的大部分內容,然后才能進行更具體的個人數據探究。 在下面的段落中,我將引導您完成對Titanic數據集的熊貓輪廓分析的應用。
由于數據類型多樣且缺少值,因此我選擇對Titanic數據集應用熊貓分析。 我認為,當尚未清除數據并且仍需要進一步的個性化調整時,對熊貓進行分析特別有趣。 為了在這些個性化調整過程中更好地引導您的注意力,您需要知道從哪里開始以及應該關注什么。 這就是熊貓分析的用武之地。
首先,讓我們導入數據并使用熊貓檢索一些描述性統計信息:
# importing required packages
import pandas as pd
import pandas_profiling
import numpy as np
# importing the data
df = pd.read_csv('/Users/lukas/Downloads/titanic/train.csv')
# descriptive statistics
df.describe()
上面的代碼塊將產生以下輸出:
盡管上面的輸出包含很多信息,但是并不能告訴您可能感興趣的所有內容。例如,您可以假設數據幀有891行。 如果要檢查,則必須添加另一行代碼以確定數據幀的長度。 盡管這些計算不是很昂貴,但是一遍又一遍地重復它們確實會花費一些時間,您可能在清理數據時可能會更好地使用它們。
現在,讓我們對pandas進行分析:
pandas_profiling.ProfileReport(df)
運行這一行代碼,將創建數據的HTML EDA報告。 上面顯示的代碼將創建結果的內聯輸出; 但是,您也可以選擇將EDA報告另存為HTML文件,以便更輕松地共享它。
HTML EDA報告的第一部分將包含一個概述部分,為您提供基本信息(觀察值,變量數等)。 它還會輸出警告列表,告訴您在哪里要再次檢查數據并可能將精力集中在清潔上。
Overview Output
在概述之后,EDA報告為您提供了每個特定變量的有用見解。 這些還包括一個小的可視化視圖,描述了每個變量的分布:
Output for numeric variable 'Age'
從上面可以看出,pandas分析為您提供了一些有用的指標,例如缺失值的百分比和數量以及我們之前看到的描述性統計信息。 由于"年齡"是一個數字變量,因此使用直方圖可視化其分布可以告訴我們該變量似乎是右偏的。
對于類別變量,僅進行了較小的更改:
Output for categorical variable 'Sex'
Pandas分析而不是計算均值,最小值和最大值,而是計算分類變量的類計數。 由于"性別"是一個二進制變量,因此我們只能找到兩個不同的計數。
如果您像我一樣,您可能想知道熊貓分析如何精確計算其輸出。 幸運的是,源代碼在GitHub上可用。 由于我不喜歡在代碼中構造不必要的黑匣子部件,因此我將快速了解數字變量的源代碼:
def describe_numeric_1d(series, **kwargs):
"""Compute summary statistics of a numerical (`TYPE_NUM`) variable (a Series).
Also create histograms (mini an full) of its distribution.
Parameters
----------
series : Series
The variable to describe.
Returns
-------
Series
The description of the variable as a Series with index being stats keys.
"""
# Format a number as a percentage. For example 0.25 will be turned to 25%.
_percentile_format = "{:.0%}"
stats = dict()
stats['type'] = base.TYPE_NUM
stats['mean'] = series.mean()
stats['std'] = series.std()
stats['variance'] = series.var()
stats['min'] = series.min()
stats['max'] = series.max()
stats['range'] = stats['max'] - stats['min']
# To avoid to compute it several times
_series_no_na = series.dropna()
for percentile in np.array([0.05, 0.25, 0.5, 0.75, 0.95]):
# The dropna() is a workaround for https://github.com/pydata/pandas/issues/13098
stats[_percentile_format.format(percentile)] = _series_no_na.quantile(percentile)
stats['iqr'] = stats['75%'] - stats['25%']
stats['kurtosis'] = series.kurt()
stats['skewness'] = series.skew()
stats['sum'] = series.sum()
stats['mad'] = series.mad()
stats['cv'] = stats['std'] / stats['mean'] if stats['mean'] else np.NaN
stats['n_zeros'] = (len(series) - np.count_nonzero(series))
stats['p_zeros'] = stats['n_zeros'] * 1.0 / len(series)
# Histograms
stats['histogram'] = histogram(series, **kwargs)
stats['mini_histogram'] = mini_histogram(series, **kwargs)
return pd.Series(stats, name=series.name)
盡管這似乎是一個巨大的代碼塊,但實際上卻很容易理解。 Pandas配置文件的源代碼包括另一個確定每個變量類型的函數。 如果將變量標識為數字變量,則上面的函數將產生我之前顯示的輸出。 此函數使用基本的pandas系列操作(例如series.mean()),并將結果存儲在stats字典中。 這些圖是使用matplotlib的matplotlib.pyplot.hist函數的改編版本生成的,旨在能夠處理各種類型的數據集。
在每個特定變量的EDA之下,pandas分析將同時輸出Pearson和Spearman相關矩陣。
Pearson correlation matrix output
如果愿意,可以在生成報告的代碼的初始行中設置一些相關性閾值。 這樣,您就可以調整您認為對分析重要的相關強度。
最后,pandas分析將輸出一個代碼示例。 嚴格來說,這不是代碼示例,而只是數據的開頭。 當前幾個觀察結果通常不能代表數據的特征時,這可能會導致問題。
因此,建議不要將最后的輸出用于初始分析,而應運行df.sample(5),它將從數據集中隨機選擇五個觀測值。
總而言之,pandas分析提供了一些有用的功能,尤其是當您的主要目標是快速而又骯臟地理解數據或以可視格式與他人共享您的初始EDA時。 然而,它還不接近于自動化EDA。 實際的個性化工作仍然必須手動完成。
如果您想在一個筆記本中查看整個EDA,請在線查看我在nbviewer中使用的筆記本。 您也可以在我的GitHub存儲庫中找到有關中型文章的代碼。
(本文翻譯自Lukas Frei的文章《Speed Up Your Exploratory Data Analysis With Pandas-Profiling》,參考:https://towardsdatascience.com/speed-up-your-exploratory-data-analysis-with-pandas-profiling-88b33dc53625)
做程序開發的時候,我們經常會用到一些測試數據,相信大多數同學是這么來造測試數據的:
中槍的請舉手。
關注,轉發,私信小編“01”即可免費領取Python學習資料!
不僅要自己手動敲這些測試數據,還敲的這么假。那有啥辦法呢?難不成有什么東西能自動給我造點以假亂真的數據?。磕銊e說,還真有!
在 Python 中有個神庫,叫做 Faker,它可以自動幫我們來生成各種各樣的看起來很真的”假“數據,讓我們來看看吧!
安裝
首先讓我們來看看這個庫的安裝方法,實際上裝起來非常簡單,使用 pip 安裝即可,Python3 版本的安裝命令如下:
pip3 install faker
安裝好了之后,我們使用最簡單的例子來生成幾個假數據試試:
首先我們從 faker 這個包里面導入一個 Faker 類,然后將其實例化為 faker 對象,依次調用它的 name、address、text 方法,看下運行效果:
看到這里給我們生成了看起來很真的英文姓名、地址、長文本。
但我們是中國人,我們肯定想要生成中文的吧,不用擔心,這個庫對非常多的語言都有支持,當然也包括中文了,具體的支持的語言列表可以見:https://faker.readthedocs.io/en/master/locales.html 。
ata Assistant 提供超過 100 種數據類型,為任何開發、測試或演示目的生成大量、異構、真實的數據。
官網地址:http://www.redisant.cn/da
Windows 原生
Data Assistant 使用 Windows Native 技術,這保證軟件具有很小的安裝體積和較高的響應速度。
快速生成
創建小型或大型數據集,用于表、結構和腳本的快速原型設計或壓力測試
真實數據
為任何開發、測試或演示目的生成大量、異構、真實的數據,而不是僅僅通過復制和粘貼創建重復的不切實際的文本字段
基于文檔
您創建的數據結構被完整保留,可以為不同的目的創建不同的數據集
導出數據
可以導出JSON、SQL、CSV、HTML、XML,并且可以將數據結構轉換為Java、C#、TypeScript、JSONSchema代碼
字段微調
可以對任何字段使用可選的前綴和后綴;對隨機數據填充字段,指定長度或長度范圍; 對數字字段指定范圍;對日期范圍使用格式化字符串決定輸出內容
支持數據轉換
轉換為 JSON、SQL、CSV、HTML、XML、Java、C#、TypeScript、JSONSchema 等。
支持豐富的數據類型
- 地址:郵政編碼、城市、街道地址、城市前綴、城市后綴、街道名稱、建筑物編號、街道后綴、次要地址、縣、國家、完整地址、國家代碼、州、州縮寫、緯度、經度、方向、基本方向、順序方向。
- 商業:部門、價格、類別、產品名稱、顏色、產品、產品形容詞、產品材質、Ean8、Ean13。
- 公司:公司后綴、公司名稱、口號、公司介紹。
- 數據庫:列名、類型、排序規則、數據庫引擎。
- 日期:過去的、過去的偏移量、很快、很快偏移、未來、未來偏移量、之間、偏移之間、最近的、最近偏移量、時間跨度、月、工作日。
- 金融:帳戶、帳戶名稱、數量、交易類型、貨幣、信用卡號碼、信用卡CVV、比特幣地址、以太坊地址、路由號碼、銀行標識符代碼 (BIC) 代碼、國際銀行帳號 (IBAN)。
- 圖像:DataUri、PicsumUrl、PlaceholderUrl、LoremFlickrUrl、LoremPixelUrl。
- 互聯網:Avatar、電子郵件、用戶名、用戶名Unicode、域名、域字、域名后綴、ip、端口、IP地址、Ip端點、IPv6、IPv6地址、Ipv6端點、用戶代理、MAC地址、密碼、顏色、協議、網址、帶路徑的 URL、URL根路徑。
- 單詞與短語:單詞、字、信、句子、段落、文本、評論。
- 姓名:名、姓、全名、字首、后綴、職稱、工作描述、工作區、工作類型。
- 手機號:生成各種類型的手機號碼。
- 系統:文件名、目錄路徑、文件路徑、通用文件名、Mime類型、通用文件類型、通用文件擴展、文件類型、文件擴展名、Semver、版本、異常、安卓ID、蘋果推送令牌、黑莓Pin。
- 車輛:車牌號、制造商、模型、類型、燃料。
- 隨機數:Number、Digits、Even、Odd、Double、Decimal、Float、Byte、Bytes、SByte、Int、UInt、ULong、Long、Short、UShort、Char、Chars、String、String2、Hash、Bool、ArrayElement、ReplaceNumbers、ReplaceSymbols、Replace、ClampString、Word、Words、WordsArray、Guid、Uuid、RandomLocale、AlphaNumeric、Hexadecimal。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。