Python被大量应用在数据挖掘和深度学习领域,其中使用极其广泛的是Numpy、pandas、Matplotlib、PIL等库。
numpy是Python科学计算库的基础。包含了强大的N维数组对象和向量运算。
pandas是建立在numpy基础上的高效数据分析处理库,是Python的重要数据分析库。
Matplotlib是一个主要用于绘制二维图形的Python库。用途:绘图、可视化
PIL库是一个具有强大图像处理能力的第三方库。用途:图像处理
可以使用array函数从常规Python列表或元组中创建数组。得到的数组的类型是从Python列表中元素的类型推导出来的。
创建数组最简单的办法就是使用array函数。它接受一切序列型的对象(包括其他数组),然后产生一个新的含有传入数据的numpy数组。其中,嵌套序列(比如由一组等长列表组成的列表)将会被转换为一个多维数组
import numpy as np
#将列表转换为数组
array = np.array([[1,2,3],
[4,5,6]])
print(array)
[[1 2 3]
[4 5 6]]
import numpy as np
array= np.zeros((2,3))
print(array)
[[0. 0. 0.]
[0. 0. 0.]]
array = np.array([[1,2,3],[2,2,2]],dtype='int64').reshape([3,2])
print(array)
[[1 2]
[3 2]
[2 2]]
Series是一种类似于一维数组的对象,它由一维数组(各种numpy数据类型)以及一组与之相关的数据标签(即索引)组成.
可理解为带标签的一维数组,可存储整数、浮点数、字符串、Python 对象等类型的数据。
import pandas as pd
i=pd.series(['a','b','c','d','e'])
print(i)
0 a
1 b
2 c
3 d
4 e
dtype: object
自己设置索引(索引可以重复)
import pandas as pd
i=pd.Series(['a','b','c','d','e'],index=[12,2,12,13,13])
print(i)
12 a
2 b
12 c
13 d
13 e
dtype: object
查看列表数值和索引
import pandas as pd
s=pd.Series(['a','b','c','d','e','f'],index=[100,200,300,400,500,600])
print(s)
print(s.values)
print(s.index)
100 a
200 b
300 c
400 d
500 e
600 f
dtype: object
['a' 'b' 'c' 'd' 'e' 'f']
Int64Index([100, 200, 300, 400, 500, 600], dtype='int64')
索引S中的值
import pandas as pd
s= pd.Series(['a','b','c','d','e','f'],index=[100,200,300,400,500,600])
print(s[100])
print(s[400,500,600])
a
import numpy as np
import pandas as pd
s = pd.Series(np.array([1,2,3,4,5]),index=[100,200,300,400,500])
print(s)
print(s+s)
print(s*2)
100 1
200 2
300 3
400 4
500 5
dtype: int64
100 2
200 4
300 6
400 8
500 10
dtype: int64
100 2
200 4
300 6
400 8
500 10
dtype: int64
Series中最重要的一个功能是:它会在算术运算中自动对齐不同索引的数据
Series 和多维数组的主要区别在于, Series 之间的操作会自动基于标签对齐数据。因此,不用顾及执行计算操作的 Series 是否有相同的标签。
import numpy as np
import pandas as pd
lest1=pd.Series({'liu':60,'lin':70,'chen':80,'bo':90,'zhe':1000})
print(lest1)
lest2=pd.Series({'ss':None,'lin':60,'chen':80,'bo':90,'zhe':1000,'bb':600})
print(lest1+lest2)
print(lest1[1:]+lest2[:-1])
liu 60
lin 70
chen 80
bo 90
zhe 1000
dtype: int64
bb NaN
bo 180.0
chen 160.0
lin 130.0
liu NaN
ss NaN
zhe 2000.0
dtype: float64
DataFrame是一个表格型的数据结构,类似于Excel或sql表
它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)
DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)
import pandas as pd
import numpy as np
list ={'name':['liu','lin','boning','zheyu','chen'],'sex':['boy','boy','boy','boy','boy'],'age':[18,18,18,18,18]}
man= pd.DataFrame(list,index=[1,2,3,4,5])
print(man)
name sex age
1 liu boy 18
2 lin boy 18
3 boning boy 18
4 zheyu boy 18
5 chen boy 18
1.改变纵列顺序和添加纵列
import pandas as pd
import numpy as np
list ={'name':['liu','lin','boning','zheyu','chen'],'sex':['boy','boy','boy','boy','boy'],'age':[18,18,18,18,18]}
man= pd.DataFrame(list,index=[1,2,3,4,5],columns=['sex','name','age','weigh'])
print(man)
sex name age weigh
1 boy liu 18 NaN
2 boy lin 18 NaN
3 boy boning 18 NaN
4 boy zheyu 18 NaN
5 boy chen 18 NaN
2.赋值
import pandas as pd
import numpy as np
list ={'name':['liu','lin','boning','zheyu','chen'],'sex':['boy','boy','boy','boy','boy'],'age':[18,18,18,18,18]}
man= pd.DataFrame(list,index=[1,2,3,4,5],columns=['sex','name','age','weigh'])
print(man)
man['weigh']=50
print(man)
sex name age weigh
1 boy liu 18 NaN
2 boy lin 18 NaN
3 boy boning 18 NaN
4 boy zheyu 18 NaN
5 boy chen 18 NaN
sex name age weigh
1 boy liu 18 50
2 boy lin 18 50
3 boy boning 18 50
4 boy zheyu 18 50
5 boy chen 18 50
3.相加
import pandas as pd
import numpy as np
list ={'name':['liu','lin','boning','zheyu','chen'],'sex':['boy','boy','boy','boy','boy'],'age':[18,18,18,18,18]}
man= pd.DataFrame(list,index=[1,2,3,4,5],columns=['sex','name','age','weigh'])
print(man)
man['weigh']=50
print(man)
man['tall']=man['weigh']+man['age']
print(man)
sex name age weigh
1 boy liu 18 NaN
2 boy lin 18 NaN
3 boy boning 18 NaN
4 boy zheyu 18 NaN
5 boy chen 18 NaN
sex name age weigh
1 boy liu 18 50
2 boy lin 18 50
3 boy boning 18 50
4 boy zheyu 18 50
5 boy chen 18 50
sex name age weigh tall
1 boy liu 18 50 68
2 boy lin 18 50 68
3 boy boning 18 50 68
4 boy zheyu 18 50 68
5 boy chen 18 50 68
> 安装
#安装pillow
#!pip install pillow
1.图片的修剪
from PIL import Image
img=Image.open('/home/aistudio/work/yushuxin.jpg')
#剪切 crop()四个参数分别是:(左上角点的x坐标,左上角点的y坐标,右下角点的x坐标,右下角点的y坐标)
img1 = img.crop((126,0,381,249))
#保存图片
img1.save('/home/aistudio/work/yushuxin_crop_result.jpg')
plt.imshow(img1)
plt.show(img1)
3.图片的缩放
from PIL import Image
img=Image.open('/home/aistudio/work/yushuxin.jpg')
img2=img.resize((int(width*0.5),int(height*0.5)))
img2.save('/home/aistudio/work/yushuxin_crop_result1.jpg')
print(img2.size)
plt.imshow(img2)
plt.show(img2)
4.图片的左右、上下翻转
from PIL import Image
img = Image.open('/home/aistudio/work/yushuxin.jpg')
#左右镜像
img1 = img.transpose(Image.FLIP_LEFT_RIGHT)
#展示左右镜像图片
plt.imshow(img1)
plt.show(img1)
#上下镜像
img2 = img.transpose(Image.FLIP_TOP_BOTTOM)
#展示上下镜像图片
plt.imshow(img2)
plt.show(img2)
Matplotlib库由各种可视化类构成,内部结构复杂。
matplotlib.pylot是绘制各类可视化图形的命 令字库
import matplotlib.pyplot as plt
import numpy as np
#显示matplotlib生成的图形
%matplotlib inline
x = np.linspace(-1,2) #等差数列
y = 2*x + 1
#传入x,y,通过plot()绘制出折线图
plt.plot(x,y)
#显示图形
plt.show()
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(1,5)
y1=x**2 #x的平方
y2=2*x+1
plt.figure(figsize=(7,5))#图像的宽高,单位为英寸
plt.plot(x,y1,linewidth=5)
plt.plot(x,y2,linewidth=1)
plt.xlabel('x',fontsize=50)
plt.ylabel('y',fontsize=50)
plt.show()
import matplotlib.pyplot as plt
import numpy as numpy
x=np.linspace(1,5)
y1=x**2
y2=2*x+1
plt.figure()
l1, =plt.plot(x,y1,linewidth=5)
l2, =plt.plot(x,y2,linewidth=2)
plt.xlabel('x',fontsize=50)
plt.ylabel('y',fontsize=50)
plt.legend(handles=[l1,l2],labels=['aa','bb'],loc='best')
plt.show()
3.离散点的分布图
import matplotlib.pyplot as plt
import numpy as np
spot=np.random.rand(1,50)
spot1=np.random.rand (1,50)
plt.scatter(spot,spot1,color='purple',alpha=0.1)
plt.show()
x = np.arange(10)
y = 2**x+10
plt.bar(x,y,facecolor='blue',edgecolor='white')
plt.show()
import matplotlib.pyplot as plt
import numpy as np
x=np.arange(10)
y=x**2+10
plt.bar(x,y,color='blue',alpha=0.6,edgecolor='red')
for a,b in zip(x,y):
plt.text(a,b,'%.1f'% b,ha='center',va='bottom')
plt.show()