chapter5. 实用模块 1-3

5.1 什么事模块

    模块是最高级别的程序语言,能够把程序代码和数据封装起来。模块的导入是import语句

  •     import numpy:自动导入NumPy模块
  •     import numpy as np: 导入NumPy模块命名为np
  •     from numpy import array : 从NumPy模块导入其他arry.

5.2 NumPy

    一个科学计算的基础模块,不但能够完成科学计算,也能完成有效的多维数据容器,存储大量和处理大型矩阵。可以保存任意数据类型,所以就可以无缝并且快速整合各种数据。

    1.创建数组

    如下是一个实例:

import numpy as np   # 导入模块

print '''创建数组'''
arr1 = np.array([2,3,4])    # 通过列表创建数组
arr2 = np.array([(1.3,9,2.0),(7,6,1)])    # 通过元组创建数组
arr3 = np.zeros((2,3))    # 通过元组(2, 3)生成全零矩阵
arr4 = np.identity(3)    # 生成3维的单位矩阵
arr5 = np.random.random(size = (2,3)) # 生成每个元素都在[0,1]之间的随机矩阵
arr6 = np.arange(5,20,3)  # 生成等距序列,参数为起点,终点,步长值.含起点值,不含终点值
arr7 = np.linspace(0,2,9)  # 生成等距序列,参数为起点,终点,步长值.含起点值和终点值
print arr1
# result:
# [2 3 4]
print arr2
# result:
# [[ 1.3  9.   2. ]
#  [ 7.   6.   1. ]]
print arr3
# result:
# [[ 0.  0.  0.]
#  [ 0.  0.  0.]]
print arr4
# result:
# [[ 1.  0.  0.]
#  [ 0.  1.  0.]
#  [ 0.  0.  1.]]
print arr5
# result:
# [[ 0.31654004  0.87056375  0.29050563]
#  [ 0.55267505  0.59191276  0.20174988]]
print arr6
# result: [ 5  8 11 14 17]
print arr7
# result: [ 0.    0.25  0.5   0.75  1.    1.25  1.5   1.75  2.  ]
print '-'*70

    2.访问数据

    在科学计算中,我们需要频繁访问数组元素。通过Numpy索引,切片,和迭代器的方法能够快速灵活访问数据,如下:

print '''访问数组'''

# 查看数组的属性
print arr2.shape # 返回矩阵的规格
# result: (2,3)
print arr2.ndim  # 返回矩阵的秩
# result: 2
print arr2.size  # 返回矩阵元素总数
# result: 6
print arr2.dtype.name   # 返回矩阵元素的数据类型
# result: float64
print type(arr2) # 查看整个数组对象的类型
# result: <type 'numpy.ndarray'>

# 通过索引和切片访问数组元素
def f(x,y):
    return 10*x+y
arr8 = np.fromfunction(f,(4,3),dtype = int)
print arr8
# result:
# [[ 0  1  2]
# [10 11 12]
# [20 21 22]
# [30 31 32]]
print arr8[1,2] #返回矩阵第1行,第2列的元素(注意下标从0开始)
# result: 12
print arr8[0:2,:]  #切片,返回矩阵前2行
# result:
# [[ 0  1  2]
#  [10 11 12]]
print arr8[:,1]    #切片,返回矩阵第1列
# result: [ 1 11 21 31]
print arr8[-1]     #切片,返回矩阵最后一行
# reuslt: [30 31 32]

# 通过迭代器访问数组元素
for row in arr8:
    print row
# result:
# [0 1 2]
# [10 11 12]
# [20 21 22]
# [30 31 32]
for element in arr8.flat:
    print element
# 输出矩阵全部元素
print '-'*70

    3.数组的运算

    运算符针对于整个数组,所以比起for 更优秀。如下(如果NumPy是一个矩阵,还支持求逆,转置等操作):

arr9 = np.array([[2,1],[1,2]])
arr10 = np.array([[1,2],[3,4]])
print arr9 - arr10  
# result:
# [[ 1 -1]
#  [-2 -2]]
print arr9**2
# result:
# [[4 1]
#  [1 4]]
print 3*arr10
# result:
# [[ 3  6]
#  [ 9 12]]
print arr9*arr10  #普通乘法
# result:
# [[2 2]
#  [3 8]]
print np.dot(arr9,arr10)  #矩阵乘法
# result:
# [[ 5  8]
#  [ 7 10]]
print arr10.T  #转置
# result:
# [[1 3]
#  [2 4]]
print np.linalg.inv(arr10) #返回逆矩阵
# result:
# [[-2.   1. ]
#  [ 1.5 -0.5]]
print arr10.sum()  #数组元素求和
# result: 10
print arr10.max()  #返回数组最大元素
# result: 4
print arr10.cumsum(axis = 1)  #沿行累计总和
# result: 
# [[1 3]
#  [3 7]]
print '-'*70

    4.Numpy的通过元素

    数学中的sin/cos 都NumPy都称为通用函数(Universal Functions),通用函数针对的是一个数组,所以不需要都每一个数组都进行重新操作。

print '''NumPy通用函数'''
print np.exp(arr9)     #指数函数
# result:
# [[ 7.3890561   2.71828183]
#  [ 2.71828183  7.3890561 ]]
print np.sin(arr9)      #正弦函数(弧度制)
# result:
# [[ 0.90929743  0.84147098]
#  [ 0.84147098  0.90929743]]
print np.sqrt(arr9)     #开方函数
# result:
# [[ 1.41421356  1.        ]
#  [ 1.          1.41421356]]
print np.add(arr9,arr10)  #和arr9+arr10效果一样
# result:
# [[3 3]
#  [4 6]]
print '-'*70

    5.数组的分割和合并

print '''数组合并与分割'''
# 合并
arr11 = np.vstack((arr9,arr10))  #纵向合并数组,由于与堆栈类似,故命名为vstack
print arr11
# result:
# [[2 1]
#  [1 2]
#  [1 2]
#  [3 4]]
arr12 = np.hstack((arr9,arr10))  #横向合并数组
print arr12
# result:
# [[2 1 1 2]
#  [1 2 3 4]]
# 分割
print np.hsplit(arr12,2)  # 将数组横向分为2部分
# result:
# [array([[2, 1],
#        [1, 2]]), array([[1, 2],
#        [3, 4]])]
print np.vsplit(arr11,2)   # 数组纵向分为2部分
# result:
# [array([[2, 1],
#        [1, 2]]), array([[1, 2],
#        [3, 4]])]
                                                         常用的NumPy方法
方法效果和用途返回类型
np.empty返回给定模块的一个数组NumPy数组类型
np.all测试是否为Ture Ture   False
np.any是否至少有一个TureTure   False
np.average计算加权平均数NumPy数组类型
np.nonzero返回数组非0元素的位置记录位置元素
np.sort位置排序NumPy数组类型

op.var

方差NumPy数组类型
np.where返回数组满足条件的元素NumPy数组类型
np.reshape转换数组的规模,不要更改数据内容NumPy数组类型
np.eye生成单位矩阵NumPy数组类型
np.transpose矩阵转置,与.T相同NumPy数组类型
np.std计算标准差NumPy数组类型
np.cov给定数据和权重计算协方差矩阵NumPy数组类型
   

    5.3 Pandas

    强大的数据分析和处理工具。能够分析以下复杂类型数据:

  • 数据库或者excel表
  • 时间序列类型数据,包含有序 无序
  • 任意的矩阵/二维表/观测统计数据,允许独立行和带标签

  清洗数据>>>分析和建模>>>组织分析的结果>>>>展示

官方建议模块导入语法: import pandas as pd

    1. pandas中的高级数据结构

    系列(series )and 数据框(Dataframe)

    2.Datafram

    与矩阵相似,但是不同。数据框有行列的索引值(index)。

    创建数据框:

 -*- coding:utf-8 -*-
import pandas as pd    # 为pandas取一个别名pd
data = {'id': ['Jack', 'Sarah', 'Mike'],
        'age': [18, 35, 20],
        'cash': [10.53, 500.7, 13.6]}
df = pd.DataFrame(data)    # 调用构造函数并将结果赋值给df
print df
# result:
#    age    cash     id
# 0   18   10.53   Jack
# 1   35  500.70  Sarah
# 2   20   13.60   Mike

     由于没有显式声明,行索引自动分配,并且对列名进行了排序,下列应用了pd.DataFrame更高级的参数设置,声明了索引值。

df2 = pd.DataFrame(data, columns=['id', 'age', 'cash'],index=['one', 'two', 'three'])
print df2
# result:
#          id   age    cash
# one     Jack   18   10.53
# two    Sarah   35  500.70
# three   Mike   20   13.60

获取数据框的某一行是十分方便的,我们只需要呼唤他的名字。

print df2['id']
# result:
# 0     Jack
# 1    Sarah
# 2     Mike
# Name: id, dtype: object

    3.系列

    以上代码其实得到了一个系列。服从某种分布,系列是一种退化的数据框,也可以认为是一种广义的一维数组。默认的情况下,系列的索引是自增非负的整数列(0,1,2,3,。。。)。同一个系列的数据共享一个列名,而数组不要求。在时间序列(Time Series),有宝贵的价值。

s = pd.Series({'a': 4, 'b': 9, 'c': 16}, name='number')
print s
# result:
# a4
# b9
# c16
# Name: number, dtype: int64

    4. 基础数据的处理方法。

    应该首先关注系列的处理方法。

print s[0]
# result: 4
print s[:3]
# result:
# a     4
# b     9
# c    16
# Name: number, dtype: int64

类似于数组,系列支持索引访问,也支持类似字典的访问模式。-----按键值(列名)访问。

print s['a']
# result: 4
s['d'] = 25    # 如果系列中本身没有这个键值,则会新增一行
print s
# result:
# a     4
# b     9
# c    16
# d    25
# Name: number, dtype: int64

同时,也支持向量化操作。意思就是我们能够对一个系列的所有值进行同样的操作。

import numpy as np
print np.sqrt(s)
# result:
# a    2.0
# b    3.0
# c    4.0
# d    5.0
# Name: number, dtype: float64
print s*s
# result:
# a     16
# b     81
# c    256
# d    625
# Name: number, dtype: int64
数据框也可以看做一个字典
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值