提高效率,拒绝重复!7个Pandas数据分析高级技巧

栏目: IT技术 · 发布时间: 4年前

内容简介:作者:Revert       编译:1+1=6

提高效率,拒绝重复!7个Pandas数据分析高级技巧

标星★ 置顶 公众号      爱你们    

作者:Revert       编译:1+1=6

提高效率,拒绝重复!7个Pandas数据分析高级技巧

1

用df.groupby ().iter ()分析数据样本

与Excel相比,在Jupyter Notebook中逐行或逐组地查看数据集通常比较困难。一个有用的技巧是 使用生成器并使用 Ctrl + Enter 而不是 Shift + Enter 来迭代地查看同一个单元格中的不同样本。

首先,使用  . g roupby() (或 .iterrows() )生成器创建一个单元格,并添加 ._ iter__()

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

然后,使用键盘快捷键 Ctrl + Enter ,尽可能多地运行以下单元格,以观察对你来说最重要的数据:

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

下面是一个分析泰坦尼克号数据集中的乘客的例子,这些乘客的机票号码完全相同。你没有能力把每一组乘客单独分开,所以使用这种方法可以让你用一种非常简单的方法分析每一组乘客:

提高效率,拒绝重复!7个Pandas数据分析高级技巧

2

用于数据探索和数据质量评估技巧

在数据科学中,我们常常倾向于从头开始编写我们的数据分析代码。因为所有的数据集都是不同的。然而,有一个神奇的  pandas_profiling  包使得这种逻辑毫无意义。这个包实际上自动化了数据探索和数据质量评估步骤!看一看:

提高效率,拒绝重复!7个Pandas数据分析高级技巧

显然,它不能解决所有的数据分析问题,例如,如果数据中有文本变量。但它应该是你开始分析任何数据集的方式!

3

多重chain

一旦你理解了可以使用链接方法组合多个操作,Pandas就变得非常有趣。链接基本上是在相同的代码“行”中添加操作。

运行下面的代码:

  • 在数据集中添加新列( .merge

  • 计算女乘客比例( .apply(female_proportion)

  • 乘客人数超过一人的团体( df.Ticket.value_counts()>1

  • 拥有相同的票号( .groupby('Ticket ')

我们不需要创建新的dataframes,新的变量等任何新的东西。链接方法允许你把你的想法“翻译”成实际的操作。

def female_proportion(dataframe):
    return (dataframe.Sex=='female').sum() / len(dataframe)

female_proportion(df)
df.merge(
    df.loc[
        df.Ticket.isin(
            df.Ticket.value_counts().loc[
                df.Ticket.value_counts()>1
            ].index
        )
    ].groupby('Ticket').apply(female_proportion) \
     .reset_index().rename(columns={0:'proportion_female'}),
     how='left', on='Ticket'
)

下面的例子也是chain方法的一个很好的例子:

4

绘制系数/特征重要性与风格

如果你在做机器学习,如果用外行的话来解释清楚你的机器学习模型你觉得特别困难。 这里有一个方法可以帮助你,那就是 在你的模型中有一个很好的视觉系数或者特征重要性。

提高效率,拒绝重复!7个Pandas数据分析高级技巧

以下是我们一直在重复使用的可视化结果(避免重新造轮子):

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

结果如下:

提高效率,拒绝重复!7个Pandas数据分析高级技巧

变量是根据系数(或变量重要性)进行 排序 的,彩色条允许我们快速找到最重要的变量。Pclass列有最大的(负)系数,它的绝对值是第二大的系数Embarked_Q的两倍。

5

sklearn pandas

如果你是一名Pandas爱好者,你会不止一次地意识到,与Pandas DataFrame和sklearn联合并不总是最佳选择。但不要就此止步。一些贡献者创建了sklearn_panda,它介于这两个包之间,为他们架起桥梁。它用一个Pandas友好的 DataFrameMapper 替换了sklearn的 ColumnTransformer

from sklearn.impute import SimpleImputer
from sklearn.preprocessing import OneHotEncoder
from sklearn.preprocessing import MinMaxScaler, StandardScaler
from sklearn_pandas import DataFrameMapper
from category_encoders import LeaveOneOutEncoder

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 ()方法后的输出示例:

提高效率,拒绝重复!7个Pandas数据分析高级技巧

6

tqdm

在处理大型数据集时,数据操作需要时间。 使用tqdm来跟踪你的代码是否正在实际运行,以及它需要多长时间 ,而不是在你的Jupyter Notebook无聊的等待,而不知道发生了什么。 对于运行速度太慢的脚本,这也是一种尽早中止的好方法。

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

现在所有的Pandas DataFrame 都有了新的方法:

  • .progress_apply, .progress_applymap

  • .progress_map

它们与 apply、 applymap 和 map 一样,只是它们将绘制一个进度条。很酷!

7

使用.to clipboard()粘贴数据到Excel中

如果你是Excel的忠实用户, 尽管Pandas有许多选项,但是通过最少的编码很难获得类似的输出水平。

有一件事可以这么干,那就是把我们的结果导出到Excel中。但是 没有使用.to_excel方法 。相反,我们使用更流畅的 .to_clipboard(index=False) 将数据复制到剪贴板。然后在Excel中使用Ctrl + V将数据粘贴到当前电子表格中。

2020年第 78 篇文章

量化投资与机器学习微信公众号,是业内垂直于 Quant、MFE、 Fintech、AI、ML 等领域的 量化类主流自媒体。 公众号拥有来自 公募、私募、券商、期货、银行、保险资管、海外 等众多圈内 18W+ 关注者。每日发布行业前沿研究成果和最新量化资讯。

你点的每个“在看”,都是对我们最大的鼓励


以上所述就是小编给大家介绍的《提高效率,拒绝重复!7个Pandas数据分析高级技巧》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

x86/x64体系探索及编程

x86/x64体系探索及编程

邓志 / 电子工业出版社 / 2012-10-1 / 119.00元

本书是对Intel手册所述处理器架构的探索和论证。全书共五大部分,从多个方面对处理器架构相关的知识进行了梳理介绍。书中每个章节都有相应的测试实验,所运行的实验例子都可以在真实的机器上执行。 通过阅读本书,读者应能培养自己动手实验的能力。如果再有一些OS方面的相关知识,基本上就可以写出自己简易的OS核心。 本书适合有一定的x86基础知识,且对了解处理器架构及编程感兴趣的读者阅读。一起来看看 《x86/x64体系探索及编程》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具