0 前言
本系列文章旨在为有一定 python 基础的同学,通过一定的案例详解,让大家快速 了解并实现 基础的机器学习算法。因此,本系列文章不包括算法理论,但每章每小节均包含一些 作业 可以让大家熟练相关内容。本系列包含的主要算法为:回归、聚类、关联分析、决策树、支持向量机。
1 Numpy
Numpy 常用于进行与线性代数相关的运算,支持高维数组、矩阵等数据运算,并且提供了大量的相关函数。Numpy 内部运算由C语言实现,因此运算速度十分快。想要使用它首先要导入 Numpy 库,一般约定导入时的别名为np
:
import numpy as np
Numpy 中有两种重要的数据类型,分别是 数组 和 矩阵。首先创建一个二维数组(numpy.ndarray),打印该数组的元素类型、形状、大小。
array=np.arange(6).reshape(2,3)
print(array)
print(array.dtype)
print(array.shape)
print(array.size)
通过 Numpy 种的数组可以 批量 进行数据运算,下面对数组与标量进行数学运算,这些运算相当于对数组中的每一个元素都进行运算:
array1=array+2
array2=array**2
print(array1)
print(array2)
Numpy 中的数组也可以进行 索引和切片。对于一维数组而言,索引和切片方式与 Python 中的 List 相同。对于高维数组,可以使用逗号隔开不同维度的索引来访问某个元素:
print(array[1,2])
如果忽略后面的索引,会返回比高维数组纬度低一点的数组:
print(array[1])
当数组为二维数组时,可以把它看作一个矩阵,先创建一个二维数组:
arr=np.array([[2,4,1],[1,2,4],[2,1,1]])
对二维数组进行转置与矩阵乘法(点积):
arr1=arr.T
print(np.dot(arr,arr1))
numpy.linalg 中包含了一些常用的运算函数,如求矩阵的行列式、求矩阵的逆、计算奇异值(SVD)分解等,如:
from numpy.linalg import inv
a=np.array([[3,1],[2,4]])
b=inv(a)
print(a)
print(b)
print(np.dot(a,b))
2 Pandas
Pandas 是基于 Numpy 构建的,可以用于简单、快捷地处理大型数据集,对数据集进行关系型运算,它可以灵活地处理 时间序列 和 缺失数据
首先导入 Pandas 库,一般约定导入时的别名为pd
:
import pandas as pd
Pandas 中有两种重要的数据结构:Series 和 DataFrame。
Series 由一组 数据 与这组数据的 索引 组成。下面利用一组数据生成一组 Series:
series=pd.Series([4,1,2,4])
print(series)
打印输出 Series 可以看到创建的数据及索引 ,由于创建时没有指定,函数会自动创建一组以0开始的自然数序列索引。可以在使用 Series 时指定 index 参数 创建索引,也可以在创建后根据需要自行更改索引:
myindex=['a','b','c','d']
series.index=myindex
print(series)
对数据进行索引、筛选、排序:
print(series['a'])
print(series[series>1])
print(series.sort_values())
还可以方便地使用 Numpy 库的函数批量地处理这些数据
print(np.exp(series))
除了 Series 外,Pandas 还提供了一种更同样、类似于表格类型的数据结构 DataFrame。首先用字典创建一个 DataFrame:
df=pd.DataFrame({'name':['vivi','cici','gigi','cici'],'age':[17,19,18,19],'height':[1.6,1.7,1.8,1.7]})
print(df)
可以把 DataFrame 看作是多列的 Series,这些 Series 共用一个索引 index,使用表名和列名可以获取一个单独的 Series:
print(df['age'])
可以使用 Pandas 进行数据清洗,通过 pd.read_csv()
函数,可以读取 .csv 文件里保存的表格,可以指定文件路径、文件编码等参数:
df=pd.read_csv(r"test.csv",encoding="utf-8")
读取完数据后可以使用head()
函数查看前几行数据:
print(df.head())
使用drop_duplicates()
函数可以删除重复的样本:
# 删除姓名相同的样本,保留最后一项,并更新 DataFrame
df.drop_duplicates(subset=["name"],inplace=True,keep="last")
print(df)
使用drop()
函数可以删除指定的列:
#删除 id 列,并更新 DataFrame
df.drop(columns=['id'],inplace=True)
print(df)
还可以根据需求筛选数据:
#筛选 name 字段以 'ci' 开头的数据
sub_df1=df[df['name'].str.startswith('ci')]
#筛选 age 列为18,height 列为1.7的数据
sub_df2=df[(df['age']==18)&(df['height']==1.7)]
print(sub_df1)
print(sub_df2)
3 Matplotlib
Matplotlib.pyplot 是一组命令样式函数,使 Matplotlib 像 MATLAB 一样工作。
先导入 Matplotlib.pyplot 库,一般约定导入时的别名为plt
:
import matplotlib.pyplot as plt
下面画一个简单图
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,2*np.pi,100)
y = np.sin(x)
plt.plot(x,y)
plt.show()
总结起来就是五步:
- 创建一个图纸 (figure)
- 在图纸上创建一个或多个绘图 (plotting) 区域(也叫子图,坐标系/轴,axes)
- 在 plotting 区域上描绘点、线等各种 marker
- 为 plotting 添加修饰标签(绘图线上的或坐标轴上的)
- 其他各种 DIY
详细可参考文档:Python--Matplotlib(基本用法)