收藏 分销(赏)

人工智能和机器学习--PPT03-Python库简介.pdf

上传人:人****来 文档编号:3564110 上传时间:2024-07-09 格式:PDF 页数:65 大小:985.41KB
下载 相关 举报
人工智能和机器学习--PPT03-Python库简介.pdf_第1页
第1页 / 共65页
人工智能和机器学习--PPT03-Python库简介.pdf_第2页
第2页 / 共65页
人工智能和机器学习--PPT03-Python库简介.pdf_第3页
第3页 / 共65页
人工智能和机器学习--PPT03-Python库简介.pdf_第4页
第4页 / 共65页
人工智能和机器学习--PPT03-Python库简介.pdf_第5页
第5页 / 共65页
点击查看更多>>
资源描述

1、Python库简介王秋月中国人民大学信息学院几个相关的库 Numpy:高效地处理高维数组;高效的数学函数 Quickstart tutorial:https:/docs.scipy.org/doc/numpy/user/quickstart.html A Visual Intro to NumPy and Data Representation:http:/jalammar.github.io/visual-numpy/Matplotlib:可视化,绘制2D或3D图形 Pyplot tutorial:https:/matplotlib.org/users/pyplot_tutorial.htm

2、l Pandas:统计与数学分析 10 Minutes to pandas:http:/pandas.pydata.org/pandas-docs/stable/getting_started/10min.html Scikit-learn:机器学习 https:/scikit-learn.org/stable/documentation.htmlNumpy Numpy(Numerical Python extensions)是一个第三方的Python包,用于科学计算,前身是1995年就开始开发的一个用于数组运算的库 极大地简化了向量和矩阵的操作处理,是一些主力软件包(如scikit-lear

3、n、Scipy、pandas和tensorflow)架构的基础部分。ndarray数据类型 Numpy提供了一种新的数据结构:ndarray(n维数组,n-dimensional array)不同于列表和元组,数组只能存放相同类相同类型型的对象(如全部整型或全部浮点型)这使得在数组上的一些运算远远快于在列表上的相同运算;另外,数组占用更小的存储 数组强有力地扩展了列表的索引机制创建ndarraynp.array(2,3,6,7)array(2,3,6,7)np.array(2,3,6,7.)array(2.,3.,6.,7.)np.array(2,3,6,7+1j)array(2.+0.j,3

4、.+0.j,6.+0.j,7.+1.j)首先导入Numpy库 然后开始创建n维数组import numpy as np创建等差数列的数组 arange(start,stop,step,dtype=None)linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None)np.arange(5)array(0,1,2,3,4)np.arange(10,100,20,dtype=float)array(10.,30.,50.,70.,90.)np.linspace(0.,2.5,5)array(0.,0.625,1.25,1.87

5、5,2.5)from numpy import pi x=np.linspace(0,2*pi,100)#用于在多个点执行某函数 f=np.sin(x)多维数组表示的矩阵a=np.array(1,2,3,4,5,6)aarray(1,2,3,4,5,6)a.shape#行数和列数(2,3)a.ndim#维数2a.size#元素数6改变形状import numpy as npa=np.arange(0,20,1)#一维数组b=a.reshape(4,5)#4行,5列c=a.reshape(20,1)#2维d=a.reshape(-1,4)#-1:自动决定行数a.shape=(4,5)#改变a的形

6、状形状(N,),(N,1)和(1,N)不同形状(N,):数组是一维的形状(N,1):数组是二维的,N行一列形状(1,N):数组是二维的,一行N列import numpy as npa=np.array(1,2,3,4,5)#一维数组b=a.copy()c1=np.dot(np.transpose(a),b)#转置对一维数组不起作用print(c1)c2=np.dot(a,np.transpose(b)#转置也可以写成b.Tprint(c2)ax=np.reshape(a,(5,1)bx=np.reshape(b,(1,5)c=np.dot(ax,bx)print(c)用相同元素填充数组np.z

7、eros(3)array(0.,0.,0.)np.zeros(2,2),complex)array(0.+0.j,0.+0.j,0.+0.j,0.+0.j)np.ones(2,3)array(1.,1.,1.,1.,1.,1.)np.full(2,2),7)array(7,7,7,7)用随机数填充数组 rand:0到1之间0,1)均匀分布的随机数 randn:服从均值为0,方差为1的标准正态(高斯)分布的随机数 也有其他标准概率分布的随机数np.random.rand(2,4)array(0.94672374,0.0383632,0.12738539,0.21592466,0.49394559

8、,0.2216863,0.3053351,0.51381235)np.random.randn(2,4)array(1.05383548,-1.2142876,-0.83458293,0.53291161,0.08311765,0.14007751,-0.06647882,1.09115942)一维数组索引与切片 start:stop的索引形式可用于从数组中抽取片段(从start位置开始直到stop位置但不包括stop)a=np.array(0,1,2,3,4)a1:3array(1,2)a:3array(0,1,2)a1:array(1,2,3,4)a1:-1array(1,2,3)一维数组

9、索引与切片整个数组:a或者a:想取出间隔的元素,可以在第二个冒号之后说明第三个数(步长):步长-1,可用于反转一个数组:a=np.array(0,1,2,3,4)a:array(0,1,2,3,4)a:2array(0,2,4)a1:4:2array(1,3)a:-1array(4,3,2,1,0)二维数组索引 多维数组的索引是整数元组:a=np.arange(12);a.shape=(3,4);aarray(0,1,2,3,4,5,6,7,8,9,10,11)a1,26a1,-17二维数组切片:单行单列a=np.arange(12);a.shape=(3,4);aarray(0,1,2,3,

10、4,5,6,7,8,9,10,11)a:,1array(1,5,9)a2,:array(8,9,10,11)a126a2array(8,9,10,11)和列表类似数组索引a0,3:5array(3,4)a4:,4:array(44,45,54,55)a:,2array(2,12,22,32,42,52)a2:2,:2array(20,22,2440,42,44)0 1 2 3 4 510 11 12 13 14 1520 21 22 23 24 2530 31 32 33 34 3540 41 42 43 44 4550 51 52 53 54 55拷贝与视图 标准列表的一个切片是它的一个拷贝

11、拷贝 Numpy数组的一个切片是数组上的一个视图视图,切片数组和原始数组都引用的是同一块内存区域。因而,当改变视图内容时,原始数组的内容也被同样改变了:a=np.arange(5);aarray(0,1,2,3,4)b=a2:;barray(2,3,4)b0=100;barray(100,3,4)aarray(0,1,100,3,4)拷贝与视图 为了避免改变原数组,可以拷贝切片:a=np.arange(5);aarray(0,1,2,3,4)b=a2:.copy();barray(2,3,4)b0=100;barray(100,3,4)aarray(0,1,2,3,4)数组计算 基本的算术运算

12、都作用在数组的元素级别import numpy as npx=np.array(1,2,3,4,dtype=np.float64)y=np.array(5,6,7,8,dtype=np.float64)print(x+y)print(np.add(x,y)print(x-y)print(np.subtract(x,y)print(x*y)print(np.multiply(x,y)print(x/y)print(np.divide(x,y)print(np.sqrt(x)矩阵乘法 矩阵乘法是使用dot函数实现的:dot函数也可用于矩阵和向量的乘法:A=np.array(1,2,3,4)np.d

13、ot(A,A)array(7,10,15,22)Aarray(1,2,3,4)x=np.array(10,20)np.dot(A,x)#等价于A.dot(x)array(50,110)np.dot(x,A)#等价于x.dot(A)array(70,100)更高效的数学函数 Numpy中包含许多常用的数学函数,例如:np.log,np.maximum,np.sin,np.exp,np.abs等等(详见:https:/docs.scipy.org/doc/numpy/reference/routines.math.html)大多数情况下,Numpy中的函数比math库中类似的函数更高效,尤其是处理

14、大规模数据时import numpy as npx=np.array(1,2,3,4)print(np.sum(x)#Compute sum of all elements;print(np.sum(x,axis=0)#Compute sum of each column;print(np.sum(x,axis=1)#Compute sum of each row;保存数组到文件 savetxt()函数将一个数组保存到一个文本文件中:其他格式的文件也可以(参见文档)save()函数将一个数组存成一个Numpy的“.npy”格式的二进制文件:生成一个二进制文件myfile.npy包含数组a,之后

15、可以使用np.load()函数读入内存a=np.linspace(0,1,12);a.shape=(3,4);aarray(0.,0.09090909,0.18181818,0.27272727,0.36363636,0.45454545,0.54545455,0.63636364,0.72727273,0.81818182,0.90909091,1.)np.savetxt(“myfile.txt”,a)np.save(“myfile”,a)从文本文件读入数组 loadtxt()函数把一个存成文本文件的数组读入内存 缺省地,该函数假设列是用空白符分隔的。可以通过修改可选的参数来改变此假设。#开

16、头的行被忽略。示例文本文件data.txt:#YearMin temp.Max temp.1990-1.525.31991-3.221.2table=np.loadtxt(“data.txt”)tablearray(1.99000000e+03,-1.50000000e+00,2.53000000e+01,1.99100000e+03,-3.20000000e+00,2.12000000e+01)Matplotlib Matplotlib是Python中最常用的可视化工具之一,可以非常方便地创建海量类型的2D图表和一些基本的3D图表 因为在函数的设计上参考了MATLAB,所以叫做Matplot

17、lib 首次发表于2007年,是为了可视化癫痫病人的脑皮层电图相关的信号而研发的,原作者John D.Hunter博士是一名神经生物学家最简单的图表import matplotlib.pyplot as pltplt.plot(1,2,3,4,1,4,9,16,ro)plt.axis(0,6,0,20)plt.show()一张图表中多个函数(1)import numpy as npimport matplotlib.pyplot as pltt=np.arange(0.,5.,0.2)plt.plot(t,t,r-,t,t*2,bs,t,t*3,g)plt.show()设置线条属性使用键值对参

18、数:使用Line2D类对象的属性设置方法:使用setp()命令:plt.plot(x,y,linewidth=2.0)line,=plt.plot(x,y,-)line.set_antialiased(False)#turn off antialiasinglines=plt.plot(x1,y1,x2,y2)#use keyword argsplt.setp(lines,color=r,linewidth=2.0)#or MATLAB style string value pairsplt.setp(lines,color,r,linewidth,2.0)一张图表中多个函数(2)import

19、 numpy as npimport matplotlib.pyplot as plt#Compute the x and y coordinates for points on sine and cosine curvesx=np.arange(0,3*np.pi,0.1)y_sin=np.sin(x)y_cos=np.cos(x)#Plot the points using matplotlibplt.plot(x,y_sin)plt.plot(x,y_cos)plt.xlabel(x axis label)plt.ylabel(y axis label)plt.title(Sine an

20、d Cosine)plt.legend(Sine,Cosine)plt.show()多张图表:子图表import numpy as npimport matplotlib.pyplot as pltdef f(t):return np.exp(-t)*np.cos(2*np.pi*t)t1=np.arange(0.0,5.0,0.1)t2=np.arange(0.0,5.0,0.02)plt.figure(1)plt.subplot(211)plt.plot(t1,f(t1),bo,t2,f(t2),k)plt.subplot(212)plt.plot(t2,np.cos(2*np.pi*t2

21、),r-)plt.show()多张图表:子图表绘制分类变量的图表names=group_a,group_b,group_cvalues=1,10,100plt.figure(1,figsize=(9,3)plt.subplot(131)plt.bar(names,values)plt.subplot(132)plt.scatter(names,values)plt.subplot(133)plt.plot(names,values)plt.suptitle(Categorical Plotting)plt.show()绘制分类变量的图表添加文本import numpy as npimport

22、matplotlib.pyplot as pltmu,sigma=100,15x=mu+sigma*np.random.randn(10000)#the histogram of the datan,bins,patches=plt.hist(x,50,density=1,facecolor=g,alpha=0.75)plt.xlabel(Smarts)plt.ylabel(Probability)plt.title(Histogram of IQ)plt.text(60,.025,r$mu=100,sigma=15$)plt.axis(40,160,0,0.03)plt.grid(True)

23、plt.show()添加文本添加文本注释import numpy as npimport matplotlib.pyplot as pltax=plt.subplot(111)t=np.arange(0.0,5.0,0.01)s=np.cos(2*np.pi*t)line,=plt.plot(t,s,lw=2)plt.annotate(local max,xy=(2,1),xytext=(3,1.5),arrowprops=dict(facecolor=black,shrink=0.05)plt.ylim(-2,2)plt.show()添加文本注释图像显示import matplotlib.p

24、yplot as pltplt.figure(A Little White Dog)little_dog_img=plt.imread(little_white_dog.jpg)plt.imshow(little_dog_img)Plt.show()Pandas Pandas是python的一个数据分析包 由AQR Capital Management于2008年4月开发,并于2009年底开源出来 导入惯例:因为Series和DataFrame用的次数非常多,所以将其引入本地命名空间中会更方便from pandas import Series,DataFrameimport pandas as

25、 pd常用数据结构 Series 一维标记标记数组,由一组数据数据(各种NumPy数据类型)以及一组与之相关的数据标签数据标签(即索引)组成。类似于Numpy中的一维数组和Python的列表,不同之处是数组和series中存放的是相同类型相同类型的元素 DataFrame 二维表格型数据结构,含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等),每列都有标签,可看成一个Series的字典的字典 Panel 三维数组,可以理解为DataFrame的容器 Panel data源于经济学,也是pan(el)-da(ta)-s的名字来源创建Series:传入列表 默认整型索引obj=Se

26、ries(4,7,-5,3)obj0 41 72 -53 3dtype:int64obj.valuesarray(4,7,-5,3,dtype=int64)obj.indexRangeIndex(start=0,stop=4,step=1)创建Series:传入列表 给定索引obj2=Series(4,7,-5,3,index=d,b,a,c)obj2d 4b 7a -5c 3dtype:int64 obj2.indexIndex(d,b,a,c,dtype=object)访问Series中的元素obj2a-5obj2d=6obj2c,a,dc 3a -5d 6dtype:int64 可以使用

27、索引来选取Series中的单个或一组值对Series的操作obj2obj2 0d 4b 7c 3dtype:int64obj2*2d 8b 14a -10c 6dtype:int64np.exp(obj2)d 54.598150b 1096.633158a 0.006738c 20.085537dtype:float64NumPy数组操作数组操作,如通过一个布尔数组过滤,纯量乘法,或使用数学函数,都会保持索引和值间的关联:对Series的操作b in obj2Truee in obj2False 还可将Series看成是一个定定长长的有序字典的有序字典,因为它是索引值到数据值的一个映射。它可以

28、用在许多原本需要字典参数的函数中:创建Series:传入字典 如果数据被存放在一个Python字典中,也可以直接通过这个字典来创建Series 如果只传入一个字典,则结果Series中的索引就是原字典的键(有序排列)sdata=Ohio:35000,Texas:71000,Oregon:16000,Utah:5000obj3=Series(sdata)obj3Ohio 35000Oregon 16000Texas 71000Utah 5000dtype:int64创建Series:传入字典 下例中,sdata跟states索引相匹配的那3个值会被找出来并放到相应的位置上,但由于“Califor

29、nia”所对应的sdata值找不到,所以其结果就为NaN(Not A Number,非数字)states=California,Ohio,Oregon,Texasobj4=Series(sdata,index=states)obj4 California NaNOhio 35000Oregon 16000Texas 71000dtype:float64检测缺失数据 pandas的isnull和notnull函数可用于检测缺失数据 Series也提供了类似的实例方法,如obj4.isnull()pd.isnull(obj4)California TrueOhio FalseOregon Fals

30、eTexas Falsedtype:boolpd.notnull(obj4)California FalseOhio TrueOregon TrueTexas Truedtype:bool自动对齐索引 Series在算术运算算术运算中会自动对齐不同索引的数据obj3Ohio 35000Oregon 16000Texas 71000Utah 5000dtype:int64obj4California NaNOhio 35000Oregon 16000Texas 71000dtype:float64obj3+obj4California NaNOhio 70000Oregon 32000Texas

31、 142000Utah NaNdtype:float64Series对象及其索引的nameobj4.name=populationobj4.index.name=stateobj4stateCalifornia NaNOhio 35000Oregon 16000Texas 71000Name:population,dtype:float64修改索引obj0 41 72 -53 3obj.index=Bob,Steve,Jeff,RyanobjBob 4Steve 7Jeff -5Ryan 3dtype:int64创建DataFrame(1)DataFrame既有行索引也有列索引,它可以被看做由

32、由Series组成的字典组成的字典(共用同一个索引)。最常用的创建方法是直接传入一个由等长列表或NumPy数组构成的字典data=state:Ohio,Ohio,Ohio,Nevada,Nevada,year:2000,2001,2002,2001,2002,pop:1.5,1.7,3.6,2.4,2.9frame=DataFrame(data)framepop state year0 1.5 Ohio 20001 1.7 Ohio 20012 3.6 Ohio 20023 2.4 Nevada 20014 2.9 Nevada 2002创建DataFrame(1)如果指定了列序列,DataF

33、rame的列就会按指定顺序排列 跟Series一样,如果传入的列在数据中找不到,就会产生NaN值frame2=DataFrame(data,columns=year,state,pop,debt,index=one,two,three,four,five)frame2year state pop debtone 2000 Ohio 1.5 NaNtwo 2001 Ohio 1.7 NaNthree 2002 Ohio 3.6 NaNfour 2001 Nevada 2.4 NaNfive 2002 Nevada 2.9 NaNDataFrame(data,columns=year,state,

34、pop)访问单列 通过字典记法或属性,可以将DataFrame的列获取为一个Series:frame2stateone Ohiotwo Ohiothree Ohiofour Nevadafive NevadaName:state,dtype:objectframe2.yearone 2000two 2001three 2002four 2001five 2002Name:year,dtype:int64访问单行 行也可以使用一些方法通过位置(iloc)或名字(loc)来检索frame2.locthreeyear 2002state Ohiopop 3.6debt NaNName:three,d

35、type:object frame2.iloc2Out15:year 2002state Ohiopop 3.6debt NaNName:three,dtype:object修改列frame2debt=16.5frame2year state pop debtone 2000 Ohio 1.5 16.5two 2001 Ohio 1.7 16.5three 2002 Ohio 3.6 16.5four 2001 Nevada 2.4 16.5five 2002 Nevada 2.9 16.5frame2debt=np.arange(5)frame2year state pop debtone

36、2000 Ohio 1.5 0two 2001 Ohio 1.7 1three 2002 Ohio 3.6 2four 2001 Nevada 2.4 3five 2002 Nevada 2.9 4修改列val=Series(-1.2,-1.5,-1.7,index=two,four,five)frame2debt=valframe2year state pop debtone 2000 Ohio 1.5 NaNtwo 2001 Ohio 1.7 -1.2three 2002 Ohio 3.6 NaNfour 2001 Nevada 2.4 -1.5five 2002 Nevada 2.9 -

37、1.7增加列和删除列frame2eastern=frame2.state=Ohioframe2year state pop debt easternone 2000 Ohio 1.5 NaNTruetwo 2001 Ohio 1.7 -1.2 Truethree 2002 Ohio 3.6 NaNTruefour 2001 Nevada 2.4 -1.5 Falsefive 2002 Nevada 2.9 -1.7 Falsedel frame2easternframe2year state pop debtone 2000 Ohio 1.5 NaNtwo 2001 Ohio 1.7 -1.2

38、three 2002 Ohio 3.6 NaNfour 2001 Nevada 2.4 -1.5five 2002 Nevada 2.9 -1.7删除行或列 frame2.drop(pop,debt,axis=1)#删除pop和debt列year stateone 2000 Ohiotwo 2001 Ohiothree 2002 Ohiofour 2001 Nevadafive 2002 Nevada frame2.drop(columns=pop,debt)#删除pop和debt列year stateone 2000 Ohiotwo 2001 Ohiothree 2002 Ohiofour

39、2001 Nevadafive 2002 Nevada frame2.drop(one,three,five,axis=0)#删除one,three,five行year state pop debttwo 2001 Ohio 1.7 -1.2four 2001 Nevada 2.4 -1.5frame2.drop(pop,debt,axis=1,inplace=True)创建DataFrame(2)传入嵌套字典(字典的字典),外部键会被解释为列索引,内部键会被解释为行索引:pop=Nevada:2001:2.4,2002:2.9,Ohio:2000:1.5,2001:1.7,2002:3.6f

40、rame3=DataFrame(pop)frame3 Nevada Ohio2000 NaN 1.52001 2.4 1.72002 2.9 3.6frame4=DataFrame(pop,index=2001,2002,2003)frame4 Nevada Ohio2001 2.4 1.72002 2.9 3.62003 NaN NaN缺失数据处理删除任何有缺失数据的行行:对缺失值进行填充:判断哪些值是缺失值(nan):frame3.dropna(how=any)Nevada Ohio2001 2.4 1.72002 2.9 3.6frame3.fillna(value=5)Nevada O

41、hio2000 5.0 1.52001 2.4 1.72002 2.9 3.6pd.isna(frame3)Nevada Ohio2000 True False2001 False False2002 False False查看数据查看DataFrame前n行或后n行:frame.head(3);frame.tail(3)查看DataFrame的索引、列以及底层的Numpy数据:frame.index;frame.columns;frame.values显示数据的快速统计汇总:frame.describe()对每一列数据进行统计,包括计数、均值、标准差、各个分位数等转置数据:frame.T对轴

42、排序:frame.sort_index(axis=1,ascending=False),其中axis=1表示对所有的列索引进行排序,下面的数也跟着发生移动。对值排序:frame.sort_values(by=Name)对name这一列,从小到大进行排序选择行与列选取多行或多列:framestate,pop,选择state和pop两列,结果是一个DataFrameframe0:3,选择前三行loc用标签标签选择数据:frame.locone,选择索引为one的行frame.locone,pop,选择one行,pop列frame.loc:,state,pop,选择所有行,state和pop列fra

43、me.locone,two,state,pop,选择one和two行,state和pop列iloc用位置位置选择数据:frame.iloc1:2,1:2frame.iloc0,2,1,2使用条件条件来选择:frameframe.year2001,选择year列中大于2001的数据frameframe2001,选择frame中所有大于2001的数据frameframeyear.isin(2000,2002),选择year列的值为2000,2002的所有行相关操作 统计数据:a.mean(),对a的每一列数据值求平均值;a.mean(1),对a的每一行数据值求平均值ax.value_counts(

44、),统计列x中各值出现的次数 对数据应用函数:a.apply(lambda x:x.max()-x.min(),对a的每一列,返回最大值和最小值的差字符串操作:agender1.str.lower(),将gender1中所有的英文转化为小写,注意Dataframe没有str属性,只有Series有,所以要选取a中的gender1列。读取与写入文件 写入.csv文件:frame3.to_csv(C:Usersqiuyuframe3.csv)读取.csv文件:frame4=pd.read_csv(C:Usersqiuyuframe3.csv)frame4=pd.read_csv(C:Usersqiuyuframe3.csv,index_col=0)

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服