Python 库常用操作
- 模块、包及库
- [Python 库](#Python 库)
- [Python 包](#Python 包)
- [Python 模块](#Python 模块)
- Python程序的架构
模块、包及库
代码层面:
库(Library) > 包(Package) > 模块(Module)
Python 库
Python库 分为 标准库、第三方库
如:苹果自带软件-闹钟(标准库)、安装第三方软件-爱奇艺(第三方库)
显示已安装的库
python
pip list
常用第三方库
Pandas: 数据分析高层次应用库
Numpy: 表达N维数组的最基础库
Matplotlib: 数据可视化
Scikit-learn: 基于SciPy和Numpy的开源机器学习模块
MXNet: 神经网络的机器学习计算框架
Tensorflow: 该系统设计的初衷是为了便于机器学习研究,能够更快更好地将科研原型转化为生产项目
Python 包
包是一个类似文件夹的东西,它里面包含很多.py文件,还有一个__init__.py文件(描述有多少个模块的东西)
包是一个有层次的文件目录结构,它定义了由n个模块或n个子包组成的python应用程序执行环境。
Python 模块
在Python中一个.py文件就可以称为一个模块,表达的含义是实现了某个功能,模块也是一种自我包含并且有组织的代码片段
表现形式:写的代码保存为文件,如:sample.py 中文件名sample为模块名
通过关键字import或from进行加载;注意:模块和当前文件在不同的命名空间中
模块的作用
模块是Python的最高级别组织单元,将程序代码和数据封装起来以便重用。
模块的三个角色:
(1)代码重用
(2)系统命名空间的划分(模块可理解为变量名的封装,即模块就是命名空间)
(3)实现共享服务和数据
模块的执行环境
模块的执行环境:
模块 包含 变量(全局变量)、函数(局部变量-本地变量)、类(成员(变量))以及其他的模块(如果导入的话)
导入模块方式
最常见的导入方式:
import Module
具体导入模块的步骤:
(1)创建一个新的、空的module对象(本质是一个字典)
(2)在sys.modules 字典中插入该模块对象
(3)加载该模块代码所对应的对象(如果需要,可先编译成位码)
python
# import X : 导入模块X,并在当前命名空间创建该模块的引用
# X.name:引用定义在模块X中的属性
import numpy
numpy.abs(-1) # 1
# from X import *:导入模块X,并在当前命名空间,创建该模块中所有公共对象(名字不以__开头)的引用
from sklearn import preprocessing
# from X import a,b,c:导入模块X,并在当前命名空间创建该模块给定对象的引用
from sklearn import preprocessing,metrics,neighbors
#X = __import__('X'):类似import X,区别在于:该方式指定了X为当前命名空间中的变量,使用方法一致
X = __import__('pandas')
模块别名
导入模块时,可以使用别名:
import 模块名 as 别名
python
try:
import cStringIO as StringIO
except ImportError: #导入失败会捕获到
ImportError import StringIO
常用模块别名
Numpy:np
Pandas:pd
matplotlib.pyplot:plt
模块加载和作用域
(1)模块语句会在首次导入时执行
(2)顶层的赋值语句会创建模块属性:在导入模块时,文件顶层(不在def 和 class 之内)赋值变量的语句,会建立模块对象的属性,赋值的变量名会存储在模块的命名空间内
(3)模块的命名空间能通过属性_dict_或 dir(M) 获取:由导入而建立的模块的命名空间是字典
(4)模块是一个独立的作用域(本地变量就是全局变量):在模块中,模块范围会在模块加载后变成模块对象的属性辞典,导入后,模块文件的作用域就变成了模块对象的属性的命名空间
Python程序的架构
Python 程序的架构:
将一个程序分割为源代码文件的集合以及将这些部分连接在一起的方法
Python源代码文件:*.py
(1)一个py文件是一个模块
(2)多个模块可以组成一个包
(3)包是一个目录。要被Python视为包,目录中必须包含__init__.py文件,包的导入会首先执行__init__.py。其他模块加入包中,放入包的目录即可。
参考案例
python
# 先导入库,再导入包
import numpy as np # 导入numpy库
import matplotlib as mpl # 导入matplotlib库:需要添加,避免代码过多时,出现逻辑问题
#from matplotlib import pyplot as plt #从matplotlib库调用出pyplot包,用于绘图
import matplotlib.pyplot as plt #从matplotlib库调用出pyplot包,用于绘图
e = plt.figure() #使用pypplot包的figure模块,创建画布
ax = e.add_subplot(2,2,1) #2指行数,2指列数,1指子区域
plt.plot(np.random.randint(1,10,20)) #使用pyplot包的plot模块,绘制折线图
ax = e.add_subplot(2,2,2)
plt.bar(range(1,8), np.random.randint(100,200,7)) #使用pyplot包的bar模块,绘制柱形图
ax = e.add_subplot(2,2,3)
plt.boxplot(np.random.normal(0,10,size=1000)) #使用pyplot包的boxplot模块,绘制箱线图
ax = e.add_subplot(2,2,4)
plt.hist(np.random.randn(100),bins=10) #使用pyplot包的hist模块,绘制直方图
plt.subplots_adjust(wspace=0.3) #手动调整子图布局间距:子图之间的水平间距等子图平均宽的 30%