
Python作为一门理想的集成语言,将各种技术绑定在一起,除了为用户提供更方便的功能之外,还是一个理想的粘合平台,为开发人员与外部库的低层次集成人员之间搭建连接,用C∕C++实现更高效的算法。开发者在Python中封装了很多优秀的依赖库,如下表所示。
库名 | 介 绍 |
NumPy | 支持多维数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。 通常与SciPy(Scientific Python)和Matplotlib(绘图库)一起使用,这种组合广泛用于替代Matlab,是一个流行的技术平台 |
pandas | 一款开放源码的BSD (Berkeley Software Distribution,伯克利软件套件)许可的Python库。基于NumPy创建,为Python编程语言提供了高性能的、易于使用的数据结构和数据分析工具。pandas应用领域广泛,包括金融,经济,统计,分析等学术和商业领域 |
SQLAlchemy | 一种既支持原生SQL,又支持ORM的工具,ORM是Python对象与数据库关系表的一种映射关系,可有效提高写代码的速度,同时兼容多种数据库系统,如sqlite、mysql、postgresql,代价为性能上的一些损失,其余类似的数据库开发库还有MySQL-python、mysqlclient、PyMySQL |
库名 | 介 绍 |
Matplotlib | 第一个Python可视化库,有许多别的程序库都是建立在其基础上或者直接调用该库,可以很方便的得到数据的大致信息,功能非常强大,也非常复杂 |
Seaborn | 利用了matplotlib,用简洁的代码来制作好看的图表,跟matplotlib最大的区别为默认绘图风格和色彩搭配都具有现代美感 |
scikit-learn | Python机器学习标准库,又称sklearn,在众多机器学习模块中比较优秀,汇集了各种监督学习、非监督学习、半监督学习的方法,提供现成的功能来实现诸如线性回归、分类器、SVM、k-均值和神经网络等多种算法,并包含一些可直接用于训练和测试的样本数据集。除scikit-learn以外,Python中其他类似的机器学习库还有Orange3、XGBoost、NuPIC、Milk |
TensorFlow | 由Google团队开发的神经网络模块,一个采用数据流图来进行数值计算的开源软件库,可绘制计算结构图,为一系列可人机交互的计算操作,编辑好的Python文件将被转换成更高效的C++,并在后端进行计算。其他比较常用的深度学习库还有Caffe、Theano、Keras |
python2.6版本后,引入的一个简单的绘图工具,叫做海龟绘图(Turtle Graphics)。
(一)NumPy简介
NumPy是高性能科学计算和数据分析的基础包。它是pandas等其他各种工具的基础。
NumPy的主要功能:
1)ndarray,一个多维数组结构,高效且节省空间
2)无需循环对整组数据进行快速运算的数学函数
3)读写磁盘数据的工具以及用于操作内存映射文件的工具
4)线性代数、随机数生成和傅里叶变换功能
5)用于集成C、C++等代码的工具
pyhton里面安装、引入方式:
安装方法(在命令行方式):pip install numpy
引用方式:import numpy as np
例:形状相同的数组间运算
import numpy as np
a = np.random.randint(1, 10, (2, 3))
b = np.random.randint(2, 8, (2, 3))
print(a)
print(b)
print(a+b)
print(a-b)
(2)Pandas 简介
Pandas是一种基于 NumPy 的开源的数据分析工具包,提供了高性能、简单易用的数据结构和数据分析函数。Pandas提供了方便的类表格和类SQL的操作,同时提供了强大的缺失值处理方法,可以方便的进行数据导入、选取、清洗、处理、合并、统计分析等操作。
例:
#DataFrame创建实例
import pandas as pd
import numpy as np
print("-"*30,'DataFrame创建实例')
names = ["张三", "李四", "王五"]
ages = [20, 18, 19]
d_1 =pd.DataFrame({"姓名": names, "年龄": ages})
print(d_1)
d_2 =pd.DataFrame([names, ages])
print(d_2)
s_names = pd.Series(names,index=["A", "B", "C"])
s_ages = pd.Series(ages, index=["B", "C", "A"])
d_3 = pd.DataFrame({"姓名": s_names, "年龄": s_ages})
print(d_3)
d_4 =pd.DataFrame(np.random.randint(10, 30, (3, 4)))
print(d_4)
s_names ={"A01": "中山大学", "A05": "广东财大", "A08": "广东师大"}
s_types = {"A05": "财经类","A01": "综合类", "A08": "师范类"}
d_5 = pd.DataFrame({"学校名称": s_names,"学校类型": s_types})
print(d_5)
d_6 = pd.DataFrame({"学校名称": s_names,"学校类型": s_types}, index=["A01", "A03", "A05"])
print(d_6)
print("-"*30,'DataFrame中数据访问,将 DataFrame 看作字典')
s_names = pd.Series(["张三", "李四", "王五", "赵六", "钱七"], index=list("ABCDE"))
s_ages = pd.Series([18, 20, 18, 19], index=list("ABDE"))
d_1 =pd.DataFrame({"姓名": s_names, "年龄": s_ages})
print(d_1)
print(d_1["姓名"]) # 列名为关键字获取一列数据
print(d_1.姓名) # 列名为属性获取一列数据
print(d_1["姓名"] is d_1.姓名) # 是否为同一对象
print(d_1["姓名"]["A"]) #获取列中某一个数据
print("-"*30,'DataFrame中数据访问,将DataFrame看作二维数组')
print(d_1.T) # 行列转置
print(d_1[d_1.年龄 == 18]) # 布尔表达式
print(d_1[1:3]) # 行切片,隐式索引
print(d_1["A":"D"]) # 行切片,显示索引
print(d_1[["年龄", "姓名"]]) #同时获取多列信息
print(d_1.iloc[3, 1]) # 根据位置取值
print(d_1.iloc[1:3, 0:1]) #根据位置切片
print(d_1.loc["D", "姓名"]) # 根据显式索引取值
print(d_1.loc["A": "D","姓名":"年龄"])
print("-"*30,'DataFrame使用举例')
d_1 = pd.DataFrame(np.random.randint(10, 30, (20, 10)), index=[chr(x)
for x in range(116, 96 , -1)], columns=[chr(x) for x in range(65, 75)])
print(d_1) # 打印
print(d_1.shape) # 形状:(20, 10)
print(d_1.index) # 行索引信息
print(d_1.columns) # 列索引信息
print(d_1.axes) # 同时获取行和列索引信息
print(d_1.values) # 获取值信息
print(d_1.dtypes) # 获取每一列类型信息
print(d_1.sort_values(["C", "D"]))
print(d_1.sort_index()) #根据行索引排序
print(d_1.rank(method="min"))
print(d_1.rename(index={"o": "OO"}))
print(d_1.set_index("C")) #以C列为索引
print(d_1.groupby("D").agg("mean"))
import xlwt
print(d_1.info()) # 基本信息
print(d_1.head(8)) # 前8行数据,DataFrame形式
print(d_1.tail()) # 最后5行数据,DataFrame形式
print(d_1.describe()) #统计描述信息,DataFrame形式
print(d_1.count()) # 每一列的非空值数量,Series形式
print(d_1.sample(5, axis=0)) # 随机抽5行
print(d_1.sample(5, axis=1)) #随机抽5列
print(d_1.apply(np.sum, axis=1)) # 对每行求和
print(d_1.applymap(np.square)) # 对每个元素求平方
print(d_1.to_dict(orient="list")) #转换为字典
print(d_1.to_excel("data.xls")) # 保存到Excel文件
print("-"*30,'DataFrame的合并操作')
s_names = pd.Series(["张三", "李四", "王五","赵六", "钱七"], index=list("ADBCE"))
s_ages = pd.Series([18, 20, 18, 19],index=list("ADBC"))
s_nums = pd.Series(["001", "003", "006", "008"],index=list("ADCE"))
s_names_2 = pd.Series(["张三", "李四", "孙五", "周六"],index=list("ADCE"))
d_1 = pd.DataFrame({"姓名": s_names, "年龄": s_ages})
d_2 = pd.DataFrame({"姓名": s_names_2, "学号": s_nums})
print(d_1.join(d_2,rsuffix="_r"))
print(d_1.join(d_2.set_index("姓名"), on="姓名")) # 默认左连接
print(d_1.join(d_2.set_index("姓名"), on="姓名", how="right")) # 右连接
print(d_1.join(d_2.set_index("姓名"), on="姓名", how="inner")) # 内连接
print(d_1.join(d_2.set_index("姓名"), on="姓名", how="outer")) # 外连接

