# -*- coding: utf-8 -*- """ 3.1 基本语法 print(*objects, sep=' ', end='\n') objects 复数,表示可以一次输出多个对象 输出多个对象时,需要用 ',' 分隔。 sep 用来间隔多个对象,默认值是一个空格。 end 用来设定以什么结尾,默认值是换行符 \n,我们可以换成其他字符串 modf(x):以元组的形式返回(小数部分,整数部分). 两部分的数值符号与x相同,整数部分以浮点型表示。 max(x1,x2,...):返回给定参数的最大值,参数可以为序列。 min(x1,x2,...):返回给定参数的最小值,参数可以为序列。 abs(x):返回整数的绝对值,如abs(-10)返回10。 fabs(x):返回浮点数的绝对值,如math.fabs(-10) 返回10.0。 ceil(x):返回数字的向上取整,如math.ceil(4.1)返回5。 floor(x):返回数字的向下取整,如math.floor(4.9)返回4。 round(x, n):返回浮点数x的四舍五入值,如给出n值, 则代表舍入到小数点后的位数 exp(x):返回e的x次幂,如math.exp(1)返回2.718281828459045。 log(x,base):如math.log(100,10)返回2.0。 log10(x):返回以10为基数的x的对数,如math.log10(100)返回2.0。 pow(x, y):x**y运算后的值 sqrt(x):返回数字x的平方根,返回类型为实数, hypot(x, y):返回欧几里德范数sqrt(x**2+y**2) acos(x):返回x的反余弦弧度值。 asin(x):返回x的反正弦弧度值。 atan(x):返回x的反正切弧度值。 atan2(y, x):返回给定的X及Y坐标值的反正切值。 cos(x):返回x的弧度的余弦值。 sin(x):返回x弧度的正弦值。 tan(x):返回x弧度的正切值。 degrees(x):将弧度转换为角度, radians(x):将角度转换为弧度 pi——圆周率,一般以π来表示。 e——自然常数。 3.2 函数 1、位置参数:根据函数定义的位置来传递参数 x1, x2 = solve(3,4,5) #位置参数a=3,b=4,c=5 print('x1=%f, x2=%f' % (x1, x2)) 2、默认参数:函数定义时为参数提供默认值, 调用时默认参数的值可传可不传,放在所有参数的后面 a, b, c = 1, 10, -1 x3, x4 = solve(a, b) #默认第三个参数为5,a,b为位置参数 print('x3=%f, x4=%f' % (x3, x4)) 3、关键字参数:通过直接给形式参数赋值的方式 指示哪个参数需要传递什么值,可以脱离参数的顺序 x5, x6 = solve(b=20,c=10,a=2) #关键字参数 print('x5=%f, x6=%f' % (x5, x6)) lambda函数 用于定义简单的、能够在一行内表示的函数,返回一个函数值 <函数名>=lambda<参数列表>:<表达式> 例:f=lambda x,y:x+y map()函数 map(function, iterable, ...) function是一个函数,可以使用匿名函数,iterable是一个或多个序列 第一个参数function以参数序列中的每一个元素调用function函数 返回包含每次 function 函数返回值的新列表 例如:result = map(lambda x: x**2, [1, 3, 5, 7, 9]) print(list(result)) #结果为:[1,9,25,49,81] 注意:map函数返回的是一个迭代器,需要使用list函数转换为列表 3.3 条件分支 没有 3.4 循环 while循环常和break一起使用,用于满足某一条件提前中止循环 while 条件表达式: ...... if 条件: break 3.5 字符串基本操作 反斜杠 \ 可以用来转义 字符串可以用' +' 进行连接(粘到一起),也可以用 '*' 进行重复 字符串是可以被索引 (下标访问)的,第一个字符索引是 0 索引也可以用负数,这种会从右边开始数 切片 可以获取子字符串 省略开始索引时默认为0,省略结束索引时默认为到字符串的结束 str[::-1] #倒叙索引 len() 返回一个字符串的长度 str.count(sub,start,end) 反回子字符串 sub 在 [start, end] 范围内非重叠出现的次数。 可选参数 start 与 end 会被解读为切片表示法 str.find(sub,start,end) 返回子字符串 sub 在 [start,end] 切片内被找到的最小索引。 可选参数 start 与 end 会被解读为切片表示法。 如果 sub 未被找到则返回 -1。 str.index(sub,start,end) 类似于 find(),但在找不到子类时会引发 ValueError。 str.format(*args, **kwargs) >>> "The sum of 1 + 2 is {0}".format(1+2) 'The sum of 1 + 2 is 3' str.lower() 返回原字符串的副本,其所有区分大小写的字符均转换为小写 str.upper() 返回原字符串的副本,其中所有区分大小写的字符均转换为大写 str.replace(old, new, count) 返回字符串的副本,其中出现的所有子字符串 old 都将被替换为 new 如果给出了可选参数 count,则只替换前 count 次出现。 str.split(sep=None, maxsplit=-1) 返回一个由字符串内单词组成的列表,用sep作为分隔字符串 默认空格 给出了 max,最多进行max次拆分(列表最多会有max+1个元素) 如max未指定或为-1,则不限制拆分次数(进行所有可能的拆分) 如给出了sep,则连续的分隔符不会被组合在一起而是被视为分隔空字符串 例如 '1,,2'.split(',') 将返回 ['1', '', '2'] sep可由多个字符组成 ('1<>2<>3'.split('<>')将返回 ['1', '2', '3'])。 使用指定的分隔符拆分空字符串将返回 [''] 如果 sep 未指定或为 None,则会应用另一种拆分算法: 连续的空格会被视为单个分隔符,其结果将不包含开头或末尾的空字符串 如果字符串包含前缀或后缀空格的话。 因此,使用 None 拆分空字符串或仅包含空格的字符串将返回 [] str.strip() 返回原字符串的副本,移除其中的前导和末尾空格字符 tr.title() 返回原字符串的标题版本, 其中每个单词第一个字母为大写,其余字母为小写 str.isnumeric() 中至少有一个字符且所有字符均为数值字符则返回True否则返回False str.islower() 至少有一个区分大小写的字符且此类字符均为小写返回T否则返回F str.isalpha() 所有字符都是字母并且至少有一个字符返回 True否则返回 False 4.1 列表 list.append(x) 在列表的末尾添加一个元素。相当于 a[len(a):] = [x] list.extend(iterable) 使用可迭代对象中的所有元素来扩展列表。 相当于 a[len(a):] = iterable list.insert(i, x) 在给定的位置插入一个元素。第一个参数是要插入的元素的索引, 所以 a.insert(0, x) 插入列表头部, a.insert(len(a), x) 等同于 a.append(x) list.remove(x) 移除列表中第一个值为 x 的元素。 如果没有这样的元素,则抛出 ValueError 异常 list.pop(i) 删除列表中给定位置的元素并返回它。 如果没有给定位置,a.pop() 将会删除并返回列表中的最后一个元素 list.clear() 删除列表中所有的元素 list.index(x, start, end) 返回列表中第一个值为 x 的元素的从零开始的索引。 如果没有这样的元素将会抛出 ValueError 异常 start和 end 是切片符号,用于将搜索限制为列表的特定子序列。 返回的索引是相对于整个序列的开始计算的,而不是 start 参数 list.count(x) 返回元素 x 在列表中出现的次数 list.sort(key=None, reverse=False) 对列表中的元素进行排序 list.reverse() 反转列表中的元素 4.2 字典 删除键值对 del cars['JLR'] fromkeys() 函数用于创建一个新字典, 以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值: dict.fromkeys(seq, value) seq -- 字典键值列表。 value -- 可选参数, 设置键序列(seq)的值 遍历字典中的键: for key in cars.keys(): print(key) 遍历字典中的值: for value in cars.values(): print(value) 遍历字典中的键值对: for key,value in cars.items(): print(key,value) 文件操作 open 方法的语法格式为: open(file,mode='r',encoding=None) file:表示要打开的文件路径(相对或者绝对路径); mode:表示文件打开模式; encoding:用于设置编码格式,一般使用 utf8; 读文本文件 read()将文本文件所有行读到一个字符串中。 readline()是一行一行的读,通常在迭代中使用 readlines()是将文本文件中所有行读到一个list中, 文本文件每一行是list的一个元素 文件使用完毕后要进行关闭: f.close() 文件指针复位,重新回到初始状态 f.seek(0) 写文本文件 write()与read()、readline()方法对应,是将字符串写入到文件中 writelines()方法和readlines()方法对应,也是针对列表的操作 它接收一个字符串列表作为参数,将他们写入到文件中, 换行符不会自动的加入,因此,需要显式的加入换行符 写入二进制文件时,只能写入 bytes 类型的数据 数据分析 文件读写 1.读取文件 利用pandas读取文件主要用到的函数是read_xx(), 读取后数据结构为dataframe。 1.1 excel文件 pd.read_excel()可以用来读取excel文件,主要涉及到的参数有: (1)sheet_name: excel文件中的表名 (2)index_col: 使用哪一列作为行索引,默认从0开始 (5)header: 哪一行设置为列索引,默认是第一行,即header = 0 (8)names: 列索引 (10)encoding: 默认是utf-8,还可以是gbk (12)nrows: 读取多少行数据 默认将第一行作为表头读出。 如果数据表格无表头,设置参数header=None 1.2 csv文件 csv文件是以逗号为分隔符的文件,读取参数与excel基本类似。 但是读取csv文件通常需要指定解码方式, 最常用的是utf-8,如果使用utf-8报错,尝试设为gbk txt文件 txt文件是以指制表符\t为分隔符的文件,可用read_csv来读取, 参数与excel、csv基本类似,不同的地方在于必须要指定sep。 df =pd.read_table('example.txt',encoding = 'gbk',sep = ',') 2.1写入文件 excel,csv,txt写入文件的方式基本类似, 以pandas的to_xx()方式写入,三者类似,这里只用excel格式来示例 (1)index: 是否保留行索引 (2)columns: 通过列索引指定所需列 (3)sheet_name: 表名 (4)encoding:编码格式,utf-8或者gbk (5)na_rep: 缺失值填充 (6)inf_rep:无穷值填充 (7)index_label: 行索引标签 (8)header: 默认为True,False没有列索引, 如需更改列名,则header = ["列1","列2","列3"] df = pd.read_excel('example.xls',nrows = 5) df.to_excel('example_new.xlsx',index = False, encoding = "utf-8") 写入csv文件和文本文件时用to_csv()。 可以通过设置sep参数来指定间隔符,默认为',' 1.按列索引 df['性别'] or df.性别 #访问某一列数据 df[['性别','消费金额']] #访问不连续的多列数据 df['性别':'消费金额'] #访问连续的多列数据 2.按行索引 df.iloc[0:3] 3.按行、列索引 df.loc[1:3,'性别':'消费金额'] df.iloc[[1,3],[1,3]] 4.布尔索引 df[df['消费金额']>=300] #消费金额>300的行 添加新列 df['职业']='教师' #增加职业列,将所有人的职业设为教师 df[df['性别']=='男']['职业']='医生' #将男性的职业改为医生 将数据框架df按特定列排序: df.sort_values(by='##',axis=0,ascending=True, inplace=False, na_position='last') by:指定列名(axis=0或’index’)或索引值(axis=1或’columns’) axis:若axis=0或’index’,则按照指定列中数据大小排序; 若axis=1或’columns’,则按照指定索引中数据大小排序,默认axis=0 ascending:是否按指定列的数组升序排列,默认为True,即升序排列 inplace:是否用排序后的数据集替换原来的数据,默认为False即不替换 na_position:{‘first’,‘last’},设定缺失值的显示位置 统计 sum() 求和 diff() 差分 max() 最大值 min() 最小值 var() 方差 std() 标准差 median() 中位数 mean() 均值 describe()计算各列的频率、均值、标准差、级值、四分位数 分组统计 DataFrame.groupby(by=None, axis=0,as_index=True, sort=True) by:分组字段,可以是列名/series/字典/函数,常用为列名 axis:指定切分方向,默认为0,表示沿着行切分 as_index:是否将分组列名作为输出的索引,默认为True; 当设置为False时相当于加了reset_index功能 sort:与SQL中groupby操作会默认执行排序一致, 该groupby也可通过sort参数指定是否对输出结果按索引排序 m=df.groupby('性别').size() #统计男女人数 n=df.groupby('性别')['消费金额'].mean() #统计男女消费金额均值 可视化 import matplotlib.pyplot as plt 1.折线图 x=df['年龄'].index y=df['年龄'].values plt.plot(x, y) # plot函数作图 plt.xticks(x,[0,1,2,3,4,5]) #设置x轴刻度值 plt.savefig('line.png', dpi=120) #保存 plt.show() #看得到图形则不用这条语句 2.条图 n=df.groupby('贷款与否')['消费金额'].sum() plt.bar(n.index, n.values) # bar函数作图 plt.xticks(n.index,['未贷款','贷款']) #设置x轴刻度值 plt.savefig('bar.png', dpi=120) #保存 plt.show() #看得到图形则不用这条语句 3.饼图 labels = ['女','男'] sizes = m.values explode = (0,0.1) plt.pie(sizes,explode=explode,labels=labels, autopct='%1.1f%%',shadow=False,startangle=150) plt.title("男女比例") plt.show() 数值预测 创建数组 np.random.randint(low, high=None, size=None, dtype='l') 生成一个整数或N维整数数组,取数范围: 若high不为None时,取[low,high)之间随机整数, 否则取值[0,low)之间随机整数。 #生成包含10个元素的值在[0,100) 的数组 np.random.randint(0, 100, 10) 改变维度 reshape函数可以改变数组的维度 import numpy as np arr1 = np.array([1,2,3,4,5,6]) #6个元素的一维数组 arr1 = arr1.reshape(2,3) #改变为:2行3列的二维数组 布尔索引 可以通过一个布尔数组来索引目标数组, 以此找出与布尔数组中值为True的对应的目标数组中的数据 需要注意的是,布尔数组的长度必须与目标数组对应的轴的长度一致 arr2d = np.array([[1, -2, 3], [-4, 5, 6]]) print(arr2d<0) #arr2d<0 是个布尔型数组 print(arr2d[arr2d<0]) #用布尔型数组来索引 基本运算 形状相同的数组之间、数组与标量之间都可以进行算数运算, 这些运算会传播到数组中的每一个元素, 这种传播到元素的运算方式被称为广播运算。 arr2d=arr2d*2 #数组每个元素都乘以2 在m行n列矩阵应用max、min、sum、mean等函数时, 如果参数axis为0(第0轴)以矩阵的每列为单位进行运算,结果是向量 参数axis为1(第1轴)时,指定以每行为单位进行运算,结果也是向量 如果不指定axis参数,则对矩阵的所有参数进行计算,结果是个标量。 np.sum(arr2d,axis=0) [-6, 6, 18] numpy文件操作 读写txt文件 a = list(range(0, 100)) a = np.array(a) # a.dtype = np.int64 np.savetxt("filename.txt", a) b = np.loadtxt("filename.txt") # b.dtype = np.float64 散点图 matplotlib.pyplot.scatter(x, y,c=None,marker=None) x,y:表示的是大小为(n)的数组,也就是我们即将绘制散点图的数据点 c:表示颜色,默认蓝色'b',表示标记的颜色。 可以是一个表示颜色的字符,或者是一个长度为n的表示颜色的序列 marker:表示的是标记的样式,默认的是'o'。 import numpy as np import matplotlib.pyplot as plt np.random.seed(1) x=np.random.rand(10) y=np.random.rand(10) plt.scatter(x,y,c='orange') plt.show() 折线图 plt.plot(x, y, format_string, **kwargs) x:X轴数据,列表或数组,可选 y:Y轴数据,列表或数组 format_string:控制曲线的格式字符串,可选 **kwargs:第二组或更多(x,y,format_string),可画多条曲线 示例如下: import matplotlib.pyplot as plt import numpy as np a = np.arange(10) plt.plot(a,a*1.5,a,a*2.5) plt.show() 数据分类 归一化 标准化 第四章-算法思维-4.3.1方程求根(多种方法求根) 暴力搜根的思路如下: 从给定的根初值x和步长值h开始,往右逐步寻找,x=x+h: 如果|f(x)|=err时: 如果f(x)与f(a)的符号相同,则解在[中,右], 否则解在[左,中]。相应改变区间。 重新计算中点x,及f(x) 回到第3步 用牛顿迭代法求方程的近似根 画图得到根的初始值x 求出函数的导数,计算f(x), df(x) 当|f(x)|>=err时,重复: x=x−f(x)/df(x) 重新计算f(x),df(x) 牛顿割线法解题流程 第四章-算法思维-4.3.2函数求最值(梯度下降法) 一元函数的梯度下降法公式 x(k+1) =xk −η∗df(xk) 二元函数梯度下降法迭代公式 (xk+1,yk+1)=(xk,yk)-η*(df/dx,df/dx) 数据拟合(梯度下降法) 数据的线性拟合 """