添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

python机器学习

1.os库

2.pandas

2.1字典生成pandas

2.2字典生成pandas并序列化数据

3 .split

3.1 strip()

4.numpy

4.1 numpy.tile

4.2 numpy.argsort()

4.3数组索引

4.4从数组中选出最大最小的值

4.5 np.arange()

4.6 np.append()

4.7 np.mat与np.array

4.7.1乘法区别(np.dot,np.multiply)

4.7.2索引区别

4.7.3np.array((3,1))

4.7.4 argsort()的区别

4.7.5 读取行的维数不同

4.8 np.mat与getA()

4.9 array的reshape

4.10 矩阵的排序.sort()与.sort(0)

4.11 np.sign()

5.字典和列表

5.1字典排序

5.2字典取值

5.3列表取值

5.4 list的del与remove

5.5 list.index()

6.matplotlib

6.1 matplotlib.lines

6.2 from matplotlib.font_manager import FontProperties

7.open读取文件

8.KNN

9.当数组运算遇到dtype错误

10.random

random.uniform()

11.sklearn

11.1 from sklearn.preprocessing import LabelEncoder



1 os库

import os
print("当前工作目录为"+os.getcwd())
path="D:/my-install/Notepad++/new"  #注:斜杠方向写反了会有问题
os.chdir(path)  #修改当前目录
print("当前工作目录为"+os.getcwd())


当前工作目录为D:\my-install\Notepad++
当前工作目录为D:\my-install\Notepad++\new

2 pandas

import pandas as pd
csv_path="E:/MachineL/tian.csv"
#这是存放在本地的tian.csv的路径
df=pd.read_csv(csv_path)
#pandas可以解析文件
print(df.columns)
print(df.describe())

pandas读不了excel,可以读csv,data

Index(['城市', '标题', '更新时间', '浏览量', '租金', '押金', '租赁方式', '房屋类型', '面积', '朝向楼层',
       '小区', '小区链接', '区县', '详细地址', '中介公司', '房屋配套', '房源描述', '图片地址', '页面网址'],
      dtype='object')
count   47.000000
mean   115.531915
std    169.136149
min      3.000000
25%     10.500000
50%     26.000000
75%    162.500000
max    759.000000

2.1字典生成pandas

import pandas as pd
dict={'a':[1,2,3],'b':[3,4,5],'c':[9,0,3]}
dict_pd=pd.DataFrame(dict)
print(dict_pd)


   a  b  c
0  1  3  9
1  2  4  0
2  3  5  3
请按任意键继续. .

2.2字典生成pandas并序列化数据

这是pandas数据,需要把下列数据序列化

            x1     x2   x3       x4
0        young  myope   no  reduced
1        young  myope   no   normal
2        young  myope  yes  reduced
3        young  myope  yes   normal
4        young  hyper   no  reduced
5        young  hyper   no   normal
6        young  hyper  yes  reduced
7        young  hyper  yes   normal
8          pre  myope   no  reduced
9          pre  myope   no   normal
10         pre  myope  yes  reduced
11         pre  myope  yes   normal
12         pre  hyper   no  reduced
13         pre  hyper   no   normal
14         pre  hyper  yes  reduced
15         pre  hyper  yes   normal
16  presbyopic  myope   no  reduced
17  presbyopic  myope   no   normal
18  presbyopic  myope  yes  reduced
19  presbyopic  myope  yes   normal
20  presbyopic  hyper   no  reduced
21  presbyopic  hyper   no   normal
22  presbyopic  hyper  yes  reduced
23  presbyopic  hyper  yes   normal
请按任意键继续. . .


'''
关键代码部分
from sklearn.preprocessing import LabelEncoder
le=LabelEncoder()
for col in dict_pd.columns:
	dict_pd[col]=le.fit_transform(dict_pd[col])
print(dict_pd)


3 split分割字符串

string='www.baidu.com.www.baidu.com'
#split可以分割字符串并返回列表
print(string.split('.'))
#根据'.'进行分割
print(string.split('.',1))
#分割一次
print(string.split('.')[:2])
#只保留前两个
a,b,c=string.split('.')[:3]
#可分别给a,b,c进行赋值,并且赋值的类型是str
print(a+" "+b+" "+c)
print(type(a))


['www', 'baidu', 'com', 'www', 'baidu', 'com']
['www', 'baidu.com.www.baidu.com']
['www', 'baidu']
www baidu com
<class 'str'>

3.1 strip()

4 numpy

4.1 numpy.tile

import numpy as np
a=np.array([1,2,3])  #建立数组
print(a)
a1=np.tile(a,(2,1))#增加数组的行数
a2=np.tile(a,(1,2))#增加数组的列数
print(a1)
print(a2)


[1 2 3]
[[1 2 3]
 [1 2 3]]
[[1 2 3 1 2 3]]
请按任意键继续. . .

4.2 np.argsort()数组排序

import numpy as np
a=np.array([1,23,4,2])
#返回数组a从小到大排序后的的索引
print(a.argsort())


[0 3 2 1]
请按任意键继续. . .

4.3 数组索引

import numpy as np
a=np.array([[1,2,2],[2,23,8],[23,34,3]])
#取所有行的第一列数据组成数组
b=a[:,0]
print("1")
print(b)
#表示第二行所有列
c=a[2,:]
print("2")
print(c)
#若不加逗号则表示行,前2行
b=a[:2]
print("3")
print(b)


1
[ 1  2 23]
[23 34  3]
[[ 1  2  2]
 [ 2 23  8]]
请按任意键继续. . .

4.4 从数组中取最大最小值

import numpy as np
a=np.array([[1,2,2],[2,23,8],[23,34,3]])
#取的是每一列中的最小值组成矩阵
min=a.min(0)
print(min)
max=a.max(0)
print(max)


[1 2 2]
[23 34  8]
请按任意键继续. . .

4.5 np.arange()

import numpy as np
# 生成arry对象,三个参数是从1到5,以0.1为间隔
a=np.arange(1,5,0.1)
print(a)
a=np.arange(1,5)
print(a)
# range一样的用法,只是range返回的是list


[1.  1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.  2.1 2.2 2.3 2.4 2.5 2.6 2.7
 2.8 2.9 3.  3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 4.  4.1 4.2 4.3 4.4 4.5
 4.6 4.7 4.8 4.9]
[1 2 3 4]
请按任意键继续. . .

4.6 np.append()

import numpy as np
a=np.zeros((1,4))
b=np.ones((3,4))
#axis=0,增加行数,要求a,b列数相同
c=np.append(a,b,axis=0)
print(c)
a=np.zeros((1,3))
b=np.ones((1,1))
#axis=1,增加列数,要求a,b行数相同
c=np.append(a,b,axis=1)
print(c)
# numpy提供了numpy.append(arr, values, axis=None)函数。对于参数规定,要么一个数组和一个数值;要么两个数组。append函数返回的始终是一个一维数组。
#a是一维数组
a=np.arange(5)
b=np.zeros((2,3))
c=np.append(a,b)
print(c)


[[0. 0. 0. 0.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]
[[0. 0. 0. 1.]]
[0. 1. 2. 3. 4. 0. 0. 0. 0. 0. 0.]
请按任意键继续. . .

4.7

4.7 .1np.array与np.mat的乘法

import numpy as np
arr在读取一行的时候,读出的数据是一维,而矩阵读的是二维
Arr=np.array([[3,2],[1,4]])
BArr=np.array([[2,6],[3,2]])
#array是对应元素相乘
a=Arr*BArr
print(a)
#矩阵乘法
a=np.dot(Arr,BArr)
print(a)
#矩阵乘法
aMat=np.mat(Arr)
bMat=np.mat(BArr)
a=aMat*bMat
print(a)
# 对应元素相乘
a=np.multiply(aMat,bMat)
print(a)



[[ 6 12]
 [ 3  8]]
[[12 22]
 [14 14]]
[[12 22]
 [14 14]]
[[ 6 12]
 [ 3  8]]
请按任意键继续. . .

4.7.2索引区别

import numpy as np
a=np.array([[1,2,3,5],[1,2,3,4]])
b=np.mat([[1,3,6,5],[1,2,3,4]])
print(np.shape(b))
#读取的是第0行
print(b[0])
#b[0][1]这种读不出来
# print(b[0][1])
#读取的是a[0][1]这个元素
print(a[0][1])


(2, 4)
[[1 3 6 5]]
请按任意键继续. . .

4.7.3 np.array((3,1))

np.array((3,1))生成的并不是3行一列的array,而是一个一维的数组,里面只有两个元素,3和1

import numpy as np
a=np.array((4,3))
b=np.ones((1,3))
c=np.zeros((1,3))
print(np.shape(a))
print(np.shape(b))
print(np.shape(c))
(1, 3)
(1, 3)
请按任意键继续. . .

4.7.4 argsort()

import numpy as np
索引产生的结果不一样
aArr=np.array([[3,2],[234,235],[45,9]])
aMat=np.mat(aArr)
bArr=aArr[:,0]
bMat=aMat[:,0]
arr_ind=bArr.argsort()
mat_ind=bMat.argsort(0)
#(3,)
print(arr_ind)
#(3,1)
print(mat_ind)


[0 2 1]
请按任意键继续. . .

4.7.5 读取行的维数不同

import numpy as np
arr在读取一行的时候,读出的数据是一维,而矩阵读的是二维
aArr=np.array([[3,2,4],[234,235,4],[45,9,24]])
aMat=np.mat(aArr)
b=aArr[1,:]
print(np.shape(b))
c=aMat[1,:]
print(np.shape(c))
(1, 3)
请按任意键继续. . .

4.8 getA用于矩阵转化为array


>>> import numpy as np
>>> a=np.ones((3,1))
array([[1.],
       [1.],
       [1.]])
>>> b=np.mat(a)
matrix([[1.],
        [1.],
        [1.]])
>>> c=b.getA()
array([[1.],
       [1.],
       [1.]])
>>>


4.9 数组的reshape()

import numpy as np
a=np.ones((4,3))
print(a)
#b是一维array
b=a[0,:]
print(b)
print(np.shape(b))
#可以把b转成二维
b=b.reshape(1,-1)
print(np.shape(b))



[[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]
[1. 1. 1.]
(1, 3)
请按任意键继续. . .

4.10

import numpy as np
矩阵的排序
aArr=np.array([[3,2,4],[234,235,4],[45,9,24]])
aMat=np.mat(aArr)
aMat_1=aMat.copy()
#对每一行进行排序
ind_row=aMat.sort()
#对每一列进行排序
ind_col=aMat_1.sort(0)
print(aMat)
print(aMat_1)


[[  2   3   4]
 [  4 234 235]
 [  9  24  45]]
[[  3   2   4]
 [ 45   9   4]
 [234 235  24]]
请按任意键继续. . .

4.11 np.sign()

import numpy as np
#返回数据的正负号,正数用1表示,负数用-1表示,0用0表示
a=np.array([[-71,89],[0,-8]])
b=np.sign(a)
print(b)


[[-1  1]
 [ 0 -1]]
请按任意键继续. . .

5字典

5.1字典排序

import operator
a={'a':'20','b':'39','c':'23','d':'89'}
#itemgetter(1)是按值排序,itemgetter(0)是按建排序
a = sorted(a.items(),key=operator.itemgetter(1),reverse=True)
print(a)
print(a[1][0])


[('d', '89'), ('b', '39'), ('c', '23'), ('a', '20')]
请按任意键继续. . .

5.2字典取值

#字典的取值
dict={'a':3,'b':5,'c':9}
first=dict['a']
print(first)
#2当用get时,如没有这个键可以设置为默认值
second=dict.get('f',0)
print(second)


3
请按任意键继续. . .

5.3列表取值

list=['1','12','3','342','23']
#取所有值
a=list[:]
print(a)
#取前两个值,下标为0.1
b=list[:2]
print(b)
#取下标为1,2的值
c=list[1:3]
print(c)



['1', '12', '3', '342', '23']
['1', '12']
['12', '3']
请按任意键继续. . .

5.4 list的remove与del

list=['23','2','23','45','8']
# 删除的是下标为1的元素
del(list[1])
print(list)
# 删除的是第一个匹配的元素
list.remove('23')
print(list)

5.5 list.index()

listA=['有自己的房子','有工作']
a=listA.index('有工作')
print(a)


1
请按任意键继续. . .



6 matplotlib

6.1 matplotlib.lines

#以下是关键语句
import matplotlib.lines as mlines
ne=mlines.Line2D([],[],color='green',label='negative',marker=".")
po=mlines.Line2D([],[],color='red',label='positive',marker=".")
axs.legend(handles=[ne,po])
plt.show()

6.2 设置汉字格式 from matolotlib.font_manager import FontProperties

 from matolotlib.font_manager import FontProperties
font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=14)
fig,axs=plt.subplots(2,2,figsize=(13,8))
axs[0][0].set_xlabel("吃冰淇淋的数量",FontProperties=font)


7读取文件

file=open("E:\MachineL\datingTestSet.txt")
#读取一行,a是str类型
a=file.readline()
print(a)
#读取所有内容,b是list类型
b=file.readlines()
print(b)

8 KNN

from sklearn.neighbors import KNeighborsClassifier as KNN
neigh=KNN(n_neighbors=3,algorithm='auto')
neigh.fit(mat,labels)
predict_class=neigh.predict(test_vector)

9.当数组运算遇到dtype错误

    error=labelmat - h
TypeError: ufunc 'subtract' did not contain a loop with signature matching types dtype('<U32') dtype('<U32') dtype('<U32')

原因在于labelmat和h矩阵的dtype类型不一样,可以使用labelmat.dtype打印,然后只需使用labelmat.astype('float64'),不一定写float64,只要两者相同就行


10.random.uniform


11sklearm

11.1 from sklearn.preprocessing import LabelEncoder

import pandas as pd
from sklearn.preprocessing import LabelEncoder
把字典生成pandas,并利用LabelEmcoder序列化
dict={'a':['good','good','bad'],'b':['red','black','red'],'c':['big','big','small']}
dict_pd=pd.DataFrame(dict)
print(dict_pd)
le=LabelEncoder()
for col in dict_pd.columns:
	dict_pd[col]=le.fit_transform(dict_pd[col])
print(dict_pd)
	


      a      b      c
0  good    red    big
1  good  black    big
2   bad    red  small