机器学习之Python中的numpy库,pandas库

学习机器学习之前我们要学习机器学习会用到的几个第三方库

numpy,pandas,matplotlib,sklearn,scipy

一、numpy库

numpy是python的第三方库,numpy是矩阵库,学习numpy库是为学习机器学习。

这里我安装的版本为2以下版本,是为了后面方便opencv的学习,第三方库的下载可以参考https://blog.csdn.net/2201_75573294/article/details/155455973?fromshare=blogdetail&sharetype=blogdetail&sharerId=155455973&sharerefer=PC&sharesource=2201_75573294&sharefrom=from_link

一、numpy

1.导入numpy库为np,np可以计算三角函数和绝对值

2.创建array

1).列表转化为矩阵

列表也可以有一维,二维,三维甚至更高维度的形式,矩阵也有,两者的区别在于,列表无论维度多少他只是一个形式,除了对其数据的索引和切片外,数据不带有计算的功能,而矩阵可以。

array的功能就是把列表转化为矩阵,让其数据又数学计算的功能。注意转化为矩阵的时候列表需要是“规整的”

例如下面

像列表3这样不规整的列表转化为矩阵的时候会出错的

array是库的函数,能将列表转化为矩阵。

运行结果

2).数组的基本属性

    d = v.dtype 
    #查询数组中的元素类型,int8, int16, int32, int64: 表示不同长度的有符号整数。
    # uint8, uint16, uint32, uint64: 表示不同长度的无符号整数。
    # float16, float32, float64 (float 是 float64 的简写): 表示不同精度的浮点数。
    # complex64, complex128 (complex 是 complex128 的简写): 表示复数,其中64和128表示复数的实部和虚部的位数。
    # bool: 布尔类型,可以存储True或False。
    # str_: 表示定长字符串,可以通过添加数字来指定字符串的长度,如 'S10' 表示长度为10的字符串。
    # object: 表示Python对象类型,可以用来存储任意Python对象。

对上面得到的数组进行以下操作

对v的查询和m的查询

对z的查询

都很好理解,只有这个shape,v.shape这里是(5,)是对一维数组的特殊表达方式,根据对m的shape理解,(3,5)表示三行五列,或许v的shape能写为(1,5)意思为一行五列,但其实这是错误的。

v=[1 2 3 4 5]只能算作向量,shape表示为(5,)

而(1,5)表示的是行矩阵,(5,1)就是列矩阵,v=[[1 2 3 4 5]]才表示为(1,5)

矩阵是二维以上的,这里不要搞混

另外z的shape(3,3,5)意思就是三个三行五列的数据

3.数组的升维

1)一升二

reshape是把列表塑成几行几列的数组,r1为四行四列,r_1是2行,-1的意思是系统会根据四行自动匹配列,所以为两行八列,且都是二维数据

2)一升三

r2为一个八行两列的三维矩阵

3)二升三

r3为两个二行四列的三维数据

4)resize改变原数据的维度

4.数组的降维

降维和升维没什么区别,还是用reshape

补充一点,shape其实也可以实现降维,是直接对array数据的属性进行修改

5.创建特殊的数组

全为0,np.zeros()括号里只能接受一个参数,如果多数字要以元组的形式

一个数字为一维数组,俩数字为二维数组……

另外还有全1,这里也是只能填一个参数

d = np.ones(5)
e = np.ones((2,2))
f = np.ones((2,2,2))
print(d,'\n',e,'\n',f)

还可以自定义

全为5的两个两行三列的三维矩阵full(参1,参2),参一是数组的形态,参二决定数据为多少

g = np.full((2,2,2), 5)
print(g)

6.numpy中常用的两个函数

arange(参1,参2,参3):前俩数是取值范围,左闭右开,参3为步长

linspace(参1,参2,参3):前俩数为范围,左右闭区间,参3为产生的数字个数

7.一维数组元素的选取与修改

逗号为和,例如这里的b变量,就是要取索引号为1和3和5的元素

冒号为范围,例如这里的c变量,取索引号0~6,不包含6的元素

8.二维数组元素的选取与修改

这里的逗号有不一样的含义了,注意区分,效果可以在调试中看到

例如这里c变量,2和:之间的逗号意思就是分隔行和列的,整体意思就是选取0~2行不包含2,的全部列数据,这里的:如果不是数字是冒号就代表全部,再举一个例子,这里的e变量表示的就是全部行的第三列的数据

9.三维数组元素的选取与修改

和上面是一样的可以放在一起记忆

10.数组的组合

将数组组合,hstack()是水平组合,vstack()是垂直组合

concatente()中有一个参数axis,为1的时候和hstack功能一样,水平组合数组

为0的时候和vstack功能一样,垂直组合数组

11.numpy内数组元素的切割

axis=1是水平切割,=0是垂直切割

这里的水平和垂直的含义需要注意

水平切割:
 ——       ——   |  ——        ——    把数组掰开
|           |  |  |           |
|           |  |  |           |
|           |  |  |           |
 ——        ——  |   ——        ——

垂直切割:
 ——                          ——    把数组‘腰斩’
|                              |
|                              |
 ——                          ——
————————————————————————————————
 ——                          ——
|                              |
|                              |
 ——                          ——

12.数组的算数运算

13.数组的拷贝

14.numpy内的随机模块

1)

2)

15.numpy内一些函数的使用

16.矩阵的运算

17.读取文件

二、pandas库

 下载pandas库可以参考第三方库的下载:https://blog.csdn.net/2201_75573294/article/details/155455973?fromshare=blogdetail&sharetype=blogdetail&sharerId=155455973&sharerefer=PC&sharesource=2201_75573294&sharefrom=from_link

1.数据导入与导出

下面操作中所涉及到的代码:

"""
读取csv文件
"""
import pandas as pd

df_1 = pd.read_csv("data1.csv")

df_2 = pd.read_csv("data2.csv",encoding='utf8',header=None)

"""
读取excel文件
"""
df_3 = pd.read_excel("data3.xlsx")#需要装openpyxl库

"""
读取txt文件
"""
df_4 = pd.read_table("data4.txt",sep=',',header=None)
#sep=',':指定文件的分隔符为逗号(,)
"""
导出文件
"""
df_1.to_csv("导出.csv",index=True, header=True)
#index=True:表示导出时包含 DataFrame 的索引(行标签),默认值为 True;若设为 False,则不导出索引。
df_1.to_excel("导出.xlsx",index=True, header=True)

1)读取csv文件

进行调试,下图中的df_1和df_2表格都是通过调试得来的,点击红框蓝色部分字体就可以打开

文件data1.csv,是有表头name,age,income,而文件data2.csv无表头name……

encoding是读取的方式,前面读取文件时open()函数有提到

header参数为none时用于原文件中无表头,也就是这里读取data2.csv

如果我们header=none删去,读取data2.csv,数据就会出现在表头,这个表就会被打乱

2)读取excel文件

继续运行读取data3文件(注意执行df_3这条命令前我们需要先下载openpyxl库)

3)读取txt文件

这里的sep=','意思是以逗号分隔

4)导出

df_1导出为csv文件,index为true意思为行名也导出,header为true意思为表头也就是列名也导出,在文件管理器打开导出的文件

df_1导出为excel文件

2.缺失值处理

下列操作涉及到的代码:

import pandas as pd

"""
缺失值处理方式:
1.数据补齐 2.删除对应数据行 3.不处理
"""
df = pd.read_csv(r"data.csv",encoding='gbk',engine='python')

"""
进行逻辑判断,判定空值所在的位置
"""
na = df.isnull()


"""
填充缺失值,
"""
df1 = df.fillna('1')

"""
删除缺失值【删除整行数据】
"""
df2 = df.dropna()#
print(df2)

读取文件,在调试中打开df表格,原文件中第三行数据缺失一个数据,df表中缺失位置是none

下一步获取空值所在的位置,是空为true,不是空为false

在空值位置补上1(这里的填入数据如果要符合实际,我们是要用算法进行取值的,但是涉及到的算法比较复杂,这里只是简单的填入确定的值)

或者我们删除我们缺失信息的那一行(这里我们的数据只是缺少一个,很多时候实际问题中会出现缺失数据较多,用算法是算不出一个合理的值,一般就会删除信息)

3.重复值处理

import pandas as pd
df = pd.read_csv(r"data1.csv",encoding='gbk',engine='python')
print(df)
"""找出重复值的位置【逻辑判断】"""
result1 = df.duplicated()
"""根据列名来判断重复"""
#根据某个表头
result2 = df.duplicated('name')
print(result2)
#根据多个
result3 = df.duplicated(['gender', 'name'])
print(result3)
"""提取重复的行"""
a = df[result1]
b = df[result2]
c = df[result3]
'通过bool提取内容'
d = df[[True,False,False,True,True,False,False]]
"""删除重复的行"""
new_df1 = df.drop_duplicates()
#部分重复【根据某列名来删除】
new_df2 = df.drop_duplicates(['name', 'gender'])
print(new_df2)

  

4.数据抽取

"""
根据一定条件,抽取数据
"""
import pandas as pd
df = pd.read_csv("data1.csv",encoding= 'gbk',engine='python')
"""
比较运算:包含大于、小于等运算
逻辑判断+取数
"""
#抽取好评数大于17000的电脑
a = df['好评数'] > 17000
df_1 = df[df['好评数'] > 17000]
#抽取好评数在15000到17000之间的电脑
df_2 = df[df['好评数'].between(15000, 17000)]
print(df_1,'\n',df_2)
"""
字符匹配
"""
df_3 = df[df['品牌'].str.contains('苹果',na=False)]
df_4 = df[df['品牌'].str.contains('苹果',na=True)]
print(df_3,'\n',df_4)
#.str.contains('苹果'):对“品牌”列的每个元素进行字符串匹配,检查是否包含 “苹果” 子串,返回布尔值 ,True:包含,False:不包含)。
# na=False:指定对缺失值(NaN)的处理方式 —— 将缺失值视为 False(即不筛选包含缺失值的行)。
"""
逻辑运算: &(和)、|(或)
"""
#取出价格小于7000,好评大于16000的电脑
df_5 = df[(df['价格']<7000) & (df['好评数'] > 16000)]
df_6 = df[(df['价格']<6000) | (df['好评数']>18000)]
print(df_5,'\n',df_6)

  

5.数据框的合并

"""
concat()函数:
使用方式:concat([df1,df2,df3...])
"""
import pandas as pd
import numpy as np
df_1 = pd.DataFrame(np.arange(12).reshape(3,4))
df_2 = 2*df_1
print(df_1,'\n',df_2)
#竖向合并
new_df1 = pd.concat([df_2, df_1])
#横向合并
new_df2 = pd.concat([df_1, df_2], axis=1)
print(new_df1,'\n',new_df2)
"""
join参数 inner:表示交集 outer:表示并集
"""
df_3 = pd.DataFrame(np.arange(12).reshape(3,4),
                    index=['A', 'B', 2])
new_df3 = pd.concat([df_1, df_3], axis=1, join='inner')
new_df4 = pd.concat([df_1, df_3], axis=1, join='outer')
print(df_3,'\n',new_df3,'\n',new_df4)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值