【机器学习】Python数据分析常用库
刚结束了4四天的死亡美赛,在建模过程和之前机器学习进行数据分析过程中用到了大量 Python 数据分析常用库
一次次在搜索引擎上查各个库的用法是真滴麻烦
本篇博客用以记录 Python 数据分析中常用库的常用用法,日常用到时查阅方便
1. Numpy
Python没有提供数组功能,Numpy可以提供数组支持以及相应的高效处理函数,是Python数据分析的基础,也是SciPy、Pandas等数据处理和科学计算库最基本的函数功能库,且其数据类型对Python数据分析十分有用。
Numpy提供了两种基本的对象:ndarray和ufunc。ndarray是存储单一数据类型的多维数组,而ufunc是能够对数组进行处理的函数。Numpy的功能:
- N维数组,一种快速、高效使用内存的多维数组,他提供矢量化数学运算。
- 可以不需要使用循环,就能对整个数组内的数据进行标准数学运算。
- 非常便于传送数据到用低级语言编写(C\C++)的外部库,也便于外部库以Numpy数组形式返回数据。
Numpy不提供高级数据分析功能,但可以更加深刻的理解Numpy数组和面向数组的计算。
官方文档:https://numpy.org/doc/stable/ (加载起来小慢)
1 | import numpy as np |
1.1 创建 ndarray
函数 | 说明 |
---|---|
np.arange(n) | 类似range函数,放回ndarray类型,元素从0到n-1 |
np.ones(shape) | 根据shape生成一个全1数组,shape是元组类型 |
np.zeros(shape) | 根据shape生成一个全0数组 |
np.full(shape,val) | 根据shape生成一个数组,每个元素值都为val |
np.eye(n) | 创建一个正方的n*n单位矩阵,对角线全为1其余为0 |
np.linspace(b,e,n) | 根据起始值等间距的填充数据,形成数组 |
1.2 数组的变换
.reshape(shape) | 不改变数组元素,返回一个shape形状的数组,但原数组不变 |
---|---|
.resize(shape) | 与.reshape()功能一致,但修改原数组 |
.swapaxes(ax1,ax2) | 将数组n个维度中两个进行交换 |
.flatten() | 对数组进行降维,返回折叠后的一维数组,原数组不变 |
1.3 数组的运算
函数 | 说明 |
---|---|
np.abs(x) , np. fabs(x) | 计算数组各数的绝对值 |
np.sqrt(x) | 计算数组各元素的平方 |
np.square() | 计算数组各元素的平方 |
np.log(x), np.log10(x), np.log2(x) | 计算各元素的自然对数,10底对数和2底对数 |
np.ceil(x),np.floor(x) | 前者向上取整,后者向下取整 |
np.rint(x) | 四舍五入 |
np.modf(x) | 将各元素的小数和整数部分以两个独立的数组形式返回 |
np.cos(x), np.cosh(x), np.sin(x), np.sinh(x), np.tan(x), np.tanh(x) | 计算各元素的普通型和双曲型三角函数 |
np.exp(x) | 各元素指数值 |
np.sign(x) | 计算各元素的符号值,1(+),0(0),-1(-) |
1.4 统计函数
函数 | 说明 |
---|---|
sum(a,axis=None) | 根据给定轴 axis 计算数组 a 相关元素之和,axis 为整数或元组 |
mean(a,axis=None) | 计算期望 |
average(a,axis=None,weights=None) | 计算加权平均值 |
std(a,axis=None) | 计算标准差 |
var(a,axis=None | 计算方差 |
min(a), max(a) | 计算a中的最小值,最大值 |
ptp(a) | 计算最大值与最小值的差 |
median(a) | 计算中位数 |
1.5 矩阵操作
函数 | 说明 |
---|---|
.T / np.transpose() | 矩阵转置 |
.dot(nd) | 矩阵点乘 |
.trace() | 矩阵的迹(对角线之和) |
np.linalg.det(nd) | 矩阵行列式 |
2. Pandas
Pandas 是 Python 强大、灵活的数据分析和探索工具,包含 Series、DataFrame 等高级数据结构和工具,安装Pandas可使Python中处理数据非常快速和简单。
Pandas 是 Python 的一个数据分析包,Pandas最初被用作金融数据分析工具而开发出来,因此Pandas为时间序列分析提供了很好的支持。
Pandas 是为了解决数据分析任务而创建的,Pandas 纳入了大量的库和一些标准的数据模型,提供了高效的操作大型数据集所需要的工具。Pandas 提供了大量是我们快速便捷的处理数据的函数和方法。Pandas包含了高级数据结构,以及让数据分析变得快速、简单的工具。它建立在 Numpy 之上,使得 Numpy 应用变得简单。
带有坐标轴的数据结构,支持自动或明确的数据对齐。这能防止由于数据结构没有对齐,以及处理不同来源、采用不同索引的数据而产生的常见错误。
使用Pandas更容易处理丢失数据。
1 | import pandas as pd |
2.1 导入数据
导入数据后自动将数据转化为 DataFrame 结构
1 |
|
2.2 导出文件
1 | df.to_csv(file_name) # 将DataFrame写入CSV文件 |
2.3 查看 DataFrame 的相关信息
1 | df.info() # 获取所有与索引、数据类型和内存相关的信息 |
2.4 数据切片
loc
:可以按照数据的行名、列名进行索引,也可以用行号、列号进行索引但是不能索引不存在的行号(列好),比如- 1
iloc
:只能根据行号、列号进行索引
1 | # 按行号和列号进行切片 |
2.5 数据操作
1 | df.rename(columns = lambda x: x + '1') # 同时重命名所有列 |
2.6 分组、排序
1 | df.groupby(colm) # 返回列值的groupby对象 |
2.7 绘图
1 | df = pd.DataFrame([[1, 3, 5], [2, 8, 7], [1, 9, 10]]) |
3. Matplotlib
Matplotlib是强大的数据可视化工具和作图库,是主要用于绘制数据图表的Python库,提供了绘制各类可视化图形的命令字库、简单的接口,可以方便用户轻松掌握图形的格式,绘制各类可视化图形。
Matplotlib是Python的一个可视化模块,他能方便的只做线条图、饼图、柱状图以及其他专业图形。
使用Matplotlib,可以定制所做图表的任一方面。他支持所有操作系统下不同的GUI后端,并且可以将图形输出为常见的矢量图和图形测试,如PDF SVG JPG PNG BMP GIF.通过数据绘图,我们可以将枯燥的数字转化成人们容易接收的图表。Matplotlib是基于Numpy的一套Python包,这个包提供了吩咐的数据绘图工具,主要用于绘制一些统计图形。
Matplotlib有一套允许定制各种属性的默认设置,可以控制Matplotlib中的每一个默认属性:图像大小、每英寸点数、线宽、色彩和样式、子图、坐标轴、网个属性、文字和文字属性。
1 | import matplotlib.pyplot as plt |
3.1 设置中文字体
1 | import matplotlib as mpl |
3.2 常用局部设置
1 | # xticks / yticks 设置或获取坐标轴的数值刻度。(不传参数就是获取) |
3.3 设置绘图区域
隐式的创建了绘图区域:
1 | plt.plot() |
显式的创建了绘图区域:
add_subplot
:需要先创建画布对象,然后在画布对象上,创建绘图区域1
2
3
4f = plt.figure(figsize=(5, 5)) # 创建画布对象,可以通过参数设置画布大小(英寸)
# 也可以用 f.set_size_inches((7, 7)) 进行画布大小的设置
ax = f.add_subplot(1, 2, 1) # 创建绘图区域 一行两列第一个
ax.plot(x, y) # 绘图subplot
:隐式创建画布对象,可以直接创建绘图区域1
2plt.subplot(2, 1, 1)
plt.plot(x, y)subplots
:可以同时创建多个子绘图区域1
2
3
4
5# 该方法会返回一个元组,元组具有两个元素(figure, 所有的子绘图区域构成的整体【类型不定】)
# 参数 sharex/sharey,共享所有绘图区域的坐标轴,方便对比(默认是自己按照自己的扩展)
fig, ax = plt.subplots(1, 2, sharex=True, sharey=True) # 行、列、是否共享坐标轴
ax[0] = plot(x1, y1)
ax[2] = plot(x2, y2)
3.4 开始绘图
折线图
plt.plot()
1
2
3
4
5
6
7
8
9
10
11# 折线图,适合展现 数据的趋势和增加变化
# 可以传入 x 和 y 的数值,也可以只传入 y 的值,x 自动生成
# 参数:
# c:设置线的颜色
# ls:设置线的形状
# lw:线宽
# marker:点标记
plt.plot(x, y)
# 我们可以一次性画多条线,分别指定颜色,标记与线条类型。
plt.plot([1, 5, 7], [2, -2, 4], "g*--", [15, 17], [-8, 6], "r>-")柱状图、条形图
plt.bar() / plt.barh()
1
2
3
4
5
6
7
8
9
10
11
12# 柱形图,条形图,适合呈现数据的大小对比(传入标签值和每个标签值对应的数值)
"""
alpha---透明度,1代表不透明,0代表全透明。
width---柱子的宽度
color---柱状图填充的颜色,可采取的颜色同上
edgecolor---图形边缘的颜色,可采取的颜色同上
label---图像的标签
linewidth---边缘的宽度
"""
plt.bar(["A", "B", "C", "D"], [50, 30, 40, 20])
# 条形图
plt.barh(["A", "B", "C", "D"], [50, 30, 40, 20])饼图
plt.pie()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16# 适合呈现数据的大小对比
"""
lablels---每一块的标签
explode---每一块离中心的距离
startangle---起始绘制角度,默认图是从x轴正方向逆时针画起,如设定=90则从y轴正方向画起
shadow---是否有阴影
labeldistance---label绘制位置,相对于半径的比例, 如<1则绘制在饼图内侧
autopct---显示精度
pctdistance---类似于labeldistance,指定autopct的位置刻度
radius---控制饼图的半径
"""
plt.pie([100, 200, 300, 400],
labels=["A部门", "B部门", "C部门", "D部门"],
shadow=True,autopct="%.2f%%",
explode=[0, 0, 0, 0.5])散点图
plt.scatter()
1
2
3
4
5
6
7
8# 散点图(气泡图)使用与显示数据的分布状态,可以用来比较(对比)数据维度之间的关系。
plt.scatter(x, y, marker="o", s=10, color="green")
# 点的颜色与大小可以统一设置,也可以分别设置每个点的大小与颜色。
s = np.random.randint(10, 100, size=100)
# colors = ["r", "g", "b", "y"]
colors = np.random.choice(colors, size=100)
plt.scatter(x, y, s=s, color=colors)直方图
plt.hist()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16"""
range---默认None,选择直方图显示的范围
bins---指定我们显示的直方图的边界
alpha---透明度
facecolor---直方图颜色
histtype---直方图类型,可选‘bar’, ‘barstacked’, ‘step’, ‘stepfilled’
"""
# 默认将区间等分为十份。
plt.hist(x)
# 我们也可以自行指定桶的数量。
plt.hist(x, bins=5)
# 如果需要统计的区间是不等分的,可以给bins参数传递一个数组类型。
# 数组中的元素指定区间的界线。
plt.hist(x, bins=[1, 60, 80, 90, 100])箱线图
plt.boxplot()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27"""
一般用于在数据清洗过程中,进行查找异常值的时候
能够显示离群点,离群点可能是异常值,但是不一定是异常值
传入一系列的值,可以显示 远远高于(低于)其他值的值
x 指定要绘制箱线图的数据;
vert 是否需要将箱线图垂直摆放
patch_artist 是否填充箱体的颜色;
boxprops 设置箱体的属性,如边框色,填充色等;boxprops:color箱体边框色,facecolor箱体填充色;
showmeans 是否显示均值
meanline 是否用线的形式表示均值
labels 为箱线图添加标签
widths 指定箱线图的宽度
positions 指定箱线图的位置
flierprops 设置异常值的属性
notch 是否是凹口的形式展现箱线图
showcaps 是否显示箱线图顶端和末端的两条线
showbox 是否显示箱线图的箱体
sym 指定异常点的形状
showfliers 是否显示异常值
whis 指定上下须与上下四分位的距离
medianprops 设置中位数的属性
meanprops 设置均值的属性
capprops 设置箱线图顶端和末端线条的属性
whiskerprops 设置须的属性
"""
plt.boxplot([50, 40, 45, 48, 70, 60, 100])灰度图
plt.imshow()
1
2
3
4plt.figure()
plt.imshow(img, cmap='gray') # 图像为灰色
plt.colorbar() # 绘制颜色条
plt.show()
3.5 图的背景线
plt.grid()
设置横/竖格线axis
选择方向 x, y, both 格线与刻度间隔设置相关color
同plot设置linestyle
同plot设置linewidth
同plot设置
plt.axhline()
plt.axvline()
在某个坐标轴位置绘制线条 或者ax.axhline()
y
设置线的位置xmin
设置线的起始点 0-1 0是起点 ,1是终点xmax
设置线的终点 0-1color
颜色alpha
透明度linewidth
线的宽度