基于SVM+Webdriver的智能NBA常规赛与季后赛结果预测系统——机器学习算法应用(含python、ipynb工程源码)+所有数据集(二)

news2024/11/20 10:24:17

目录

  • 前言
  • 总体设计
    • 系统整体结构图
    • 系统流程图
  • 运行环境
  • 模块实现
    • 1. 数据预处理
    • 2. 特征提取
      • 1)常规赛特征提取
      • 2)季后赛特征提取
        • (1)常规赛球队得分
        • (2)球员、教练数据及数据整合
  • 相关其它博客
  • 工程源代码下载
  • 其它资料下载


在这里插入图片描述

前言

本项目使用了从NBA官方网站获得的数据,并运用了支持向量机(SVM)模型来进行NBA常规赛和季后赛结果的预测。此外,项目还引入了相关系数法、随机森林分类法和Lasso方法,以评估不同特征的重要性。最后,使用Python库中的webdriver功能实现了自动发帖,并提供了科学解释来解释比赛预测结果。

首先,项目采集了NBA官方网站上的各种数据,这些数据包括球队与对手的历史表现、球员数据、赛季统计等。这些数据用于构建常规赛或季后赛结果的预测模型。

其次,支持向量机(SVM)模型被用来分析这些数据以进行常规赛或季后赛结果的预测。SVM是一种强大的机器学习算法,可以通过分析数据来确定不同特征对比赛结果的影响。

项目还使用了相关系数法、随机森林分类法和Lasso方法,以评估每个特征对常规赛或季后赛结果的重要性。这有助于识别哪些因素对比赛胜负有更大的影响。

最后,项目利用Python中的webdriver库自动发帖,在开源中国论坛中发布关于比赛预测的帖子。这些帖子不仅提供了预测结果,还附带了科学解释,以便其他球迷能够理解模型如何得出这些预测。这对于NBA球迷和数据科学爱好者来说可能是一个非常有趣的项目,能够帮助他们更好地理解比赛和预测比赛结果。

总体设计

本部分包括系统整体结构图和系统流程图。

系统整体结构图

系统整体结构如图所示。

在这里插入图片描述

系统流程图

模型处理流程如图所示。

在这里插入图片描述

自动发帖流程如图所示。

在这里插入图片描述

运行环境

本部分包括Python环境、Jupyter Notebook环境、PyCharm环境和Matlab环境。

详见博客。

模块实现

本项目包括4个模块:数据预处理、特征提取、模型训练及评估、模型训练准确率,下面分别介绍各模块的功能及相关代码。

1. 数据预处理

数据处理分为常规赛和季后赛。

详见博客。

2. 特征提取

本部分包括常规赛特征提取和季后赛特征提取。

1)常规赛特征提取

本部分为ELO等级分这一特征值的定义与应用。当每支队伍没有ELO等级分时,赋予其基础等级分:

base_elo = 1600
team_elos = {} 
#定义ELO获取函数
def get_elo(team):
    try:
        return team_elos[team]
    except:
        #当最初没有ELO时,给每个队伍最初赋base_elo
        team_elos[team]= base_elo
        return team_elos[team]
#定义ELO更新函数
def calc_elo(win_team, lose_team,HorV):
    #获取初始ELO
    elo_win_old=get_elo(win_team)
    elo_lose_old=get_elo(lose_team)
    #定义主客场ELO差值计算方法
    if HorV=='H':
        elo_diff=elo_lose_old-elo_win_old-50
    else:
        elo_diff=elo_lose_old-elo_win_old+50
    #定义胜败双方ELO计算方法
    E_win=1/(1+10**(elo_diff/400))
    E_lose=1/(1+10**(-elo_diff/400))
     #使用动态的K值,按照默认的K值得出的强队愈强,弱队愈弱,因为强队ELO高,输球代价小,虽然赢球增值也小,但输少赢多。弱队赢球增值高,但输球代价大,输多赢少,这种方式,强队一旦输给弱队,ELO下降会比较多
    if elo_win_old>=1650:
        K=16
    elif 1550<=elo_win_old<1650:
        K=24
    else:
        K=32
    elo_win_new=elo_win_old+K*(1-E_win)
    if elo_lose_old>=1650:
        K=32
    elif 1550<=elo_lose_old<1650:
        K=24
    else:
        K=16
    elo_lose_new=elo_lose_old+K*(0-E_lose)
    #赋值
    team_elos[win_team]=round(elo_win_new)
    team_elos[lose_team]=round(elo_lose_new)
    return team_elos[win_team],team_elos[lose_team]
#定义相关特征数组创建函数
def build_dataSet(result_data):
    X = []
    y = []
    skip = 0
    for index, row in result_data.iterrows():
        Wteam = row['WTeam']
        Lteam = row['LTeam']
        #获取最初的ELO或是每个队伍最初的ELO值
        team1_elo=get_elo(Wteam)
        team2_elo=get_elo(Lteam)
        #if row['WLoc'] == 'H':
            #team1_elo += 40
        #else:
            #team2_elo += 40
        # 把ELO作为评价每个队伍的第一个特征值
        team1_features = [team1_elo]
        team2_features = [team2_elo]
        #把是否主场作为评价每个队伍的第二个特征值,采用实验楼方法时(主场优势加在ELO中),都改为0即可
        if row['WLoc']=='H':
            team1_features.append(1)
            team2_features.append(0)
        else:
            team1_features.append(0)
            team2_features.append(1)
        #添加从basketball reference.com获得每个队伍的统计信息
        for key,value in team_stats.loc[Wteam].iteritems():
            team1_features.append(value)
        for key,value in team_stats.loc[Lteam].iteritems():
            team2_features.append(value)
        #将两支队伍的特征值随机分配在每场比赛数据的左右两侧
        #并将对应的0/1赋给y值
        if random.random()<0.5:
            X.append(team1_features+team2_features)
            y.append(0)
        else:
            X.append(team2_features+team1_features)
            y.append(1)
        #根据这场比赛的数据更新队伍的ELO值
        calc_elo(Wteam,Lteam,row['WLoc'])
    return X,y

本部分引入相关系数法随机森林分类法lasso方法对特征进行重要性评估,并综合3种方法删除重要性排名较低的特征。

相关代码如下:

feature_df.corr()
#计算相关系数矩阵
corr_ss=feature_df.corr().Win.map(abs).sort_values(ascending=False)
#去除后缀_和数字[1-2],算出特征前缀一致的相关系数均值
corr_gr_ss=corr_ss.groupby(corr_ss.index.str.split('_').str[0].str.replace('\d$','')).mean().sort_values()
#删除Win行向量
corr_gr_ss=corr_gr_ss.drop('Win')
#随机森林分类法
model_test=RandomForestClassifier()
model_test.fit(feature_df.iloc[:,:-1],feature_df['Win'])
rfc_ss=pd.Series(index=feature_df.columns[:1],data=model_test.feature_importances_).sort_values()
#去除后缀_和数字[1-2],算出特征前缀一致的重要性均值
rfc_gr_ss=rfc_ss.groupby(rfc_ss.index.str.split('_').str[0].str.replace('\d$','')).mean().sort_values()
#lasso方法
model_test2=Lasso()
model_test2.fit(feature_df.iloc[:,:-1],feature_df['Win'])
lasso_ss=pd.Series(index=feature_df.columns[:1],data=model_test2.coef_).sort_values()
#去除后缀_和数字[1-2],算出特征前缀一致的系数均值
lasso_gr_ss=lasso_ss.groupby(lasso_ss.index.str.split('_').str[0].str.replace('\d$','')).mean().sort_values()
tscore_df=pd.concat([corr_df,rfc_df,lasso_df],axis=1).sort_values('crank')
tscore_df

特征评估结果如下表所示。

在这里插入图片描述
①各特征和标注的相关系数;②相关性排名,越小越不相关;③各特征重要性;④重要性排名,越小则重要性越小;⑤对特征用lasso拟合的相关系数;⑥代表相关系数是否为0,1代表不为0。

相关系数与随机森林排名特征如下表所示。

在这里插入图片描述

删除相关系数排名与随机森林分类排名之和小于等于20的变量:

tscore_df.loc[(tscore_df.crank+tscore_df.rrank)/2<=10]
#将所有特征名转化为它的前缀名
map_df=pd.Series(feature_df.columns[:-1].str.split('_').str[0].str.replace('\d$',''))
#将所有特征名赋值给map_df的索引
map_df.index=feature_df.columns[:-1]
X=feature_df.drop('Win',axis=1)
#定义特征删除函数
def processdf(X):
    if 'Win' in X.columns:
        X.drop('Win',axis=1,inplace=True)
    for name in X.columns:
        if map_df[name] in del_name:
            X.drop(name,axis=1,inplace=True)
    return(X)
X=processdf(X) #删除显著性较低的特征

2)季后赛特征提取

本部分包括常规赛球队得分、球员、教练数据及数据。

(1)常规赛球队得分

本部分对常规赛场均数据进行处理,形成9个季后赛队伍常规赛得分数据。

相关代码如下:

#引用库
import pandas as pd
import glob
#初始化数据列表
tlist = []
olist = []
#获取数据文件名
tfname = glob.glob('data/team_and_op/*t.csv')
ofname = glob.glob('data/team_and_op/*o.csv')
playfname = glob.glob('data/playoff/*playoff.xlsx')
#初始化赛季标签,从10~11赛季开始
season = 1011
#循环遍历9个赛季的数据
for tname, oname, playoff in zip(tfname, ofname, playfname):
    #读取队伍数据
    df = pd.read_csv(tname)
    #读取队伍对手数据
    df_ = pd.read_csv(oname)
    #数据中有的队名随机带*,将其除去读取队伍数据
    df = pd.read_csv(tname)
#读取队伍对手数据
    df_ = pd.read_csv(oname)
    #读取季后赛结果数据
    tnstats = pd.read_excel(playoff)
#对读取后的对象用replace方法进行处理,代码不再展示
#将队伍数据和对手数据按照排名对齐
    Rk_index = list(df.columns).index('Rk')
    Team_index = list(df.columns).index('Team')
    for i in range(len(df)):
        for j in range(len(df_)):
            if df_.iloc[j, Team_index] == df.iloc[i, Team_index]:
                df_.iloc[j, Rk_index] = df.iloc[i, Rk_index]
     #队伍对手数据按排名排序
    df_ = df_.sort_values(by='Rk')
     #更改DataFrame索引
    df_.index = range(0, len(df_))
     #得到十六支季后赛队伍的队名
    team16 = []
    team16.extend(tnstats['Teamw'].values)
    team16.extend(tnstats['Teaml'].values)
    team16 = list(set(team16))
    #筛选出16支季后赛队伍的数据,并添加“season”列
df = df[df['Team'].isin(team16)]
    df_ = df_[df_['Team'].isin(team16)]
    df['season'] = season
    df_['season'] = season
#将季后赛队伍的常规赛数据添加到列表中
tlist.append(df)
olist.append(df_)
#得到9个赛季季后赛队伍的常规赛场均数据tlist和olist,将列表转化成DataFrame对象
Ostats = pd.concat(olist)
Ostats.index = range(0, len(Ostats))
Tstats = pd.concat(tlist)
Tstats.index = range(0, len(Tstats))
#去掉非数值数据列
newOstat = Ostats.drop(['Rk', 'G', 'MP', 'Team', 'season'], axis=1)
newTstat = Tstats.drop(['Rk', 'G', 'MP', 'Team', 'season'], axis=1)
#得到队伍数据和对手数据的比值
result = newTstat / newOstat
#数据写入文件,包括常规赛队伍对手比值数据和对应的球队、赛季
result.to_csv('./data_regular.csv', sep=',', header=False, index=False)
Tstats.loc[:, ['Team', 'season']].to_csv('./data_regular_team_season.csv', sep=',', header=True, index=False)

队伍的常规赛数据按最大方差旋转法做因子分析,使用Matlab自带的factoran 函数,载荷阵和因子权重,相关代码如下:

clc;
clear all;
data=csvread('E:/pyproject/lpl/data_regular.csv');
[lambda,psi,T,stats,F]=factoran(data,7,'rotate','orthomax');

lambda包含m个公共因子模型的载荷矩阵。m是一个正整数,表示模型中公共因子的个数,本项目选择的公共因子个数为7。lambda是一个d行m列的矩阵,第i行第j列元素表示第i个变量在第j个公共因子上的载荷。

W=sum(lambda.^2);%求权重
%计算因子得分
score=F*W';
%结果输出到文件
f=fopen('E:/pyproject/lpl/factor.csv','a');
for i=1:size(score)
   fprintf(f,'%f\t',score(i));
   fprintf(f,'\r\n');
end

载荷阵和因子权重如下表所示。

在这里插入图片描述

常规赛得到的数据如下表所示。
在这里插入图片描述

(2)球员、教练数据及数据整合

本部分代码对赛季球员数据和本赛前的教练执教数据进行处理,整合之前获得的常规赛得分数据,得到9个赛季的季后赛特征Dataframe对象,并写入文件。

相关代码如下:

#引用库
import pandas as pd
import glob
import numpy as np
#赛季标签
season = 1011
#初始化数据列表
player_score = []
coach_score = []
#循环遍历9个赛季的数据
for fname_player, fname_team, fname_coach in \
zip(glob.glob('data/player_score/*player.xlsx'),
      glob.glob('data/playoff/*playoff.xlsx'),
      glob.glob('data/coach/*coach.xlsx')):
 #读取球员数据
    pstats = pd.read_excel(fname_player)
    #读取教练数据
    costats = pd.read_excel(fname_coach)
    #读取季后赛队伍数据
    tnstats = pd.read_excel(fname_team)
    #计算球员得分
    p1 = pstats['PTS']
    p2 = pstats['FG']
    p3 = pstats['FGA']
    p4 = pstats['FTA']
    p5 = pstats['FT']
    p6 = pstats['ORB']
    p7 = pstats['DRB']
    p8 = pstats['STL']
    p9 = pstats['AST']
    p10 = pstats['BLK']
    p11 = pstats['PF']
    p12 = pstats['TOV']
    pstats['player_score'] = p1 + 0.4 * p2 - 0.7 * p3 - 0.4 * (
          p4- p5)+0.7*p6 +0.3*p7+p8+0.7 * p9 + 0.7 * p10 - 0.4 * p11 - p12
    pstats.sort_values(by='player_score', ascending=False, inplace=True)
    pstats.index = range(0, len(pstats))
   #得到16支季后赛队伍
    team16 = []
    team16.extend(tnstats['Teamw'].values)
    team16.extend(tnstats['Teaml'].values)
    team16 = list(set(team16))
    #获得n和palyer_score特征
    a = pstats.loc[int(0.1 * len(pstats)), 'player_score']
    for team in team16:
        pt = pstats.loc[pstats['Tm'] == team]
        pt.index = range(0, len(pt))
        pt_ = pt.loc[pt['player_score'] > a]
        #如果没有球员达到核心标准,则令player_score第一的为核心
        if pt_.empty:
            player_score.append([1, pt.loc[0].player_score, team, season])
        else:
            player_score.append([pt_.shape[0], pt_['player_score'].sum(axis=0), team, season])
    #获得教练数据
    costats = costats[costats['Tm'].isin(team16)]
    costats = costats.drop('Coach', axis=1)
    costats['season'] = season
    coach_score.extend(costats.values.tolist())

得到9个赛季季后赛队伍的球员数据、教练数据列表player_score和coach_score,将列表转化成DataFrame对象final_data,并与常规赛得分按照队名及赛季进行拼接。

df_player = pd.DataFrame(player_score, columns=['n', 'player_score', 'Team', 'season'])
df_coach = pd.DataFrame(coach_score, columns=['Team', 'c1', 'c2', 'c3', 'c4', 'season'])
final_data = pd.merge(df_player, df_coach, on=['Team', 'season'])
#读取常规赛因子分析数据
regular_score = pd.read_csv('data_regular_team_season.csv')
regular_score['regular_score'] = np.loadtxt('data_factor.csv')
#形成最后的数据框
final_data = pd.merge(final_data, regular_score, on=['Team', 'season'])
#数据写入文件
final_data.to_csv('data_final.csv', header=True, index=False)

最后得到的是9个赛季144支季后赛队伍的特征数据,如下表所示。

在这里插入图片描述

相关其它博客

基于SVM+Webdriver的智能NBA常规赛与季后赛结果预测系统——机器学习算法应用(含python、ipynb工程源码)+所有数据集(一)

基于SVM+Webdriver的智能NBA常规赛与季后赛结果预测系统——机器学习算法应用(含python、ipynb工程源码)+所有数据集(三)

基于SVM+Webdriver的智能NBA常规赛与季后赛结果预测系统——机器学习算法应用(含python、ipynb工程源码)+所有数据集(四)

工程源代码下载

详见本人博客资源下载页


其它资料下载

如果大家想继续了解人工智能相关学习路线和知识体系,欢迎大家翻阅我的另外一篇博客《重磅 | 完备的人工智能AI 学习——基础知识学习路线,所有资料免关注免套路直接网盘下载》
这篇博客参考了Github知名开源平台,AI技术平台以及相关领域专家:Datawhale,ApacheCN,AI有道和黄海广博士等约有近100G相关资料,希望能帮助到所有小伙伴们。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1105372.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WebSocket:实现实时互动、数据推送的利器,你了解多少

WebSocket技术是一种基于TCP协议的全双工通信协议&#xff0c;它允许浏览器和服务器之间进行实时、双向的通信。相比传统的HTTP请求-响应模式&#xff0c;WebSocket提供了持久连接&#xff0c;可以实时地推送数据&#xff0c;减少了通信的延迟。 WebSocket的工作原理是通过建立…

视觉Slam面试题(不定时更新)

文章目录 0 引言1 单目、双目、深度相机和RGBD相机的区别2 特征点法与直接法的优缺点3 等距变换、相似变换、仿射变换、射影变换的区别4 单应矩阵、本质矩阵和基础矩阵的区别5 Slam中为什么用李群李代数6 解释Slam中的绑架问题7 ORB、SIFT和SURF特征点检测算法的区别8 什么是对…

QGIS如何给元素添加属性

选中图层&#xff0c;右键&#xff0c;属性

汽车上的A/C按键是做什么用的?

汽车上的A/C按键是做什么用的? 汽车上的a/c 键是空调制冷开关。A/C是空调的缩写&#xff0c;它的全称是air condition&#xff0c;理解为空气调节。它通过空调压缩机的不同运转方式来达到制冷或制暖的目的。 打开a/c 按键之后&#xff0c;因为空调压缩机是靠发动机工作的&…

【小白专用】安装Apache2.4+ 安装PHP8.2+ php与sql server 2008 r2连接测试教程

PHP安装 1、PHP下载 PHP For Windows: Binaries and sources Releases 注意&#xff1a; 1.要下载Thread Safe&#xff0c;否则没有php7apache2_4.dll这个文件 2.如果是64位系统要下载x64的&#xff0c;x86的不行 3.下载Zip 2、PHP解压安装 将Zip进行解压&#xff0c;里…

【六、docker中hyperf项目怎么进行跨域设置】

1、第一步就是新建跨域文件,即跨域中间件 跨域中间件的代码如下 <?phpdeclare(strict_types=1);namespace App\Middleware; namespace App\Middleware; namespace App\Middleware;use Hyperf\Context\Context; use Psr\Http\Message\ResponseInterface;

Linux文件管理与用户管理

一、查看文件内容 1、回顾之前的命令 cat命令、tac命令、head命令、tail命令、扩展&#xff1a;tail -f动态查看一个文件的内容 2、more分屏显示文件内容&#xff08;了解&#xff09; 基本语法&#xff1a; # more 文件名称 特别注意&#xff1a;more命令在加载文件时并不…

爆肝整理,性能测试-非GUI模式执行Jemter压测,看这篇就够了...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、上传脚本 把在…

如何利用vscode进行断点调试后端node开发的项目,如express或koa?

介绍 在我们平常开发中前端可以通过浏览器断点调试代码执行的过程&#xff0c;但是node项目后端通常用命令启动&#xff0c;但命令启动项目也只能打印日志信息&#xff0c;不能断点。所以这一章节教大家如何利用vscode进行断点调试。 步骤 配置launch.json文件 代码如下&…

matlab奇技淫巧——绘制三维地图

在数据处理工作中&#xff0c;常常会用到地图的绘制&#xff0c;最常用的自然是绘制平面的区域/全球地图&#xff0c;通过 worldmap(world) % 创建世界地图坐标区域 load coastlines % 导入海岸线数据 plotm(coastlat,coastlon)即可绘制&#xff0c;效果…

【eNSP】VLAN间通信

VLAN间通信 文章目录 一、使用路由器物理接口实现VLAN间通信实验拓扑图1、配置交换机Access接口和路由器IP地址LSW1AR1 2、验证 二、使用路由器子接口实验拓扑图1、路由器、交换机基本配置LSW1AR1 2、配置路由器子接口AR1 3、验证 三、使用VLANIF技术实现VLAN间通信原理图实验拓…

vue3弹窗中循环生成表单的校验和重置问题

应用场景&#xff1a; 1、弹框里的表单是根据后台返回的时段生成的&#xff0c;后台返回几个时段&#xff0c;就渲染几组表单。 -1- 重置&#xff1a;遍历每个表单&#xff0c;获取当前表单的引用&#xff0c;在resetFields() -2- 校验&#xff1a;创建一个数组来存储每个表单的…

MySQL学习(五)——索引

文章目录 1. 索引介绍2. 索引结构2.1 索引结构介绍2.2 二叉树2.3 B-Tree2.4 BTree2.5 Hash 3. 索引分类3.1 索引分类3.2 聚集索引和二级索引 4 索引语法4.1 语法介绍4.2 数据准备4.3 索引演示 5 SQL 性能优化5.1 执行频率查询5.2 慢查询日志5.3 profile详情5.4 explain 6 索引使…

谈谈 Redis 如何来实现分布式锁

谈谈 Redis 如何来实现分布式锁 基于 setnx 可以实现&#xff0c;但是不是可重入的。 基于 Hash 数据类型 Lua脚本 可以实现可重入的分布式锁。 获取锁的 Lua 脚本&#xff1a; 释放锁的 Lua 脚本&#xff1a; 但是还是存在分布式问题&#xff0c;比如说&#xff0c;一个客…

金融信息化研究所与YashanDB等单位启动金融多主数据库应用行动计划

10月13日&#xff0c;2023金融业 数据库技术大会在京成功召开。会上&#xff0c;金融信息化研究所与崖山数据库YashanDB、阿里巴巴、奥星贝斯、达梦、南大通用、华为、天翼云、万里数据库、优炫数据库共同启动金融多主数据库应用行动计划&#xff0c;并成立金融多主数据库应用…

基于SpringBoot的大学生体质测试管理系统

基于SpringBoot的大学生体质测试管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 管理员界面 教师界面 学生界面 摘要 大学生体质测试管理系统是一…

谁懂?这23个关于大数据的灵魂拷问!

在企业内训行业也深耕蛮多年了&#xff0c;每次做大数据培训&#xff0c;都会遇到一些发人深省的灵魂拷问。 在这些拷问的人群中&#xff0c;有一些是没有接触过大数据平台&#xff0c;有一些甚至已经是大数据老兵。 那趁着这次机会&#xff0c;让我们索性一次把这些问题言简意…

maven依赖冲突以及解决方法

什么是依赖冲突 依赖冲突是指项目依赖的某一个jar包&#xff0c;有多个不同的版本&#xff0c;因而造成类包版本冲突 依赖冲突的原因 依赖冲突很经常是类包之间的间接依赖引起的。每个显式声明的类包都会依赖于一些其它的隐式类包&#xff0c;这些隐式的类包会被maven间接引…

竞赛 深度学习YOLO抽烟行为检测 - python opencv

文章目录 1 前言1 课题背景2 实现效果3 Yolov5算法3.1 简介3.2 相关技术 4 数据集处理及实验5 部分核心代码6 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于深度学习YOLO抽烟行为检测 该项目较为新颖&#xff0c;适合作为竞赛课…

Yaml语法学习

SpringBoot使用一个全局的配置文件 &#xff0c; 配置文件名称是固定的 application.properties&#xff08;官方不推荐&#xff09; 语法结构 &#xff1a; keyvalue application.yml 语法结构 &#xff1a;key&#xff1a;空格 value server:port: 8081 配置文件的作用 &…