云计算基础(持续更新)(下)

简介: 云计算基础(持续更新)

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关:数据探索


  1. 以下两幅图说明了什么?



  • B、一等舱的20-50岁的人群的存活率较高


  • C、对于男性来说,越老,存活率越低


  • D、女性的生还率较高


  1. 这副图说明了什么?



  • A、在C号口岸上船的船客的生还率高于55%


  • B、在S号口岸上船的船客的存活率最低


  • D、上船人数最少的是S号口岸


  1. 以下四幅图说明了什么?



  • A、虽然有很多一等舱的土豪们基本都是在S号口岸上船的,但是S号口岸的生还率最低,可能是因为S口岸上船的人中有很多都是三等舱的船客


  • C、Q号口岸上船的人中有90%多都是三等舱的船客


  • D、在C号口岸上船的生还率最高


  1. 以下两幅图说明了什么



  • 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 *********#


目录
相关文章
|
4月前
|
存储 云计算 虚拟化
云计算基础(持续更新)
云计算基础(持续更新)
326 0
|
存储 数据采集 分布式计算
云计算基础(持续更新)(上)
云计算基础(持续更新)
1123 1
|
机器学习/深度学习 存储 分布式计算
云计算基础(持续更新)(中)
云计算基础(持续更新)
340 0
|
云栖大会 虚拟化 云计算
云计算技术资源汇总-持续更新
云计算技术如何关注,有哪些主流的信息可以查看,本文进行了初步梳理。
344 0
|
3天前
|
监控 安全 网络安全
云计算时代的网络安全挑战与对策
【9月更文挑战第24天】在数字化转型的大潮中,云计算以其灵活性、可扩展性和成本效益成为企业IT架构的核心。然而,随着数据和应用的云端迁移,网络安全威胁也日益增多,给企业的信息安全带来前所未有的挑战。本文将探讨云计算环境下的网络安全问题,分析常见的安全威胁,并提出有效的防御策略。我们将深入讨论如何通过合理的云服务选择、严格的访问控制、数据加密和持续的安全监控来保护云环境,确保企业资产和客户信息的安全。文章旨在为读者提供一套全面的云计算安全框架,帮助他们在享受云计算带来的便利的同时,有效防范潜在的网络风险。
|
3天前
|
人工智能 安全 网络安全
云计算与网络安全:挑战与机遇并存
本文深入探讨了云计算与网络安全之间的紧密关系,分析了云服务、网络安全和信息安全等技术领域的现状、挑战与未来发展趋势。通过对云计算的依赖性增长、网络攻击手段的多样化以及数据保护法规的日益严格等关键问题的剖析,本文旨在为相关从业者提供有价值的见解和应对策略。
20 2
|
3天前
|
SQL 安全 网络安全
云计算与网络安全:技术融合的双刃剑
【9月更文挑战第24天】在数字化时代,云计算如同一把双刃剑,既提供了前所未有的便利和效率,也带来了新的挑战。本文将深入探讨云计算在提升企业竞争力的同时,如何应对网络安全这一日益严峻的问题。我们将从云服务的基础架构出发,分析其潜在的安全漏洞,并结合最新的信息安全技术,提出一系列创新的解决策略。通过这些策略的实施,我们旨在实现云计算环境下的数据保护、访问控制和威胁监测,从而确保企业在享受云计算带来的红利的同时,能够有效地管理和降低网络安全风险。
|
3天前
|
存储 安全 网络安全
云计算与网络安全的交织未来
本文深入探讨了云计算与网络安全的关系,特别是在云服务、网络安全和信息安全等关键技术领域。通过分析当前的技术趋势和挑战,文章旨在提供一个全面的技术概览,帮助读者理解这两个领域的复杂性和重要性。
15 1
|
1天前
|
存储 安全 网络安全
云计算时代的网络安全挑战与应对策略
【9月更文挑战第26天】随着云计算技术的飞速发展,企业和用户越来越依赖云服务来处理数据和运行应用程序。然而,这种便利性也带来了新的网络安全风险。本文将探讨云计算环境中的网络安全挑战,并提供有效的应对策略,以帮助读者理解如何在享受云服务带来的便利的同时,保护好自己的信息安全。
15 5
|
2天前
|
机器学习/深度学习 安全 网络安全
云计算时代的守护者:网络安全与信息安全的融合
在云计算的大潮中,网络安全与信息安全成为了支撑技术发展的两大支柱。本文将探讨云服务、网络安全和信息安全的相互关系,以及如何在这个互联网快速发展的时代,保护我们的数字资产。