Docker基础实战教程四:数据卷操作
第1关:创建一个数据卷
#!/bin/bash #创建一个名为vo1的数据卷,并将该数据卷挂载到container1容器的/dir1目录。 #拉取ubutun 最新镜像,实际生产中,docker pull 这一步可以省略,docker run的时候会自己去拉取。 docker pull ubuntu #********** Begin *********# docker run -v vo1:/dir1 --name container1 ubuntu #********** End **********#
第2关:挂载和共享数据卷
#1.创建一个名为container1的容器,并将本地主机的/dir1目录挂载到容器中的/codir1中。 #拉取ubutun 最新镜像,实际生产中,docker pull 这一步可以省略,docker run的时候会自己去拉取。 docker pull ubuntu #********** Begin *********# docker run -v /dir1:/codir1 --name container1 ubuntu #********** End **********# #2.创建一个名为container2的容器,与container1共享数据卷。 #********** Begin *********# docker run --volumes-from container1 --name container2 ubuntu #********** End **********#
第3关:查看数据卷的信息
#创建一个容器,并创建一个随机名字的数据卷挂载到容器的/data目录 #拉取ubutun 最新镜像,实际生产中,docker pull 这一步可以省略,docker run的时候会自己去拉取。 docker pull ubuntu &> /dev/null docker rm container1 -f &>/dev/null docker run -v /data --name container1 ubuntu #输出容器container1创建的数据卷的名字 #********** Begin *********# docker inspect --type container --format='{{range .Mounts}}{{.Name}}{{end}}' container1 #********** End **********#
第4关:删除数据卷
#!/bin/bash #创建一个名为container1的容器,创建一个数据卷挂载到容器的/data目录 #拉取ubutun 最新镜像,实际生产中,docker pull 这一步可以省略,docker run的时候会自己去拉取。 docker pull ubuntu docker run -v vo4:/data --name container1 ubuntu #删除container1对应的数据卷 #********** Begin *********# docker rm -v container1 docker volume rm vo4 #********** End **********#
第5关:备份、恢复数据卷
#!/bin/bash #拉取ubutun 最新镜像,实际生产中,docker pull 这一步可以省略,docker run的时候会自己去拉取。 docker pull ubuntu # 创建一个vo1的数据卷,并在数据卷中添加1.txt文件 docker run --name vocontainer1 -v vo1:/dir1 ubuntu touch /dir1/1.txt #1.将vo1数据卷的数据备份到宿主机的/newback中,将容器的/backup路径挂载上去,并将容器内/dir1文件夹打包至/backup/backup.tar #********** Begin *********# docker run --volumes-from vocontainer1 -v /newback:/backup ubuntu tar -cvf /backup/backup.tar /dir1 #********** End **********# #删除所有的容器以及它使用的数据卷 docker rm -vf $(docker ps -aq) docker volume rm vo1 #在次创建一个vo1的数据卷 docker run -itd --name vocontainer2 -v vo1:/dir1 ubuntu /bin/bash #2.将保存在宿主机中备份文件的数据恢复到vocontainer2的/中 #********** Begin *********# docker run --volumes-from vocontainer2 -v /newback:/backup ubuntu tar -xvf /backup/backup.tar -C / #********** End **********#
MPI编程
第1关:MPI
安装及配置
第2关:使用 MPI
运行"Hello World"
第3关:使用 MPI
运行"Hello World"
第4关:乒乓程序
第5关:环程序
第6关:求π值
Numpy
科学计算
第1关:数组创建
# 引入numpy库 import numpy as np # 定义cnmda函数 def cnmda(m,n): ''' 创建numpy数组 参数: m:第一维的长度 n: 第二维的长度 返回值: ret: 一个numpy数组 ''' ret = 0 # 请在此添加创建多维数组的代码并赋值给ret #********** Begin *********# x = [y for y in range(n)] ret =np.array([x]*m) #********** End **********# return ret
第2关:切片索引
import numpy as np def get_roi(data, x, y, w, h): ''' 提取data中左上角顶点坐标为(x, y)宽为w高为h的ROI :param data: 二维数组,类型为ndarray :param x: ROI左上角顶点的行索引,类型为int :param y: ROI左上角顶点的列索引,类型为int :param w: ROI的宽,类型为int :param h: ROI的高,类型为int :return: ROI,类型为ndarray ''' #********* Begin *********# return data[x:x+h+1, y:y+w+1] #********* End *********#
第3关:基本运算
# 引入numpy库 import numpy as np # 定义opeadd函数 def opeadd(m,b,n): ''' 参数: m:是一个数组 b:是一个列表 n:是列表中的索引 你需要做的是 m+b[n] 返回值: ret: 一个numpy数组 ''' ret = 0 #********** Begin *********# ret = m+b[n] #********** End **********# return ret # 定义opemul函数 def opemul(m,b,n): ''' 参数: m:是一个数组 b:是一个列表 n:是列表中的索引 你需要做的是 m*b[n] 返回值: ret: 一个numpy数组 ''' ret = 0 #********** Begin *********# ret=m*b[n] #********** End **********# return ret
第4关:ufunc
import numpy as np ndarray = np.ndarray def task1(A: ndarray) -> ndarray: ''' :param A n*m维的numpy数组 任务要求:计算矩阵A的平方根并与标量2相加; ''' ########## Begin ########## B = np.sqrt(A) + 2 ########## End ########## return B def task2(A: ndarray) -> ndarray: ''' :param A n*m维的numpy数组 任务要求:将矩阵A开根号后的小数部分与原矩阵A相加; ''' ########## Begin ########## B = A + np.modf(np.sqrt(A))[0] ########## End ########## return B def task3(A: ndarray) -> ndarray: ''' :param A n*m维的numpy数组 任务要求:使用通用函数numpy.dot()计算矩阵A与矩阵A转置的矢量积; 提示:使用.T属性获得转置矩阵,例如A的转置矩阵为A.T ''' ########## Begin ########## B = np.dot(A, A.T) ########## End ########## return B
第5关:文件读写
import numpy as np ndarray = np.ndarray def task(): ''' 任务要求:从指定路径的二进制文件中("step5/FileHandling/files/A.npy")读取NumPy矢量数组A,从从指定路径的txt文件中读取矢量数组B("step5/FileHandling/files/B.txt"),然后使用通用函数numpy.add()对数组A和B进行求和,将结果保存到指定的二进制文件中("step5/FileHandling/files/out.npy") 提示1:使用np.load('path')加载二进制文件'step5/FileHandling/files/A.npy' 提示2:使用np.loadtxt('path', delimiter=',')加载文本文件'step5/FileHandling/files/B.txt' 提示3:使用使用np.save('path', C)将结果储存到二进制文件'step5/FileHandling/files/out.npy'中 提示3:A.npy和B.txt中矩阵维度一致 ''' ########## Begin ########## A = np.load('step5/FileHandling/files/A.npy') B = np.loadtxt('step5/FileHandling/files/B.txt', delimiter=',') C = A + B np.save("step5/FileHandling/files/out.npy", C) ########## End ##########
第6关:数组切片与索引
# 引入numpy库 import numpy as np # 定义cnmda函数 def ce(a,m,n): ''' 参数: a:是一个Numpy数组 m:是第m维数组的索引 n:第m维数组的前n个元素的索引 返回值: ret: 一个numpy数组 ''' ret = 0 # 请在此添加切片的代码,实现找出多维数组a中第m个数组的前n个元素 并赋值给ret #********** Begin *********# ret = a[m][:n] #********** End **********# return ret
第7关:数组堆叠
# 引入numpy库 import numpy as np # 定义varray函数 def varray(m,n): ''' 参数: m:是第一个数组 n:是第二个数组 返回值: ret: 一个numpy数组 ''' ret = 0 # 请在此添加代码实现数组的垂直叠加并赋值给ret #********** Begin *********# ret = np.vstack((m,n)) #********** End **********# return ret # 定义darray函数 def darray(m,n): ''' 参数: m:是第一个数组 n:是第二个数组 返回值: ret: 一个numpy数组 ''' ret = 0 # 请在此添加代码实现数组的深度叠加并赋值给ret #********** Begin *********# ret = np.dstack((m,n)) #********** End **********# return ret # 定义harray函数 def harray(m,n): ''' 参数: m:是第一个数组 n:是第二个数组 返回值: ret: 一个numpy数组 ''' ret = 0 # 请在此添加代码实现数组的水平叠加并赋值给ret #********** Begin *********# ret = np.hstack((m,n)) #********** End **********# return ret
数据结构课程设计Python版–植物百科数据的管理与分析
科比投篮选择——数据采集
第1关:数据采集
import requests import pandas as pd def student(): # ********* Begin *********# req=requests.session() req.headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"} data=pd.DataFrame() for pg in range(1,5): a=req.get("http://121.40.96.250:10000/articleList?page="+str(pg)+"&articleTitle=&tagId=") for i in a.json()["data"][:2]: season=i["title"].split(":")[1] pg1=1 while True: b=req.get("http://121.40.96.250:10000/getSeasonData?page="+str(pg1)+"&limit=90&season="+season) if b.json()["data"]==[]: break for b1 in b.json()["data"]: d=pd.DataFrame([b1["action_type"],b1["combined_shot_type"],b1["game_event_id"],b1["game_id"],b1["lat"],b1["loc_x"],b1["loc_y"],b1["lon"],b1["minutes_remaining"],b1["period"],b1["playoffs"],b1["season"] ,b1["seconds_remaining"],b1["shot_distance"],b1["shot_made_flag"],b1["shot_type"],b1["shot_zone_area"],b1["shot_zone_basic"],b1["shot_zone_range"],b1["team_id"],b1["team_name"] ,b1["game_date"],b1["matchup"],b1["opponent"],b1["shot_id"].replace("\r","")]).T data=pd.concat([data,d]) pg1+=1 print(data.head()) data.to_csv("data.csv",index=None) # ********* End *********#
科比投篮预测——可视化与探索性数据分析(一)
import matplotlib.pyplot as plt import pandas as pd pd.set_option('display.max_columns', 1000) pd.set_option('display.width', 1000) pd.set_option('display.max_colwidth', 1000) def student(): # ********* Begin *********# nona=pd.read_csv("Task1/data.csv").dropna() alpha = 0.02 plt.figure(figsize=(10,10)) # loc_x and loc_y plt.subplot(121) plt.scatter(nona.loc_x, nona.loc_y, color='blue', alpha=alpha) plt.title('loc_x and loc_y') # lat and lon plt.subplot(122) plt.scatter(nona.lon, nona.lat, color='green', alpha=alpha) plt.title('lat and lon') plt.savefig("Task1/img/T1.png") plt.show() # ********* End *********#
第2关:射击距离
import matplotlib.pyplot as plt import pandas as pd import numpy as np pd.set_option('display.max_columns', 1000) pd.set_option('display.width', 1000) pd.set_option('display.max_colwidth', 1000) def student(): # ********* Begin *********# raw = pd.read_csv("Task2/data.csv") raw['dist'] = np.sqrt(raw['loc_x']**2 + raw['loc_y']**2) plt.figure(figsize=(5,5)) plt.scatter(raw.dist, raw.shot_distance) plt.title('dist and shot_distance') plt.savefig("Task2/img/T1.png") plt.show() # ********* End *********#
第3关:射击区范围
import matplotlib matplotlib.use("Agg") import matplotlib.pyplot as plt import pandas as pd import numpy as np import matplotlib.cm as cm pd.set_option('display.max_columns', 1000) pd.set_option('display.width', 1000) pd.set_option('display.max_colwidth', 1000) def student(): # ********* Begin *********# data=pd.read_csv("./data.csv") cmap = plt.cm.rainbow norm = matplotlib.colors.Normalize() plt.figure(figsize=(10,10)) plt.subplot(2,1,1) data1=data x=data1["shot_made_flag"].groupby(data1["shot_zone_range"]).mean() x=pd.DataFrame([x.index,x.values]).T data1=pd.merge(data1,x,left_on="shot_zone_range",right_on=0) plt.scatter(x=data1["lon"],y=data1["lat"],c=cmap(norm(list(data1[1].values)))) plt.ylim(33.7,34.0883) plt.subplot(2,1,2) d=data["shot_zone_range"].groupby(data["shot_zone_range"]).count() d=pd.DataFrame([d.index,d.values]).T d.sort_values(by=[1],ascending=False,inplace=True) c=[] for i in d[0]: c.append(data1[data1["shot_zone_range"]==i][1].head(1).values[0]) plt.bar(d[0],d[1],color=cmap(norm(c))) plt.savefig("Task4/img/T1.png") plt.show() # ********* End *********#
第4关:射击区
import matplotlib matplotlib.use("Agg") import matplotlib.pyplot as plt import pandas as pd import numpy as np import matplotlib.cm as cm pd.set_option('display.max_columns', 1000) pd.set_option('display.width', 1000) pd.set_option('display.max_colwidth', 1000) def student(): c={"Center(C)":"goldenrod","Right Side Center(RC)":"cornflowerblue","Right Side(R)":"fuchsia","Left Side Center(LC)":"limegreen","Left Side(L)":"turquoise","Back Court(BC)":"red"} # ********* Begin *********# plt.figure(figsize=(10,10)) data=pd.read_csv("./data.csv") plt.subplot(2,1,1) data1=data x=data1["shot_made_flag"].groupby(data1["shot_zone_area"]).mean() x=pd.DataFrame([x.index,x.values]).T data1=pd.merge(data1,x,left_on="shot_zone_area",right_on=0) data2=pd.DataFrame([c.keys(),c.values()]).T data1=pd.merge(data1,data2,left_on="shot_zone_area",right_on=0) plt.scatter(x=data1["lon"],y=data1["lat"],color=data1["1_y"]) plt.ylim(33.7,34.0883) plt.subplot(2,1,2) d=data["shot_zone_area"].groupby(data["shot_zone_area"]).count() d=pd.DataFrame([d.index,d.values]).T d.sort_values(by=[1],ascending=False,inplace=True) plt.bar(d[0],d[1],color=c.values()) plt.xticks(rotation=45) plt.savefig("Task5/img/T1.png") plt.show() # ********* End *********#
第5关:具体投篮区域
import matplotlib matplotlib.use("Agg") import matplotlib.pyplot as plt import pandas as pd import numpy as np import matplotlib.cm as cm pd.set_option('display.max_columns', 1000) pd.set_option('display.width', 1000) pd.set_option('display.max_colwidth', 1000) def student(): c={"Mid-Range":"cornflowerblue","Restricted Area":"fuchsia","Above the Break 3":"tomato","In The Paint (Non-RA)":"limegreen","Right Corner 3":"green","Back Court(BC)":"fuchsia","Left Corner 3":"lime","Backcourt":"tan"} # ********* Begin *********# plt.figure(figsize=(10,10)) data=pd.read_csv("./data.csv") plt.subplot(2,1,1) data1=data x=data1["shot_made_flag"].groupby(data1["shot_zone_basic"]).mean() x=pd.DataFrame([x.index,x.values]).T data1=pd.merge(data1,x,left_on="shot_zone_basic",right_on=0) data2=pd.DataFrame([c.keys(),c.values()]).T data1=pd.merge(data1,data2,left_on="shot_zone_basic",right_on=0) plt.scatter(x=data1["lon"],y=data1["lat"],color=data1["1_y"]) plt.ylim(33.7,34.0883) plt.subplot(2,1,2) d=data["shot_zone_area"].groupby(data["shot_zone_basic"]).count() d=pd.DataFrame([d.index,d.values]).T d.sort_values(by=[1],ascending=False,inplace=True) plt.bar(d[0],d[1],color=c.values()) plt.xticks(rotation=45) plt.savefig("Task6/img/T1.png") plt.show() # ********* End *********#
第6关:投篮准确度
import matplotlib matplotlib.use("Agg") import matplotlib.pyplot as plt import pandas as pd import numpy as np import matplotlib.cm as cm pd.set_option('display.max_columns', 1000) pd.set_option('display.width', 1000) pd.set_option('display.max_colwidth', 1000) def student(): # ********* Begin *********# data=pd.read_csv("./data.csv").dropna() plt.subplot(212) data1=data[["lat","lon","shot_zone_range","shot_made_flag"]] x=data1["shot_made_flag"].groupby(data1["shot_zone_range"]).mean() x=pd.DataFrame([x.index,x.values]).T data1=pd.merge(data1,x,left_on="shot_zone_range",right_on=0) d=plt.scatter(x=data1["lon"],y=data1["lat"],c=data1[1]) plt.colorbar(d,) plt.ylim((33.7, 34.0883)) plt.subplot(222) data2=data[["lat","lon","shot_zone_area","shot_made_flag"]] da=data2["shot_made_flag"].groupby(data2["shot_zone_area"]).mean() d=pd.DataFrame([da.index,da.values]).T data2=pd.merge(data2,d,left_on="shot_zone_area",right_on=0) plt.scatter(x=data2["lon"],y=data2["lat"],c=data2[1]) plt.ylim((33.7, 34.0883)) plt.subplot(221) data3=data[["lat","lon","shot_zone_basic","shot_made_flag"]] da=data3["shot_made_flag"].groupby(data3["shot_zone_basic"]).mean() da=pd.DataFrame([da.index,da.values]).T data3=pd.merge(data3,da,left_on="shot_zone_basic",right_on=0) plt.scatter(x=data3["lon"],y=data3["lat"],c=data3[1]) plt.ylim((33.7, 34.0883)) plt.savefig("Task7/img/T1.png") plt.show() # ********* End *********#
科比投篮预测——数据处理与分析
第1关:数据清洗
import numpy as np import pandas as pd import warnings warnings.filterwarnings("ignore") pd.set_option('display.max_columns', 1000) pd.set_option('display.width', 1000) pd.set_option('display.max_colwidth', 1000) def student(): result="" # ********* Begin *********# raw = pd.read_csv("task1/data.csv") raw['dist'] = np.sqrt(raw['loc_x']**2 + raw['loc_y']**2) loc_x_zero = raw['loc_x'] == 0 raw['angle'] = 0 raw['angle'][~loc_x_zero] = np.arctan(raw['loc_y'][~loc_x_zero] / raw['loc_x'][~loc_x_zero]) raw['angle'][loc_x_zero] = np.pi / 2 raw['remaining_time'] = raw['minutes_remaining'] * 60 + raw['seconds_remaining'] result=raw[["dist","angle","remaining_time"]].head() # ********* End *********# return result
第2关:数据预处理
import numpy as np import pandas as pd import warnings warnings.filterwarnings("ignore") raw = pd.read_csv("task2/data.csv",index_col=0) def student(raw): # ********** Begin ********** # drops = ['shot_id', 'team_id', 'team_name', 'shot_zone_area', 'shot_zone_range', 'shot_zone_basic','matchup','lon','lat','seconds_remaining', 'minutes_remaining', 'shot_distance', 'loc_x', 'loc_y', 'game_event_id', 'game_id', 'game_date'] for drop in drops: raw = raw.drop(drop, 1) categorical_vars = ['action_type', 'combined_shot_type', 'shot_type','opponent', 'period', 'season'] for var in categorical_vars: raw = pd.concat([raw, pd.get_dummies(raw[var], prefix=var)], 1) raw = raw.drop(var, 1) return raw.columns # ********** End ********** # if __name__ == "__main__": stu = student(raw) print(stu)
第3关:构造模型并调参
import numpy as np import pandas as pd import scipy as sp import warnings warnings.filterwarnings("ignore") with warnings.catch_warnings(): warnings.filterwarnings("ignore",category=DeprecationWarning) from numpy.core.umath_tests import inner1d from sklearn.ensemble import RandomForestRegressor from sklearn.metrics import confusion_matrix from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import KFold pd.set_option('display.max_columns', 1000) pd.set_option('display.width', 1000) pd.set_option('display.max_colwidth', 1000) def logloss(act, pred): epsilon = 1e-15 pred = sp.maximum(epsilon, pred) pred = sp.minimum(1-epsilon, pred) ll = sum(act*sp.log(pred) + sp.subtract(1,act)*sp.log(sp.subtract(1,pred))) ll = ll * -1.0/len(act) return ll def student(): # ********* Begin *********# df=pd.read_csv("task3/data.csv") train = df.drop('shot_made_flag', 1) train_y = df['shot_made_flag'] min_score = 100000 best_n = 0 scores_n = [] range_n = [1,10,100] for n in range_n: rfc_score = 0. rfc = RandomForestClassifier(n_estimators=n) kf=KFold(n_splits=3,shuffle=True) for train_k, test_k in kf.split(train,train_y): rfc.fit(train.iloc[train_k], train_y.iloc[train_k]) pred = rfc.predict(train.iloc[test_k]) rfc_score += logloss(train_y.iloc[test_k], pred) / 3 scores_n.append(rfc_score) if rfc_score < min_score: min_score = rfc_score best_n = n print("n_estimators:"+str(best_n)) min_score = 100000 best_m = 0 scores_m = [] range_m = [1,10,100] for m in range_m: rfc_score = 0. rfc = RandomForestClassifier(max_depth=m, n_estimators=best_n) kf=KFold(shuffle=True,n_splits=3) for train_k, test_k in kf.split(train,train_y): rfc.fit(train.iloc[train_k], train_y.iloc[train_k]) pred = rfc.predict(train.iloc[test_k]) rfc_score += logloss(train_y.iloc[test_k], pred) / 3 scores_m.append(rfc_score) if rfc_score < min_score: min_score = rfc_score best_m = m print("max_depth:"+str(best_m)) # ********* End *********#
第4关:参数验证
import matplotlib.pyplot as plt import warnings warnings.filterwarnings("ignore") def visual(range_n,scores_n,range_m,scores_m): # ********* Begin *********# plt.figure(figsize=(10,5)) plt.subplot(121) plt.plot(range_n, scores_n) plt.ylabel('score') plt.xlabel('number of trees') plt.subplot(122) plt.plot(range_m, scores_m) plt.ylabel('score') plt.xlabel('max depth') plt.savefig("task4/result/pict1.jpg") # ********* End *********#
第5关:预测结果
import numpy as np import pandas as pd import scipy as sp import warnings warnings.filterwarnings("ignore") # 忽略警告 with warnings.catch_warnings(): warnings.filterwarnings("ignore",category=DeprecationWarning) from numpy.core.umath_tests import inner1d from sklearn.ensemble import RandomForestClassifier def student(n_estimators,max_depth): # ********* Begin *********# raw = pd.read_csv("task5/data.csv",index_col=0) df = raw[pd.notnull(raw['shot_made_flag'])] submission = raw[pd.isnull(raw['shot_made_flag'])] submission = submission.drop('shot_made_flag', 1) train = df.drop('shot_made_flag', 1) train_y = df['shot_made_flag'] model = RandomForestClassifier(n_estimators=n_estimators, max_depth=max_depth) model.fit(train, train_y) pred = model.predict_proba(submission) # ********* End *********# return pred
Pandas基本操作
第1关:数据结构
import pandas as pd ########## Begin ########## data = {'A':{'a':90,'b':89,'c':78}, 'B':{'a':82,'b':95,'c':92}, 'C':{'a':78,'b':67}, 'D':{'a':78,'b':67}} df1 = pd.DataFrame(data) ########## End ########## print(df1)
第2关:切片索引
import pandas as pd from sklearn import datasets def demo(): data = datasets.load_linnerud().data #********** Begin **********# index = pd.MultiIndex.from_product([["A","B","C","D"],["1",'2','3','4','5']]) column = pd.MultiIndex.from_product([["stage"],["a","b","c"]]) df = pd.DataFrame(data,index=index,columns=column) df1 = df.T.stack() idx = pd.IndexSlice print(df1.loc[idx["stage",:,"2"],:]) #*********** End ***********#
第3关:增删改查
import pandas as pd # pandas版本原因显示,设置列名仅显示4列 pd.set_option('display.max_columns', 4) DataFrame = pd.DataFrame def task1(Books: DataFrame) -> DataFrame: ''' 参数:图书列表 任务:添加新图书【书名: 算法图解, 作者: [美] Aditya Bhargava, 出版社: 人民邮电出版社, 出版年: 2017-3, 页数: 196, 定价: 49.00元, 豆瓣评分: 8.4】; ''' ########## Begin ########## new_book = {'书名': '算法图解', '作者': '[美] Aditya Bhargava', '出版社': '人民邮电出版社', '出版年': '2017-3', '页数': 196, '定价': '49.00元', '豆瓣评分': 8.4} Books = Books.append(new_book, ignore_index=True) ########## End ########## return Books def task2(Books: DataFrame) -> DataFrame: ''' 参数:图书列表 任务:删除页数列的数据; ''' ########## Begin ########## Books = Books.drop('页数', axis=1) ########## End ########## return Books def task3(Books: DataFrame) -> DataFrame: ''' 参数:图书列表 任务:修改《算法导论(原书第3版)》的价格为666元; ''' ########## Begin ########## Books.loc[5, '定价'] = '666元' ########## End ########## return Books def task4(Books: DataFrame) -> DataFrame: ''' 参数:图书列表 任务:查询所有图书的豆瓣评分; ''' ########## Begin ########## Out = Books.loc[:, ['书名', '豆瓣评分']] ########## End ########## return Out
第4关:文件读写
import pandas as pd # pandas版本原因显示,设置列名仅显示4列 pd.set_option('display.max_columns', 4) def task(): ''' 任务要求:实现使用Pandas读取gbk编码的文件("FileHandling/Books.csv"),然后将数据写入到utf-8编码的文件中("FileHandling/Out.csv")并使用'*'号分隔数据。 提示1:使用参数encoding指定编码格式('gbk' 和 'utf-8') 提示2:使用参数sep指定数据分隔方式 ''' ########## Begin ########## df = pd.read_csv('FileHandling/Books.csv', encoding='gbk') df.to_csv('FileHandling/Out.csv', encoding='utf-8', sep='*') ########## End ##########
第5关:算术运算
# -*- coding: utf-8 -*- from pandas import Series,DataFrame import numpy as np import pandas as pd def add_way(): df1 = DataFrame(np.arange(12.).reshape((3, 4)), columns=list('abcd')) df2 = DataFrame(np.arange(20.).reshape((4, 5)), columns=list('abcde')) ###请在此添加代码 #********** Begin *********# df3=df1.add(df2,fill_value=4) #********** End **********# return df3
第6关:描述性统计
import pandas as pd def task1(): ''' 任务:使用describe()方法对给定数据进行统计描述汇总; ''' # 创建学生成绩数据 score = [ ["张三", 92, 95, 100, 96], ["李四", 85, 80, 80, 90], ["王二", 95, 90, 89, 95], ["小刚", 88, 92, 96, 93] ] score = pd.DataFrame(score, columns=['姓名', '语文', '数学', '计算机', '英语']) ########## Begin ########## result = score.describe(include=['number']) ########## Begin ########## return result def task2(): ''' 任务:使用统计描述描述函数求各科目成绩的中位数; ''' # 创建学生成绩数据 score = [ ["张三", 92, 95, 100, 96], ["李四", 85, 80, 80, 90], ["王二", 95, 90, 89, 95], ["小刚", 88, 92, 96, 93] ] score = pd.DataFrame(score, columns=['姓名', '语文', '数学', '计算机', '英语']) ########## Begin ########## result = score.median(axis=0) ########## Begin ########## return result
第7关:时间序列处理
import pandas as pd from datetime import datetime def task1(): ''' 任务:创建以 2021 年1 月1 日为开始的 12 条时间索引,相邻索引间隔时间长度为一个月。 ''' ########## Begin ########## result = pd.date_range('2021-1-1', periods=12, freq='M') ########## End ########## return result def task2(): ''' 任务:在 2021 年 1 月 1 日到 2021 年 3 月 1 日间,每隔一周创建一条索引。 ''' ########## Begin ########## start = datetime(2021, 1, 1) end = datetime(2021, 3, 1) result = pd.date_range(start, end, freq='W') ########## End ########## return result def task3(): ''' 任务:给定以时间为索引的 Series 对象,查找索引时间在 2021 年 1 月内的所有记录。 ''' start = datetime(2021, 1, 1) end = datetime(2021, 3, 1) rng = pd.date_range(start, end, freq='W') ts = pd.Series(range(len(rng)), index=rng) ########## Begin ########## result = ts["2021-1"] ########## End ########## return result
第8关:Series
# -*- coding: utf-8 -*- from pandas import Series,DataFrame import pandas as pd def create_series(): ###请在此添加代码 #********** Begin *********# series_a=Series([1,2,5,7],index=['nu','li','xue','xi']) dict_a={"ting":1,"shuo":2,"du":32,"xie":44} series_b=Series(dict_a) #********** End **********# return series_a,dict_a,series_b create_series()
第9关:DataFrame
第10关:读取数据
第11关:排序
第12关:去重
正则表达式入门
第1关:查找第一个匹配的字符串
# coding=utf-8 # 在此导入python正则库 ########## Begin ########## import re ########## End ########## check_name = input() # 在此使用正则匹配'张明'的信息,结果存储到is_zhangming中 ########## Begin ########## is_zhangming = re.search(r'张明', check_name) ########## End ########## if is_zhangming is not None: print(is_zhangming.span()) else: print(is_zhangming)
第2关:基础正则表达式–字符组
# coding=utf-8 import re input_str = input() # 编写获取python和Python的正则,并存储到match_python变量中 ########## Begin ########## match_python = re.findall(r'[Pp]ython',input_str) ########## End ########## print(match_python)
第3关:基础正则表达式–区间与区间取反
# coding=utf-8 import re input_str = input() # 1、编写获取到数字的正则,并输出匹配到的信息 ########## Begin ########## b=re.findall(r'[0-9]',input_str) print(b) ########## End ########## # 2、编写获取到不是数字的正则,并输出匹配到的信息 ########## Begin ########## c = re.findall(r'[^0-9]',input_str) print(c) ########## End ##########
第4关:基础正则表达式–快捷方式
# coding=utf-8 import re input_str = input() # 1、编写获取到单词的正则,并输出匹配到的信息 ########## Begin ########## b=re.findall(r'[a-zA-Z0-9]',input_str) print(b) ########## End ########## # 2、编写获取到不是单词的正则,并输出匹配到的信息 ########## Begin ########## c=re.findall(r'[\W]',input_str) print(c) ########## End ##########
第5关:字符串的开始与结束
import re input_str = input() # 1、编写获取到以educoder开头的正则,并存储到变量a ########## Begin ########## a = re.search(r'^educoder', input_str) ########## End ########## if a is not None: print(a.span()) else: print(a) # 2、编写获取到以educoder结束的正则,并存储到变量b ########## Begin ########## b = re.search(r'educoder$', input_str) ########## End ########## if b is not None: print(b.span()) else: print(b)
第6关:任意字符
# coding=utf-8 import re input_str = input() # 编写获取(任意字符)+ython的字符串,并存储到变量a中 ########## Begin ########## a = re.findall(r'.ython',input_str) ########## End ########## print(a)
第7关:可选字符
# coding=utf-8 import re input_str = input() # 编写获取she或者he的字符串,并存储到变量a中 ########## Begin ########## a = re.findall(r's?he',input_str) ########## End ########## print(a)
第8关:重复区间
import re input_str = input() # 1、基于贪心模式匹配字符串中重复出现2个数字的子字符串,并存储到变量a。 ########## Begin ########## a = re.findall(r'[\d]{2}',input_str) ########## End ########## print(a) # 2、基于贪心模式匹配字符串中重复出现4-7个数字的子字符串,并存储到变量b。 ########## Begin ########## b = re.findall(r'[\d]{4,7}',input_str) ########## End ########## print(b)
第9关:开闭区间与速写
# coding=utf-8 import re input_str = input() # 1、基于贪心模式匹配字符串中连续出现5个数字以上的子字符串,并存储到变量a。 ########## Begin ########## a = re.findall(r'[\d]{5,}',input_str) ########## End ########## print(a) # 2、匹配字符串中都为数字的子字符串,并存储到变量b。 ########## Begin ########## b = re.findall(r'[\d]+',input_str) ########## End ########## print(b)
Python正则表达式进阶
第1关:分组
import re def re_group(input_data): result=[] #*********** Begin **********# result = re.findall(r'\(?\+?8?6?\)?[ .-]?([\d]{11})',input_data) #*********** End **********# return result
第2关:先行断言
import re a = input() #*********** Begin **********# result=re.findall(r'[\w]+(?=ing)',a) #*********** End **********# print(result)
第3关:后发断言
import re a = input() #*********** Begin **********# result=re.findall(r'(?<=go)[\w]+',a) #*********** End **********# print(result)
第4关:标记
import re def re_mark(input_data): result=[] #*********** Begin **********# result = re.findall(r'^study[\w]*@[\w]+\.com',input_data,re.I|re.M) #*********** End **********# return result
第5关:编译
import re def re_telephone(str): #*********** Begin **********# re_input = '^(\d{3})-(\d{3,8})$' re_telephone = re.compile(re_input) re_group = re_telephone.match(str).groups() #*********** End **********# return re_group
python正则表达式综合练习
第1关:提取日志内容
import re def re_Regex(): #*********** Begin **********# # 读取数据文件 # 根据日志数据编写正则表达式提取数据内容 # 提取cs_item_sk的数值以1结尾的并且布尔值为true的所需的日志内容 string = r'cs_item_sk[\s=]*(\d*?1+)\s+.+?true\s*(\d+)$' pattern = re.compile(string) with open('./test_one/src.txt', 'r') as f: for line in f.readlines(): line = line.strip() m = pattern.search(line) if m is not None: print(m.groups()) #*********** End **********#
第2关:组合密码匹配
import re def re_test2(input_data): result=[] #*********** Begin **********# result = re.findall(r'^(?![a-zA-z]+$)(?!\d+$)(?![!@#$%^&*.?]+$)[a-zA-Z\d!@#$%.?^&*]+$',input_data,re.M) #*********** End **********# return result
第3关:网页内容解析
import re def parse_one_page(html): #*********** Begin **********# pattern = re.compile('<dd>.*?board-index.*?>(.*?)</i>.*?data-src="(.*?)"' +'.*?name.*?a.*?>(.*?)</a>.*?star.*?>[^\u4e00-\u9fff]+(.*?)[^\u4e00-\u9fff]+</p>' +'.*?releasetime.*?>(.*?)</p>.*?integer.*?>(.*?)</i>' +'.*?fraction.*?>(.*?)</i>.*?</dd>', re.S) res = re.findall(pattern, html) print(res) # 将输出结果打印即可 #*********** End **********#
泰坦尼克生还预测——可视化与探索性数据分析
第1关:存活率与性别和船舱等级之间的关系
import pandas as pd import numpy as np import seaborn as sns import warnings warnings.filterwarnings("ignore") sns.set() import matplotlib.pyplot as plt from matplotlib.pyplot import MultipleLocator def student(): # ********* Begin *********# a=pd.read_csv('Task1/train.csv') fig,axes=plt.subplots(1,2) sns.violinplot(x="Pclass",y="Age",data=a,split=True,ax=axes[0],hue='Survived') #上图 sns.violinplot(x="Sex",y="Age",split=True,data=a,hue='Survived',ax=axes[1]) #下图 plt.savefig('Task1/img/T1.png') plt.show() # ********* End *********#
第2关:各个口岸的生还率
import pandas as pd import numpy as np import seaborn as sns import warnings warnings.filterwarnings("ignore") sns.set() import matplotlib.pyplot as plt from matplotlib.pyplot import MultipleLocator def student(): # ********* Begin *********# a=pd.read_csv('Task2/train.csv') sns.factorplot(data=a, x="Embarked", y="Survived") plt.savefig('Task2/img/T1.png') plt.show() # ********* End *********#
第3关:统计各登船口岸的登船人数以及生还
import pandas as pd import numpy as np import seaborn as sns import warnings warnings.filterwarnings("ignore") sns.set() import matplotlib.pyplot as plt def student(): # ********* Begin *********# a=pd.read_csv('Task3/train.csv') fig,ax = plt.subplots(2,2,figsize=(10,10)) sns.countplot("Embarked",data=a,ax=ax[0,0]) ax[0,0].set_title("No.Of Passengers Boarded") sns.countplot("Embarked",hue="Sex",data=a,ax=ax[0,1]) ax[0,1].set_title("Male-Female Split for Embarked") sns.countplot("Embarked",hue="Survived",data=a,ax=ax[1,0]) ax[1,0].set_title("Embarked vs Survived") sns.countplot("Embarked",hue="Pclass",data=a,ax=ax[1,1]) ax[1,1].set_title("Embarked vs Pclass") plt.savefig("Task3/img/T1.jpg") plt.show() # ********* End *********#
泰坦尼克号生还预测
第1关:数据探索
- 以下两幅图说明了什么?
- B、一等舱的20-50岁的人群的存活率较高
- C、对于男性来说,越老,存活率越低
- D、女性的生还率较高
- 这副图说明了什么?
- A、在C号口岸上船的船客的生还率高于55%
- B、在S号口岸上船的船客的存活率最低
- D、上船人数最少的是S号口岸
- 以下四幅图说明了什么?
- A、虽然有很多一等舱的土豪们基本都是在S号口岸上船的,但是S号口岸的生还率最低,可能是因为S口岸上船的人中有很多都是三等舱的船客
- C、Q号口岸上船的人中有90%多都是三等舱的船客
- D、在C号口岸上船的生还率最高
- 以下两幅图说明了什么
- A、一个人在船上旅游的人的存活率约为34%
- B、有一个兄弟姐妹或者爱人也在船上的话,生还率最高
- C、兄弟姐妹或者爱人的数量比较多的时候,生还率呈下降趋势
第2关:填充缺失值
import pandas as pd import numpy as np def process_nan_value(data): ''' 处理data中缺失值,有缺失值的特征为`Age`,`Cabin`,`Embarked`。 :param data: 训练集的特征,类型为DataFrame :return:处理好缺失值后的训练集特征,类型为DataFrame ''' #********* Begin *********# data['Age'].replace(np.nan,np.nanmedian(data['Age']), inplace=True) #data['Age'].replace(np.nan,np.nanmedian(data['Age']),inplace=True) data.drop(labels='Cabin',axis=1,inplace=True) data['Embarked'].replace(np.nan,'S',inplace=True) return data #********* End *********#
第3关:特征工程与生还预测
import pandas as pd import numpy as np import sklearn from sklearn.ensemble import RandomForestClassifier from sklearn.ensemble import RandomForestRegressor #********* Begin *********# titanic = pd.read_csv('./train.csv') def set_missing_ages(df): # 把已有的数值型特征取出来丢进Random Forest Regressor中 age_df = df[['Age', 'Fare', 'Parch', 'SibSp', 'Pclass']] # 乘客分成已知年龄和未知年龄两部分 known_age = age_df[age_df.Age.notnull()].values unknown_age = age_df[age_df.Age.isnull()].values # y即目标年龄 y = known_age[:, 0] # X即特征属性值 X = known_age[:, 1:] # fit到RandomForestRegressor之中 rfr = RandomForestRegressor(random_state=0, n_estimators=2000, n_jobs=-1) rfr.fit(X, y) # 用得到的模型进行未知年龄结果预测 predictedAges = rfr.predict(unknown_age[:, 1::]) # 用得到的预测结果填补原缺失数据 df.loc[(df.Age.isnull()), 'Age'] = predictedAges return df titanic = set_missing_ages(titanic) dummies_Embarked = pd.get_dummies(titanic['Embarked'], prefix= 'Embarked') dummies_Sex = pd.get_dummies(titanic['Sex'], prefix= 'Sex') dummies_Pclass = pd.get_dummies(titanic['Pclass'], prefix= 'Pclass') df = pd.concat([titanic, dummies_Embarked, dummies_Sex, dummies_Pclass], axis=1) df.drop(['Pclass', 'Name', 'Sex', 'Ticket', 'Cabin', 'Embarked'], axis=1, inplace=True) # print(df) train_label = df['Survived'] train_titanic = df.drop('Survived', 1) titanic_test = pd.read_csv('./test.csv') titanic_test = set_missing_ages(titanic_test) dummies_Embarked = pd.get_dummies(titanic_test['Embarked'], prefix= 'Embarked') dummies_Sex = pd.get_dummies(titanic_test['Sex'], prefix= 'Sex') dummies_Pclass = pd.get_dummies(titanic_test['Pclass'], prefix= 'Pclass') df_test = pd.concat([titanic_test,dummies_Embarked, dummies_Sex, dummies_Pclass], axis=1) df_test.drop(['Pclass', 'Name', 'Sex', 'Ticket', 'Cabin', 'Embarked'], axis=1, inplace=True) #model = RandomForestClassifier(random_state=1, n_estimators=10, min_samples_split=2, min_samples_leaf=1) model = RandomForestClassifier(n_estimators=10) model.fit(train_titanic, train_label) predictions = model.predict(df_test) result = pd.DataFrame({'Survived':predictions.astype(np.int32)}) result.to_csv("./predict.csv", index=False) #********* End *********#