of Deep with Keras

基于Keras的深度神经网络应用

著:Jeff 译:人工智能学术前沿

目录

1.基础

2.机器学习

3.简介

4.表格类数据的训练

5.正则化和

6.用于计算机视觉的卷积神经网络

7.生成对抗网络

8.数据集

9.迁移学习

10.Keras的时间序列

11.自然语言处理与语音识别

12.强化学习

13./Other

14.其他神经网络技术

2.4 Apply 函数和 Map函数

Part 2.4: Apply and Map

如果你以前接触过大数据或函数式编程语言,你可能听说过map/。Map和是将创建的任务应用到数据帧()的两个函数。支持函数式编程技术,允许您跨整个数据帧使用函数。除了您编写的函数外,还提供了几个用于数据帧的标准函数。

数据帧中Map函数的使用

Using Map with

map函数允许您通过将列中的某些值映射到其他值来转换列。考虑Auto MPG数据集,其中包含一个字段,该字段包含一个介于1到3之间的值,该值指示每一辆汽车的地理来源。我们可以看到如何使用map函数将这个数字原点转换为每个原点的文本名称。

我们将开始加载自动MPG数据集。

import os
import pandas as pd
import numpy as np
df = pd.read_csv(
    "https://data.heatonresearch.com/data/t81-558/auto-mpg.csv", 
    na_values=['NA', '?'])
pd.set_option('display.max_columns', 7)
pd.set_option('display.max_rows', 5)
display(df)

函数map()的语法格式_map函数_函数map的用法

中的map方法操作单个列。为map提供一个值字典,用于转换目标列。映射键指定目标列中的哪些值应该转换为这些键指定的值。下面的代码展示了map函数如何将1、2和3的数值转换为北美、欧洲和亚洲的字符串值。中的map方法操作单个列。为map提供一个值字典,用于转换目标列。映射键指定目标列中的哪些值应该转换为这些键指定的值。下面的代码展示了map函数如何将1、2和3的数值转换为北美、欧洲和亚洲的字符串值。

# Apply the map
df['origin_name'] = df['origin'].map(
    {1: 'North America', 2: 'Europe', 3: 'Asia'})
# Shuffle the data, so that we hopefully see
# more regions.
df = df.reindex(np.random.permutation(df.index)) 
# Display
pd.set_option('display.max_columns', 7)
pd.set_option('display.max_rows', 10)
display(df)

函数map()的语法格式_map函数_函数map的用法

数据帧中Apply函数的使用

Using Apply with

数据帧的apply函数可以在整个数据帧上运行一个函数。您可以使用传统的命名函数或函数。将针对数据帧中的每一行或每一列执行所提供的函数。函数的轴参数指定是跨行或列运行的。对于axis = 1,使用行。下面的代码计算一个称为 的级数,它是除以。

efficiency = df.apply(lambda x: x['displacement']/x['horsepower'], axis=1)
display(efficiency[0:10])

输出

45 2.

290 2.

313 1.

82 1.

33 2.

249 2.

27 1.

7 2.

302 1.

179 1.

dtype:

现在,您可以将该系列插入到数据框架中,作为新列或替换现有列。下面的代码将这个新系列插入到数据帧中。

df['efficiency'] = efficiency

使用Apply和Map函数的特征工程

with Apply and Map

在本节中,我们将看到如何使用map、apply和分组来计算复杂的特性。数据集为CSV格式:

此URL包含美国政府“SOI税收统计-个人所得税统计”的公共数据。该网站的入口点在这里:

描述该数据的文档位于上面的链接。

对于这个特性,我们将尝试估计每个邮政编码的调整后总收入(AGI)。数据文件包含许多列;但是,您将只使用以下内容:

STATE – 国家(e.g., MO)

– 邮编 (e.g. 63017)

– 年收入的六个不同等级 (1 6)

N1 – 每个的纳税申报单的数量

注意,对于括号中的每个邮政编码,该文件将有六行。您可以跳过邮政编码0或99999。

我们将用这些列创建一个输出CSV;但是,每个邮政编码只有一行。计算收入等级的加权平均值。例如,63017有以下6行:

map函数_函数map()的语法格式_函数map的用法

我们必须把这六行合并成一行。出于隐私考虑,AGI被分成6个部分。我们需要将这些桶组合起来,并估计一个邮政编码的实际AGI。为此,考虑N1的值:

1 = 1 to 25,000

2 = 25,000 to 50,000

3 = 50,000 to 75,000

4 = 75,000 to 100,000

5 = 100,000 to 200,000

6 = 200,000 or more

这些范围的中位数约为:

1 = 12,500

2 = 37,500

3 = 62,500

4 = 87,500

5 = 112,500

6 = 212,500

使用这个你可以估计63017的平均AGI如下:

>>> = 4710 + 2780 + 2130 + 2010 + 5240 + 3510

>>> = 4710 * 12500 + 2780 * 37500 + 2130 * 62500 + 2010 * 87500 + 5240 * + 3510 *

>>> print( / )

88689.

我们从读取政府数据开始。

import pandas as pd
df=pd.read_csv('https://www.irs.gov/pub/irs-soi/16zpallagi.csv')

首先,我们修剪所有邮政编码0或99999。我们还选择了我们需要的三个字段。

df=df.loc[(df['zipcode']!=0) & (df['zipcode']!=99999),
          ['STATE','zipcode','agi_stub','N1']]
pd.set_option('display.max_columns', 0)
pd.set_option('display.max_rows', 10)
display(df)

函数map()的语法格式_函数map的用法_map函数

我们使用map函数将所有值替换为正确的中值。

medians = {1:12500,2:37500,3:62500,4:87500,5:112500,6:212500}
df['agi_stub']=df.agi_stub.map(medians)
pd.set_option('display.max_columns', 0)
pd.set_option('display.max_rows', 10)
display(df)

map函数_函数map()的语法格式_函数map的用法

接下来,我们将数据帧按邮政编码分组。

groups = df.groupby(by='zipcode')

该程序应用一个在组中应用,然后计算AGI估计。

df = pd.DataFrame(groups.apply( 
    lambda x:sum(x['N1']*x['agi_stub'])/sum(x['N1']))) 
    .reset_index()

pd.set_option('display.max_columns', 0)
pd.set_option('display.max_rows', 10)
display(df)

函数map()的语法格式_函数map的用法_map函数

现在可以重命名新的列。

df.clumns = ['zipcode','agi_estimate']

pd.set_option('display.max_columns', 0)
pd.set_option('display.max_rows', 10)
display(df)

函数map的用法_函数map()的语法格式_map函数

最后,我们检查63017的邮政编码是否得到了正确的值。

df[ df['zipcode']==63017 ]

map函数_函数map的用法_函数map()的语法格式

———END———
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,永久会员只需109元,全站资源免费下载 点击查看详情
站 长 微 信: nanadh666

声明:1、本内容转载于网络,版权归原作者所有!2、本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。3、本内容若侵犯到你的版权利益,请联系我们,会尽快给予删除处理!