1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        一行 Python 命令搞定前期數(shù)據(jù)探索性分析

        共 5685字,需瀏覽 12分鐘

         ·

        2020-08-16 13:38

        對(duì)于每個(gè)從事和數(shù)據(jù)科學(xué)有關(guān)的人來(lái)說(shuō),前期的數(shù)據(jù)清洗和探索一定是個(gè)花費(fèi)時(shí)間的工作。毫不夸張的說(shuō),80%的時(shí)間我們都花在了前期的數(shù)據(jù)工作中,包括清洗、處理、EDA(Exploratory Data Analysis,探索性數(shù)據(jù)分析)等。前期的工作不僅關(guān)乎數(shù)據(jù)的質(zhì)量,也關(guān)乎最終模型預(yù)測(cè)效果的好壞。

        每當(dāng)我們手上出現(xiàn)一份新的數(shù)據(jù)時(shí),我們都需要事先通過(guò)人為地觀察、字段釋義等方式預(yù)先對(duì)數(shù)據(jù)進(jìn)行熟悉與理解。在清洗、處理完數(shù)據(jù)之后才會(huì)開(kāi)始真正的 EDA 過(guò)程。

        這個(gè)過(guò)程最通用的操作無(wú)非就是對(duì)現(xiàn)有的數(shù)據(jù)做基本性的統(tǒng)計(jì)、描述,包括平均值、方差、最大值與最小值、頻數(shù)、分位數(shù)、分布等。實(shí)際上往往都是比較固定且機(jī)械的。

        在 R 語(yǔ)言中 skimr 包提供了豐富的數(shù)據(jù)探索性統(tǒng)計(jì)信息,比 Pandas 中的 describe() 基本統(tǒng)計(jì)信息更為豐富一些。

        01-skmir

        但在 Python 社區(qū)中,我們同樣也可以實(shí)現(xiàn) skmir 的功能,甚至比 skmir 有過(guò)之而無(wú)不及。那就是使用 pandas-profiling 庫(kù)來(lái)幫助我們搞定前期的數(shù)據(jù)探索工作。

        快速使用

        通過(guò) pip install pandas-profiling 之后我們就可以直接導(dǎo)入并使用了。我們只需要通過(guò)其一行核心代碼 ProfileReport(df, **kwargs) 即可實(shí)現(xiàn):

        import pandas as pd
        import seaborn as sns
        from pandas_profiling import ProfileReport

        titanic = sns.load_dataset("Titanic")

        ProfileReport(titanic, title = "The EDA of Titanic Dataset")

        如果我們是在 Jupyter Notebook 中使用,則會(huì)在 Jupyter Notebook 中渲染最后直接輸出到單元格中。

        02-profile

        pandas-profiling 庫(kù)也擴(kuò)展了 DataFrame 對(duì)象方法,這意味著我們也可以通過(guò)像調(diào)用方法一樣使用 DataFrame.profile_report() 來(lái)實(shí)現(xiàn)和上述一樣的效果。

        無(wú)論使用哪種方式,最后都是生成一個(gè) ProfileReport 對(duì)象;如果要進(jìn)一步貼合 Jupyter Notebook,可以直接調(diào)用 to_widgets()to_notebook_iframe() 來(lái)分別生成掛架或?qū)?yīng)的組件,在展示效果上會(huì)更加美觀,而不是在輸出欄進(jìn)行展示。

        03-widgets

        如果不在 Jupyter Notebook 中直接使用,而是使用其他 IDE,那么我們可以通過(guò) to_file() 方法來(lái)直接將報(bào)告輸出,需要注意的是最后保存的文件名需要加上擴(kuò)展名 .html

        另外,Pandas-profiling 還和多個(gè)框架、云上平臺(tái)等進(jìn)行了集成,能夠讓我們方便的進(jìn)行調(diào)用,詳情見(jiàn)官網(wǎng)(https://pandas-profiling.github.io/pandas-profiling/docs/master/rtd/pages/integrations.html)。

        進(jìn)一步定制報(bào)告信息

        雖然生成的探索性報(bào)告基本上已經(jīng)能滿(mǎn)足我們了解數(shù)據(jù)的簡(jiǎn)單需求,但是當(dāng)中輸出的信息也有些不足或是冗余。好在 pandas-profiling 也給我們提供了自己定制的可能。這些定制的配置最終會(huì)寫(xiě)入到 yaml 文件中。

        在官方文檔中列出了幾個(gè)我們能夠進(jìn)一步調(diào)整的部分,分別對(duì)應(yīng)了報(bào)告 Tab 欄的各部分標(biāo)簽:

        • vars:主要用于調(diào)整數(shù)據(jù)中字段或變量在報(bào)告中的呈現(xiàn)的統(tǒng)計(jì)指標(biāo)
        • missing_diagrams:主要涉及到關(guān)于缺失值字段的可視化展示
        • correlations:顧名思義即調(diào)整有關(guān)各字段或變量之間相關(guān)關(guān)系的部分,包括是否計(jì)算相關(guān)系數(shù)、以及相關(guān)的閾值等
        • interactions:主要涉及兩兩字段或變量之前的相關(guān)關(guān)系圖呈現(xiàn)
        • samples:分別對(duì)應(yīng)了 Pandas 中 head()tail() 方法,即預(yù)覽前后多少條數(shù)據(jù)

        這些部分還有許多可以指定的參數(shù),感興趣的朋友可以直接參考官方文檔(https://pandas-profiling.github.io/pandas-profiling/docs/master/rtd/pages/advanced_usage.html),本文就不多加贅述了。

        于是我們可以直接在代碼中手動(dòng)寫(xiě)入并進(jìn)行調(diào)整,就像這樣:

        profile_config = {
            "progress_bar"False
            "sort""ascending",
            "vars": {
                "num": {"chi_squared_threshold"0.95},
                "cat": {"n_obs"10}
            }, 
            "missing_diagrams": {
                'heatmap'False,
                'dendrogram'False,
            }
        }

        profile = titanic.profile_report(**profile_config)
        profile.to_file("titanic-EDA-report.html")

        將所有配置的信息寫(xiě)在一個(gè)字典變量中,再通過(guò) **variable 的形式將鍵值對(duì)進(jìn)行解包使其能夠根據(jù)鍵來(lái)對(duì)應(yīng)到相應(yīng)的參數(shù)中。

        除了代碼中的配置寫(xiě)法外,如果你稍微了解一點(diǎn) yaml 配置文件的寫(xiě)法,那么我們也無(wú)需在代碼中逐個(gè)寫(xiě)入,而是可以通過(guò)在 yaml 文件中修改。修改的不僅官方文檔中所列出的配置選項(xiàng),還能修改未列出的參數(shù)。由于配置文件過(guò)長(zhǎng),這里我只放出基于官方默認(rèn)配置文件 config_default.yaml 自己做出修改的部分:

        # profile_config.yml

        vars:
            num:
                quantiles:
                      - 0.25
                      - 0.5
                      - 0.75
                skewness_threshold: 10
                low_categorical_threshold: 5
                chi_squared_threshold: 0.95
            cat:
                length: True
                unicode: True
                cardinality_threshold: 50
                n_obs: 5
                chi_squared_threshold: 0.95
                coerce_str_to_date: False
            bool:
                n_obs: 3
            file:
                active: False
            image:
                active: False
                exif: True
                hash: True
        sort: "desceding"

        修改完 yaml 文件之后,我們只需在生成報(bào)告時(shí)通過(guò) config_file 參數(shù)指定配置文件所在的路徑即可,就像這樣:

        df.profile_report(config_file = "你的文件路徑.yml")

        通過(guò)將配置文件與核心代碼相分離,以提高我們代碼的簡(jiǎn)潔性與可讀性。

        最后

        pandas-profiling 庫(kù)為我們提供了一種方便、快捷的數(shù)據(jù)探索方式,提供了比基本統(tǒng)計(jì)信息更為豐富的一些信息(如缺失值相關(guān)圖、相關(guān)關(guān)系圖等),能夠?yàn)槲覀兦捌诘臄?shù)據(jù)探索工作節(jié)省出大量的時(shí)間。

        不過(guò)由于 pandas-profiling 生成的報(bào)告維度相對(duì)來(lái)說(shuō)比較固定和模板化,所以對(duì)于想讓報(bào)告更加豐富的朋友來(lái)說(shuō)你可能需要自己再去做一些額外的工作了;同時(shí),需要注意的是,pandas-profiling 比較適合在中小數(shù)據(jù)集中使用。隨著數(shù)據(jù)量的增加,報(bào)告渲染的速度會(huì)大幅度變慢且生成報(bào)告會(huì)耗時(shí)更多。

        如果你仍有對(duì)大數(shù)據(jù)集進(jìn)行 EDA 的需要,那么像官方文檔說(shuō)的那樣你最好是通過(guò)抽樣或者采樣的方式來(lái)在不影響數(shù)據(jù)分布的情況下減少樣本量。官方也有表示會(huì)在以后的版本中使用 modin、sparkdask 等高性能的庫(kù)或框架作為可擴(kuò)展的后端,到那時(shí)也許生成大數(shù)據(jù)集的 EDA 報(bào)告時(shí)可能就不是問(wèn)題了。

        作者:100gle,練習(xí)時(shí)長(zhǎng)不到兩年的非正經(jīng)文科生一枚,喜歡敲代碼、寫(xiě)寫(xiě)文章、搗鼓搗鼓各種新事物;現(xiàn)從事有關(guān)大數(shù)據(jù)分析與挖掘的相關(guān)工作。


        贊 賞 作 者



        Python中文社區(qū)作為一個(gè)去中心化的全球技術(shù)社區(qū),以成為全球20萬(wàn)Python中文開(kāi)發(fā)者的精神部落為愿景,目前覆蓋各大主流媒體和協(xié)作平臺(tái),與阿里、騰訊、百度、微軟、亞馬遜、開(kāi)源中國(guó)、CSDN等業(yè)界知名公司和技術(shù)社區(qū)建立了廣泛的聯(lián)系,擁有來(lái)自十多個(gè)國(guó)家和地區(qū)數(shù)萬(wàn)名登記會(huì)員,會(huì)員來(lái)自以工信部、清華大學(xué)、北京大學(xué)、北京郵電大學(xué)、中國(guó)人民銀行、中科院、中金、華為、BAT、谷歌、微軟等為代表的政府機(jī)關(guān)、科研單位、金融機(jī)構(gòu)以及海內(nèi)外知名公司,全平臺(tái)近20萬(wàn)開(kāi)發(fā)者關(guān)注。

        長(zhǎng)按掃碼添加“Python小助手” 

        進(jìn)入 P Y 交 流 群

        ▼點(diǎn)擊成為社區(qū)會(huì)員   喜歡就點(diǎn)個(gè)在看吧

        瀏覽 48
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            免费无遮挡 视频 | 国产黄色影院 | 欧美精品激情久久久久久 | 免费性视频 | 好湿好紧好多水好想 | 无码免费看 | 伊人久久狠狠色成人综合 | 黄色影像影片免费观看 | 激情三级视频 | 影音先锋成人资源在线 |