python基础2
python基础2#!/usr/bin/env python# coding: utf-8# # 深度学习常用Python库## [返回目录](https://aistudio.baidu.com/aistudio/projectdetail/496863)### * #### Numpy库# * #### Pandas库# * #### Matplotlib库# * #### PIL库# <
·
python基础2
#!/usr/bin/env python
# coding: utf-8
# # 深度学习常用Python库
#
# [返回目录](https://aistudio.baidu.com/aistudio/projectdetail/496863)
#
#
# * #### Numpy库
# * #### Pandas库
# * #### Matplotlib库
# * #### PIL库
# <br/>
#
# Python被大量应用在数据挖掘和深度学习领域,其中使用极其广泛的是Numpy、Pandas、Matplotlib、PIL等库。
#
#
# <img src='https://ai-studio-static-online.cdn.bcebos.com/d2ab7dc4c05c42fe85c557a5ed084038822806b23ed544b5bab62517994f5383' height='400' width='400'>
#
#
# <br/>
# <br/>
#
# **Numpy**是Python科学计算库的基础。包含了强大的N维数组对象和向量运算。
#
# **Pandas**是建立在numpy基础上的高效数据分析处理库,是Python的重要数据分析库。
#
# **Matplotlib**是一个主要用于绘制二维图形的Python库。用途:绘图、可视化
#
# **PIL**库是一个具有强大图像处理能力的第三方库。用途:图像处理
#
# # Numpy库
#
# NumPy是使用Python进行科学计算的基础软件包。
#
# 更多学习,可参考**numpy中文网**:https://www.numpy.org.cn/
# ## 1.数组创建
#
# 可以使用array函数从常规Python**列表或元组**中创建数组。得到的数组的类型是从Python列表中元素的类型推导出来的。
#
# 创建数组最简单的办法就是使用array函数。它接受一切序列型的对象(包括其他数组),然后产生一个新的含有传入数据的numpy数组。其中,嵌套序列(比如由一组等长列表组成的列表)将会被转换为一个多维数组
# In[2]:
import numpy as np
#将列表转换为数组
array = np.array([[1,2,3],
[4,5,6]])
print(array)
# In[2]:
import numpy as np
#将元组转换为数组
array = np.array(((1,2,3),
(4,5,6)))
print(array)
# 下面这样可以吗?
# In[3]:
import numpy as np
a = np.array((1,2,3,4))
print(a)
# 为了创建数字组成的数组,NumPy提供了一个类似于range的函数,该函数返回数组而不是列表。
# In[5]:
array = np.arange( 10, 31, 5 )
print(array)
# In[5]:
array = np.arange(3,6)
print(array)
# 输出数组的一些信息,如维度、形状、元素个数、元素类型等
# In[6]:
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)
# 重新定义数字的形状
# In[ ]:
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)。
#
# **大小相等的数组之间的任何算术运算都会将运算应用到元素级**。同样,数组与标量的算术运算也会将那个标量值传播到各个元素.
#
#
# 矩阵的基础运算:
# In[7]:
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)
# 矩阵乘法:
# In[8]:
#矩阵乘法
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))
# 矩阵的其他计算:
# In[9]:
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))
# In[10]:
arr3_tran = arr3.transpose()
print(arr3_tran)
print(arr3.flatten())
# ## 3.数组的索引与切片
# In[11]:
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/
#
#
# <br/>
#
# **Pandas核心数据结构:**
#
# <img src="https://ai-studio-static-online.cdn.bcebos.com/a8c80653f39b479dab9f6867a638b64c405e79d6540c4307a22f43c4b0e228bc" width='300' heighr='300'>
#
# <img src="https://ai-studio-static-online.cdn.bcebos.com/c8f06f423acc488fb391bca5dcf8f2b02d7444ef526f41599b6b430ae24659c1" width='500' height='500'>
# ## 1.Series
#
# Series是一种类似于一维数组的对象,它由一维数组(各种numpy数据类型)以及一组与之相关的数据标签(即索引)组成.
#
# 可理解为带标签的一维数组,可存储整数、浮点数、字符串、Python 对象等类型的数据。
# In[12]:
import pandas as pd
import numpy as np
s = pd.Series(['a','b','c','d','e'])
print(s)
# Seris中可以使用index设置索引列表。
#
# 与字典不同的是,Seris允许索引重复
# In[ ]:
#与字典不同的是:Series允许索引重复
s = pd.Series(['a','b','c','d','e'],index=[100,200,100,400,500])
print(s)
# Series 可以用字典实例化
# In[13]:
d = {'b': 1, 'a': 0, 'c': 2}
pd.Series(d)
#
# 可以通过Series的values和index属性获取其数组表示形式和索引对象
# In[14]:
print(s.values)
print(s.index)
# In[ ]:
#与普通numpy数组相比,可以通过索引的方式选取Series中的单个或一组值
print(s)
print(s[100])
print(s[[400, 500]])
# In[ ]:
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 是否有相同的标签。
# In[ ]:
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)
# In[ ]:
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
#
# <img src="https://ai-studio-static-online.cdn.bcebos.com/c8f06f423acc488fb391bca5dcf8f2b02d7444ef526f41599b6b430ae24659c1" width='500' height='500'>
# DataFrame是一个表格型的数据结构,类似于Excel或sql表
#
# 它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)
#
# DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)
#
# 用多维数组字典、列表字典生成 DataFrame
# In[15]:
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)
# In[16]:
#如果指定了列顺序,则DataFrame的列就会按照指定顺序进行排列
frame1 = pd.DataFrame(data, columns=['year', 'state', 'pop'])
print(frame1)
# 跟原Series一样,如果传入的列在数据中找不到,就会产生NAN值
# In[ ]:
frame2 = pd.DataFrame(data, columns=['year', 'state', 'pop', 'debt'], index=['one', 'two', 'three', 'four', 'five'])
print(frame2)
# 用 Series 字典或字典生成 DataFrame
# In[ ]:
#通过类似字典标记的方式或属性的方式,可以将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”列赋上一个标量值或一组值
# In[ ]:
frame2['debt'] = 16.5
print(frame2)
# In[ ]:
print(frame2)
frame2['new'] = frame2['debt' ]* frame2['pop']
print(frame2)
# In[ ]:
frame2['debt'] = np.arange(5.)
print(frame2)
# # PIL库
#
# PIL库是一个具有强大图像处理能力的第三方库。
#
# 图像的组成:由RGB三原色组成,RGB图像中,一种彩色由R、G、B三原色按照比例混合而成。0-255区分不同亮度的颜色。
#
# 图像的数组表示:图像是一个由像素组成的矩阵,每个元素是一个RGB值
#
# ![](https://ai-studio-static-online.cdn.bcebos.com/66ad941c87c5459ea2aade30e26fad8ccf65312d850c49e3bc3581b9afc8fd23)
#
# Image 是 PIL 库中代表一个图像的类(对象)
#
# In[ ]:
#安装pillow
#!pip install pillow
# In[ ]:
展示图片,并获取图像的模式,长宽,
# In[4]:
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
#显示matplotlib生成的图形
get_ipython().run_line_magic('matplotlib', 'inline')
#读取图片
img = Image.open('data/data37255/yushuxin.jpg')
# img = Image.open('work/smile01.jpg')
img_array = np.array(img).astype('float32') #将一个PIL的图像对象,转换为numpy.array
print(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)
# 图片旋转
# In[4]:
from PIL import Image
import matplotlib.pyplot as plt
#显示matplotlib生成的图形
get_ipython().run_line_magic('matplotlib', 'inline')
#读取图片
img = Image.open('data/data37255/yushuxin.jpg')
#显示图片
plt.imshow(img)
plt.show()
#将图片旋转45度
img_rotate = img.rotate(45)
#显示旋转后的图片
plt.imshow(img_rotate)
plt.show()
# 图片剪切
# In[6]:
from PIL import Image
#打开图片
img1 = Image.open('data/data37255/yushuxin.jpg')
#剪切 crop()四个参数分别是:(左上角点的x坐标,左上角点的y坐标,右下角点的x坐标,右下角点的y坐标)
img1_crop_result = img1.crop((139,11,379,225))
#保存图片
img1_crop_result.save('/home/aistudio/work/yushuxin_crop_result.jpg')
#展示图片
plt.imshow(img1_crop_result)
plt.show()
# 图片缩放
# In[7]:
from PIL import Image
#打开图片
img2 = Image.open('data/data37255/yushuxin.jpg')
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()
# 镜像效果:左右旋转、上下旋转
# In[8]:
from PIL import Image
#打开图片
img3 = Image.open('data/data37255/yushuxin.jpg')
#左右镜像
img3_lr = img3.transpose(Image.FLIP_LEFT_RIGHT)
#展示左右镜像图片
plt.imshow(img3_lr)
plt.show(img3_lr)
#上下镜像
img3_bt = img3.transpose(Image.FLIP_TOP_BOTTOM)
#展示上下镜像图片
plt.imshow(img3_bt)
plt.show(img3_bt)
# # Matplotlib库
#
# Matplotlib库由各种可视化类构成,内部结构复杂。
#
# matplotlib.pylot是绘制各类可视化图形的命令字库
#
# 更多学习,可参考**Matplotlib中文网**:https://www.matplotlib.org.cn
#
# In[ ]:
#!pip install matplotlib
# In[2]:
import matplotlib.pyplot as plt
import numpy as np
#显示matplotlib生成的图形
get_ipython().run_line_magic('matplotlib', 'inline')
x = np.linspace(-1,1,50) #等差数列
y = 2*x + 1
#传入x,y,通过plot()绘制出折线图
plt.plot(x,y)
#显示图形
plt.show()
# In[2]:
import matplotlib.pyplot as plt
import numpy as 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()
# In[3]:
import matplotlib.pyplot as plt
import numpy as 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()
# In[4]:
import matplotlib.pyplot as plt
import numpy as 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()
# In[ ]:
dots1 =np.random.rand(50)
dots2 =np.random.rand(50)
plt.scatter(dots1,dots2,c='red',alpha=0.5) #c表示颜色,alpha表示透明度
plt.show()
# In[ ]:
x = np.arange(10)
y = 2**x+10
plt.bar(x,y,facecolor='#9999ff',edgecolor='white')
plt.show()
# In[7]:
x = np.arange(10)
y = 2**x+10
plt.bar(x,y,facecolor='#9999ff',edgecolor='white')
for ax,ay in zip(x,y):
#设置文字说明 第一、二个参数:坐标轴上的值; 第三个参数:说明文字;ha:垂直对齐方式;va:水平对齐方式
plt.text(ax,ay,'%.1f' % ay,ha='center',va='bottom')
plt.show()
更多推荐
已为社区贡献8条内容
所有评论(0)