<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          5 個(gè)pandas神級操作,最后一個(gè)長見識了!

          共 3360字,需瀏覽 7分鐘

           ·

          2020-10-30 02:06

          來源:Python數(shù)據(jù)科學(xué)

          作者:東哥起飛

          雖然雙節(jié),但東哥還是不忘更新。最近發(fā)現(xiàn)了幾個(gè)pandas的騷操作,小巧實(shí)用,個(gè)個(gè)經(jīng)典,下面快速介紹下。

          1、df.groupby().__iter__()分析數(shù)據(jù)樣本

          在Jupyter Notebook中通常很難像使用Excel一樣難逐行或逐個(gè)組地瀏覽數(shù)據(jù)集。一個(gè)非常有用的技巧是使用 generator 生成器和Ctrl + Enter組合,而不是我們常規(guī)的Shift + Enter運(yùn)行整個(gè)單元格。這樣做就可以很方便地迭代查看同一單元格中的不同樣本了。

          首先在單元格中使用.groupby()(或.iterrows())和.__iter __()創(chuàng)建一個(gè)生成器

          generator?=?df.groupby(['identifier']).__iter__()

          然后,根據(jù)自己需要運(yùn)行的次數(shù),使用鍵盤快捷鍵Ctrl +?Enter逐個(gè)查看數(shù)據(jù)。

          group_id,?grouped_data?=?generator.__next__()
          print(group_id)?
          grouped_data

          下面是taitanic數(shù)據(jù)集的示例。正常分析的時(shí)候,所有乘客都混在一起,我們是不能單獨(dú)地隔離每組乘客的,使用這種方法就可以非常簡單地分析一組乘客。

          2、特征重要性/參數(shù)的可視化

          如果我們做機(jī)器學(xué)習(xí),那么模型的參數(shù)或者特征的重要性是必不可少的一環(huán)。通常我們會(huì)像下面這樣查看參數(shù),但小數(shù)點(diǎn)太多了,真的容易花眼,這樣非常不便于分析和比較。

          所以,我們對上面代碼稍加改造,用鏈?zhǔn)讲僮魇紫萺ound保留小數(shù)點(diǎn)后兩位數(shù)字,然后sort_values進(jìn)行從大到小的排序,最后用style.bar進(jìn)行可視化,顏色可隨意設(shè)置,這樣不但可以區(qū)分大小,也可區(qū)分正負(fù)。

          pd.DataFrame({
          ????'variable':?variables,
          ????'coefficient':?model.coef_[0]
          })?\
          ????.round(decimals=2)?\
          ????.sort_values('coefficient',?ascending=False)?\
          ????.style.bar(color=['grey',?'lightblue'],?align='zero')

          上面這段代碼是可以復(fù)用的,之后每次展示參數(shù)或者特征重要性的時(shí)候,直接替換字段名就ok了。下面是可視化效果。

          3、sklearn_pandas

          時(shí)間長了我們會(huì)發(fā)現(xiàn)sklearn和pandas搭配有時(shí)候代碼并不是十分整潔,中間的操作環(huán)節(jié)比較多。推薦一個(gè)連接sklearn和pandas的庫包,它叫sklearn_pandas。它將sklearn的ColumnTransformer替換為pandas的DataFrameMapper。用起來無縫連接,和直接使用sklearn的ColumnTransformer毫無區(qū)別。


          imputer_Pclass?=?SimpleImputer(strategy='most_frequent',?add_indicator=True)
          imputer_Age?=?SimpleImputer(strategy='median',?add_indicator=True)
          imputer_SibSp?=?SimpleImputer(strategy='constant',?fill_value=0,?add_indicator=True)
          imputer_Parch?=?SimpleImputer(strategy='constant',?fill_value=0,?add_indicator=True)
          imputer_Fare?=?SimpleImputer(strategy='median',?add_indicator=True)
          imputer_Embarked?=?SimpleImputer(strategy='most_frequent')

          scaler_Age?=?MinMaxScaler()
          scaler_Fare?=?StandardScaler()

          onehotencoder_Sex?=?OneHotEncoder(drop=['male'],?handle_unknown='error')
          onehotencoder_Embarked?=?OneHotEncoder(handle_unknown='error')

          leaveoneout_encoder?=?LeaveOneOutEncoder(sigma=.1,?random_state=2020)

          mapper?=?DataFrameMapper([
          ????(['Age'],?[imputer_Age,?scaler_Age],?{'alias':'Age_scaled'}),
          ????(['Pclass'],?[imputer_Pclass]),
          ????(['SibSp'],?[imputer_SibSp]),
          ????(['Parch'],?[imputer_Parch]),
          ????(['Fare'],?[imputer_Fare,?scaler_Fare],?{'alias':?'Fare_scaled'}),
          ????(['Sex'],?[onehotencoder_Sex],?{'alias':?'is_female'}),
          ????(['Embarked'],?[imputer_Embarked,?onehotencoder_Embarked]),?
          ????(['Embarked_Pclass_Sex'],?[leaveoneout_encoder])
          ],?df_out=True)?

          mapper.fit(X=train,?y=train['Survived'])?

          下面是fit之后的結(jié)果。

          4、.to_clipboard()

          經(jīng)過數(shù)據(jù)處理和建模后,通常我們最后會(huì)以csv或者excel格式將數(shù)據(jù)輸出,但有的時(shí)候我們需要匯總數(shù)據(jù),這就需要打開生成的excel文件,然后再復(fù)制粘貼。

          但其實(shí)也有更靈活的方法,不通過使用.to_excel方法,也能導(dǎo)出來。pandas還有一個(gè)功能是.to_clipboard(index = False),它可以將數(shù)據(jù)復(fù)制到剪貼板。

          然后,我就可以在正在操作的Excel中直接Ctrl + V將數(shù)據(jù)粘貼到當(dāng)前電子表格中,也是另外一種選擇。

          5、tqdm

          處理大數(shù)據(jù)集時(shí),數(shù)據(jù)處理會(huì)花費(fèi)很多時(shí)間。當(dāng)然,東哥也分享了很多加速運(yùn)行pandas的方法。

          安利一個(gè)Python大數(shù)據(jù)分析神器!

          臥槽!一個(gè)比 pandas 快百倍的大數(shù)據(jù)分析神器!

          12個(gè)Pandas & Numpy函數(shù):數(shù)據(jù)分析提速50%不是問題!

          嫌pandas慢又不想改代碼怎么辦?來試試Modin

          但即使加速了還是要等,Jupyter Notebook運(yùn)行時(shí)有個(gè)缺點(diǎn),就是不知道運(yùn)行的狀態(tài),需要多久。像我們在電腦上復(fù)制粘貼的時(shí)候通常會(huì)顯示需要多久和當(dāng)前的速度,這樣我們提前安排做其它事情還是繼續(xù)等待。

          Python中有個(gè)庫是tqdm,它可以用來跟蹤代碼是否真正在運(yùn)行以及需要花費(fèi)多長時(shí)間,使用方法很簡單。

          from?tqdm?import?notebook
          notebook.tqdm().pandas()

          import之后,pandas的dataframe就有了新的方法。

          • .progress_apply, .progress_applymap

          • .progress_map

          這些方法與apply、applymap和map的使用相同,不同之處是它們將顯示進(jìn)度條。


          PS公號內(nèi)回復(fù)「Python」即可進(jìn)入Python 新手學(xué)習(xí)交流群,一起?100 天計(jì)劃!


          老規(guī)矩,兄弟們還記得么,右下角的 “在看” 點(diǎn)一下,如果感覺文章內(nèi)容不錯(cuò)的話,記得分享朋友圈讓更多的人知道!

          神秘禮包獲取方式

          識別文末二維碼,回復(fù):1024

          瀏覽 60
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  999综合网 | 国产精品无码久久久久久免费 | 亚欧洲精品视频 | 美国 日本 韩国三级三级三级黄色A在线播放 | 国内一级视频 |