机器学习、深度学习在用Python时,我们要用到NumPy和Pandas库。今天我和大家一起来对这两个库的最最基本语句进行学习。希望能起到抛砖引玉的作用,目前处于入门阶段,而且第一次发文,哪里出现错误望大家批评指正。

NumPy是Python的数值计算拓展,它能够帮你处理大量数值数据以及储存大型数据集和提取其中的信息。本文将聊一下NumPy和panda.DataFrames最基础的一些知识,前者能帮助你处理大量数值数据,后者帮你存储大型数据集以及从数据集中提取出来的信息。

下面附上他们的官方文档方便大家查看以及深一步学习:

NumPy库档:https://docs.scipy.org/doc/numpydev/user/quickstart.html

Pandas库文档:http://pandas.pydata.org/pandas-docs/version/0.19.2/

下面我们先聊一下NumPy,它内置了进行数据分析时,所要执行的大量基础任务所需的函数。如计算任意数组的平均数(mean)、中位数(median)、标准差(standard deviation)。

例如:对1至5之间的所有整数数组命名为numbers。(注:从技术层面讲,NumPy数组与Pyhton列表不同,但像这样在Pyhton列表上执行这些操作,会1以Pyhton数组的形式在幕后转换该列表,所以这就不需要我们费神啦!)

下面在Python上利用NumPy库来计算numbers的平均数、中位数和标准差了。(import numpy要确保安装了numpy库哦!这里我个人觉得在pycharm社区版这个Python的IDE上选择Pycharm Community Edition → Perferences → ProjectInterpreter点'+'号搜索numpy库直接进行下载安装即可,其他库同理)import numpy

numbers = [1, 2, 3, 4, 5]

numpy.mean(numbers)

#3.0

numpy.median(numbers)

#3.0

numpy.std(numbers)

#1.4142135623730951

另一个numpy非常实用的方法:numpy.dot函数可以计算出两个向量之间的点积。import numpy

a = [1, 2, 3, 4, 5]

b = [2, 3, 4, 5, 6]

numpy.dot(a,b)

好了,现在我们对操作数据有了一定的了解了。下面我们接着聊如何使用Pandas存储并引用这些数据。

Pandas中的数据经常包括在名为数据框架(data frame)的结构中,数据框架是已经标记的二维数据结构,可以让你根据需要选择不同类型的列,类型有字符串(string)、整数(int)、浮点型(float)或布尔值(Booles)。比如一个数据结构由四个人的姓名(name)、年龄(age)、BMI、是否健康(healthy?)构成(其中还含有非数字NaN条目)。你可以把数据框架看做Excel表格。

首先,我们看一下如何创建数据框架:#Pandas创建数据框架(dataframe)

from pandas import DataFrame, Series

#首先创建一个名为d的Python词典

#'name'、'age'等这样的名字为key(键),Series是Python序列:里面为对应的值,index为目标索引组

#对于非数值组NaN,空出来就好,在索引组也空出来就好。

d = {
'name':Series(['oliver', 'james', 'jack', 'frank'], index=['a','b','c','d']),\
'age': Series([24, 22, 36, 43], index=['a','b','c','d']),\
'BMI':Series([30.1, 23.0, 19.8], index= ['a', 'b', 'd']),\
'healthy?':Series([False, True, False, True], index=['a','b','c','d'])
}
#字典创建好以后,将其做为参数传递至DataFrame函数,创建实际的数据框架
df = DataFrame(d)
print df
# answer
# BMI age healthy? name
# a 30.1 24 False oliver
# b 23.0 22 True james
# c NaN 36 False jack
# d 19.8 43 True frank#结果不是相应的顺序,若想得到想要的顺序,需要对df按想要的顺序重新排序
df.reindex(columns=['name', 'age', 'BMI', 'healthy?'])
##answer
# name age BMI healthy?
# a oliver 24 30.1 False
# b james 22 23.0 True
# c jack 36 NaN False
# d frank 43 19.8 True

弄明白了如何创建数据框架,接下来看一下,如何访问数据吧。

df['name']
# a oliver
# b james
# c jack
# d frank
# Name: name, dtype: object
df[['name', 'age']]
# name age
# a oliver 24
# b james 22
# c jack 36
# d frank 43

若只需要oliver对应的行,该行的索引是adf.loc['a']

#answer
# BMI 30.1
# age 24
# healthy? False
# name oliver
# Name: a, dtype: object

若要选择年龄大于等于30的行df[df['age'] >= 30]

#answer
# BMI age healthy? name
# c NaN 36 False jack
# d 19.8 43 True frank若只需要上面c、d行的健康情况
df[df['age'] >= 30]['healthy?']
df['healthy?'][df['age'] >= 30]
##answer
# c False
# d True
# Name: healthy?, dtype: bool

Pandas还可以让我们以向量化的形式逐项在数据框架上进行操作。那什么是以向量化形式在数据结构上进行操作呢?下面假设我们有以下数据框架,由2列分别是’one’、’two’和四行’a’、’b’、’c’、’d’。值均为整数。

d = {
'one': Series([1, 2, 3], index=['a', 'b', 'c']),
'two': Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
}
df = DataFrame(d)
print df
# one two
# a 1.0 1
# b 2.0 2
# c 3.0 3
# d NaN 4

我们可以调用适用的数据框架向我们提供的参数总和和任意函数。在本例中,我们重温一下之前numpy中提到的求平均数。numpy.mean对每个自成一列的向量求平均数,这本身就是一个新的数据结构。另外还有一些操作不能通过这种方式向量化,例如提取numpy数组作为输入数据,然后返回其他数组或值。

import numpy
#numpy.mean对每一列求平均值
df.apply(numpy.mean)
# one 2.0
# two 2.5
# dtype: float64

本例中,我们还可以在特定列上调用映射或多整个数据框架应用映射,这些方法将接受传入一个值然后返回一个值的函数。#判断'one'列的值是否大于等于1

df['one'].map(lambda x: x >=1)
# a True
# b True
# c True
# d False
# Name: one, dtype: bool
#判断数据框架中的所有值是否大于等于1
df.applymap(lambda x: x >= 1)
# one two
# a True True
# b True True
# c True True
# d False True

好了,以上就是文章的内容,强烈建议大家能够亲手实践一下,毕竟纸上得来终觉浅,绝知此事要躬行。由于我水平有限,所以接下来几天给大家转几篇大神写的关于Pandas和NumPy的很好的文章,大家可以一起学习一下哈!最后感谢大家的阅读。