一、Numpy
1、数组创建array函数
必须是Python的list或者tuple类型才可以进行转换为数组。
例:a = numpy.array (list/tuple) √
b = numpy.array(1,2,3,4) ×
2、随机占位
(1) 占位函数
1)numpy.zeros((a,b))
2)numpy.ones((a,b))
3)numpy.empty((a,b)) #随机生成
这三个函数都可以加上一个参数控制的 dtype = ‘int64’,当然也可以变换成其他数据类型。
例如:numpy.empty((a,b),dtype = 'int64')
(2)数字组成的数组
1)numpy.arange(前,后,步长) #前闭后开,注意range是从前向后输出,而random才是随机数输出,不要混淆
2)数组的各项属性
#数组维度
print(array.ndim)
#数组形状
print(array.shape)
#数组元素个数
print(array.size)
#数组元素类型
print(array.dtype)
3)数组的形状改变
numpy.arange(a,b,c).reshape([d,e])
#把a-(b-1),
注意:要保持数组的数目是一致的,否则就会报错。
3、numpy的数组运算
(1)基础运算
最重要的是大小相等的数组之间的任何算术运算都会将运算应用到元素级,不需要在进行遍历。
特别的例子:
1)arr1 ** 2 #相当于两个数组进行相乘,实际是对其中的元素进行平方
2)此处进行的简单的arrag1/array2以及a1*a2实际上进行的是简单的单个元素之间的相除与相乘,并非是线性代数之间矩阵相乘与矩阵相除
(2)矩阵乘法
使用numpy.dot(arr3,arr4)函数进行线性代数的矩阵相乘
(3)其他运算
print(np.sum(arr3,axis=1))
#axis=1,每一行求和 ;axie=0,每一列求和,输出的是一行或者一列的和值
print(np.max(arr3))
print(np.min(arr3))
print(np.mean(arr3))
print(np.argmax(arr3)) #最大值的下标
print(np.argmin(arr3)) #最小值的下标
转置:
array.transpose()
拍平:
array.flatten()
(4)数组切片
array[行,列]
array[行的范围,列的范围] #其中行的范围一般是进行切片处理表示 起始:结束+1
二、Pandas(Series和DataFrame两个之间主要区别在于一个是一维数组类型,另一个是二维表格,可以相互转换,不过是数量相对会变化)
pandas基于numpy实现,常与numpy和matplotlib一同使用.
1、Series
Series可理解为带标签的一维数组,可存储整数、浮点数、字符串、Python 对象等类型的数据。
1)可直接将list进行转换
例如: a = pandas.Series(['a','1','b'])
2)可以使用index自定义索引,索引可重复(与字典不同)
例如: a = pandas.Series(['a','1','b']) index = [100,200,100]
3)Series 可以用字典实例化
例如:a = {'A':1,'B':2,'C':3}
s = pandas.Series(a)
4)Series的values和index属性可单独获取
例如:s.values
s.index
5)通过索引调用
例如:s[100]
6)简单计算(加减计算)
Series类型之间的计算主要是对每一个的values进行计算,同时进行。
相同标签相加后会进行合并,然后values相加。(NaN指的是not a number指的是没有进行定义,实际上也是一种数据类型。)
Series 和多维数组的主要区别在于, Series 之间的操作会自动基于标签对齐数据。因此,不用顾及执行计算操作的 Series 是否有相同的标签。(此句的解释是为了做相同的标签进行的运算,我们关注的是相同标签,而对于不同标签,最后产生的是NAN)
2、DataFrame(是数据结构,同时也是函数调用)
DataFrame是一个表格型的数据结构,类似于Excel或sql表,DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)。
行索引,主要指的是字典中每一个key对应的n个values,0——(n-1)的索引值(或者在DataFrame参数中使用index进行行索引的自定义),而列索引主要指的是字典中key的值进行列索引,从而形成一个二维的表格。
用多维数组字典、列表字典生成 DataFrame定义样例:data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'],'year': [2000, 2001, 2002, 2001, 2002], 'pop': [1.5, 1.7, 3.6, 2.4, 2.9]}
frame = pd.DataFrame(data)
输出样例:
state year pop 0 Ohio 2000 1.5 1 Ohio 2001 1.7 2 Ohio 2002 3.6 3 Nevada 2001 2.4 4 Nevada 2002 2.91)可通过参数columns来进行列索引的重新排序
pandas.DataFrame(data,coulmns = ['year','state','pop'])
#其中data使用的是多维的字典
2)跟原Series一样,如果传入的列在数据中找不到,就会产生NAN值
一般出现在缺少某一列的情况。也就是某一列对应的字典只有key,没有values,导致最后没有值,只能返回一个NAN。
3)使用Series类进行DataFrame定义
例:
d = {'one': pd.Series([1., 2., 3.], index=['a', 'b', 'c']),
'two': pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}
print(pd.DataFrame(d))
4)将DataFrame的列获取为一个Series
就是将DataFrame的一列取出来,变成了一个Series,其中行索引不变。
例如: frame2['state']
#其中state是DataFrame的一个列索引,也可以说是二维字典的一个key
5)DataFrame的列可以进行运算,有些类似于Excel的计算,还可以产生随机数或者进行赋值
例:frame2['debt'] = 16.5 #直接进行赋值
frame['result'] = frame['gc1'] *frame['gc2'] #两列之间进行运算
frame2['debt'] = numpy.arange(5.)
三、PIL 图像处理基础库
安装:!pip install pillow
1)图片读取、打开与保存(此处包含了图片显示的matplotlib函数)
from PIL import Image
import matplotlib.pyplot as plt打开与读取:
img1 = Image.open('地址 ')显示:
plt.imshow()
plt.show()保存:
img.save('地址')2)裁剪图片
#剪切 crop()四个参数分别是:(左上角点的x坐标,左上角点的y坐标,右下角点的x坐标,右下角点的y坐标)
img1_crop_result = img1.crop((126,0,381,249))3)缩放
#下面进行的是缩放操作,主要用到的是resize函数,其中的参数Image.ANTIALIAS是为了保证缩放的图像质量不会失真严重
width,height = img1.size
img1_result_resize = img1.resize((int(width*0.6),int(height*0.6)),Image.ANTIALIAS)4)旋转
#下面进行旋转操作,主要用到的是rotate函数,逆时针旋转img1_result_rotate = img1.rotate(45)
plt.imshow(img1_result_rotate)5)镜像
#下面进行的是镜像操作,主要分为左右镜像和上下镜像
#用到的函数主要是transpose函数,分别使用不同的参数控制上下镜像或者左右镜像,分别是Image.FLIP_LEFT_RIGHT和Image.FLIP_TOP_BOTTOMimg1_result_flip_lr = img1.transpose(Image.FLIP_LEFT_RIGHT)
plt.imshow(img1_result_flip_lr)
img1_result_flip_lr.save('/home/aistudio/work/img1_result_flip_lr.jpg')img1_result_flip_tb = img1.transpose(Image.FLIP_TOP_BOTTOM)
plt.imshow(img1_result_flip_tb)
img1_result_flip_lr.save('/home/aistudio/work/img1_result_flip_lr.jpg')
四、matplot.pyplot库
安装:!pip install matplotlib
导入:import matplotlib.pyplot as plt
import numpy as np #numpy库,有时候会用到
1)传入x,y,通过plot()绘制出折线图
plt.plot(x,y)
2)打开画布
plt.figure() #有点类似于matlab的打开画布
#其中括号内可以进行参数大小的定义比如plt.figure(figsize = (7,5))
#使用不同画布可以直接写另外的figure即可
3)plt.plot()函数其他参数
plt.plot() 还有其他参数
color = 'red' #设置划线的颜色
linewidth = 1 #设置画图线的粗细
4)坐标轴设置
plt.xlabel('x',fontsize = 20)
plt.ylabel('y',fontsize = 20)
5)图例函数lmatplotlib.legend()
例:
l1, = plt.plot(x,y1,color = 'red' ,linewidth = 1) #此处必须有逗号这个东西,否则会出问题
l2, = plt.plot(x,y2,color = 'blue',linewidth = 5)
#设置图例
plt.legend(handles = [l1,l2],labels = ['aa','bb'],loc = 'best')#其中的loc表示的是图例所在的位置,“best”指的是放到最合适的位置,还可以换成其他样式
#handles = [ , ]指的是进行操作的对象
#labels = [ , ] 设置的是图例的名字
6)截取显示
plt.xlim((0,1)) #x轴只截取一段进行显示
plt.ylim((0,1)) #y轴只截取一段进行显示
7)scatter散点图绘制
scatter(x, y, 点的大小, 颜色,标记),这是最主要的几个用法,如果括号中不写s= c=则按默认顺序,写了则按规定的来,不考虑顺序。
例:plt.scatter(dots1,dots2,c='red',alpha=0.5) #c表示颜色,alpha表示透明度
补充:随机数产生
1.参生n--m范围内的一个随机数: random.randint(n,m)
2.产生0到1之间的浮点数: random.random()
3.产生n---m之间的浮点数: random.uniform(1.1,5.4)
4.产生从n---m间隔为k的整数: random.randrange(n,m,k)
5.从序列中随机选取一个元素: random.choice([1, 2, 3, 4, 5, 6, 7, 8, 9, 0])
6.在一些特殊的情况下可能对序列进行一次打乱操作: random.shuffle([1,3,5,6,7])
8)柱状图
plt.bar(x,y,facecolor='#9999ff',edgecolor='white')
#其中的facecolor指的是柱子的颜色,edgecolor指的是柱子边缘颜色,还有很多可选参数,需要时自己查询即可。
柱状图加标签:
plt.text(x, y, string, fontsize=15, verticalalignment="top", horizontalalignment="right" )
其中参数含义是:
x,y:表示坐标值上的值
string:表示说明文字
fontsize:表示字体大小
verticalalignment:垂直对齐方式 ,参数:[ ‘center’ | ‘top’ | ‘bottom’ | ‘baseline’ ]
horizontalalignment:水平对齐方式 ,参数:[ ‘center’ | ‘right’ | ‘left’ ]