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