学习Python的NumPy、pandas、matplotlib笔记

关于Numpy的学习

Numpy的代码练习



import numpy as np
a=np.array([[1,2],[3,4]])
print(a)
print(a.dtype)
a.astype(np.float128)
print(a.dtype)
b=a.astype(np.float128)
print(a.dtype)
print(b.dtype)


import numpy as np
x=np.empty([3,2])
print(x)
print('..............')
y=np.empty([2,3])
print(y)
print('..............')
z=np.zeros((5,2),dtype=int)
print(z)
print('..............')
x=np.ones([2,2],dtype=int)
print(x)
print('..............')
b=[(1,2,3),(4,5)]
a=np.asarray(b)
print(a)
print('..............')
a=np.asarray([1,2,3,4]).reshape((2,2))
print(a)
print('..............')
x=np.arange(5)
print(x)



import numpy as np
print(np.logspace(0,2,5))

# help(np.logspace)

print(np.random.random((3,2,3)))


print('________________________')


a=np.arange(10)
b=a[5]
c=a[3]
print(a)
print(b)
print(c)
print('________________________')
a=np.array([[1,2,3],[3,4,5],[4,5,6]])
print(a)
print(a[...,1])#输出第二列

print(a[1,...])#输出第二行

print(a[...,1:])#输出第二列及剩下的所有元素



import numpy as np
print(np.logspace(0,2,5))

# help(np.logspace)

print(np.random.random((3,2,3)))


print('________________________')


a=np.arange(10)
b=a[5]
c=a[3]
print(a)
print(b)
print(c)
print('________________________')
a=np.array([[1,2,3],[3,4,5],[4,5,6]])
print(a)
print(a[...,1])#输出第二列

print(a[1,...])#输出第二行

print(a[...,1:])#输出第二列及剩下的所有元素



print('________________________')
import numpy as np
x=np.array([[1,2],[3,4],[5,6]])
y=x[[0,1,2],[0,1,0]]
print(x)
print(y)

print('________________________')

import numpy as np
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(a)

b=a[1:3,1:3]#5.6.8.9
print(b)

c=a[1:3,[1,2]]#5.6.8.9
print(c)
d=a[...,1:]#2.3.5.6.8.9
print(d)

print('________________________')

x=np.arange(32).reshape((8,4))
print(x)#随机生成八行四列矩阵
print(x[[-4,-2,-1,-7]])#抽取倒数第四行、倒数第二行、倒数第一行、倒数第七行的数据


#二元函数
import numpy as np
a1=np.array([1,2,6,4])
a2=np.array([4,5,6,0])
print('MOD:',np.mod(a2,a1)) #求a2对于a1的模
print('DOT:',np.dot(a1,a2)) #进行两矩阵的点乘运算
print("a1>a2?",np.greater(a1,a2))#a1大于a2吗(矩阵中的每个元素都进行对比)
print("a1>=a2?",np.greater_equal(a1,a2))#a1大于等于a2吗(矩阵中的每个元素都进行对比)
print("a1<a2?",np.less(a1,a2))#a1小于a2吗(矩阵中的每个元素都进行对比)
print("a1<=a2?",np.less_equal(a1,a2))#a1小于等于a2吗(矩阵中的每个元素都进行对比)
print('a1!=a2?',np.not_equal(a1,a2))#a1和a2不相等吗(依旧是各元素挨个对比)
print('a1&a2:',np.logical_and(a1,a2))#a1与a2的与运算
print('a1|a2:',np.logical_or(a1,a2))#a1与a2的或运算
print('a1^a2:',np.logical_xor(a1,a2))#a1与a2的异或运算
print('max(a1,a2):',np.maximum(a1,a2))#找出两个矩阵中最大的值并输出出来
print('max(a1,a2):',np.fmax(a1,a2))#对比与上一行代码可以忽略NaN值
print('min(a1,a2):',np.minimum(a1,a2))#找出两个矩阵中最大的值并输出出来
print('min(a1,a2):',np.fmin(a1,a2))#对比与上一行代码可以忽略NaN值
print('a1*a2:',np.multiply(a1,a2))#各元素相乘

#numpy的统计函数
print('------numpy的统计函数--------')
import numpy as np
a=np.array([[3,7,8],[7,4,2],[36,5,7]])
print(a)
print(np.amin(a,1))#统计每行元素的最小值0表示列1表示行
print(np.amax(a,axis=0))#使用axis时候0代表列的方向1代表行的方向,后面没有逗号的时候会筛选出单个值
print(np.amin(a,0))#每列的最小值
print('------1--------')
print(np.mean(a,axis=0))#返回数组中元素的算术平均值(axis为0以列为标注)
print(np.std([1,2,3,4]))#标准差 std=sqrt(mean((x-x.mean())**2))
print(np.var([1,2,3,4]))#方差mean((x-x.mean())**2)

#排序、条件刷选函数
print('------排序、条件刷选函数--------')
import numpy as np
a=np.array([[3,7],[9,1]])
print(a)
print(np.sort(a,axis=0))#按列升序
print(np.argsort(a,axis=0))#返回从小到大的索引值
print('-----')
x=np.array([3,1,2])
y=np.argsort(x,axis=0)
print('x',x)
print('y',y)#argsort返回排序完后,当前值的之前地位置


print('np.argmax/np.argmin')
a = np.array([[30,40,70],[80,20,10],[50,90,60]])
print(a)
print('max:',np.max(a,axis=0))#找到当前列最大的元素
print('argmax:',np.argmax(a,axis=0))#找到当前列最大的元素,然后返回他们之前所在矩阵的位置
print('argmax:',np.argmax(a,axis=1))#找到当前行最大的元素,然后返回他们之前所在矩阵的位置
print('argmin:',np.argmin(a,axis=0))#找到当前列最小的元素,然后返回他们之前所在矩阵的位置

import numpy as np
x=np.arange(9.).reshape(3,3)
print('我们的数组是:')
print(x)
print('大于3的元素的索引:')
y=np.where(x>3)
print(y)
print('利用索引提取元素!')
print(x[y])


print('numpy.nonzero:返回所用输出数组中非零元素的索引!')
a=np.array([[30,40,0],[0,20,10],[50,0,60]])
print('我们的数组是:')
print(a)
print('\n')
print('调用nonzero()函数:')
print(np.nonzero(a))


print('______________np.unique函数')
a=[1,2,2,5,3,4,3]
print(a)
print(np.unique(a))#对于列表的唯一值搜索,好像还有搜索完后排序的功能,感觉像是数据结构的排序加去重
b=(1,2,2,5,3,4,3)
print(np.unique(b))#对于字典一样可以排序,但输出的是列表
c= ['fgfh','asd','fgfh','asdfds','wrh']
print(np.unique(c))#检索重复值完毕后会进行排序操作



关于Pandas的学习

Pandas代码的练习

import pandas as pd
import numpy as np

obj=pd.Series([4,7,-5,3])
print(obj)
print('______________')
obj2=pd.Series([4,7,-5,3],index=['d','b','a','c'])
print(obj2)

obj1=pd.Series([0,1,2,3,4],index=['a','b','c','d','e'])
print(obj1)

mylist=list('zxcvbnnmasdfghjklqwertyuiop')#列表的构建
myarr=np.arange(26)#数组的构建
mydict=dict(zip(mylist,myarr))
print('mylist',mylist)
print('myarr',myarr)
print('mydict',mydict)#生成字典
s1=pd.Series(mylist)
s2=pd.Series(myarr)
s3=pd.Series(mydict)
print('s1',s1)
print('s2',s2)
print('s3',s3)

print(s3.head())#默认打印前5个数据
print(s3.head(15))
print(s3.head(3))#默认打印前三个数



print('----------------------------')

obj2=pd.Series([4,7,-5,3],index=['d','b','a','c'])
print(obj2)
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}#字典
print('1:',sdata)
obj=pd.Series(sdata)#通过字典创建series,对个数据点进行标记索引
obj=obj.astype(int)
print('2',obj)
states= ['California', 'Ohio', 'Oregon', 'Texas']
obj3=pd.Series(sdata,index=states)
print(pd.isnull(obj3))
print(pd.notnull(obj3))
print('obj3:',obj3)
print(obj3.isnull)


#查找Series
print('查找Series:--------------')
obj1=pd.Series([4,7,-5,3],index=['d','b','a','c'])
print('1',obj1)
print('2',obj1.values)
print('3',obj1.index)
print('4',obj1.dtype)


obj=pd.Series([4,7,-5,3,2],index=['d','b','a','c','a'])
print(obj['a'])#利用索引值找索引的号 索引号可以重复,索引的值也可以
print(obj[-1])#利用下标求索引值
print(obj[0])
print('多个值',obj[:3])


print(obj/2)#对索引值直接进行整除计算
obj=obj+2
print(obj*2)#可以吧series看成类似于numpy中的ndarray数组进行操作



print('----DataaFrame------')
print('表格型的数据结构,含有一组有序的列,')


data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
 'year': [2000, 2001, 2002, 2001, 2002, 2003],
 'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}#创建字典
print(data)
frame=pd.DataFrame(data)#DataFrame类似表格的形式存储数据
print(frame)

print(pd.DataFrame(data,columns=['year','state','pop']))#给表行规定位置
#存在数据缺失的dataframe    NaN
frame2 = pd.DataFrame(data, columns=['year', 'state', 'pop', 'debt'], index=['one', 'two', 'three', 
'four', 'five', 'six'])
print('缺失',frame2)
print(frame2.columns)
print(frame2.year)
print(frame2.loc['three'])

obj = pd.Series([4.5, 7.2, -5.3, 3.6], index=['d', 'b', 'a', 'c'])
print('obj',obj)
obj2=obj.reindex(['a','b','c','d','e'])#给索引号规定顺序
print(obj2)
obj3=pd.Series(['blue','purple','yellow'],index=[0,2,4])
print(obj3)
aa=['blue','purple','yellow']
bb=[0,2,4]
obj4=pd.Series(aa,index=bb)
print('3:',obj3.reindex(range(6),method='ffill'))
print('4:',obj4.reindex(range(6),method='ffill'))

print('修改行和列')

frame=pd.DataFrame(np.arange(9).reshape((3,3)),index=['a','c','d'],columns=['ohio','Texas','California']
)#index是行名,columns是列名
print(frame)

frame2=frame.reindex(['a','b','c','d'])
print(frame2)
data=frame2.drop(['a'])#k删除指定的行的值,当然不影响原frame的值了!
print(data)
print(frame2)
data=frame2.drop('ohio',axis=1)#k删除指定的列的值,当然不影响原frame的值了!
print(data)
print(frame2)


data=pd.DataFrame(np.arange(24).reshape((6,4)),index=['a','b','c','d','e','f'],columns=['one','two','three','four'])#index行column列
print(data)

print('2',data['two'])
print(data[['three','one','two']])

print(data[:2])
print(data)
print(data[data['three']>5])
print(data.iloc[2,[3,0,1]])#默认排序为2行四列、一列、二列
print(data<5)#得到的是bool值的表
print(data)
print(data.loc['c',['two','one']])#选择输出一行多列
print(data.iloc[2,[3,0,1]])#用iloc和整数进行选取
print(data.iloc[[1,2],[3,0,1]])
print(data.iloc[2])

print('索引选取和过滤:')
obj=pd.Series(np.arange(4.),index=['a','b','c','d'])
print(obj)
print(obj['b'])
print(obj[2:4])

o1=obj[['b','d']]=5
print(obj)

o1=obj['b':'d']=5#使用的是标签的切片运算
print(obj)

print(data)
print('-------------')
print(data)


a=data.loc[:'b','two']#筛选截止到第b行第two列的所有元素
b=data.iloc[:,:3][data.three>5]#筛选前三列,且素有数字大于5
print('-----',a)
print('-0--------',b)


df1 = pd.DataFrame(np.arange(9.).reshape((3,3)),columns=list('bcd'),index=['O','T','C'])
df2 = pd.DataFrame(np.arange(12.).reshape((4, 3)), columns=list('bde'),index=['U', 'O', 
'T', 'O'])
print('1------',df1)
print('2---------',df2)
print('3--------',df1+df2)
print('4----',df1-df2)
frame = pd.DataFrame(np.random.randn(4, 3), columns=list('bde'),index=['Utah', 'Ohio', 'Texas', 
'Oregon'])
print(frame)
f=lambda x:x.max()-x.min()
print(frame.apply(f))#求每一列两极值的差
print(frame.apply(f, axis='columns'))#这是求每一行的

def f1(x):
    return pd.Series([x.min(),x.max()],index=['min','max'])#每列的最小值和最大值
print(frame.apply(f1))


关于Matplotlib的学习

Matplotlib代码练习

import matplotlib.pyplot as plt
import numpy as np
import time
'''
根据前两个numpy和pandas的编程初步可以这样简要概括:
numpy主要负责一些矩阵的创建和矩阵的一些基本运算
pandas基于numpy运用了一些表格、列表的制作和增删改查的功能
接下来我们看看这个matplotlib的使用方法和方式
'''

s_t1=time.time()
plt.plot([1,2,3],[5,7,4])
plt.show()

plt.plot([3.75,4.58,55.99],[-59,5,-21])#前面的括号是行下标,后面的括号内容是列下标
plt.show()#输出的是图形

e_t1=time.time()

f_t = e_t1 - s_t1
print("所用时间为:{}s".format(abs(f_t)))#利用时间的差值计算一下运行时间

print('---------------------')

figure=plt.figure()#创建画布对象
axes1=figure.add_subplot(2,1,1,label='a1')
axes2=figure.add_subplot(2,1,1,label='a2')
print(axes1,axes2)
figure.show()

print('---------------------')
##matplotlib基本使用-figure


#%matplotlib#这歪意儿无法使用,可能是我的版本问题 
import tkinter as tk
import matplotlib
import numpy as np
import matplotlib.pyplot as plt

#%matplotlib tk  找清楚使用不了的原因

fig1=plt.figure(num='fig1',figsize=(6,9))
plt.xlim(0,20)
plt.ylim(0,10)


plt.show()
print('---------------------')

#下面这两行代码解决的是中文显示问题
#mpl.rcParams['font.sans-serif'] = ['SimHei']
#mpl.rcParams['axes.unicode_minus'] = False

plt.figure('正弦曲线')
x=np.linspace(-1,1,100)
y1=x*2+1
y2=x**2


plt.plot(x,y1)
plt.plot(x,y2)
plt.show()

##使用matplotlib来将函数表达式编程图的形式来展示其相互之间的关系
import matplotlib.pyplot as plt
import numpy as np
x= np.linspace(-3,3,20)
y1=2*x*3+3
y2=x**3
plt.figure(num=1,figsize=(8,5))
plt.plot(x,y1,color='c',marker='+',linewidth=2,linestyle='-.')
plt.plot(x,y2,color='y',marker='*',linestyle=':',linewidth=1,markersize=6)
plt.show()
#print('---------matplotlib基本使用,设置坐标轴------------')


x=np.linspace(-7,7,50)#在区间内共有多少采样点
y1=-x+x**2
y2=2*x+(x-1)**2
y3=2**-x
y4=x**x #以上是我创建的各种待测试的函数
plt.figure(num=2,figsize=(10,10))#规定画册底板大小
plt.plot(x,y1,color='y',linewidth=2,linestyle='-',label='y1=-x+x**2')#设置每条线的相关参数
plt.plot(x,y2,color='r',label='y2=2*x+(x-1)**2')
plt.plot(x,y3,color='b',marker='+',linewidth=2,linestyle='-.',label='y3=2**-x')
plt.plot(x,y4,color='k',label='y4=x**x')
plt.xlim(-2,2)#设置x轴的显示范围
plt.ylim(-3,3)#设置y轴的显示范围
plt.xlabel('this is x')#给x横轴命名

plt.ylabel('This is y')#给y竖轴命名

plt.legend(loc='best')#需要每个线段plt.plot添加label才能显示
plt.show()



##print('---------matplotlib基本使用,自定义坐标轴------------')
#import numpy as np
#import pandas as pd
#import matplotlib.pyplot as plt


x=np.linspace(-20,20,50)#设定图像里面线段显示范围

y1=x**2
y2=x*y1


plt.figure('自创的曲线图',figsize=(8,8))

plt.plot(x,y1,color='y')
plt.plot(x,y2,color='r')

plt.xlim(-20,40)
plt.ylim(-20,20)#设定外面表格显示范围
plt.xlabel('This is X')
plt.ylabel('This is Y')
new_ticks=np.linspace(-20,20,15)

plt.xticks(new_ticks)



plt.yticks([-20,-10,0,10,20],[r'$very\ bad$','$bad$','$so...$','$well$','$really\ well$'])

#print('matplotlib基本使用-设置边框')

ax=plt.gca()#用来获取当前坐标轴对象,并将其赋值给变量ax
ax.spines['right'].set_color('none')#让右边和上边的边框颜色取消
ax.spines['top'].set_color('none')
plt.show()

#添加图例

x=np.linspace(-20,20,50)#设定图像里面线段显示范围

y1=x**2
y2=x*y1


plt.figure('添加图例',figsize=(8,8))

l1,=plt.plot(x,y1,color='y',label='linear line')
l2,=plt.plot(x,y2,color='r',label='square line')

plt.xlim(-20,40)
plt.ylim(-20,20)#设定外面表格显示范围

new_ticks=np.linspace(-20,20,15)


plt.xticks(new_ticks)



plt.yticks([-20,-10,0,10,20],[r'$very\ bad$','$bad$','$so...$','$well$','$really\ well$'])

#print('matplotlib基本使用-设置边框')

ax=plt.gca()#用来获取当前坐标轴对象,并将其赋值给变量ax
ax.spines['right'].set_color('none')#让右边和上边的边框颜色取消
ax.spines['top'].set_color('none')

plt.legend(loc='0')#将图例显示到最好的位置
#'bes t' : 0, 'upper right' : 1, 'upper left' : 2, 'lower left' : 3, 'lower right' : 4, 'right' : 5, ' center left' : 6, ' center right' : 7, 'lower center' : 8, 'upper center' : 9, ' center' : 10
plt.show()

#画图种类-scatter散点图
n=1024
X=np.random.normal(0,1,n)
Y=np.random.normal(0,1,n)
T=np.arctan2(Y,X)#XY值的反正切值
plt.scatter(X,Y,s=75,c=T,alpha=0.5)#scatter画散点图 size=75 颜色为T 透明度为50% 利用xticks函数来隐藏x坐标轴
plt.xlim(-1.5,1.5)
plt.xticks(())
plt.ylim(-1.5,1.5)
plt.yticks(())
plt.show() 



#条形图
n=12
X=np.arange(n)
Y1=(1-X/float(n))*np.random.uniform(0.5,1,n)

Y2=(1-X/float(n))*np.random.uniform(0.5,1,n)

#print(X,'---------\n',Y1,'---------\n',Y2,'---------\n')

plt.bar(X,+Y1,facecolor='#9999ff',edgecolor='white')
plt.bar(X,-Y2,facecolor='#ff9999',edgecolor='white')

for  x,y in zip(X,Y1):#zip可以传递两个值
    plt.text(x+0.4,y+0.05,'%.2f'%y,ha='center',va='bottom')
for  x,y in zip(X,Y2):#zip可以传递两个值
    plt.text(x+0.4,-y-0.05,'%.2f'%y,ha='center',va='top')    

plt.xlim(-0.5,n)
plt.xticks(())#表示忽略x周的数字

plt.ylim(-1.25,1.25)
plt.yticks(())

plt.show()

##条状图2

plt.figure('柱状图')
x_index=np.arange(5) #柱的索引
x_data=('A','B','C','D','E')
y1_data=(20,35,30,35,27)
y2_data=(25,32,34,20,25)
bar_width=0.35#定义每个柱体的宽度

plt.bar(x_index,y1_data,width=bar_width,alpha=0.4,color='b',label='legend1')

plt.bar(x_index+bar_width,y2_data,width=bar_width,alpha=0.5,color='r',label='legend2')

plt.xticks(x_index+bar_width/2,x_data)#x轴的刻度线

plt.legend(loc=0)#显示图例

plt.tight_layout()#自动控制图像外部边缘,此方法不能够很好的控制图像间的间隔
plt.show()

#等高线的画法

n=256
x=np.linspace(-3,3,n)
y=np.linspace(-3,3,n)
X,Y=np.meshgrid(x,y)#meshgrid从坐标向量返回坐标矩阵
#函数f用来计算高度值,利用contour函数把颜色加进去。
def f(x,y):
    return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)
plt.contour(X,Y,f(X,Y),8,alpha=0.75,cmap=plt.cm.hot)#等高线分成八分,alpha透明度,cmap:color map
C=plt.contour(X,Y,f(X,Y),8,colors='black',linewidth=0.5)
plt.clabel(C,inline=True,fontsize=10)#使用plt.clabel添加高度数值inline控制是否将label画在线里面,字体大小为10
plt.xticks(())
plt.yticks(())
plt.show()

##子图:

plt.figure('子图')
plt.subplot(2,1,1)
plt.plot([0,1],[0,1])
plt.subplot(2,3,4)
plt.plot([0,1],[0,2])
plt.subplot(2,3,4)
plt.plot([0,1],[0,3])
plt.subplot(3,3,8)
plt.plot([0,1],[0,4])
plt.show()

#图中图
fig=plt.figure('来个图中图')
x=np.arange(7)
y=[1,3,4,2,5,8,6]
print('x-----------',x)
print('y-----------',y)
left, bottom,width,height=0.1,0.1,0.8,0.8
appp=[left,bottom,width,height]
ax1=fig.add_axes(appp)
ax1.plot(x,y,'r')#绘制大图,颜色red
ax1.set_xlabel('x')
ax1.set_ylabel('y')
ax1.set_title('大图')

ax2=fig.add_axes([0.2,0.6,0.25,0.25])
ax2.plot(y,x,'b')
ax2.set_xlabel('x')
ax2.set_ylabel('y')
ax2.set_title('title inside 1')
plt.axes([0.6,0.2,0.25,0.25])
plt.plot(y[::1],x,'y')

plt.show()


#次坐标轴
x=np.arange(0,10,0.1)
y1=0.5*x**2
y2=-1*y1
fig,ax1=plt.subplots()

ax2=ax1.twinx()#镜像显示
ax1.plot(x,y1,'g-')
ax2.plot(x,y2,'b-')

ax1.set_xlabel('X data')
ax1.set_ylabel('Y1 data',color='g')
ax2.set_ylabel('Y2 data',color='b')
plt.show()





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

量子,相反而皆相成也

感谢您的鼓励和支持❥(^_-)

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值