点击蓝字 关注我们
机器学习和大数据一样,是一个热门且具有点误导性的名词。
很多人第一时间想到的就是机器人坐着学习,但事实并不是如此。机器学习实际上指的是计算机具备像人一样的学习能力,并从大量数据中寻找有用的知识。
其实,计算机除了 0 和 1,其它啥也不懂,甚至可以用“文盲”来诠释。
那机器怎么学习呢?这时候就需要用到人类的智慧了!
在过去的几十年里,很多计算机科学和应用数学界的学者们都在潜心研究,并总结出不少教会计算机的方法,这些就是机器学习算法。
从广义的概念来说,机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。
它专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。
但是机器学习过程中,最重要的就是数据。我打个比方,一个手机在进行量产时,会对手机的参数等进行大量的测试,是否可大量投入、产出,那这些需测试的参数等就需要通过数据来呈现。
这也是机器学习和大数据密不可分的原因之一。
在这里,我对机器学习进行了简要的整理。
这一次主要学习的是 Pandas。
它是基于 NumPy 的一种工具,提供了大量数据探索的方法。Pandas 可以使用类似 SQL 的方式对 .csv、.tsv、.xlsx 等格式的数据进行处理分析。
Pandas 主要使用的数据结构是 Series 和 DataFrame 类。
下面简要介绍下这两类:
Series 是一种类似于一维数组的对象,它由一组数据(各种 NumPy 数据类型)及一组与之相关的数据标签(即索引)组成。
DataFrame 是一个二维数据结构,即一张表格,其中每列数据的类型相同。你可以把它看成由 Series 实例构成的字典。
为了更好地理解 Pandas 的主要方法,我们通过分析电信运营商的客户离网率数据集来学习。
首先载入必要的库,即 NumPy 和 Pandas。
import numpy as npimport pandas as pdimport warningswarnings.filterwarnings('ignore')
通过 read_csv()
方法读取数据,然后使用 head()
方法查看前 5 行数据。
df = pd.read_csv( 'https://labfile.oss.aliyuncs.com/courses/1283/telecom_churn.csv')
df.head()
上图中的每行对应一位客户,每列对应客户的一个特征。让我们查看一下该数据库的维度、特征名称和特征类型。
df.shape
上述结果表明,我们的列表包含 3333 行和 20 列。下面我们尝试打印列名。
df.columns
我们还可以使用 info()
方法输出 DataFrame 的一些总体信息。
df.info()
bool
、int64
、float64
和 object
是该数据库特征的数据类型。这一方法同时也会显示是否有缺失值,上述结果表明在该数据集中不存在缺失值,因为每列都包含 3333 个观测,和我们之前使用 shape
方法得到的数字是一致的。
astype()
方法可以更改列的类型,下列公式将 Churn 离网率特征修改为 int64
类型。
df['Churn'] = df['Churn'].astype('int64')
describe()
方法可以显示数值特征(int64
和 float64
)的基本统计学特性,如未缺失值的数值、均值、标准差、范围、四分位数等。
df.describe()
通过 include 参数显式指定包含的数据类型,可以查看非数值特征的统计数据。
df.describe(include=['object', 'bool'])
value_counts()
方法可以查看类别(类型为 object )和布尔值(类型为 bool )特征。让我们看下 Churn 离网率的分布。
df['Churn'].value_counts()
上述结果表明,在 3333 位客户中, 2850 位是忠实客户,他们的 Churn
值为 0。调用 value_counts()
函数时,加上 normalize=True
参数可以显示比例。
df['Churn'].value_counts(normalize=True)
排序
DataFrame 可以根据某个变量的值(也就是列)排序。比如,根据每日消费额排序(设置 ascending=False 倒序排列)。
df.sort_values(by='Total day charge', ascending=False).head()
此外,还可以根据多个列的数值排序。下面函数实现的功能为:先按 Churn 离网率升序排列,再按 Total day charge 每日总话费降序排列,优先级 Churn > Tatal day charge。
df.sort_values(by=['Churn', 'Total day charge'],
ascending=[True, False]).head()
索引和获取数据
DataFrame 可以以不同的方式进行索引。
使用 DataFrame['Name']
可以得到一个单独的列,比如,离网率有多高?
df['Churn'].mean()
对一家公司而言,14.5% 的离网率是一个很糟糕的数据,这么高的离网率可能导致公司破产。
布尔值索引同样很方便,语法是 df[P(df['Name'])]
,P 是在检查 Name 列每个元素时所使用的逻辑条件。这一索引的输出是 DataFrame 的 Name 列中满足 P 条件的行。
让我们使用布尔值索引来回答这样以下问题:离网用户的数值变量的均值是多少?
df[df['Churn'] == 1].mean()
离网用户在白天打电话的总时长的均值是多少?
df[df['Churn'] == 1]['Total day minutes'].mean()
未使用国际套餐(International plan == NO
)的忠实用户(Churn == 0
)所打的最长的国际长途是多久?
df[(df['Churn'] == 0) & (df['International plan'] == 'No')
]['Total intl minutes'].max()
DataFrame 可以通过列名、行名、行号进行索引。loc
方法为通过名称索引,iloc
方法为通过数字索引。
通过 loc
方法输出 0 至 5 行、State 州至 Area code 区号的数据。
df.loc[0:5, 'State':'Area code']
通过 iloc
方法输出前 5 行的前 3 列数据(和典型的 Python 切片一样,不含最大值)。
df.iloc[0:5, 0:3]
df[:1]
和 df[-1:]
可以得到 DataFrame 的首行和末行。
df[-1:]
应用函数到单元格、列、行
下面通过 apply()
方法应用函数 max 至每一列,即输出每列的最大值。
df.apply(np.max)
apply()
方法也可以应用函数至每一行,指定 axis=1 即可。在这种情况下,使用 lambda
函数十分方便。比如下面函数选中了所有以 W 开头的州。
df[df['State'].apply(lambda state: state[0] == 'W')].head()
map()
方法可以通过一个 {old_value:new_value} 形式的字典替换某一列中的值。
d = {'No': False, 'Yes': True}
df['International plan'] = df['International plan'].map(d)
df.head()
当然,使用 repalce()
方法一样可以达到替换的目的。
df = df.replace({'Voice mail plan': d})
df.head()
分组(Groupby)
Pandas 下分组数据的一般形式为:
df.groupby(by=grouping_columns)[columns_to_show].function()
对上述函数的解释:
groupby()
方法根据 grouping_columns 的值进行分组。接着,选中感兴趣的列(columns_to_show)。若不包括这一项,那么就会选中所有非 groupby 列(即除 grouping_colums 外的所有列)。
最后,应用一个或多个函数(function)。
在下面的例子中,我们根据 Churn 离网率 变量的值对数据进行分组,显示每组的统计数据。
columns_to_show = ['Total day minutes', 'Total eve minutes', 'Total night minutes']
df.groupby(['Churn'])[columns_to_show].describe(percentiles=[])
和上面的例子类似,只不过这次将一些函数传给 agg()
,通过 agg()
方法对分组后的数据进行聚合。
columns_to_show = ['Total day minutes', 'Total eve minutes', 'Total night minutes']
df.groupby(['Churn'])[columns_to_show].agg([np.mean, np.std, np.min, np.max])
以上内容均来自蓝桥云课《机器学习开放基础课程》,经由 Open Machine Learning Course 授权并制作的机器学习的免费基础实战课。
此门课程主要讲解机器学习常用的分类算法和回归算法,以及常用的数据预处理技巧。
你将在课程中学到:
Pandas 数据预处理
K-近邻
线性回归
特征工程
梯度下降法
决策树
随机森林
逻辑回归
主成分分析
时间序列数据处理
课程整体难度中等偏上,该课程适合于对机器学习感兴趣,且数学相对较好的小伙伴。除此门课程外,蓝桥云课还将提供完整的机器学习学习路径,供大家参考~
如果你想了解更多机器学习,欢迎通过文末方式免费学~
▼扫码免费学习▼