python库

Numpy是Python科学计算库的基础。包含了强大的N维数组对象和向量运算。

Pandas是建立在numpy基础上的高效数据分析处理库,是Python的重要数据分析库。

Matplotlib是一个主要用于绘制二维图形的Python库。用途:绘图、可视化

PIL库是一个具有强大图像处理能力的第三方库。用途:图像处理

Numpy库

NumPy是使用Python进行科学计算的基础软件包。

更多学习,可参考numpy中文网:https://www.numpy.org.cn/

1.数组创建

可以使用array函数从常规Python列表或元组中创建数组。得到的数组的类型是从Python列表中元素的类型推导出来的。

创建数组最简单的办法就是使用array函数。它接受一切序列型的对象(包括其他数组),然后产生一个新的含有传入数据的numpy数组。其中,嵌套序列(比如由一组等长列表组成的列表)将会被转换为一个多维数组

import numpy as np

#将列表转换为数组

array = np.array([[1,2,3],

                [4,5,6]])

print(array)

import numpy as np

#将元组转换为数组

array = np.array(((1,2,3),

                (4,5,6)))

print(array)

为了创建数字组成的数组,NumPy提供了一个类似于range的函数,该函数返回数组而不是列表。

array = np.arange( 10, 31, 5 )

print(array)

输出数组的一些信息,如维度、形状、元素个数、元素类型等

array = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])

print(array)

#数组维度

print(array.ndim)

#数组形状

print(array.shape)

#数组元素个数

print(array.size)

#数组元素类型

print(array.dtype)

重新定义数字的形状

array1 = np.arange(6).reshape([2,3])

print(array1)

array2 = np.array([[1,2,3],[4,5,6]],dtype=np.int64).reshape([3,2])

print(array2)

2.数组的计算

数组很重要,因为它可以使我们不用编写循环即可对数据执行批量运算。这通常叫做矢量化(vectorization)。

大小相等的数组之间的任何算术运算都会将运算应用到元素级。同样,数组与标量的算术运算也会将那个标量值传播到各个元素.

矩阵的基础运算:

arr1 = np.array([[1,2,3],[4,5,6]])

arr2 = np.ones([2,3],dtype=np.int64)

print(arr1 + arr2)

print(arr1 - arr2)

print(arr1 * arr2)

print(arr1 / arr2)

print(arr1 ** 2)

矩阵乘法:

arr3 = np.array([[1,2,3],[4,5,6]])

arr4 = np.ones([3,2],dtype=np.int64)

print(arr3)

print(arr4)

print(np.dot(arr3,arr4))

矩阵的其他计算:

print(arr3)

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))

arr3_tran = arr3.transpose()

print(arr3_tran)

print(arr3.flatten())

3.数组的索引与切片

arr5 = np.arange(0,6).reshape([2,3])

print(arr5)

print(arr5[1])

print(arr5[1][2])

print(arr5[1,2])

print(arr5[1,:])

print(arr5[:,1])

print(arr5[1,0:2])

Pandas库

pandas是python第三方库,提供高性能易用数据类型和分析工具。

pandas基于numpy实现,常与numpy和matplotlib一同使用

更多学习,请参考pandas中文网:https://www.pypandas.cn/

Pandas核心数据结构:


1.Series

Series是一种类似于一维数组的对象,它由一维数组(各种numpy数据类型)以及一组与之相关的数据标签(即索引)组成.

可理解为带标签的一维数组,可存储整数、浮点数、字符串、Python 对象等类型的数据。

import pandas as pd

import numpy as np

s = pd.Series(['a','b','c','d','e'])

print(s)

Seris中可以使用index设置索引列表。

与字典不同的是,Seris允许索引重复

#与字典不同的是:Series允许索引重复

s = pd.Series(['a','b','c','d','e'],index=[100,200,100,400,500])

print(s)

Series 可以用字典实例化

d = {'b': 1, 'a': 0, 'c': 2}

pd.Series(d)

可以通过Series的values和index属性获取其数组表示形式和索引对象

print(s.values)

print(s.index)

#与普通numpy数组相比,可以通过索引的方式选取Series中的单个或一组值

print(s)

print(s[100])

print(s[[400, 500]])

s = pd.Series(np.array([1,2,3,4,5]), index=['a', 'b', 'c', 'd', 'e'])

print(s)#对应元素求和

print(s+s)#对应元素乘

print(s*3)

Series中最重要的一个功能是:它会在算术运算中自动对齐不同索引的数据

Series 和多维数组的主要区别在于, Series 之间的操作会自动基于标签对齐数据。因此,不用顾及执行计算操作的 Series 是否有相同的标签。

obj1 = pd.Series({"Ohio": 35000, "Oregon": 16000, "Texas": 71000, "Utah": 5000})

obj2 = pd.Series({"California": np.nan, "Ohio": 35000, "Oregon": 16000, "Texas": 71000})

print(obj1 + obj2)

s = pd.Series(np.array([1,2,3,4,5]), index=['a', 'b', 'c', 'd', 'e'])

print(s[1:])

print(s[:-1])

print(s[1:] + s[:-1])

2.DataFrame

DataFrame是一个表格型的数据结构,类似于Excel或sql表

它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)

DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)

用多维数组字典、列表字典生成 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)

print(frame)

#如果指定了列顺序,则DataFrame的列就会按照指定顺序进行排列

frame1 = pd.DataFrame(data, columns=['year', 'state', 'pop'])

print(frame1)

跟原Series一样,如果传入的列在数据中找不到,就会产生NAN值

frame2 = pd.DataFrame(data, columns=['year', 'state', 'pop', 'debt'], index=['one', 'two', 'three', 'four', 'five'])

print(frame2)

用 Series 字典或字典生成 DataFrame

#通过类似字典标记的方式或属性的方式,可以将DataFrame的列获取为一个Series,返回的Series拥有原DataFrame相同的索引

frame2 = pd.DataFrame(data, columns=['year', 'state', 'pop', 'debt'], index=['one', 'two', 'three', 'four', 'five'])

print(frame2)

print(frame2['state'])

列可以通过赋值的方式进行修改,例如,给那个空的“delt”列赋上一个标量值或一组值

frame2['debt'] = 16.5

print(frame2)

frame2['new'] = frame2['debt' ]* frame2['pop']

print(frame2)

frame2['debt'] = np.arange(5.)

print(frame2)

PIL库

PIL库是一个具有强大图像处理能力的第三方库。

图像的组成:由RGB三原色组成,RGB图像中,一种彩色由R、G、B三原色按照比例混合而成。0-255区分不同亮度的颜色。

图像的数组表示:图像是一个由像素组成的矩阵,每个元素是一个RGB值

Image 是 PIL 库中代表一个图像的类(对象)

展示图片,并获取图像的模式,长宽,

from PIL import Image

import matplotlib.pyplot as plt

import numpy as np

#显示matplotlib生成的图形

%matplotlib inline

#读取图片

img = Image.open('data/data37255/yushuxin.jpg') 

img_array = np.array(img).astype('float32') 

 #将一个PIL的图像对象,转换为numpy.arrayprint(img_array)

print(img_array.shape)

#显示图片

#img.show() #自动调用计算机上显示图片的工具

plt.imshow(img) 

plt.show()

#获得图像的模式

img_mode = img.mode

print(img_mode)

width,height = img.size

print(width,height)

图片旋转

from PILimport Image

import matplotlib.pyplotas plt

#读取图片

img = Image.open('D:\新建文件夹 (5)\data\壁纸.webp')

#显示图片

plt.imshow(img)

plt.show()

#将图片旋转45度

img_rotate = img.rotate(45)

#显示旋转后的图片

plt.imshow(img_rotate)

plt.show()

剪切图片

from PILimport Image

#打开图片

img1 = Image.open('D:\新建文件夹 (5)\data\壁纸.webp')

#剪切 crop()四个参数分别是:(左上角点的x坐标,左上角点的y坐标,右下角点的x坐标,右下角点的y坐标)

img1_crop_result = img1.crop((139,11,379,225))

#保存图片

img1_crop_result.save('D:\新建文件夹 (5)\data\壁纸1.webp')

#展示图片

plt.imshow(img1_crop_result)

plt.show()

图片缩放

from PILimport Image

#打开图片

img2 = Image.open('D:\新建文件夹 (5)\data\壁纸.webp')

width,height = img2.size

#缩放

img2_resize_result = img2.resize((int(width*0.6),int(height*0.6)),Image.ANTIALIAS)

print(img2_resize_result.size)

#保存图片

img2_resize_result.save('/home/aistudio/work/yushuxin_resize_result.jpg')

#展示图片

plt.imshow(img2_resize_result)

plt.show()

镜像旋转左右旋转、上下旋转

from PILimport Image

#打开图片

img3 = Image.open('D:\新建文件夹 (5)\data\壁纸.webp')

#左右镜像

img3_lr = img3.transpose(Image.FLIP_LEFT_RIGHT)

#展示左右镜像图片

plt.imshow(img3_lr)

plt.show()

#上下镜像

img3_bt = img3.transpose(Image.FLIP_TOP_BOTTOM)

#展示上下镜像图片

plt.imshow(img3_bt)

plt.show()

Matplotlib库

Matplotlib库由各种可视化类构成,内部结构复杂。

matplotlib.pylot是绘制各类可视化图形的命令字库

更多学习,可参考Matplotlib中文网:https://www.matplotlib.org.cn

import matplotlib.pyplot as plt

import numpy as np 

#显示matplotlib生成的图形

%matplotlib inline

x = np.linspace(-1,1,50) 

#等差数列

y = 2*x + 1

#传入x,y,通过plot()绘制出折线图 

plt.plot(x,y)

#显示图形

plt.show()

import matplotlib.pyplotas plt

import numpyas np

x = np.linspace(-1,1,50)#等差数列

y1 =2*x +1

y2 = x**2

plt.figure()

plt.plot(x,y1)

plt.figure(figsize=(7,5))

plt.plot(x,y2)

plt.show()

import matplotlib.pyplotas plt

import numpyas np

plt.figure(figsize=(7,5))

plt.plot(x,y1,color='red',linewidth=1)

plt.plot(x,y2,color='blue',linewidth=5)

plt.xlabel('x',fontsize=20)

plt.ylabel('y',fontsize=20)

plt.show()

import matplotlib.pyplotas plt

import numpyas np

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')

plt.xlabel('x')

plt.ylabel('y')

# plt.xlim((0,1))  #x轴只截取一段进行显示

# plt.ylim((0,1))  #y轴只截取一段进行显示

plt.show()

dots1 =np.random.rand(50)

dots2 =np.random.rand(50)

plt.scatter(dots1,dots2,c='red',alpha=0.5)#c表示颜色,alpha表示透明度

plt.show()

x = np.arange(10)

y =2**x+10

plt.bar(x,y,facecolor='#9999ff',edgecolor='white')

plt.show()

x = np.arange(10)

y =2**x+10

plt.bar(x,y,facecolor='#9999ff',edgecolor='white')

for ax,ayin zip(x,y):

#设置文字说明 第一、二个参数:坐标轴上的值; 第三个参数:说明文字;ha:垂直对齐方式;va:水平对齐方式

    plt.text(ax,ay,'%.1f' % ay,ha='center',va='bottom')

plt.show()

你可能感兴趣的:(python库)