nipeiyang_Python

第一周学习报告(笔记部分)
1.

去除字符串结尾空白:
str.strip()
去除字符串开头空白:
str.lstrip()

在这里插入图片描述
用.append()函数为列表增加元素时,会在对列表执行的操作最后再执行,charm.append()一定是在最后加上.
比如上图先写了.append(),再写了在-2位插入新元素。显然插入先执行。

在对列表进行操作时,注意是永久性改变还是临时改变.
如charm.sort()是永久性,而sorted(charm)是临时性改变
在下文中sorted可以用来按顺序遍历字典中的键或值

列表解析是一种特殊的for loop,比较简洁
如创造一个列表来求平方数如下
square=[value**2 for value in range(1,11)]
这样可以得到一个求1–10的平方数的列表

列表切片:不指定起始索引,在从头开始:不指定终止索引,则一直到最后与range函数一样,终止索引的值应比预期输出的索引大1
charm[0:3]即索引从0到2

可以用切片的方法完成对列表的复制.
复制列表时不能单纯地对列表名变量进行赋值,否则只这两个变量指向同一个列表,不能对其进行单独的分别的列表编辑操作

元组即不能修改的列表.可进行赋值,但不能编辑

字典:与列表和元组相似,但需要使用花括号.
字典名={键:值}
也可定义空字典,再一个一个输入键值对

若要在print中输出文字及变量
则变量名不应该出现在" “或’ '中,否则无法输出
而应该在单双引号外用”+"连接变量和文字

遍历字典中的键与值可用.items()和for循环
for k,v in dictionary.items():
遍历字典中的所有键,可以用.keys()函数
for key in dictionary.keys():
以上两种遍历顺序无法确定
如要
按顺序遍历
所有键,可以搭配函数sorted
for key in sorted(dictionary.keys()):
同理,若要遍历字典中的值.可用.value()函数
若要按顺序遍历,则用for value in sorted(dictionary.value())

对包含重复元素的列表可用函数set检查其中出现过的元素并提取出来创建一个集合。该集合类似于列表

12. print函数中int 与 str 的问题: ## TypeError: can only concatenate str (not “int”) to str ## 只能将str类型(不是int 类型)与str类型连接起来

Python将空字符串解读为True,可将此运用到while loop的循环退出条件中

创建多行字符串可以用如下方式:
str = str1
str += str2
print(str)
=> str1
str2

*p代表定义一个名为p的元组
**p代表定义一个名为p的字典

定义函数时,可以在函数形参中用**p定义一个字典,实现传递任意数量的关键字实参:

def function(x1,x2,...,xn,**p)
    x1
    x2
    .
    .
    .
    xn
    for k,v in p.items():
        p[k] = v
    ...

第二周学习报告(笔记部分)
17.
约定类中的函数叫方法
约定首字母大写的名称是类,小写的是类中的方法
若想要类中的一个方法每当根据该类创建实例时都自动运行它,则约定该方法的名称开头和结尾都要有"_"
类中的方法在定义时都要有形参self,并置于所有形参之前,在调用该方法时,会自动传入实参self,无需手动传递.其余的形参和还需手动传递实参.
以self为前缀定义的变量可供类中的所有方法使用.

在写入文件路径时为避免由于’‘引起错误,在地址字符串的’‘前应加’r’

文件操作函数:
逐行读取:for lines in file_object:
读取文件并转化为字符串存在列表中:strings = file_object.readlines()
(要注意空格空白换行问题)
以’w’模式打开文件时,若该文件存在,则会覆盖重新写文件
若想继续操作不覆盖,则以’a+‘模式打开文件
函数write()不会在写入文本的末尾加上’\n’

20.NumPy:
import numpy as np
1)arrange函数:np.arrange(),此函数与range()一样,范围不包含右侧的数字
2)通过实例访问的变量叫属性
file_object.dtype是属性,不是函数,不用()
3)Python中生成随机小数的函数:

import random
num1 = random.random()

取小数的位数函数:

num2 = np.round(num1,n)
#此时num2为随机生成的小数num1的n位
#也可以用"%.nf"%random.random()生成取n位的小数

4)reshape函数有返回值,有返回值的函数一般都不对操作对象做出永久改变,即只是临时改变操作对象并返回改变后的值.
扩展:extend()函数在列表结尾追加多个值并对原列表做出改变
5)一维数组,二维数组和多维数组最直观的区别就是中括号的个数
6)将一个多维数组传变成一维数组,可以用flatten函数.
arrrayx.flatten()
该函数有返回值,只是临时改变
7)常用api:
①中位数:np.median(arr)
②百分位数:np.percentile(arr,n) (n为int型)
该函数返回arr中n%位置的数
③最大值最小值:arr.max() arr.min()
返回最大值最小值索引:arr.argmax() arr.argmin()
(返回的索引是一维的,因为Python把高维数组转成一维数组再进行上述操作)
④求和:arr.sum() 返回该数组所有元素的和
⑤均值:arr.mean()
标准差:arr.std()
方差:arr.var()
⑥参数–轴:可以用axis控制,限制聚合函数的聚合方式
例:arr.sum(axis=0) 求arr各行的和 或arr.sum(0)
arr.sum(axis=1) 求arr各列的和 或arr.sum(1)
⑦Boll数组
e.g.求arr中大于0的项的和:
(arr>0).sum()
两个对于Boll数组专门的api: any 和 all
(arr>0).any():如果arr中存在大于0的数就返回True
(arr>0).all():如果arr中全部的数都大于0,则返回False
⑧排序
补充:inplace函数是对原值操作并改变原值,无返回值
NumPy中sort函数是inplace函数
arr.sort(0):对arr中各行从小到大排序
⑨构造等差数列:
dengcha = np.linspace(n1,n2,n3)
分别代表开始值,结束值,数组中元素个数.(默认包含结束值)
也可以不包含结束值:np.space(n1,n2,n3,endpoint=False)
等比数列dengbi = np.longspace(n1,n2,n3)

21.字符串空格处理等相关问题:
str = …
str.strip()去除字符串开头和结尾的空白;
str.lstrip()去除字符串左边的空白;
str.rstrip()去除字符串右边的空白;
str.replace(‘m’,‘n’)将字符串中的m替换为n 特别注意:replace函数与去除字符串空白函数均只是临时改变字符串

22.arange()函数可以生成小数而range()函数只能填入整数

第三周学习笔记
23.
在print中,若预期输出n个相同内容,可不选择用循环,而用*n,
注意:这个多次输出的"*n",只对str类型成立,对数字类型则变为普通乘法,若想对数据进行重复输出,可以用str()函数转换类型
如下面两个例子:
print(np.random.random()*10)
print((str(np.random.random())+" ")*10)

24.Pandas:
Ⅰ:创建dataframe:
pd.DataFrame()
此类型会有行标(index)和列标(columns)
有两种创建方式:①借用NumPy的数组,然后index = ?
columns = ?
②向DataFrame()的参数中传入列表,一列一列初始化,此时,列表的键名称就是列标,行标可以再用index = ?
第一种:p3 = pd.DataFrame(np.random.randn(3,4)*10,index = index1,columns = columns1)
print(p3)
第二种:p4 = pd.DataFrame({‘C1’:range(1,4),
‘C2’:range(5,8),
‘C3’:range(11,14),
‘C4’:range(99,102)},index = index1)
print(p4)
Ⅱ:选择数据
df = pd.DataFrame(np.arange(12).reshape(3,4),index = np.arange(1,4),columns = [‘a’,‘b’,‘c’,‘d’])
print(df)
print(df[‘a’])
用中括号方法时只能填入列标并输出该列,不能操作行标
print(df.loc[1])
用loc标签时不能单独使用列标而可以单独使用行标
print(df.loc[1:3,[‘a’,‘b’,‘c’]])
loc标签可以使用" : "切片遍历行标,而不能遍历列标,只能一个一个单独选择

第三周学习笔记

25.Pandas:
Ⅰ使用pd.read_csv(‘file_name.csv’)导入数据时,导入的文件应在路径中
查看路径的方法:
import os
print(os.getcwd())
也可以放在任何路径中,但导入时需要在pd.read_csv()的括号中写入 r ‘文件的路径’

26.Matplotlib:
①x = np.linspace()
y = …
plt.plot(x,y,color = ‘pink’,linewidth = 10.0,linestyle = ‘–’)
plt.show() //展示图像
②设置x,y坐标轴的范围
plt.xlim((-1,1))
plt.ylim((0,1))
③设置坐标轴的ticks(设置坐标轴上的卡点)
plt.xticks((-1,1)) //x轴上两个卡点-1和1
plt.yticks([-1,1,2,3,4,5],[‘y1’,‘y2’,‘y3’,‘y4’,‘y5’,‘y6’]) //y轴上6个卡点,且从上到下卡点名称依次为y1–y6
改变ticks字体可以用r’ $ content $ ',在$ $中空格用转义字符\ 表示,特殊字符也可以用转义字符,如α:\alpha
④改变坐标轴位置:
框架有四个,top,left,right,bottom
ax = plt.gca() //gca = get current axis
引用时用:ax.spines[‘top’]
让它消失:ax.spines[‘top’].set_colors(‘none’)
设置充当坐标轴的脊梁:
让左和下脊梁分别充当y,x轴
ax.xaxis.set_ticks_position(‘bottom’)
ax.yaxis.set_ticks_position(‘left’)
⑤改变x,y轴位置:
//以下两个用的都是’data’参数,也可以用’axes’参数,后面加的数据代表将其绑定在另一个轴的百分之多少
ax.spines[‘left’].set_position((‘data’,0))
ax.spines[‘bottom’].set_position((‘data’,0))
//把x轴绑定在y轴的0位置.
//把y轴绑定在x轴的0位置上
⑥scatter散点图
plt.scatter(x,y,s = ,c = ,alpha = )
⑦bar柱状图
plt.bar(x,y)
设置xlim,ylim,xticks和yticks与scatter散点图的操作相同

27.NuMpy补充笔记:
①建立一个数组(矩阵)可以用np.array()
若要建立二维数组那()就因该有两个系统的[]
三维数组则应有三个系统的[]
②矩阵数乘可以用*号进行运算,矩阵与矩阵之间的乘法用np.dot(A,B)实现
或A.dot(B)
③np.power对数组进行乘方运算
np.power(X1,X2)
若要进行数组与数组的乘方运算,X1与X2的列数必须相同,X2中对应的元素为指数
X2还可以为一个数字
④np.zeros(shape, dtype=None, order=‘C’)
Return a new array of given shape and type, filled with zeros

第四周学习笔记
(代码实现过程中复习到的知识)
28.Dataframe.insert(loc, column, value, allow_duplicates=False): 在Dataframe的指定列中插入数据。
参数介绍:
①loc: int型,表示第几列;若在第一列插入数据,则 loc=0
②column: 给插入的列取名,如 column=‘新的一列’
③value:数字,array,series等都可(可自己尝试)
④allow_duplicates: 是否允许列名重复,选择Ture表示允许新的列名与已存在的列名重复。

np.linalg.inv(A)
该函数返回A的逆矩阵

线性回归实现代码

VERSION 1.0
(对训练集中的y也进行了归一化处理.且归一化处理方式是(原值-均值)/最大值)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

def hypothesis(X,theta):
y = X.dot(theta.T)
return y

def computeCost(X,y,theta):
inner = np.power((X.dot(theta.T)-y),2)
return np.sum(inner)/(2*len(X))

def gradientDescent(X,y,theta,alpha,epoch):
temp = np.array(np.zeros(theta.shape))
cost = np.zeros(epoch)
m = int(X.shape[0])
for i in range(1,(epoch+1)):
temp = theta-(alpha/m)*(X.dot(theta.T)-y).T.dot(X)
theta = temp
cost = computeCost(X, y, theta)
return theta,cost

data = pd.read_csv(r’C:\Users\Administrator\Desktop\bike_day.csv’,keep_default_na=False)
alpha = 0.1717
epoch = 10000
data.insert(2,‘ones’,1)
cols = data.shape[1]
data.iloc[:,5]=((data.iloc[:,5]-data.iloc[:,5].mean())/data.iloc[:,5].max())
data.iloc[:,7]=((data.iloc[:,7]-data.iloc[:,7].mean())/data.iloc[:,7].max())
for i in range(14,17):
data.iloc[:,i]=((data.iloc[:,i]-data.iloc[:,i].mean())/data.iloc[:,i].max())
X = data.iloc[:,2:cols-1]
y = data.iloc[:,cols-1:cols]
X = np.array(X.values)
y = np.array(y.values)
theta = np.array([[0,0,0,0,0,0,0,0,0,0,0,0,0,0]])
final_theta,cost = gradientDescent(X,y,theta,alpha,epoch)
print(“the final theta is:”)
print(final_theta)
print(cost)

#已经求得最优的theta,现输入需要预测的变量
XX = np.zeros((1,14))
for j in range(0,14):
XX[0][j] = input(“input the data you want to do the hypothesis:”)
yy=hypothesis(XX,final_theta)
print(yy)

VERSION 2.0
(没有对y进行归一化处理,归一化时分母用了max-min)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

def hypothesis(X,theta):
y = X.dot(theta.T)
return y

def computeCost(X,y,theta):
inner = np.power((X.dot(theta.T)-y),2)
return np.sum(inner)/(2*len(X))

def gradientDescent(X,y,theta,alpha,epoch):
temp = np.array(np.zeros(theta.shape))
cost = np.zeros(epoch)
m = int(X.shape[0])
for i in range(1,(epoch+1)):
temp = theta-(alpha/m)*(X.dot(theta.T)-y).T.dot(X)
theta = temp
cost = computeCost(X, y, theta)
return theta,cost

data = pd.read_csv(r’C:\Users\Administrator\Desktop\bike_day.csv’,keep_default_na=False)
alpha = 0.174
epoch = 10000
data.insert(2,‘ones’,1)
cols = data.shape[1]
data.iloc[:,5]=((data.iloc[:,5]-data.iloc[:,5].mean())/(data.iloc[:,5].max()-data.iloc[:,5].min()))
data.iloc[:,7]=((data.iloc[:,7]-data.iloc[:,7].mean())/(data.iloc[:,7].max()-data.iloc[:,7].min()))
for i in range(14,16):
data.iloc[:,i]=((data.iloc[:,i]-data.iloc[:,i].mean())/(data.iloc[:,i].max()-data.iloc[:,i].min()))
X = data.iloc[:,2:cols-1]
y = data.iloc[:,cols-1:cols]
X = np.array(X.values)
y = np.array(y.values)
theta = np.array([[0,0,0,0,0,0,0,0,0,0,0,0,0,0]])
final_theta,cost = gradientDescent(X,y,theta,alpha,epoch)
print(“the final theta is:”)
print(final_theta)
print(cost)

#已经求得最优的theta,现输入需要预测的变量
XX = np.zeros((1,14))
for j in range(0,14):
XX[0][j] = input(“input the data you want to do the hypothesis:”)
yy=hypothesis(XX,final_theta)
print(yy)

VERSION 3.0
(归一化用分子用原值-min())
(当学习度为0.159时,cost=0.081)
def hypothesis(X,theta):
y = X.dot(theta.T)
return y

def computeCost(X,y,theta):
inner = np.power((X.dot(theta.T)-y),2)
return np.sum(inner)/(2*len(X))

def gradientDescent(X,y,theta,alpha,epoch):
temp = np.array(np.zeros(theta.shape))
cost = np.zeros(epoch)
m = int(X.shape[0])
for i in range(1,(epoch+1)):
temp = theta-(alpha/m)*(X.dot(theta.T)-y).T.dot(X)
theta = temp
cost = computeCost(X, y, theta)
return theta,cost

data = pd.read_csv(r’C:\Users\Administrator\Desktop\bike_day.csv’,keep_default_na=False)
alpha = 0.159
epoch = 10000
data.insert(2,‘ones’,1)
cols = data.shape[1]
data.iloc[:,5]=((data.iloc[:,5]-data.iloc[:,5].min())/(data.iloc[:,5].max()-data.iloc[:,5].min()))
data.iloc[:,7]=((data.iloc[:,7]-data.iloc[:,7].min())/(data.iloc[:,7].max()-data.iloc[:,7].min()))
for i in range(14,16):
data.iloc[:,i]=((data.iloc[:,i]-data.iloc[:,i].min())/(data.iloc[:,i].max()-data.iloc[:,i].min()))
X = data.iloc[:,2:cols-1]
y = data.iloc[:,cols-1:cols]
X = np.array(X.values)
y = np.array(y.values)
theta = np.array([[0,0,0,0,0,0,0,0,0,0,0,0,0,0]])
final_theta,cost = gradientDescent(X,y,theta,alpha,epoch)
print(“the final theta is:”)
print(final_theta)
print(cost)

#已经求得最优的theta,现输入需要预测的变量
XX = np.zeros((1,14))
for j in range(0,14):
XX[0][j] = input(“input the data you want to do the hypothesis:”)
yy=hypothesis(XX,final_theta)
print(yy)

©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页