ADD file via upload

master
hnu202109070127 3 years ago
parent 2eb624d2bd
commit eb9951c838

@ -0,0 +1,529 @@
# -*- 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来读取
参数与excelcsv基本类似不同的地方在于必须要指定sep
df =pd.read_table('example.txt',encoding = 'gbk',sep = ',')
2.1写入文件
excelcsvtxt写入文件的方式基本类似
以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: 默认为TrueFalse没有列索引
如需更改列名则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=0index)或索引值(axis=1columns)
axis:若axis=0index则按照指定列中数据大小排序
若axis=1columns则按照指定索引中数据大小排序默认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列矩阵应用maxminsummean等函数时
如果参数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)
xy表示的是大小为(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,则找到近似根搜根成功结束计算
如函数值大于0,但不满足精度要求则搜根失败,提前结束计算以提高效率
二分法求方程的根
获得根初始区间[a,b],保证f(a)*f(b)<0
计算中点x,及中间f(x)
|f(x)|>=err时 如果f(x)与f(a)的符号相同则解在[,]
否则解在[,]相应改变区间
重新计算中点x及f(x)
回到第3步
用牛顿迭代法求方程的近似根
画图得到根的初始值x
求出函数的导数计算f(x), df(x)
|f(x)|>=err时,重复 x=xf(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)
数据拟合(梯度下降法)
数据的线性拟合
"""
Loading…
Cancel
Save