机器学习概述
一. Python数据处理基础
1. 基本数据类型
- 标准数据类型有6种,包括number、str、list、tuple、set、dictionary
- 其中number和str属于基础数据类型,list、tuple、dict、set属于复合数据类型
- list、set、dictionary是可变数据类型,number、str、tuple不可变数据类型
1.1 number
- 数值型,是专门用于存储数值的数据类型,具有不可变性。
- 所以数值型数据没有++、–等自增自减运算符
- 支持4种不同的数值数据类型:int、float、bool、complex
- 2个数相除,结果总是浮点数,即便这2个数都是整数且能整除
1.2 str
1.索引
- 通过索引获得字符串中单个字符的值。
- 索引从0开始,也可以用负索引。
2.切片 - 通过切片来获取子字符串的值【利用索引同时取出字符串中多个字符】
- 切片时结束索引的值取不到。
3.其他操作 - 可通过 变量[::-1] 实现字符串反向排列
str='Picture'
print(str[2]) # 索引
print(str[1:3]) # 切片
print(str[-3:-1])
print(str[3:-1])
print(str[-6:7])
print(str[2:]) #从开始索引到末尾
print(str[:5]) # 从开头到末索引之前的元素
print(str[:]) # 整个字符串
print(str[1::2]) # 步长
print(str[::-1]) print(str*2) print(str+'TEST')
c
ic
ur
tur
icture
cture
Pictu
Picture
itr
erutciP
PicturePicture
PictureTEST
- 可以对字符串变量整体修改,但是不能对字符串中某个字符进行修改
- 字符串改写常用方法:
- 注意:.capitalize()和.title()除了改变首字母为大写外,其他大写字母还会改写为小写字母
1.2.1 字符串判断
- 判断字符串以什么开头,用方法.startswith()
- 判断字符串以什么结尾,用方法.endswith()
- 判断字符(串)是否在字符串中,可以是用“in”运算符
- 通过方法.find()获取字符或子串的下标,当返回值为-1时,表示没有找到
1.2.2 拆分字符串
- 使用方法.split(),得到的是一个列表
- 列表的索引和切片同字符串,但是列表中的单个元素可以修改
- 列表常用的方法如下:
1.3 列表 []
1.3.1 删除列表元素
- 前3种是通过位置删除,最后1种是通过值删除
- 使用del语句删除元素, del mylist[0] ,是将列表中索引为0的元素删除
- 使用pop()方法删除最后一个元素,使用pop()方法可以删除列表最后一个元素,并可将该元
素赋值给某变量 mylist1=mylist.pop() - 使用pop()方法删除任何位置的元素,只要在括号中指定要删除元素的索引,并可将该元素赋
值给某变量。 mylist1=mylist.pop(3) - 根据值删除元素,使用remove()方法,并可将该元素赋值给某变量。
mylist1=mylist.remove(‘elem’) ,该方法只删除第一个指定的值,如果要删除的值在列表中出现多次,需要使用循环来实现
1.4 tuple ()
- 元组写到()中,元素之间用逗号分隔,元素可以具有不同额类型
- 元组与列表类似,但是元组中的元素不能修改
但如果元组内部的数据项是可变类型,则该数据项可以修改,比如数据项为列表 - 元组的截取方式与字符串和列表类似,下标都是从0开始,末尾的位置从-1开始
- 元组可以直接赋值给变量
1.5 dict {}
- 字典的访问需要使用键,并且用[]将键括起来
- 修改字典:通过访问键进行赋值实现添加或修改,使用update()方法修改或添加,使用del运
算符删除,使用clear()方法清空字典
dict={'name':'zhangsan','age':20}
print('原字典:')
print(dict) # 添加
dict['gender']='Female'
print('添加后:')
print(dict) # 修改1
dict['name']='lisi'
print('修改后:')
print(dict) # 修改2
dict.update({'No':1,'age':22})
print('修改后:')
print(dict) # 删除
del dict['gender']
print('删除后:')
print(dict) # 清空
dict.clear()
print('清空后:')
print(dict)
原字典: {‘name’: ‘zhangsan’, ‘age’: 20}
添加后: {‘name’: ‘zhangsan’, ‘age’: 20, ‘gender’: ‘Female’}
修改后: {‘name’: ‘lisi’, ‘age’: 20, ‘gender’: ‘Female’}
修改后: {‘name’: ‘lisi’, ‘age’: 22, ‘gender’: ‘Female’, ‘No’: 1}
删除后: {‘name’: ‘lisi’, ‘age’: 22, ‘No’: 1}
清空后: {}
1.6 set {}
- 由一系列无序的【所以不能索引】、不重复的数据项组成,集合中每个元素都是唯一的。
- 创建集合可以使用{}或者set()函数,set()函数的参数是str,会将该str拆分为单个字符
- 创建一个空集合必须使用set()函数,因为空的{}创建的是空字典。
- 集合的作用主要是去重,可以使用set()函数进行去重
1.7 range()函数
- 用于生成一系列数,返回值是range类型。【注意:是一系列数,不是列表】,这是一个函
数,参数之间用逗号隔开。
- 参数可以取1个,range(a)得到从0开始到a-1共a个数。取不到最后一个值,这是编程语音的
差一行为的结果 - 参数取2个,range(b,a)得到从b开始到a-1共a-b+1个数
- 参数取3个,range(b,a,c)得到从b开始到a-1的若干个数,各数之间的差值为c,即第3个参数
用于设置步长
2. 运算符
2.1 算术运算符
- +、-、*、/、%、**、//
- 进行除法运算时,不管商为整数还是浮点数,运算结果始终为浮点数
2.2 位运算符
- &、|、^、~、<<、>>
-== ^ 是异或== - ~ 是按位反转。转换公式是~x=-x-1这里用到:负数在计算机里用补码存。
2.3 输入输出
2.3.1 input
- input函数将所有接收的数据类型都默认为str,要得到需要的数据类型,需要强制转换。
2.3.2 格式化输出
- 主要是为了方便修改语句,减少编写代码的工作量,并且包含自动取位、转换进制等
- 格式化输出有3种, %+格式符方法、format函数方法、f-string方法
-
%s、%d、%f、%%。如
print(“我的名字是%s”%name)
print(“我的学号是%06d”%student_no)
print(“苹果单价%.02f”%price)
print(“数据比例%.02f%%”%scale) -
使用format。如
print(“{}曰:学而时习之,不亦{}”.format(“孔子”,“说乎”))
print(“{1}曰:学而时习之,不亦{0}”.format(“说乎”,“孔子”)) -
f-string(f字符串)方法
print(f’{name}的爱好是{fondness}')
其中name和fondness是变量名,比如name=“zhangsan” fondness=“pingpang” -
print(doc) 语句的作用是:打印该语句前面但离得最近的那个大段注释(也叫说明文
档)
3. 控制结构
- 关于break和continue
for i in range(10):
if i==3:
break
print(f'--------{i}--------')
for j in range(6):
if j==2:
continue
elif j==4:
continue
else:
print(j)
--------0--------
0
1
3
5
--------1--------
0
1
3
5
--------2--------
0
1
3
5
4. 函数
4.1 函数参数
- 不定数量位置参数【元组】,定义时前面加一个星号
- 不定数量的关键字参数【字典】,定义时前面加两个星号
# 位置参数、默认参数、不定量参数【元组】、关键字参数【字典】
def func(a,b=1,*num,**kwargs):
print(a,b,num,kwargs)
func(2)
func(4,2,3,4,5,6,c=2,d=5,e=8)
func(4,2,3,d=5,e=8)
4.2 匿名函数
- 函数无名,用lambda关键字创建
5. 数据文件读写
5.1 Python原生标准文件的打开、读取(写入)、关闭操作
- 打开文件的内置函数是open()函数,打开文件后会创建一个文件对象,对文件的访问通过这
个文件对象进行
- 函数中的参数有3个,第1个是文件名、第2个是打开方式、第3个参数是可选的,用来设置是否使用缓冲区
- 函数中各参数都用引号引上
- 文件的不同打开方式
- 打开方式有w、w+、r、r+、a、a+等。带有+表示读写方式打开
- 还有wb、rb、ab等打开方式,为二进制方式打开。
- 打开方式为写入或追加时,如果文件存在则打开该文件,如果该文件不存在则创建文件
- 文件打开方式不同,指针指向不同
- 打开方式为w、r时,指针指向文件的开头
- 打开方式为a时,指针指向文件的结尾
- 向文件写入数据,使用文件对象的write()方法,参数是要写入文件的字符串
- 如果需要对文件写入数据,打开方式需要选择’w’(覆盖写入)或者’a’(追加)或‘r+’模式
- 打开方式为w:在写入时会清空文件中内容,然后从当前指针处开始往后重新写入数据
- 打开方式为a:在写入时会在后面文件最后添加
- 打开方式为r+:在写入时,会从当前指针开始覆盖原文件中的内容,后面没有被覆盖的内容
保留。
- 文件对象也提供了读取文件的方法,包括read()、readline()、readlines()等
- f.read(),默认读取整个文件,如果设置了参数count,则从当前位置读取count字节。返回值
为字符串 - f.readline(),从当前位置读取文件中一行,返回值为字符串
- f.readlines(),从当前位置开始,读取文件的所有行,返回值为列表,列表的一项对应文件的
一行,是字符串。可以使用for循环对文件对象进行遍历 - 文件读取或写入后,文件指针的指向会发生变化
- 文件使用完毕后,要关闭文件。使用文件对象的.close()方法关闭文件
- 更方便的方法是使用python提供的with语句,使用with语句打开文件时,不必调用f.close()方
法就能自动关闭文件。即使文件读取出错,也会保证关闭文件。
with open('f:/temp.txt','a+') as f:
f.write('lisi\n')
5.2 Numpy存取文件
- 可以通过loadtxt()从文本文件中读取数据,得到的是nd-array
- 用savetxt()把数组写入文本文件
- Numpy主要读、写函数如下:
- Numpy中ndarray要求元素是单一数据类型的数据。
- 读取的.csv文件中的数据类型可能不同,所以加dtype=np.str_将所有数据转换为统一的类型,即string类型
# 读取 import numpy as np
tmp=np.loadtxt('f:/temp1.txt',dtype=np.str_,delimiter='\n')
print(tmp,type(tmp))
# 另一种导入包及函数的方式
from numpy import loadtxt
tmp=loadtxt('f:/temp1.txt',dtype=np.str_,delimiter='\n')
print(tmp,type(tmp))
5.3 Pandas存取文件
- Pandas的基础是Numpy,核心功能是数据计算和处理。
- Pandas库提供了专门的文件输入输出函数,大致分为读取函数和写入函数,如表
import pandas as pd
data=pd.read_csv('f:/data/film.csv') # 默认是逗号分隔符,可以省略
data.head()