之前我们已经学习了如何安装第三方库,也成功下载了机器学习必要的第三方库,为了接下来更好的学习机器学习,我们先来学习一下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块钱以后就没玩了,《三角洲行动》还是太轮椅了,不吃不喝,单挂不用放弹夹,只有技能博弈,不需要担心投掷物。我玩到一个亿现金就把号借给好兄弟随便玩了。

今年的杂谈就到这了,我发现我碎碎念也能写不少东西。

更多推荐