探索性數據分析 第一篇:統計摘要與列的類型

2021-02-23 Pandas中文社區

統計摘要

摘要統計包括平均值、四分位數和標準差。.describe 方法將在DataFrame中的所有數字列上計算這些測量值。

1. 加載數據集:

>>> import pandas as pd>>> import numpy as np>>> fueleco = pd.read_csv("data/vehicles.csv.zip")>>> fueleco       barrels08  barrelsA08  ...  phevHwy  phevComb0      15.695714         0.0  ...        0         01      29.964545         0.0  ...        0         02      12.207778         0.0  ...        0         03      29.964545         0.0  ...        0         04      17.347895         0.0  ...        0         0...          ...         ...  ...      ...       ...39096  14.982273         0.0  ...        0         039097  14.330870         0.0  ...        0         039098  15.695714         0.0  ...        0         039099  15.695714         0.0  ...        0         039100  18.311667         0.0  ...        0         0

2. 調用個別摘要統計方法,如 .mean, .std , 和 .quantile :

>>> fueleco.mean()  barrels08         17.442712barrelsA08         0.219276charge120          0.000000charge240          0.029630city08            18.077799                   ...     youSaveSpend   -3459.572645charge240b         0.005869phevCity           0.094703phevHwy            0.094269phevComb           0.094141Length: 60, dtype: float64>>> fueleco.std()  barrels08          4.580230barrelsA08         1.143837charge120          0.000000charge240          0.487408city08             6.970672                   ...     youSaveSpend    3010.284617charge240b         0.165399phevCity           2.279478phevHwy            2.191115phevComb           2.226500Length: 60, dtype: float64>>> fueleco.quantile(...     [0, 0.25, 0.5, 0.75, 1]... )        barrels08  barrelsA08  ...  phevHwy  phevComb0.00   0.060000    0.000000  ...      0.0       0.00.25  14.330870    0.000000  ...      0.0       0.00.50  17.347895    0.000000  ...      0.0       0.00.75  20.115000    0.000000  ...      0.0       0.01.00  47.087143   18.311667  ...     81.0      88.0

3. 調用 .describe 方法:

>>> fueleco.describe()           barrels08   barrelsA08  ...      phevHwy     phevCombcount  39101.00...  39101.00...  ...  39101.00...  39101.00...mean     17.442712     0.219276  ...     0.094269     0.094141std       4.580230     1.143837  ...     2.191115     2.226500min       0.060000     0.000000  ...     0.000000     0.00000025%      14.330870     0.000000  ...     0.000000     0.00000050%      17.347895     0.000000  ...     0.000000     0.00000075%      20.115000     0.000000  ...     0.000000     0.000000max      47.087143    18.311667  ...    81.000000    88.000000

4. 要獲得對象列的匯總統計,使用 .include 參數:

>>> fueleco.describe(include=object)                drive eng_dscr  ...   modifiedOn startStopcount         37912    23431  ...        39101      7405unique            7      545  ...           68         2top     Front-Wh...    (FFS)  ...  Tue Jan ...         Nfreq          13653     8827  ...        29438      5176

我做過數據分析培訓,在教完客戶關於.describe方法後,客戶簡直要拍腦袋了。當我問問題出在哪裡時,他們回答說,他們已經花了幾周的時間為他們的資料庫實現了這種行為。

默認情況下,.describe會對數字列計算摘要統計。你可以通過include參數來告訴該方法包含非數字數據類型。請注意,這將顯示對象列的唯一值的計數、最頻繁的值(頂部)及其頻率計數。

有一個小竅門,往往能讓更多的數據出現在屏幕上,那就是轉置一個DataFrame。我發現這對.describe方法的輸出很有用:

>>> fueleco.describe().T                count         mean  ...       75%          maxbarrels08     39101.0    17.442712  ...    20.115    47.087143barrelsA08    39101.0     0.219276  ...     0.000    18.311667charge120     39101.0     0.000000  ...     0.000     0.000000charge240     39101.0     0.029630  ...     0.000    12.000000city08        39101.0    18.077799  ...    20.000   150.000000...               ...          ...  ...       ...          ...youSaveSpend  39101.0 -3459.572645  ... -1500.000  5250.000000charge240b    39101.0     0.005869  ...     0.000     7.000000phevCity      39101.0     0.094703  ...     0.000    97.000000phevHwy       39101.0     0.094269  ...     0.000    81.000000phevComb      39101.0     0.094141  ...     0.000    88.000000

列的類型

你可以簡單地通過觀察列的類型來搜集pandas中數據的信息。在這個配方中,我們將探索列的類型。

1. 檢查 .dtypes 屬性:

>>> fueleco.dtypesbarrels08     float64barrelsA08    float64charge120     float64charge240     float64city08          int64               ...    modifiedOn     objectstartStop      objectphevCity        int64phevHwy         int64phevComb        int64Length: 83, dtype: object

2. 總結列的類型:

>>> fueleco.dtypes.value_counts()float64    32int64      27object     23bool        1dtype: int64

當你用pandas讀取一個CSV文件時,它必須推斷出列的類型。這個過程看起來是這樣的:

請注意,如果你使用parse_dates,參數,有可能有些列被轉換為datetimes。

通過查看.dtypes的輸出,我可以了解到更多關於數據的信息,而不僅僅是數據類型。我可以看到某些數據是否是字符串或缺失的值。對象類型可能是字符串或分類數據,但也可能是類似數字的值,需要推敲一下,使其成為數字。我通常不考慮整數列。我傾向於將它們作為連續值來處理。如果值是浮點值,這說明該列可以是:

浮點值有缺失值

缺少一些值的整數值,因此被轉換為浮動值。

當pandas將列轉換為浮點數或整數時,它使用這些類型的64位版本。如果你知道你的整數未能進入某個範圍(或者你願意在浮點數上犧牲一些精度),你可以通過將這些列轉換為使用較少內存的列來節省一些內存。

>>> fueleco.select_dtypes("int64").describe().T                count         mean  ...     75%     maxcity08        39101.0    18.077799  ...    20.0   150.0cityA08       39101.0     0.569883  ...     0.0   145.0co2           39101.0    72.538989  ...    -1.0   847.0co2A          39101.0     5.543950  ...    -1.0   713.0comb08        39101.0    20.323828  ...    23.0   136.0...               ...          ...  ...     ...     ...year          39101.0  2000.635406  ...  2010.0  2018.0youSaveSpend  39101.0 -3459.572645  ... -1500.0  5250.0phevCity      39101.0     0.094703  ...     0.0    97.0phevHwy       39101.0     0.094269  ...     0.0    81.0phevComb      39101.0     0.094141  ...     0.0    88.0

我們可以看到,city08和comb08列的值不超過150。NumPy中的iinfo函數會向我們展示整數類型的限制。我們不想為這一列使用int8,但我們可以使用int16。通過轉換為該類型,該列將使用25%的內存。

>>> np.iinfo(np.int8)iinfo(min=-128, max=127, dtype=int8)>>> np.iinfo(np.int16)iinfo(min=-32768, max=32767, dtype=int16)>>> fueleco[["city08", "comb08"]].info(memory_usage="deep")<class 'pandas.core.frame.DataFrame'>RangeIndex: 39101 entries, 0 to 39100Data columns (total 2 columns): ---  -  ----   0   city08  39101 non-null  int64 1   comb08  39101 non-null  int64dtypes: int64(2)memory usage: 611.1 KB>>> (...     fueleco[["city08", "comb08"]]...     .assign(...         city08=fueleco.city08.astype(np.int16),...         comb08=fueleco.comb08.astype(np.int16),...     )...     .info(memory_usage="deep")... )<class 'pandas.core.frame.DataFrame'>RangeIndex: 39101 entries, 0 to 39100Data columns (total 2 columns): ---  -  ----   0   city08  39101 non-null  int16 1   comb08  39101 non-null  int16dtypes: int16(2)memory usage: 152.9 KB

請注意,在NumPy中也有一個類似的finfo函數用於檢索float信息。

對於字符串列來說,節約內存的一個選擇是將它們轉換為類別。如果一個字符串列的每個值都是唯一的,這將會減慢pandas的速度,並使用更多的內存,但如果你的cardinality很低,你可以節省很多內存。make列的cardinality較低,但model列的cardinality較高,該列的內存節省較少。

下面,我們將演示只拉出這兩列。但我們不會得到一個Series,而是會用一個只包含該列名的列表做索引。這將給我們返回一個有單列的DataFrame。我們將更新列類型為分類,並查看內存使用情況。記住要傳入memory_usage='deep'來獲取對象列的內存使用情況。

>>> fueleco.make.nunique()134>>> fueleco.model.nunique()3816>>> fueleco[["make"]].info(memory_usage="deep")<class 'pandas.core.frame.DataFrame'>RangeIndex: 39101 entries, 0 to 39100Data columns (total 1 columns): ---  -  ----   0   make    39101 non-null  objectdtypes: object(1)memory usage: 2.4 MB>>> (...     fueleco[["make"]]...     .assign(make=fueleco.make.astype("category"))...     .info(memory_usage="deep")... )<class 'pandas.core.frame.DataFrame'>RangeIndex: 39101 entries, 0 to 39100Data columns (total 1 columns): ---  -  ----   0   make    39101 non-null  categorydtypes: category(1)memory usage: 90.4 KB>>> fueleco[["model"]].info(memory_usage="deep")<class 'pandas.core.frame.DataFrame'>RangeIndex: 39101 entries, 0 to 39100Data columns (total 1 columns): ---  -  ----   0   model   39101 non-null  objectdtypes: object(1)memory usage: 2.5 MB>>> (...     fueleco[["model"]]...     .assign(model=fueleco.model.astype("category"))...     .info(memory_usage="deep")... )<class 'pandas.core.frame.DataFrame'>RangeIndex: 39101 entries, 0 to 39100Data columns (total 1 columns): ---  -  ----   0   model   39101 non-null  categorydtypes: category(1)memory usage: 496.7 KB

相關焦點

  • 統計基礎:【24】統計圖表
    威廉姆·普萊菲爾《商業和政治圖解》中的條形圖其後,統計圖表被越來越廣泛的運用於醫學、經濟、戰爭傷亡、貧困調查等領域。約翰普林斯頓傑出的統計學家約翰·圖基(John Tukey)在1977年出版了具有開創性的著作《探索性數據分析》。
  • 統計基礎:統計圖表
    早在16世紀,概率論基礎、微積分、對數等統計數學理論就已經被發現並應用於實際,但直到1750-1800年,人們才發明了統計圖表來展示統計數據。
  • 核心期刊SCI論文發表 | 學術論文英文摘要寫作技巧(詳細攻略)
    下面作者結合兩篇英文摘要對英文摘要的具體寫作進行分析研究,並結合國際性學術刊物上發表論文所要求的英文摘要特點,談談英文摘要的寫作方法.       下面兩篇摘要第一篇是摘自國外學者寫的,第二篇是摘自一名國內在校博士寫的.通過對這兩篇摘要進行對比分析研究,讓我們更加明確的了解英文摘要的寫作規範.
  • 質控數據分析:質控數據失控的處置及解釋
    微信:18620111147  電話:186 2011 1147;點擊標題下方藍字「實驗室ISO17025」關注我們 我們先看下質控數據的典型8種情況:在記錄控制數據時,應同時記錄對解釋控制數據有重要意義的所有信息,以便為此後發生失控時查找失控的原因提供可能。
  • Charlie:籤證分配數據的最新統計
    在4月23日IIUSA大會上,國務院籤證辦公室主任Charles Oppenheim給出了排期預測(參考閱讀:Charlie談排期|IIUSA大會快訊),以及籤證分配統計的最新數據。排期的情況,上面的這篇文章已經介紹了。今天,根據行業協會IIUSA發布的此次會議幻燈片,給大家做個對於籤證分配統計的詳細解讀。
  • R語言實戰:基本統計分析
    ,可以檢驗數據與預期分布的擬合程度。在統計實踐中,卡方統計量的最常見用法是與 r x c 列聯表一起使用,以評估對變量間獨立性的零假設是否合理。hypothesis: true difference in means is not equal to 095 percent confidence interval: 55.69010 67.28862sample estimates:mean of x mean of y 95.46809 33.97872多於兩組的情況方差分析
  • Excel數據分析工具:直方圖
    直方圖的意義及作用,在上面的歷史文章中已經介紹過,直方圖是一種特殊的柱形圖,X軸是分組,Y軸是頻數,主要是用來比較數據的分布狀況。Excel數據分析工具中的直方圖模塊,除了可以直接用直方圖對數據做出分析外,還有柏拉圖的內容。柏拉圖在有些地方又稱為帕累託圖(Pareto chart)、排列圖或主次圖,在問題分析和解決過程中經常會被使用, 特別是製造業生產的質量控制。
  • Python的數據可視化:對比7種工具包
    在這篇文章中,我們將運用真實世界的數據,然後使用這些庫進行數據的可視化。當我們這樣做的時候,我們將發現,每個庫最適合用在哪裡,以及如何利用Python數據可視化系統最有效。探索數據集  在我們進行數據可視化之前,讓我們快速查看一下我們將要用到的數據集。我們將用到的據來自openflights。我們將用到 route,airport,和airline這三個數據。
  • 【日本警視廳】交通安全事故 / 安全帽 數據分析
    警視廳為東京都警察機構,在交通安全推動上不留餘力,在宣導方面,除了嘗試說明外更有詳細的數據分析,強調安全帽的重要性
  • Excel數據分析必備技能:對數據按範圍多條件劃分等級的判定套路
    免費關注置頂公眾號或設為星標,否則可能收不到文章個人微信號 | (ID:LiRuiExcel520)微信服務號 | 跟李銳學Excel(ID:LiRuiExcel)微信公眾號 | Excel函數與公式(ID:ExcelLiRui)職場辦公中經常要對數據進行整理和分析
  • 《美國數學建模競賽》統計數據下載網址
    美賽統計數據下載網址中國國家統計局:
  • 國抽探索性研究:49個上市產品的處方、工藝、質量標準怎麼辦?
    49個品種的探索性研究情況。近年來,國家藥品抽檢堅持以問題為導向,在按照法定標準檢驗藥品的基礎上,依據總局發布的《國家藥品計劃抽驗質量分析指導原則》(食藥監藥化監〔2014〕93號),針對可能存在的質量問題,應用國家藥品標準以外的檢驗項目和檢測方法對藥品質量進行進一步探索性研究,研究內容主要包括處方、原輔料、生產工藝、包裝材料等方面對可能影響藥品內在質量的相關因素
  • 大仙SEO:如何成為百度搜索結果裡的精選摘要?
    (如圖,白楊SEO補)(百度搜索SEO入門怎麼學截圖,白楊SEO公眾號菜單欄有SEO入門相關文章)百度的精選摘要,最初是用於移動端中,特別是2017年熊掌號出來的時候。當時的該種展現,已經超過廣告位的排名,因此也有別稱,叫「0位排名」。很多人又覺得百度這一方法,抄襲了谷歌,我是不贊同的,百度在PC採用精選是遲早的事。
  • 高中數學:概率統計應用題
    大膽的設定隨機變量,區分不同變量的類型,找出它們之間的內在聯繫,建立相應的數學模型。有關概率統計的應用問題,其關鍵就是要弄清楚待解問題的本質:明確已知與待求,找出數學模型;找出已知與待求之間的關係;還要確定解決問題的過程。這是解概率統計應用題所必需的。
  • 數據挖掘實戰:帶你做客戶價值分析(附代碼)
    分析方法消費金額,一般表示一段時間內,消費的總額。但是,因為航空票價收到距離和艙位等級的影響,同樣金額對航空公司價值不同因此,需要修改指標。選定變量,艙位因素=艙位所對應的折扣係數的平均值=C,距離因素=一定時間內積累的飛行裡程=M再考慮到,航空公司的會員系統,用戶的入會時間長短能在一定程度上影響客戶價值,所以增加指標L=入會時間長度=客戶關係長度總共確定了五個指標,消費時間間隔R,客戶關係長度L,消費頻率F,飛行裡程M和折扣係數的平均值C以上指標,作為航空公司識別客戶價值指標,記為LRFMC模型
  • Google發布統計數據:減少了一半的垃圾郵件連結
    日前,Google發布了一系列的統計數據,其中揭示了這家搜索巨頭是如何在2017年打擊網絡垃圾郵件的。這些統計數據是Google年度網絡垃圾郵件報告的一部分。 該報告包含了有關全年使用的最常見的網絡垃圾郵件策略的信息,以及Google在多大程度上對不良行為者進行打擊。
  • 數據治理 | 處理數據:兩位經驗研究者的經驗
    特別是當連結地址以一致的方式組織時,Perl能夠以非常簡單的語法允許用戶獲取和存儲大量發布在Web上的文件類型。²我們主要運用Stata(不是唯一)來處理原始數據並準備分析。Stata允許用戶使用幾個簡單的命令和一個非常簡單的方法從多種格式(如CSV,TXT,XLSX)中導入數據。SAS也是一個有用的數據處理工具,它能比Stata更有效地管理大型數據集,但它的價格要高得多,而且令人生畏。
  • 科研寫作:英語論文標題、摘要與關鍵詞解析
    對論文標題和摘要則考慮甚少,而對關鍵詞則關注更少,通常只是在期刊投稿系統中臨時編寫輸入。但實際上,這三個要素 – 題目、摘要和關鍵詞是實現論文發表的非常關鍵的成功因素。題目、摘要和關鍵詞對研究的交流具有關鍵性作用。
  • Python數據分析:股票數據分析案例
    步驟:準備數據可視化數據、審查數據處理數據根據ACF、PACF定階擬合ARIMA模型預測準備數據    # 指定股票分析開始日期    start_date = datetime.datetime(2009, 1, 1)    # 指定股票分析截止日期    end_date = datetime.datetime(2019, 4, 1)    # 股票代碼    stock_code = '600519.SS'    # 滬市貴州茅臺
  • 2020醫療糾紛案件大數據——北京篇
    這是我第四次進行地方類案司法數據分析,我的統計口徑也趨於成熟和穩定,帶來的結果是統計結果也趨於穩定,無責案件比例、重點科室、調撤率等指標每年上下浮動不多。我依然覺得這個統計是有意義的,通過收集數據我每年會閱讀大量的類案判決書,不僅增長見識,對類似案件的處理也能積累一點經驗,對未來執業活動和法律服務都有益處,我還是繼續做下去吧。