提高效率,拒绝重复!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数据分析高级技巧》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

Writing Windows VxDs and Device Drivers, Second Edition

Writing Windows VxDs and Device Drivers, Second Edition

Karen Hazzah / CMP / 1996-01-12 / USD 54.95

Software developer and author Karen Hazzah expands her original treatise on device drivers in the second edition of "Writing Windows VxDs and Device Drivers." The book and companion disk include the a......一起来看看 《Writing Windows VxDs and Device Drivers, Second Edition》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具