【python机器学习】学习笔记1

python机器学习】学习笔记1

    • 1.1 数字运算
    • 1.2 while
    • 1.3 文件
    • 1.4 class
    • 1.5 input
    • 1.6 tuple list
    • 1.7 字典
    • 1.8 import
    • 1.9 while break continue
    • 1.10 错误处理 try
    • 1.11 map zip lambda
    • 1.12 copy
    • 1.13 set
    • 1.14 regulate expression正则表达式
    • 1.15 numpy
    • 1.16 pandas
    • 1.17 matplotlib(1)
    • 1.18 matplotlib(2)

1.1 数字运算

>>> 1+1
2
>>> 1-1
0
>>> 2*2
4
>>> 2^2
0
>>> 2**2
4
>>> 3**2
9
>>> 2**3
8
>>> 2**4
16
>>> 8%2
0
>>> 8%3
2
>>> 9//4
2
>>> 9//3
3
>>>

1.2 while

python">if x<y<z:
    print('x is greater than y')
if x<=y:
    print('sss')
if x==y:
    print('dddd')
if x!=y
    print('dsss')
if x>y:
    print('aaaa')
elif x=y:
print('ddd')
else:
    print('bbbb')


def function():
    print('this is a function')
    a=1+2
    print(a)

function()

def fun(a,b):
    c=a*b
    print('this c is',c)
    
fun(1,2)

1.3 文件

python">def sale_car(price,color,brand,is_second_hand):
    print('price',price,
          'color',color,
          'brand',brand,
          'is_second_hand',is_second_hand)



sale_car(1000,'red','carmy',True)


APPLE=100
def fun():
    a=APPLE
    print(a)
    return a+100

print(APPLE)
print(fun())


APPLE=100
a=None
def fun():
    global a
    a=20
    return a+200

print(APPLE)
print('a past =',a)
print(fun())
print('a now=',a)


text="this is next lind\nthis is the last line"
print(text)
my_fire=open('my fire.txt','w')#w write //r read
my_fire.write(text)
my_fire.close()


append_text="\nthis is append text"
my_fire=open('my fire.txt','a')#a 补充
my_fire.write(append_text)
my_fire.close()


file=open('my fire.txt','r')
content = file.read()
print(content)


file=open('my fire.txt','r')
content = file.readline()#第一行内容
second_content=file.readline()#第二行内容
content_total=file.readlines()#全部读取
print(content,second_content,content_total)

1.4 class

python">class Calculate:
    press = 1
    name = 'good calculator'
    price = 18
    def add(self,x,y):
        result=x+y
        print(result)
    def minus(self,x,y):
        result2 = x-y
        print(result2)

calcu= Calculate()
print(calcu.name)
print(calcu.press)
calcu.add(13,2)


#初始
class Calculate:
    def __init__ (self,name,price,hight,width):
        self.name = name
        self.price = price
        self.hight = hight
        self.w=width

    def add(self,x,y):
        result=x+y
        print(result)
    def minus(self,x,y):
        result2 = x-y
        print(result2)


c = Calculate('Computer', 12, 19, 4)
print(c.hight)
print(c.price)
c.add(1,2)

1.5 input

python">a_input = input('Please give a number:')#return a string
a_input = int(input('Please give a number:'))#return a string
print('This input number is',a_input)
if a_input == 1:
    print('this is a good one')
elif a_input ==2:
    print('see you')
else:
    print('good luck')

1.6 tuple list

python">#tuple list

a_tupel = (12, 3, 4, 5, 3)
another_tupel = 1, 3, 44, 5

a_list = [11, 22, 33, 4, 2]

for content in a_list:
    print(content)

for index in range(len(a_list)):
    print('index', index, 'number in list=', a_list[index])

for index in range(len(a_tupel)):
    print('index', index, 'number in tuple=', a_tupel[index])


a = [1, 2, 4, 4, 22, 1]
a.append(0)
print(a)

a.insert(1,0)#在第一位添加0
print(a)

a.remove(2)
print(a)

print(a[1])
print(a[-1])#打印最后一位
print(a[0:3])
print(a[:3])
print(a[3:5])

print(a.index(4))#第一次出现的索引
print(a.count(4))#出现的次数

a.sort()#从小到大排序
print(a)

a.sort(reverse=True)#反向排序
print(a)



#多维列表
a = [1,2,3,5,6,9,6]
multi_a = [[1,2,4],
           [2,4,6],
           [4,8,9],
            [4,7,8]]
print(a[1])
print(multi_a[0][1])

1.7 字典

python">a_list =[1,2,3,4,5,9]
d={'apple':1,'peer':2,'orange':3}
d2={'a':4,'c':9}
print(d['apple'])
print(a_list[0])

del d['peer']
print(d)

d['b']=20
print(d)
#字典是无序的
#列表是有序的
d={'apple':[1,2,3],'peer':{1:3,3:'a'},'orange':2}
print(d)
print(d['peer'][3])

1.8 import

python">import time

print(time.localtime())


import time as t

print(t.localtime())

from time import time,localtime

print(localtime())
print(time())


from time import * #import 所有功能

print(localtime())
print(time())


import m2#调用自己的模块
m2.printdata('I am python 2')


#m2.py
def printdata(data):
    print('I am m2\n'+data)

1.9 while break continue

python">a = True
while a:
    b = input('type something')
    if b == '1':
        a = False
    else:
        pass
    print('still in while')

print('finish run')


a = True
while a:
    b = input('type something')
    if b == '1':
        break#跳出
    else:
        pass
    print('still in while')

print('finish run')


a = True
while a:
    b = input('type something')
    if b == '1':
        continue#继续循环
    else:
        pass
    print('still in while')

print('finish run')

1.10 错误处理 try

python">#错误处理 try
try:
    file = open('eeee.txt', 'r+')
except Exception as e:
    print(e)
    print('there is no file as eeee')
    response = input('do you want to create a new file?')
    if response == 'y':
        file = open('eeee.txt', 'w')
    else:
        pass
else:
    file.write('ssss')
file.close()

1.11 map zip lambda

python">a= [1,2,3]
b=[4,5,6]
#合并
zip(a,b)
print(zip)
#合并可视化
print(list(zip(a,b)))

for i,j in zip(a,b):
    print(i/2,j*2)

print(list(zip(a,a,b)))#迭代计算

def fun1(x,y):
    return(x+y)

print(fun1(2,3))


fun2 = lambda x, y :x+y#简化的功能函数
print(fun2(2,3))

print(list(map(fun1,[1],[2])))
print(list(map(fun1,[1,3],[2,5])))#map 列表1中第一个元素跟列表2中第一个元素运算

1.12 copy

python">#copy
import copy
a = [1,2,3]
b =a
id(a)#在硬盘中所占的索引
id(b)
b[0]=11
print(a)
a[1]=2
print(b)#在同一位置,其中一个改变另一个也会改变 完全copy
print(id(a)==id(b))#true

c=copy.copy(a)#浅复制,不同位置
print(id(a)==id(c))#false

c[1]=222
print(a)

a = [1,2,[3,4]]
d =copy.copy(a)
print(id(a)==id(b))#false
print(id(a[2])== id(d[2]))#True 第一层列表指定在不同的空间,第二层列表在同一个空间
a[0]=11
print(d)#不改变
a[2][0]=333
print(d)#改变

e = copy.deepcopy(a)#完全copy 任何地方都不会被重复
print(id(e[2])==id(a[2]))#false

1.13 set

python">char_list = ['a','b','c','d','d','d']

print(set(char_list))#去除重复,无序
print(type(set(char_list)))

sentence ='Welcome back to this Tutorial'
print(set(sentence))#会区分大小写

#不能传多个列表
unique_char = set(char_list)
unique_char.add('x')
print(unique_char)
unique_char.add('a')
print(unique_char)#重复 还是会被删掉

#add不能加列表

print(unique_char.remove('x'))#None
print(unique_char)#已经减掉了
#remove减去没有的会报错,
print(unique_char.discard('y'))#不会报错,返回原有数据
unique_char.clear()#清除


set1 = unique_char
set2 = {'a','u','e'}
print(set1.difference(set2))#1有2没有的
print(set1.intersection(set2))#相同的部分

1.14 regulate expression正则表达式

python">#网页爬虫
import re

#matching string
pattern1 = 'cat'
pattern2 = 'bird'
string = 'dog runs to cat'
print(pattern1 in string)
print(pattern2 in string)


#用正则寻找配对
print(re.search(pattern1,string))
print(re.search(pattern2,string))

#匹配多种可能 使用[]
#multiple pattern ('run' or 'ran')
ptn = r"r[au]n"
print(re.search(ptn,"dog rans to cat"))

#匹配多种可能

print(re.search(r"r[A-Z]n","dog rans to cat"))
print(re.search(r"r[a-z]n","dog rans to cat"))
print(re.search(r"r[0-9]n","dog rans to cat"))
print(re.search(r"r[0-9a-z]n","dog rans to cat"))

#数字
# \d :decimal digit
print(re.search(r"r\dn","run r4n"))
#\D any non-decimal digit
print(re.search(r"r\Dn","run r4n"))

#空白
#\s :any white space [\t\n\r\f\v]
print(re.search(r"r\sn","r\nn,r4n"))
#\S: opposite to \s ,any non-white space
print(re.search(r"r\Sn","r\nn,r4n"))

#所有字母数字和"_"
#\w:[a-zA-Z0-9_]
#\W:opposite to \w

#空白字符
#\b empty string(only at the start or end of the word)
print(re.search(r"\bruns\b","dog runs to cat"))
#\B :empty string (but not at the start or end of a word)
print(re.search(r"\B runs \B","dog  runs    to   cat"))

#特殊字符 任意字符
#\\:match\
print(re.search(r"runs\\","runs\ to me"))
# .:match anything (excepy\n)
print(re.search(r"r.n","r-ns to me"))

#句尾句首
# ^ : match line beginning
print(re.search(r"^dog","dog runs to cat"))
# $ : match line ending
print(re.search(r"cat$","dog runs to cat"))

#是否
# ? : may or may not occur
print(re.search(r"Mon(day)?","Monday"))
print(re.search(r"Mon(day)?","Mon"))

#多行匹配
#multi-line
string = """
dog runs to cat
I run to dog
"""

print(re.search(r"^I",string))
print(re.search(r"I", string, flags=re.M))# M:multi-line

#0或多次
# * :occur 0 or more times
print(re.search(r"an*","a"))
print(re.search(r"ab","abbbbb"))

#1或多次
# +: occur 1 or more times
print(re.search(r"ab+","a"))
print(re.search(r"ab+","abbbbb"))

#可选次数
#{n,m} : occur n to m times
print(re.search(r"ab{2,10}","a"))#b出现2-10次
print(re.search(r"ab{2,10}","abbbbb"))


#group组!报错
#match = re.search(r"(\d+),Date:(.+)","ID:021523,Data:Feb/12/2017")
#print(match)
#print(match.group())
#print(match.group(1))
#print(match.group(2))

#match = re.search(r"(?P<id>\d+),Date:(?P<Data>.+)","ID:021523,Data:Feb/12/2017")
#print(match)
#print(match.group('id'))
#print(match.group('Data'))

#寻找所有匹配
#findall
print(re.findall(r"r[ua]n","run ran ren"))
#| or
print(re.findall(r"run|ran","run ran ren"))
print(re.findall(r"r(u|a)n","run ran ren"))

#替换
# re.sub()
print(re.sub(r"r[au]ns","catches","dog runs to cat"))

#分裂
#re.split()
print(re.split(r"[,;\.]","a;b.c,d;e"))

#compile
compiled_re = re.compile(r"r[ua]n")
print(compiled_re.search("dog ran to cat"))

1.15 numpy

python">import numpy as np
#numpy属性
array = np.array([[1,2,3],[2,3,4]])#把列表转换成矩阵
print(array)

print('number of dim',array.ndim)#几维数组
print('shape',array.shape)#行数列数
print('size',array.size)#总共有多少元素

#创建array
a = np.array([2,33,4],dtype=np.int32)#默认int32
print(a.dtype)

a = np.array([2,33,4],dtype=np.float32)#默认float64
print(a.dtype)

a = np.array([[2,34,4],[2,44,5]])
print(a)

a = np.zeros((3,4))
print(a)

a = np.ones((3,4),dtype=np.int16)
print(a)

a = np.empty((3,4))
print(a)

a= np.arange(10,20,2)
print(a)

a = np.arange(12).reshape((3,4))
print(a)

a = np.linspace(1,10,5)#1-10 5段 生成线段
print(a)

a = np.linspace(1,10,6).reshape((2,3))
print(a)

#numpy基础运算
a = np.array([10,20,30,40])
b = np.arange(4)

print(a,b)
c = a-b
print(c)
c =a+b
print(c)
c = b**2
print(c)
c = 10*np.sin(a)
print(c)
print(b)

print(b<3)
print(b==3)

#矩阵的运算
a = np.array([[1,2],[2,3]])
b = np.arange(4).reshape((2,2))
print(a)
print(b)
c = a*b#逐个相乘
print(c)
c = np.dot(a,b)#矩阵的乘法
print(c)
c = a.dot(b)#矩阵的乘法
print(c)

a = np.random.random((2,4))#2行4列随机矩阵
print(a)
print(np.sum(a))
print(np.min(a))
print(np.max(a))
print(np.sum(a,axis=1))#axis=1 在列中,axis =0 在行中
print(np.min(a,axis=0))
print(np.max(a,axis=1))

A = np.arange(14,2,-1).reshape((3,4))
print(A)
print(np.argmin(A))#最小值索引
print(np.argmax(A))
print(np.mean(A))#平均值
print(np.average(A))
print(np.median(A))#中位数
print(np.cumsum(A))#累加
print(np.diff(A))#累差
print(np.nonzero(A))#非零
print(np.sort(A))#逐行排序
print(np.transpose(A))#矩阵的转置
print((A.T).dot(A))
print(np.clip(A,5,9))#小于5的变成5 大于9的变成9 其余不变

#numpy索引
A = np.arange(3,15)
print(A)
print(A[3])
A = np.arange(3,15).reshape((3,4))
print(A)
print(A[2])#索引第二行
print(A[1][1])
print(A[2][1])
print(A[2,1])
print(A[2:])
print(A[1,1:3])

#迭代每一行
for row in A:
    print(row)
#迭代每一列
for column in A.T:
    print(column)
#迭代每一个
print(A.flatten())
for item in A.flat:#迭代器
    print(item)

#numpy array合并
A = np.array([1,1,1])
B = np.array([2,2,2])

print(np.vstack((A,B)))#vertical stack上下合并
C = np.vstack((A,B))
print(A.shape,C.shape)
D = np.hstack((A,B))#左右合并
print(D)
print(D.shape)
#把横向序列变成纵向
print(A[:,np.newaxis])#在列上面加了一个维度
A = A[:,np.newaxis]
B = B[:,np.newaxis]
print(np.hstack((A,B)))

C = np.concatenate((A,B,B,A),axis=0)#多个array纵向或横向合并,axis = 0 在上下合并 axis = 1 在左右合并
print(C)
C = np.concatenate((A,B,B,A),axis=1)
print(C)

#分割
A = np.arange(12).reshape((3,4))
print(A)

print(np.split(A,2,axis = 1))#横向分割,分成2块,axis= 1 对列操作
print(np.split(A,3,axis=0))#不能进行不等的分割

print(np.array_split(A,3,axis=1))#不等分割

print(np.vsplit(A,3))#纵向分割
print(np.hsplit(A,2))#横向分割

#赋值 copy& deep copy
a = np.arange(4)
print(a)
b = a
c = a
d = b
a[0] = 11
print(a)
print(b)#改变a 就改变b
print(b is a)
print(c)#c也变了
print(d)#也变了
#改变任意一个,其他的都会变

b = a.copy()#deep copy a的值赋给b,但是没有关联上a
print(a)
print(b)
a[0]=333
print(a)
print(b)#没变

1.16 pandas

python">import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

s = pd.Series([1,3,4,np.nan,44,1])#nan什么也没有
print(s)
dates = pd.date_range('20201118',periods=6)
print(dates)

df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=['a','b','c','d'])
print(df)

df1 = pd.DataFrame(np.arange(12).reshape((3,4)))
print(df1)

df2 = pd.DataFrame({'A':1.,
                    'B':pd.Timestamp('20130102'),
                    'C':pd.Series(1,index=list(range(4)),dtype='float32'),
                    'D':np.array([3]*4,dtype='int32'),
                    'E':pd.Categorical(["test","train","test","train"]),
                    'F':'foo'})
print(df2)

print(df2.dtypes)
print(df2.index)#行
print(df2.columns)#列
print(df2.values)
print(df2.describe())
print(df2.T)
print(df2.sort_index(axis=1,ascending=False))#对列排序,倒着排序
print(df2.sort_index(axis=0,ascending=False))
print(df2.sort_values(by='E'))#对值排序

#选择数据
dates = pd.date_range('20201118',periods=6)
df = pd.DataFrame(np.arange(24).reshape((6,4)),index=dates,columns=['A','B','C','D'])
print(df)

print(df['A'], df.A)
print("\n")
print(df[0:3],df['20201118':'20201120'])

#select a label:loc
print(df.loc['20201118'])
print(df.loc[:,['A','B']])
print(df.loc['20201118',['A','B']])

#select by position:iloc
print(df.iloc[3])#第三行
print(df.iloc[3,1])
print(df.iloc[3:5,1:3])
print(df.iloc[[1,3,5],1:3])

#mixed selection :ix
#print(df.ix[:3,['A','C']])#使用不了了

#Boolean indexing 筛选
print(df)
print(df[df.A>8])

#pandas设置值
dates = pd.date_range('20201118',periods=6)
df = pd.DataFrame(np.arange(24).reshape((6,4)),index=dates,columns=['A','B','C','D'])

df.iloc[2,2]=1111
print(df)

df.loc['20201120','B']=222
print(df)

df[df.A>10]=1
df.B[df.A>9]=0
print(df)

#加一个空的列
df['F']=np.nan
print(df)

#加一列
df['E']=pd.Series([1,2,3,4,5,6],index=pd.date_range('20201118',periods=6))
print(df)

#处理丢失数据
dates = pd.date_range('20201118',periods=6)
df = pd.DataFrame(np.arange(24).reshape((6,4)),index=dates,columns=['A','B','C','D'])
df.iloc[0,1]=np.nan
df.iloc[1,2]=np.nan
print(df)

print(df.dropna(axis=0,how='any'))#how={'any','all'}#any如果这里有一个nan,这一行都丢掉 all 只有全部都是nan,才丢掉
print(df.dropna(axis=1,how='any'))

print(df.fillna(value=0))#填上数据
print(df.isnull())#是否缺失数据?
print(np.any(df.isnull())==True)#是否至少有一个丢失的数据

#导入导出数据
data = pd.read_csv('Student.csv')
print(data)
#存储
data.to_pickle('student_pickle')

#合并
#concatenating
df1 = pd.DataFrame(np.ones((3,4))*0,columns=['a','b','c','d'])
df2 = pd.DataFrame(np.ones((3,4))*1,columns=['a','b','c','d'])
df3 = pd.DataFrame(np.ones((3,4))*2,columns=['a','b','c','d'])
print(df1)
print(df2)
print(df3)

res = pd.concat([df1,df2,df3],axis=0,ignore_index=True)#竖向合并,忽略索引
print(res)

#join,['inner','outer']
df1 = pd.DataFrame(np.ones((3,4))*0,columns=['a','b','c','d'],index=[1,2,3])
df2 = pd.DataFrame(np.ones((3,4))*1,columns=['b','c','d','e'],index=[2,3,4])
print(df1)
print(df2)
res = pd.concat([df1,df2],join='outer')#默认outer没有的用NAN填充
print(res)

res = pd.concat([df1,df2],join='inner',ignore_index=True)#只找相同的,没有的裁剪掉
print(res)

#已删除
#res = pd.concat([df1,df2],axis=1,join_axes = [df1.index])#左右合并,只考虑df1的index
#print(res)

#append
df1 = pd.DataFrame(np.ones((3,4))*0,columns=['a','b','c','d'])
df2 = pd.DataFrame(np.ones((3,4))*1,columns=['a','b','c','d'])
df3 = pd.DataFrame(np.ones((3,4))*1,columns=['b','c','d','e'],index=[2,3,4])
print('\n')
res = df1.append(df2,ignore_index=True)
print(res)
res = df1.append([df2,df3])
print(res)
s1 = pd.Series([1,2,3,4],index=['a','b','c','d'])
print(s1)
res = df1.append(s1,ignore_index=True)
print(res)

#merging two df by key/keys(may be used in database)
#simple example
left = pd.DataFrame({'key':['K0','K1','K2','K3'],
                     'A':['A0','A1','A2','A3'],
                     'B':['B0','B1','B2','B3']})
right = pd.DataFrame({'key':['K0','K1','K2','K3'],
                     'C':['C0','C1','C2','C3'],
                     'D':['D0','D1','D2','D3']})
print(left)
print(right)

res = pd.merge(left,right,on='key')#在key列中合并
print(res)

#consider two keys
left = pd.DataFrame({'key1':['K0','K0','K1','K2'],
                     'key2':['K0','K1','K0','K1'],
                     'A':['A0','A1','A2','A3'],
                     'B':['B0','B1','B2','B3']})
right = pd.DataFrame({'key1':['K0','K1','K2','K3'],
                      'key2':['K0','K0','K0','K0'],
                     'C':['C0','C1','C2','C3'],
                     'D':['D0','D1','D2','D3']})
print(left)
print(right)
res = pd.merge(left,right,on = ['key1','key2'])#相同的合并 默认how = 'inner'
print(res)
#how = ['left','right','outer','inner']
res = pd.merge(left,right,on = ['key1','key2'],how = 'outer')#没有的用nan
print(res)

res = pd.merge(left,right,on = ['key1','key2'],how = 'right')#基于right的key来填充
print(res)

#indicator
df1 = pd.DataFrame({'coll':[0,1],'col_left':['a','b']})
df2 = pd.DataFrame({'coll':[1,2,2],'col_right':[2,2,2]})
print(df1)
print(df2)
res = pd.merge(df1,df2,on='coll',how='outer',indicator=True) #indicator = True 显示每一行是采用的什么形式
print(res)

res = pd.merge(df1,df2,on='coll',how='outer',indicator='indicate_column') #改名字
print(res)

left = pd.DataFrame({'A':['A0','A1','A2'],
                     'B':['B0','B1','B2']},
                    index = ['K0','K1','K2'])
right = pd.DataFrame({'C':['C0','C1','C2'],
                     'D':['D0','D1','D2']},
                     index = ['K0','K1','K2'])
print(left)
print(right)
#left_index  right_index
res = pd.merge(left,right,left_index=True,right_index=True,how='outer')
print(res)


boys = pd.DataFrame({'k':['K0','K1','K2'],'age':[1,2,3]})
girls = pd.DataFrame({'k':['K0','K0','K3'],'age':[4,5,6]})
print(boys)
print(girls)

res = pd.merge(boys,girls,on='k',suffixes=['_boy','_gril'],how='inner')#名字不重复,只考虑相同的key
print(res)

#matplotlib

1.17 matplotlib(1)

python">import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-3,3,50)
y1 = 2*x +1
y2 = x**2

plt.figure()
plt.plot(x,y1)

plt.figure(num=3,figsize=(8,5))#figure3
plt.plot(x,y2)
plt.plot(x,y1,color='red',linewidth =10.0,linestyle= '--')


plt.show()

1.18 matplotlib(2)

python">import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-3,3,50)
y1 = 2*x +1
y2 = x**2


plt.figure(num=3,figsize=(8,5))#figure3
plt.plot(x,y2)
plt.plot(x,y1,color='red',linewidth =10.0,linestyle= '--')

plt.xlim((-1,2))
plt.ylim((-2,3))#取值范围
plt.xlabel('I am x')
plt.ylabel('I am y')

new_ticks = np.linspace(-1,2,10)#-1到2分成5份
print(new_ticks)
plt.xticks(new_ticks)#把x轴换掉
plt.yticks([-2,-1.8,-1,1.22,3,],
           [r'$really\ bad$',r'$bad\ \alpha$',r'$normal$',r'$good$',r'$really\ good$'])#变字体,r正则表达式,使用LaTeX语言

#改变坐标轴的位置
#gca = ' get current axis'
ax = plt.gca()
print(ax)
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')#上边后边的脊梁都消失
ax.xaxis.set_ticks_position('bottom')#x轴由下面的脊梁代替
ax.yaxis.set_ticks_position('left')#y轴由右边的脊梁代替
ax.spines['bottom'].set_position(('data',0))#spines选择set_position设置位置为y轴值为-1的位置
ax.spines['left'].set_position(('data',0))#outwardd,axes定位为y的百分之多少

#图例
l1,=plt.plot(x,y2,label='up')
l2,=plt.plot(x,y1,color='red',linewidth =10.0,linestyle= '--',label='down')
plt.legend()#默认图例
plt.legend(handles=[l1,l2,],labels=['aaa','bbb'],loc='best')#loc:location


#Annotation标注
x0 = 0.5
y0 = 2*x0 +1
plt.scatter(x0,y0,s=50,color='b')#scatter打印一个点,s:size
plt.plot([x0,x0],[y0,0],'k--',lw=2.5)#画一条线,k--黑色虚线,lw线宽

#method1
############
plt.annotate(r'$2x+1=%s$'%y0,xy=(x0,y0),xycoords='data',xytext=(+30,-30),textcoords='offset points',
             fontsize = 16,arrowprops = dict(arrowstyle='->',connectionstyle='arc3,rad=.2'))
#%s指针,xy参考点,xytext位置相对于x0,y0点的移动,fonsize字体大小.arrowprops箭头参数,arrowstyle图形为箭头

#method2
##################
plt.text(-1,2,r'$This\ is\ the\ some\ text.\ \mu\ \sigma_i\ \alpha_t$',
         fontdict={'size':16,'color':'r'})

#tick能见度,防止坐标轴被遮盖
for label in ax.get_xticklabels() + ax.get_yticklabels():#把坐标轴提取出来
    label.set_fontsize(12)#扩大字体
    label.set_bbox(dict(facecolor='white',edgecolor='None',alpha=0.7))#set_bbox字体后面的框,facecolor背景色,edgecolor边框无颜色,alpha透明度
#不懂 事实是还是遮盖了????
plt.show()

#scatter散点图
plt.figure()
n = 1024
X = np.random.normal(0,1,n)#随机生成正态分布,mean=0,var = 1,生成n个数
Y = np.random.normal(0,1,n)
T = np.arctan2(Y,X)#for color value

plt.scatter(X,Y,s=75,c=T,alpha=0.5)#scatter画散点图,s:size,c=color,默认cmap对应的颜色图

plt.xlim((-1.5,1.5))
plt.ylim((-1.5,1.5))

plt.xticks(())#隐藏ticks
plt.yticks(())
plt.show()
#散点图的一般用法
plt.figure()
plt.xlim((-1,5))
plt.ylim((-1,5))
plt.scatter(np.arange(5),np.arange(5))
plt.xticks(())#隐藏ticks
plt.yticks(())
plt.show()

#柱状图
plt.figure()
n = 12
X = np.arange(n)
Y1 = (1-X/float(n))*np.random.uniform(0.5,1.0,n)
Y2 = (1-X/float(n))*np.random.uniform(0.5,1.0,n)

print(Y1)

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

for x,y in zip(X,Y1):#x,y分别传入
    #ha:horizontal alignment横向对齐方式
    #va:纵向对齐方式
    plt.text(x,y+0.05,'%.2f'%y,ha='center',va='bottom')#第一个第二个为位置

for x, y in zip(X, Y2):  # x,y分别传入
    # ha:horizontal alignment横向对齐方式
    # va:纵向对齐方式
    plt.text(x, -y - 0.05, '-%.2f' % y, ha='center', va='top')  # 第一个第二个为位置

plt.xlim(-5,n)
plt.xticks(())
plt.ylim(-1.25,1.25)
plt.yticks(())

plt.show()

#等高线图
def f(x,y):
    #the height function
    return(1-x/2+x**5+y**3)*np.exp(-x**2-y**2)

plt.figure()
n = 256
x = np.linspace(-3,3,n)
y = np.linspace(-3,3,n)
X,Y=np.meshgrid(x,y)#绑定为网格输入值,匹配
#use plt.contourf to filling contours
#X,Y and value for (X,Y)point
plt.contourf(X,Y,f(X,Y),8,alpha=0.75,cmap=plt.cm.hot)#contourf画颜色,8代表分成8+2块,cmap有hot,cool

#use plt.contour to add contour lines
C = plt.contour(X,Y,f(X,Y),8,colors='black',linewidth=.5)

#adding label
plt.clabel(C,inline=True,fontsize=10)#inline画在线里面

plt.xticks(())
plt.yticks(())
plt.show()

#打印图像
plt.figure()
a = np.array([0.313660827978, 0.365348418405, 0.423733120134,
              0.365348418405, 0.439599930621, 0.525083754405,
              0.423733120134, 0.525083754405, 0.651536351379]).reshape(3,3)
#for the value of "interpolation", check this:
#http://matplotlib.org/examples/images_contours_and_fields/interpolation_methods.html
#for the value of "origin"= ['upper', 'lower'], check this:
#http://matplotlib.org/examples/pylab_examples/image_origin.html

plt.imshow(a,interpolation='nearest',cmap='bone',origin='upper')
plt.colorbar(shrink=0.9)#压缩到90%

plt.xticks(())
plt.yticks(())
plt.show()

#3D图像
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = Axes3D(fig)
#X,Y value
X=np.arange(-4,4,0.25)
Y=np.arange(-4,4,0.25)
X,Y=np.meshgrid(X,Y)
R=np.sqrt(X**2+Y**2)#计算Z
#height value
Z=np.sin(R)

ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap=plt.get_cmap('rainbow'))#plt_surface画3D图,rstride行跨,cstride列跨

ax.contourf(X,Y,Z,zdir='z',offset=-2,cmap='rainbow')#zdir='z'从z轴压下去,offset从0点压到坐标轴哪个点
ax.set_zlim(-2,2)
plt.show()

#subplot多个显示
plt.figure()

plt.subplot(2,2,1)#创建小图,分成2行2列,的第一个位置
plt.plot([0,1],[0,1])

plt.subplot(2,2,2)#创建小图,分成2行2列,的第二个位置
plt.plot([0,1],[0,2])

plt.subplot(2,2,3)#创建小图,分成2行2列,的第三个位置
plt.plot([0,1],[0,3])

plt.subplot(2,2,4)#创建小图,分成2行2列,的第四个位置
plt.plot([0,1],[0,4])
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,5)
plt.plot([0,1],[0,3])

plt.subplot(2,3,6)
plt.plot([0,1],[0,4])

plt.show()

#第二章subplot方法,subplot in grid
#method1:subplot2grid
###########################
plt.figure()
ax1=plt.subplot2grid((3,3),(0,0),colspan=3,rowspan=1)#分成网格,(3,3)分成3行3列,(0,0)从(0,0)开始,列占3列,占一行
ax1.plot([1,2],[1,2])
ax1.set_title('ax1_title')#都要加个set
ax2=plt.subplot2grid((3,3),(1,0),colspan=2)#分成网格,(3,3)分成3行3列,不写都默认为1
ax3=plt.subplot2grid((3,3),(2,0))#分成网格,(3,3)分成3行3列
ax4=plt.subplot2grid((3,3),(2,1))#分成网格,(3,3)分成3行3列
ax5=plt.subplot2grid((3,3),(1,2),rowspan=2)#分成网格,(3,3)分成3行3列
plt.show()
#method2:gridspec
#####################
import matplotlib.gridspec as gridspec
plt.figure()
gs=gridspec.GridSpec(3,3)#3行3列
ax1=plt.subplot(gs[0,:])#索引的方式
ax2=plt.subplot(gs[1,:2])
ax3=plt.subplot(gs[2,0])
ax4=plt.subplot(gs[2,1])
ax5=plt.subplot(gs[1:,2])
plt.show()
#method3:easy to define structure
######################################3
f,((ax11,ax12),(ax21,ax22))=plt.subplots(2,2,sharex=True,sharey=True)#f定义图片,注意要采用subplots,sharex共用x轴,sharey共用y轴
ax11.scatter([1,2],[1,2])
plt.tight_layout()
plt.show()

#图中图
fig=plt.figure()
x=[1,2,3,4,5,6,7]
y=[1,3,4,2,5,8,6]

left,bottom,width,height=0.1,0.1,0.8,0.8
ax1=fig.add_axes([left,bottom,width,height])#add_axes加入坐标轴,这里表示的都是百分比,前两个是坐标的位置
ax1.plot(x,y,'r')
ax1.set_xlabel('x')
ax1.set_ylabel('y')
ax1.set_title('title')

left,bottom,width,height=0.2,0.6,0.25,0.25
ax2=fig.add_axes([left,bottom,width,height])#add_axes加入坐标轴,这里表示的都是百分比,前两个是坐标的位置
ax2.plot(y,x,'b')
ax2.set_xlabel('x')
ax2.set_ylabel('y')
ax2.set_title('title inside1')

plt.axes([0.6,0.2,0.25,0.25])
plt.plot(y[::-1],x,'g')#[::-1]y的值逆序一下
plt.xlabel('x')
plt.ylabel('y')
plt.title('title inside2')#不用写ax2.set_label因为是跟着默认的plt.axes

plt.show()

#secondary axis主次坐标轴
x=np.arange(0,10,0.1)
y1=0.05*x**2
y2=-1*y1

fig,ax1 = plt.subplots()
ax2=ax1.twinx()#twinx镜面反过来
ax1.plot(x,y1,'g-')
ax2.plot(x,y2,'b--')

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

#animation动画
from matplotlib import animation

fig,ax=plt.subplots()

x=np.arange(0,2*np.pi,0.01)
line,=ax.plot(x,np.sin(x))#line,选择它的第一位

def animate(i):
    line.set_ydata(np.sin(x+i/10))#从1-100,到100的时候更新一下
    return line,

def init():
    line.set_ydata(np.sin(x))
    return line,

ani = animation.FuncAnimation(fig=fig,func=animate,frames=100,init_func=init,interval=20,blit=True)#frames插入100帧,100个时间点,init_func最开始的,interval频率,隔多久更新一次,blit=True只更新变化的

plt.show()

http://www.niftyadmin.cn/n/1399179.html

相关文章

【python机器学习】学习笔记2

【python机器学习】学习笔记22.1 Tkinter(1)window2.2 Tkinter(2)botton2.3 Tkinter(3)listbox2.4 Tkinter(4)Radiobotton2.5 Tkinter(5)Scale2.6 Tkinter(6)Checkbotton2.7 Tkinter(7)canvas2.8 Tkinter(8)Menu2.9 Tkinter(9)Frame2.10 Tkinter(10)messagebox2.11 Tkinter(11)…

【强化学习纲要】7 基于环境模型的RL方法

【强化学习纲要】7 基于环境模型的RL方法7.1 基于环境模型强化学习概要7.2 基于环境模型的价值函数优化7.3 基于环境模型的策略函数优化7.4 在机器人领域的应用周博磊《强化学习纲要》学习笔记课程资料参见&#xff1a; https://github.com/zhoubolei/introRL.教材&#xff1a;…

【强化学习纲要】8 模仿学习

【强化学习纲要】8 模仿学习8.1 模仿学习概要8.2 Behavioral cloning and DAGGER8.3 Inverse RL and GAIL8.4 进一步改进模仿学习的模型8.5 模仿学习和强化学习结合8.6 Case studies周博磊《强化学习纲要》学习笔记课程资料参见&#xff1a; https://github.com/zhoubolei/intr…

【深入浅出强化学习-原理入门】1 基于gym的MDP

【深入浅出强化学习-原理入门】1 基于gym的MDPwindows版本强化学习gym找金币游戏 第一步&#xff1a;grid_mdp.py代码展示 import logging #日志模块 import numpy import random from gym import spaces import gymlogging logging.getLogger(__name__)# Set this in SOME …

【深入浅出强化学习-原理入门】1 基于gym的MDP(作业)

题目&#xff1a;基于gym构建如下迷宫世界&#xff1a; 全部代码&#xff1a; maze_mdp.py import logging #日志模块 import numpy import random from gym import spaces import gymlogging logging.getLogger(__name__)# Set this in SOME subclasses class MazeEnv(gym…

【深入浅出强化学习-原理入门】2 基于模型的动态规划方法

【深入浅出强化学习-原理入门】2 基于模型的动态规划方法2.1 基于gym的机器人找金币游戏2.1.1 基于策略迭代算法找金币游戏2.1.2 基于值迭代算法找金币游戏2.2 基于gym的迷宫游戏2.2.1 基于策略迭代算法的迷宫游戏2.2.2 基于值迭代算法的迷宫游戏2.1 基于gym的机器人找金币游戏…

【深入浅出强化学习-编程实战】1 多臂赌博机

多臂赌博机&#xff1a; 假设玩家共有N次摇动摇臂的机会&#xff0c;每次怎么选择可以使得最后得到的金币最多&#xff1f; ϵ\epsilonϵ-greedy玻尔兹曼策略UCB策略 # 多臂赌博机 import numpy as np import matplotlib.pyplot as pltclass KB_Game:def __init__(self,*args,…

【深入浅出强化学习-编程实战】2 马尔可夫决策过程-鸳鸯系统

【深入浅出强化学习-编程实战】2 马尔可夫决策过程2.1 鸳鸯系统马尔可夫决策过程2.1.1 代码展示2.1.2 部分代码解析2.1 鸳鸯系统马尔可夫决策过程 左上为雄鸟&#xff0c;右上为雌鸟&#xff0c;中间有两道障碍物。目标&#xff1a;雄鸟找到雌鸟。 2.1.1 代码展示 main.py …