学习机器学习的准备工作:numpy、pandas、matplotlib的基本操作
之前我们已经学习了如何安装第三方库,也成功下载了机器学习必要的第三方库,为了接下来更好的学习机器学习,我们先来学习一下numpy、pandas、matplotlib等第三方库的基础操作。
1 numpy
1.1 了解numpy
首先numpy代表的一种新的数据类型,不同于列表、字典等数据类型,numpy是矩阵类型的数据,我们接下来要学习的人工智能本质上就是矩阵的运算。
1.2数组的基本操作
import numpy as np a = np.array([1, 2, 3, 4]) print(type(a)) print(a) b = np.array([[1, 2], [3, 4]]) print(b.shape)

我们利用np.array来生成一个矩阵,查看矩阵的类型显示是<class 'numpy.ndarray'>,我们也可以查看矩阵的形状来看看是几乘几的矩阵。
1.3全0数组
数组的形状有很多种类型,有2x2的,3x4的,同样也有全0数组。
import numpy as np a=np.zeros(shape=(5,3)) print(a)

同样的我们也可以创建其他的特殊矩阵。
1.4全1数组

1.5全空矩阵

1.6改变矩阵形状
如果本来有一个2行3列的数组,如何把它改成为3行2列的数组呢?
import numpy as np
data1=[1,2,3,4,5]
data2=[1,2,3,4,5]
data=np.array([data1,data2])
print('数组为',data)
print("数组形状为:",data.shape)
data=data.reshape((5,2))
print('数组为',data)
print("数组形状为:",data.shape)

!!!注意:因为矩阵中元素是没有改变的,所以修改的数组指定的尺寸大小必须和原本的尺寸大小一样,大一点和小一点都会报错,2行3列的数组,你可以把它改成为3行2列的数组 ,或者1行6列,改后尺寸必须一样,reshape本质就是原本数组中的元素按顺序展开来,然后依次填入新定义的尺寸中去!!!
1.7矩阵的转置
学过线性代数的大朋友应该知道矩阵的转置是怎么一回事,那么在Python当中如何实现。
import numpy as np
data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
data_array = np.array(data)
print("未转置之前数组为:")
print(data)
print("转置之后数组为:")
print(data_array.T)

1.8分割数组
| 函数 | 作用 | 特点 |
| hsplit(arr, n) | 水平分割 | 等价于 split(arr, n, axis=1),要求列数能被 n 整除 |
| vsplit(arr, n) | 垂直分割 | 等价于 split(arr, n, axis=0),要求行数能被 n 整除 |
| split(arr, n, axis) | 通用分割 | axis=0 按行、axis=1 按列,要求长度能被 n 整除 |
| array_split(arr, n, axis) | 通用分割 | 支持不等份数分割,无整除要求 |
import numpy as np array1 = np.arange(4).reshape(2,2) a = np.hsplit(array1,2) b = np.split(array1,2,axis=1) c = np.vsplit(array1,2) d = np.split(array1,2,axis=0) e = np.array_split(array1,3,axis=1) f = np.array_split(array1,3,axis=0) print(array1,a,b,c,d,e,f)
1.9拼接数组
| 函数 | 作用 | |
| hstack | 水平拼接 | 要求待拼接数组行数相同 |
| vstack | 垂直拼接 | 要求待拼接数组列数相同 |
| concatenate | 通用拼接 | 通过 axis 控制方向,axis=0 按行、axis=1 按列 |
import numpy as np array1 = np.arange(9).reshape(3,3) array2 = 2*array1 print(array1) print(array2) a3 = np.hstack((array1,array2)) print(a3) a4 = np.hstack((array2,array1)) print(a4) a5 = np.hstack((array1,array2,array1)) print(a5) a6 = np.concatenate((array1,array2),axis=1) print(a6) a7 = np.vstack((array2,array1)) print(a7) a8 = np.concatenate((array1,array2),axis=0) print(a8)
1.10选取数组
import numpy as np array1 = np.arange(48).reshape(2,4,6) print(array1) a = array1[1,0,0] b = array1[0,1,:] c = array1[0,1:3,:] d = array1[0,[1,3],:] e = array1[1,:,1] f = array1[1,:,1:4] g = array1[1,:,[1,4]] print(a,b,c,d,e,f,g) array1[1,0,0]=100 print(array1) v = np.array([array1,array1,array1,array1]) a= v[2,1,2: ,1:3] print(a)
选取数组是从0开始的,a = array1[1,0,0]表示取第 2 个二维数组→ 第 1 行 → 第 1 列的单个元素。
‘:’表示所有元素,b = array1[0,1,:]表示取第 1 个二维数组 → 第 2 行 → 所有列。
c = array1[0,1:3,:]表示取第 1 个二维数组 → 第 2-3 行 → 所有列。
d = array1[0,[1,3],:]表示取第 1 个二维数组→ 第 2到4 行 → 所有列。
e = array1[1,:,1]表示取第 1 个二维数组 → 第 2、4 行 → 所有列。以此类推。
v = np.array([array1,array1,array1,array1])表示在array基础上再生成一层,结构为 4×2×4×6 的四维数组。
a= v[2,1,2: ,1:3]表示取第 3 个三维数组→ 取该块中的第 2 个二维数组→ 第 3-4 行→第 2-3 列
1.11升维和降维操作
import numpy as np list1 = [1,2,3,4,5,6,7,8] v = np.array(list1) v = v.reshape(2,2,2) print(v) v.ndim r1 = v.reshape(1,8) print(r1) r1.ndim r2 = v.ravel() print(r2) r3 = v.flatten() print(r3) list1 = [1,2,3,4,5,6,7,8] v = np.array(list1) print(v) v.shape = (2,4) print(v)
| 函数 | 作用 | 特点 |
| reshape() | 改变数组形状 | 需保证元素总数不变 |
| ravel() | 展平为一维数组 | 修改会影响原数组 |
| flatten() | 展平为一维数组 | 修改不会影响原数组 |
numpy基础操作:增、删、查基本已经介绍完了
2.pandas
相比较于numpy,pandas处理表格型数据能力特别强,支持读取 / 保存 CSV、Excel、SQL、JSON 等多种格式文件,并且在处理缺失值、重复值、异常值方面Pandas非常好用
2.1读取文件
import pandas as pd
df_1 = pd.read_csv("data1.csv")
df_2 = pd.read_csv("data2.csv", encoding='utf8', header=None)
df_3 = pd.read_excel("data3.xlsx")
df_4 = pd.read_table("data4.txt", sep=',', header=None)
df_1.to_csv("导出.csv", index=True, header=True)
df_1.to_excel("导出.xlsx", index=True, header=True)
print(df_1,df_2,df_3,df_4)

2.2数据清洗
import pandas as pd
df = pd.read_csv(r"data1.csv", encoding='gbk')
na = df.isnull()
df1 = df.fillna('1')
df2 = df.dropna()
print(df2)

3.matplotlib
Matplotlib就是Python当中的绘图库,可以将数据转换成直观的图表。
import matplotlib.pyplot as plt
import numpy as np
x = np.array([1,2,3,4,5])
y = np.array([10,20,25,30,40])
plt.plot(x,y,color='red',marker='*')
plt.title('Scatter plot')
plt.xlabel('x Axis')
plt.ylabel('y Axis')
plt.show()

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,10,10000)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)
y4 = np.sin(x**2)
fig,axs = plt.subplots(2,2,figsize=(10,8))
axs[0, 0].plot(x,y1,'r')
axs[0, 0].set_title('sin(x)')
axs[0, 1].plot(x,y2,'g')
axs[0, 1].set_title('cos(x)')
axs[1, 0].plot(x,y3,'b')
axs[1, 0].set_title('tan(x)')
axs[1, 1].plot(x, y4, 'm')
axs[1, 1].set_title('sin(x^2)')
plt.show()

现在我们对numpy、pandas、matplotlib基本用法都有了了解,接下来我们将开启机器学习这门课程的学习。
日记
1月22日,星期四,天气晴
杂谈01
今天星期四,照理是自习课,昨天真的太累了,对着电脑坐一天,有点不舒服,原来在学校图书馆自习的时候,遇到这种情况我一般直接去操场转转,散散心,但是昨天下完雪特别冷,想着回宿舍早早睡觉结果,宿舍还是好冷。
今天的日记有点无聊了,我觉得这是正常的,每个人过的每一天不可能都有那么多让人津津乐道的事情,平凡才是人生的主旋律。
今天好像新游戏《明日方舟——终末地》开服,我看我旁边的同学玩了一下,感觉就是故事线不一样的《原神》(个人想法,别冲我,谢谢),我当年玩原神玩的可猛了,在纳塔之前,神瞳、探索度、任务全清,结果现在就是对这一类都不想玩了,之前《鸣潮》也玩过,但是这种大型需要肝的游戏真玩不下去了,后面就开始玩《星露谷物语》,玩到能用祝尼魔小屋全自动收菜的时候,也玩不下去了。现在是《文明6》,《饥荒》,《逃离塔科夫》轮着玩,顺带一提,搜打撤我先玩的《暗区突围》,后面把号租了200块钱以后就没玩了,《三角洲行动》还是太轮椅了,不吃不喝,单挂不用放弹夹,只有技能博弈,不需要担心投掷物。我玩到一个亿现金就把号借给好兄弟随便玩了。
今年的杂谈就到这了,我发现我碎碎念也能写不少东西。
更多推荐
所有评论(0)