机器学习工具使用

二、机器学习

1.Matplotlib工具

**(1)使用方法: ** import matplotlib.pyplot as plt //导入库

​ plt.figure(figsize = (a,b),dpi = ) //创建画布

​ (figsize:图像的长(a)和宽(b);dpi:图像清晰度(越大越清晰))

​ plt.plot(x,y,color=‘’,linewidth=‘’,marker=‘’,label=‘’,linestyle=‘’)//绘制图像

​ (x:横轴数据;y:纵轴数据;color:图像颜色[可直接输入英文,也可输 入RGB颜色值];linewidth:线条宽度;marker:标记风格;linestyle:线 条样式;label:图例)

//添加自定义x,y刻度

​ plt.xticks(x,rotation=,fontsize=)

​ plt.yticks(y,rotation=,fontsize=)

​ (x/y:要显示的刻度值;rotation:旋转角度;fontsize:字体大小)

注:传递进去的第一个参数必须是数字

//设置x,y标签和标题

​ plt.xlabel( ,fontsize=)

​ plt.ylabel( ,fontsize=)

​ plt.title( ,fontsize=)

​ plt.grid(True,linestyle= ,alpha=) //添加网格显示(alpha:代表透明度)

​ plt.legend(loc=) //设置图例位置(loc:图例所在位置)

//设置画板多图

​ matplotlib.pyplot.add_subplot(nrows,ncols,**fig_kw)

​ (nrows:第几行;ncols:第几列;**fig_kw:代表第几个图)

//中文显示问题

​ plt.rcParams[‘font.sans-serif’] = [‘SimHei’]

​ plt.savefig(文件地址) //图像保存

​ plt.show() //显示图像

(2)折线图:

>>>import matplotlib.pyplot as plt
>>>import numpy as np
>>>x = [5,10,15,20,25]
>>>y = [3,7,4,5,3]
>>>plt.plot(x,y)
>>>plt.savefig(r"D:\data\python\exercise\test1\1.png")
>>>plt.show()

在这里插入图片描述

(3)散点图:

>>>import matplotlib.pyplot as plt
>>>import numpy as np
>>>x = [5,10,15,20,25,7,4,2,4,12,23,14,19,22,19,18,20,16]
>>>y = [3,7,4,5,3,3,2.3,2.4,4.5,4.8,2.1,3,4.5,5.6,6.5,5.8,6.2,3.9]
>>>plt.scatter(x,y)
>>>plt.savefig(r"D:\data\python\exercise\test1\2.png")
>>>plt.show()

在这里插入图片描述

(4)柱状图:

plt.bar(x,width=,height=,label=,alpha=,align=,color=)

x:柱状图中的横坐标

height:柱状图对应每个横坐标的高度值

width:柱状图的宽度,默认为0.8

label:每个数据样本对应的图例,调用legend()可以显示图例

alpha:透明度

align:每个柱状图的对齐方法

color:柱状图的颜色

(4)直方图:

>>>import matplotlib.pyplot as plt
>>>import numpy as np
>>>x = [5,10,15,20,25,7,4,2,4,12,23,14,19,22,19,18,20,16]
>>>y = [3,7,4,5,3,3,2.3,2.4,4.5,4.8,2.1,3,4.5,5.6,6.5,5.8,6.2,3.9]
>>>plt.hist(x,bins=25)
>>>plt.savefig(r"D:\data\python\exercise\test1\4.png")
>>>plt.show()

x:需要传递的数据

bins:组距

在这里插入图片描述

(5)饼图:

plt.pie(x,explode=None,labels=None,autopct=None,pctdistance=0.6,shadow=False,
labeldistance=1.1,startangle=None,radius=None,counterclock=True,wedgeprops=None,
textprops=None,center=(0,0),frame=False,rotatelabels=False,*,data=None)

x:表示扇形或锲形的数据

explode:表示扇形或锲形离开圆心的距离

labels:表示扇形或锲形对应的标签文本

autopct:表示控制扇形或锲形的数值显示的字符串,可通过格式字符串指定小数点后位数

pctdistance:表示扇形或锲形对应数值标签距离圆心的比例,默认为0.6

shadow:是否显示阴影

labeldistance:表示标签文本的绘制位置,默认为1.1

startangle:表示起始绘制角度,默认从x轴的正方向逆时针绘制

radius:表示扇形或锲形的半径

wedgeprops={}:表示控制扇形或锲形属性的字典

textprops:表示控制图表中文本属性的字典

center:表示图表中心位置,默认为(0,0)

frame:是否显示图框

例:

>>>import matplotlib.pyplot as plt
>>>import numpy as np
>>>plt.rcParams['font.sans-serif'] = ['SimHei']    #解决中文显示问题
>>>huaban = plt.figure(figsize=(10, 10), dpi=100)
>>>x = [np.random.rand(1), np.random.rand(1), np.random.rand(1)]      #定义三个随机数
>>>num = x[0]+x[1]+x[2]
>>>plt.title('2000年第一季度国民生产总值产业构成分析饼图', fontsize=10)
>>>color = ["#F0FFFF", "#FF9912", "#00FF00"]      #这里是RGB颜色的编码
>>>name = ['第一产业', '第二产业', '第三产业']
>>>size = [x[0]/num*100, x[1]/num*100, x[2]/num*100]
>>>plt.pie(size, labels=name, colors=color, autopct='%1.2f%%')
>>>plt.savefig(r"D:\data\python\exercise\test1\5.png")
>>>plt.show()

在这里插入图片描述

2.Numpy工具

(1)导入库: import numpy as np

**(2)创建ndarray:**data = np.array()

**(3)基本方法:**1.data.shape:查看数组的维度(以元组形式输出)

​ 2.data.ndim:查看数组维数

​ 3.data.size:查看数组的元素数量

​ 4.data.itemsize:查看一个数组的长度

​ 5.data.dtype:查看数组元素的类型

(4)创建数组指定类型:

名称描述
np.bool(‘b’)用一个字节存储的布尔类型(True或False)
np.int8(‘i’)一个字节大小,-128至127
np.int16(‘i2’)整数,-32768至32767
np.int32(‘i4’)整数,-231至231-1
np.int64(‘i8’)整数,-263至263-1
np.uint8(‘u’)无符号整数,0至255
np.uint16(‘u2’)无符号整数,0至65535
np.uint32(‘u4’)无符号整数,0至232-1
np.uint64(‘u8’)无符号整数,0至264-1
np.float16(‘f2’)半精度浮点数,16位,正负号1位,指数5倍,精度10位
np.float32(‘f4’)半精度浮点数,32位,正负号1位,指数8倍,精度23位
np.float64(‘f8’)半精度浮点数,64位,正负号1位,指数11倍,精度52位
np.complex64(‘c8’)复数,分别用两个32位浮点数表示实部和虚部
np.complex128(‘c16’)复数,分别用两个64位浮点数表示实部和虚部
np.object_(‘o’)python对象
np.string_(‘s’)字符串
np.unicode_(‘U’)unicode类型

**(5)生成只含0和1的数组:**1.np.ones([index,columns]):生成index行,columns列且所有元 素都为1的数组

​ 2.np.zeros([index,columns]):生成index行,columns列且所有元 素都为0的数组

​ 3.np.ones_like(ndarray):生成一个行数和列数都与ndarry相同 的且所有元素均为1的数组

​ 4.np,zeros_like(ndarray):生成一个行数和列数都与ndarry相同 的且所有元素均为0的数组

注:生成一个行数和列数都与ndarry相同的且所有元素均为0的数组

**(6)从现有数组中生成:**1.data1=np.array(data):对data进行复制,但数组data中的元素 变化对data1没有影响

​ 2.data2=np.asarray(data):对data进行复制,但数组data2中的元 素跟着数组data中的元素改变

**(7)生成固定范围内的数组:**1.np.logical_and(condition1,condition2): condition:条件 当两个条件同时满足时返回True

​ 2.np.logical_or(condition1,condition2): 当其中一个条件满足时返回True

​ 3.np.all():所有条件都满足条件返回True,否则返回False

​ 4.np.any():任一个条件满足要求返回True

​ 5.np.where(condition,1,0):满足条件返回1,不满足返回0

注:复合逻辑需要结合np.logical_and和np.logical_or使用

(8)布尔赋值:

例:

>>>score = np.random.randint(40,100,(10,5))
>array([[75, 89, 86, 41, 96],
        [72, 41, 69, 55, 94],
        [45, 52, 96, 56, 84],
        [63, 54, 62, 99, 46],
        [97, 69, 54, 54, 58],
        [63, 89, 88, 71, 77],
        [42, 51, 71, 67, 83],
        [82, 99, 52, 42, 59],
        [54, 97, 83, 98, 89],
        [41, 96, 46, 99, 77]])
>>>test_score = score[1:3,3:5]
>array([[55, 94],
       [56, 84]])
>>>test_score > 60
>array([[False,  True],
        [False,  True]])
>>>test_score[test_score > 60] = 1
>array([[55,  1],
       [56,  1]])

注:1.使用random函数时记得导入库
2.使用索引进行切片时是先行后列
3.test_score > 60这里是进行运算,返回为bool值
4.test_score[test_score > 60] = 1这里是bool赋值,将满足条件的设置为 特定的值——布尔索引

(9)统计指标:

方法作用
np.min(ndarray,axis)查询所有行或所有列的最小值
np.max(ndarray,axis)查询所有行或所有列的最大值
np.median(ndarray,axis)查询所有行或所有列的中位数
np.mean(ndarray,axis)查询所有行或所有列的平均值
np.std(ndarray,axis,dtype)查询所有行或所有列的标准差
np.var(ndarray,axis,dtype)查询所有行或所有列的方差
np.ardmax(ndarray)查询最大值的位置
np.ardmin(ndarray)查询最小值的位置

**(10)数组与数:**1.ndarray+1:数组里每个元素+1

​ 2.ndarray/2:数组里每个元素/2

​ 3.ndarray *2:数组里每个元素 *2

**(11)数组与数组:**1.维度相等才可以运算

​ 2.**满足广播机制:**数组的某一维度等长;其中一个数组的某一维度为1

例:

>>>a1 = np.array([[1,2,3],[4,5,6]])
>>>a2 = np.array([[1],[2]])
>>>a = a1 + a2 
>array([[2, 3, 4],
        [6, 7, 8]])

**(12)矩阵乘法:**1.np.matmul:矩阵与矩阵相乘(禁止出现矩阵与标量相乘)

​ 2.np.dot:矩阵与矩阵和标量相乘皆可

注:在矩阵与矩阵相乘时,二者没有区别

3.Pandas工具

(1)导入库: import pandas as pd

**(2)主要数据结构:**1.Series:一维数据结构

​ 2.DataFrame:二维数据结构

​ 3.Multilndex:三维数据结构

​ 4.Panel:三维数据结构(老版本)

**(3)Series:**1.pd.Series(data = None,index = None,dtype = None)

​ data:传入的数据,可以是ndarray,list等形式 index:索引,必须是唯一的,且与数据长度相等,没有传入参数时会默认 创建一个0-N的整数索引 dtype:数据的类型

​ 2.series.index:获取索引

​ series.values:获取值

**(4)DataFrame:**1.pd.DataFrame(data = None,index = None,columns = None)

​ index:行标签;columns:列标签

​ 2.dataframe.shape:获取维度

​ dataframe.index:获取行索引表

​ dataframe.columns:获取列索引表

​ dataframe.values:获取其中array的值

​ dataframe.T:行列互换

​ dataframe.head():默认获取前5行,其他行数自行添加

​ dataframe.tail():默认获取后5行,其他行数自行添加

​ dataframe.info():获取每一列的非空元素个数

​ 3.修改行列索引值:data.index = new_index data.columns = new_columns

注:修改索引值不能单个修改,必须整体修改

​ 4.重设索引:dataframe.reset_index(drop = False)

​ drop:默认为False,不删除原来索引,True为删除原来索引

​ 5.以某列值设置为新的索引:dataframe.set_index(keys,drop = True)

​ key:列索引名或者列索引名称的列表

​ drop:bool值默认为True,当作新的索引,删 除原来列

注:行索引的修改和重设类似列索引

**(5)基本数据操作:**1.直接使用行列索引(先列后行)

>>>a = [1,2,3,4]
>>>b = [5,6,7,8]
>>>c = pd.DataFrame(np.random.randint(0,100,(len(a),len(b))),index = a, columns = b)
>	
	5	6	7	8
1	23	28	85	59
2	52	81	45	7
3	70	54	71	15
4	70	35	27	89
>>>c[5][3]
>70
>>>c[:1,:2]						#这样会报错
>TypeError: unhashable type: 'slice'

​ 2.结合loc或iloc使用索引:loc:只能指定行列索引名字(先列后行)

​ iloc:可以通过索引的下标去获取

​ ix:下标和名称组合做引(老版本)

例:

>>>a = ['a','b','c','d']
>>>b = ['a1','b1','c1','d1']
>>>c = pd.DataFrame(np.random.randint(0,100,(len(a),len(b))),index = a, columns = b)
>	
	a1	b1	c1	d1
a	89	79	12	74
b	52	20	84	49
c	43	56	25	3
d	69	78	58	6
>>>c.loc[ : ,'a1']
>a    89
 b    52
 c    43
 d    69
 Name: a1, dtype: int32
>>>c.iloc[:,0]
>a    89
 b    52
 c    43
 d    69
 Name: a1, dtype: int32
>>>c.loc[c.index,['a1']]
>
	a1
a	89
b	52
c	43
d	69
>>>c.iloc[:,c.columns.get_indexer(['a1'])]
>
	a1
a	89
b	52
c	43
d	69>>>a = ['a','b','c','d']
>>>b = ['a1','b1','c1','d1']
>>>c = pd.DataFrame(np.random.randint(0,100,(len(a),len(b))),index = a, columns = b)
>	
	a1	b1	c1	d1
a	89	79	12	74
b	52	20	84	49
c	43	56	25	3
d	69	78	58	6
>>>c.loc[ : ,'a1']
>a    89
 b    52
 c    43
 d    69
 Name: a1, dtype: int32
>>>c.iloc[:,0]
>a    89
 b    52
 c    43
 d    69
 Name: a1, dtype: int32
>>>c.loc[c.index,['a1']]
>
	a1
a	89
b	52
c	43
d	69
>>>c.iloc[:,c.columns.get_indexer(['a1'])]
>
	a1
a	89
b	52
c	43
d	69

​ 3.赋值操作:dataframe[‘a’] = b dataframe.a = b

​ a代表某一列或某一行的名称;b代表某个值

**(6)排序:**1.DataFrame排序:dataframe.sort_values(by = ,ascending =)

单个或多个键排序 by:指定排序参考的键 ascending:默认升序 ascending = False:降序 ascending = True:升序

​ 2.Series排序:值排序:dataframe.sort_values(ascending = True)

​ 索引排序:series.sort_index()

(7)DataFrame运算:

1.元素相加,维度相等时找不到元素默认用fill_value

dataframe.add(dataframe2, fill_value = None, axis = 1)

2.元素相减,维度相等时找不到元素默认用fill_value

dataframe.sub(dataframe2, fill_value = None, axis = 1)

3.元素相除,维度相等时找不到元素默认用fill_value

dataframe.div(dataframe2, fill_value = None, axis = 1)

4.元素相乘,维度相等时找不到元素默认用fill_value

dataframe.mul(dataframe2, fill_value = None, axis = 1)

5.查看日期,输入具体日期,例:

>>>data = np.array(['2023-3-12','2023-3-13','2023-3-14'])
>>>data1 = pd.to_datetime(data)
>>>data1.week
>Int64Index([10, 11, 11], dtype = 'int64')
>>>data1.weekday
>Int64Index([6, 0, 1], dtype = 'int64')
>>>data1.day
>Int64Index([12, 13, 14], dtype = 'int64')

6.逻辑运算:和Numpy一致,例:

>>>a = ['a','b','c','d']
>>>b = ['a1','b1','c1','d1']
>>>c = pd.DataFrame(np.random.randint(0,100,(len(a),len(b))),index = a, columns = b)
>	
	a1	b1	c1	d1
a	22	14	93	36
b	86	77	41	5
c	96	37	84
d	89	94	54	97
>>>c[(c['d1']>50) & (c['d1']<90)].head()
>
	a1	b1	c1	d1
c	96	84	37	84

7.逻辑运算函数:query(expr)

​ expr:查询字符串

​ 通过此函数可使上述过程更方便简单,例:

>>>a = ['a','b','c','d']
>>>b = ['a1','b1','c1','d1']
>>>c = pd.DataFrame(np.random.randint(0,100,(len(a),len(b))),index = a, columns = b)
>	
	a1	b1	c1	d1
a	22	14	93	36
b	86	77	41	5
c	96	84	37	84
d	89	94	54	97
>>>c.query("d1>50 & d1<90")
>
	a1	b1	c1	d1
c	96	84	37	84

​ isin(values):判断是否有这个值

8.统计运算:dataframe.describe():综合统计包括平均值,最大值,最小值等

9.统计函数:

函数作用
sum获取总和
mean获取平均值
median获取中位值
min获取最小值
max获取最大值
mode获取众数
abs获取绝对值
prod获取累积
std获取标准差
var获取方差
idxmax获取最大值索引
idxmin获取最小值索引

10.累计统计函数:

函数作用
cumsum计算1/2/3…/n个数的和
cummax计算1/2/3…/n个数的最大值
cummin计算1/2/3…/n个数的最小值
cumprod计算1/2/3…/n个数的积

11.自定义运算:apply(func,axis = 0)

​ func:自定义运算

​ axis = 0:默认是列,axis = 1为行

**(8)Pandas画图:**1.dataframe.plot(kind = ‘line’)

​ kind:str,需要绘制图形的种类

图形种类:

种类描述
line折线图
bar条形图(竖直条状)
bath条形图(水平条状)
hist直方图
pie饼图
scatter散点图

注:1.条形图中可以添加是否堆积dataframe.plot(kind=‘bar’,stacked=True)

2.stacked为True时堆积,为False时不堆积

例:

>>>a = ['a','b','c','d']
>>>b = ['a1','b1','c1','d1']
>>>c = pd.DataFrame(np.random.randint(0,100,(len(a),len(b))),index = a,columns = b)
>>>plt.figure(figsize = (20,8),dpi = 100)
>>>c.plot(kind='bar',stacked=True)
>>>plt.savefig(r"D:\data\python\exercise\test1\8.png")
>>>plt.show()

在这里插入图片描述

(9)文件读取与文件存储:

数据类型读取文件存储文件
textCSVread_csvto_csv
textJSONread_jsonto_json
textHTMLread_htmlto_json
textLocal clipboardread_clipboardto_clipboard
binaryMS Excelread_excelto_excel
binaryHDF5 Formatread_hdfto_hdf
binaryFeather Formatread_featherto_feather
binaryParquet Formatread_parquetto_parquet
binaryMsgpackread_msgpackto_msgpack
binaryStataread_statato_stata
binarySASread_sas
binaryPython Pickle Formatread_pickleto_pickle
SQLSQLread_sqlto_sql
SQLGoogle Big Queryread_gbpto_gbp

1.read_csv:pd.read_csv(文件路径,sep = ‘,’,usecols = None)

​ sep:分隔符,默认用’,'隔开

​ usecols:指定读取的列名,列表形式

2.to_csv:dataframe.to_csv(文件路径,sep=‘,’,columns=None,header=True,

index=True,mode=‘w’,encoding=None

​ sep:分隔符,默认用’,'隔开 columns:选择需要的列索引
​ header:是否写进列索引值
​ index:是否写进行索引值
​ mode:‘w’:重写,‘a’:追加

4.高级数据处理

(1)判断数据中是否包含NAN:

方法描述
pd.isnull(dataframe) // dataframe.isnull()有缺失值返回True,没有则返回False
pd.notnull(dataframe) // dataframe.isnull()没有缺失值返回True,有则返回False

**(2)删除存在缺失值的对象:**dataframe.dropna(axis = 0):默认删除缺失值所在行,axis=1 删除列

注:这里不会修改原数据,需要接收返回值

**(3)替换缺失值:**dataframe.fillna(value,inplace = True)

​ value:替换成的值

​ inplace:True则会修改原数据,False则不替代修改原数据,生成新的对象

**(4)缺失值有没有使用NAN标记:**dataframe.replace(to_replace = ,value = np.nan)

**(5)数据离散化:**1.为什么要离散化:

​ 连续属性离散化的目的是为了简化数据结构,数据离散化技术可以用来 减少给定连续属性值的个数。离散化方法经常作为数据挖掘的工具。

​ 2.什么是数据离散化:

​ 连续属性的离散化就是在连续属性的值域上,将值域划分为若干个离散 的区间,最后用不同的符号或整数 值代表落在每个子区间中的属性值。
注:数据离散化要分组和one-hot搭配使用
离散化有很多种方法,这使用一种最简单的方式去操作
人的身高数据: 165,174,160,180,159,163,192,184
最设按照身高分几个区间段: 150-165, 165-180,180-195
这样我们将数据分到了三个区间段,我可以对应的标记为矮、中、高三个类别,最终 要处理成一个“哑变量”矩阵

​ 3.默认分组:pd.qcut(data,q) 统计分组次数:series.values_cuonts()

注:这里的分组是自动分成差不多数量的类别
对数据列进行分组,一般会与value_counts()(统计分组个数)搭配使用,返回分好组 的数据
data:待分组的数据
q:分成多少组

​ 4.自定义分组:pd.cut(data,bins)

​ data:待分组的数据

​ bins:指定分组类型,可以是整型,或列表类型

**(6)One-hot编码(哑变量):**1.把每个类别生成一个布尔列,这些列中只有一列可以为这 个样本取值为1,其又被称为热编码。

把下图中左边的表格转化为使用右边形式进行表示

sample 	prize				sample		prize_5		prize_10	prize_20
1		10					1			0			1			0
2		20					2			0			0			1
3		10			=>		3			0			1			0
4		5					4			1			0			0
5 		10					5			0			1			0

​ 2.pandas.get_dummies(data,prefix = None)

​ data:array-like,Series,or DataFrame

​ prefixs:分组名字

**(7)合并:**1.pd.contact([data1,data2],axis = 1):按照行或列进行合并

​ 2.pd.merge(left,right,how = ‘inner’,on = None)

​ 可以指定按照两组数据的共同键值对合并或者左右各自合并

​ left:dataframe

​ right:另一个dataframe

​ on:指定的共同键

​ how:按照什么方式连接

​ 3.how的方式:

方式作用描述
left左连接左边加左右交集的部分
right右连接右边加左右交集的部分
outer外连接并集部分
inner内连接交集部分

**(8)交叉表与透视表:**1.pd.crosstab(value1,value2):交叉表用于计算一列数据对于另外一 列数据的分组个数(用于统计分组频率 的特殊透视表)

​ 2.data.pivot.table()

​ DataFrame.pivot_table([],index = [])

​ 透视表是将原有的DataFrame的列分别作为行索引和列索引,然后 对指定的列应用聚集函数

**(9)分组与聚合:**1.分组:DataFrame.grouby(key,as_index = True)

​ key:分组的列数据,可以多个

​ as_index:若为True则不保留原来的索引,若为False则保留原来 的索引

​ 2.聚合:一般是指对分组中的数据执行某些操作,比如求平均值、最大值 等,并且会得到一个结果集

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值