基于Java的NBA数据分析系统

原文  https://blog.csdn.net/sheziqiong/article/details/127005730

目录

目录更新历史 ii

  1. 引言 3
    1.1 目的 3
    1.2 范围 3
    1.3 参考文献 3
  2. 总体描述 3
    2.1 商品前景 3
    2.1.1 背景与机遇 3
    2.1.2 业务需求 3
    2.2 商品功能 4
    2.3 用户特征 4
    2.4 约束 4
    2.5 假设和依赖 4
  3. 详细需求描述 5
    3.1 对外接口需求 5
    3.1.1用户界面 5
    3.1.2硬件接口 6
    3.1.3软件接口 7
    3.1.4通信接口 7
    3.2 功能需求 7
    3.2.1球队数据分析 7
    3.2.2球员数据分析 8
    3.3 其他非功能需求 10
    3.3.1 安全性 10
    3.3.2 可维护性 10
    3.3.3 易用性 10
    3.3.4 可靠性 10
    3.3.5 业务规则 10
    3.3.6 约束 11
    3.4 数据需求 11
    3.4.1 数据定义 11
    3.4.2 默认数据 11
    3.4.3 数据格式要求 11
    3.5 其他需求 11
    3.2功能需求
    3.2.1球队数据分析
    3.2.1.1特性描述
    当需要查看球队信息时,用户开始查看球队信息
    3.2.1.2刺激/响应序列
    刺激1:用户输入球队信息
    响应:系统显示球队的具体信息
    刺激2:用户输入球队排序条件
    响应 :系统显示排序后的球队信息
    刺激3:用户取消数据查看任务
    响应:系统关闭或者结束数据查看任务
    刺激4:用户需要查看球队中球员的信息
    响应:系统显示该球队中球员的信息
    刺激5:用户需要查看球队近期/过往比赛的信息
    响应:系统显示球队近期比赛的信息
    3.2.1.3相关功能需求
    编号 需求描述
    TeamAnalysis.Input 系统应该允许用户在查看任务中进行键盘输入
    TeamAnalysis.Input.Find 在用户输入查找球队命令时,系统要执行查询命令,参见TeamAnalysis.Find
    TeamAnalysis.Input.Sort 在用户输入排序球队命令时,系统要执行排序命令,参见TeamAnalysis.Sort
    TeamAnalysis.Find 在用户请求查询球队时,系统允许用户输入球队名称
    TeamAnalysis. getPlayers 在用户请求查看该球队中球员信息的时候,系统要执行显示球员信息命令
    TeamAnalysis.getSeasonHotTeams 在用户请求查看赛季热点球队信息的时候,系统要执行筛选当前赛季热点球队的信息命令
    TeamAnalysis.getRecentMatches 在用户请求查看该球队近期比赛信息的时候,系统要执行显示比赛信息的命令
    TeamAnalysis.getPastMatches 在用户请求查看该球队过往信息的时候,系统要执行显示球队过往信息的命令
    TeamAnalysis.Find.Valid 用户输入已有球队姓名时,系统显示球队信息(参见)
    TeamAnalysis.Find.InValid 用户输入其他输入时,系统提示输入无效
    TeamAnalysis.Find.Cancel 用户输入取消查询命令时,系统结束查询任务,开始一个新的球队数据分析任务
    TeamAnalysis.Sort 用户输入排序依据(为球队信息 参见TeamAnalysis.Team),系统显示排序后的球队信息
    TeamAnalysis.Sort.Type 用户输入排序类型(升序或者降序),系统记录排序类型
    TeamAnalysis.Sort.null 用户输入的排序依据不存在,系统提示排序依据无效
    TeamAnalysis.Sort.LowDefault 用户输入排序命令后,低阶数据系统默认排序依据为球队分数
    TeamAnalysis.Sort.HighDefault 用户输入排序命令后,高阶数据系统默认排序依据为球队胜率
    TeamAnalysis.Sort.Cancel 在用户输入取消排序命令时,系统结束排序任务,开始一个新的球队数据分析任务
    TeamAnalysis.Team 每个球队具有如下信息并可作为排序依据:
    球队名称,比赛场数,投篮命中数,投篮出手次数,三分命中数,三分出手数,罚球命中数,罚球出手数,进攻篮板数,防守篮板数,篮板数,助攻数,抢断数,盖帽数,失误数,犯规数,比赛得分,投篮命中率,三分命中率,罚球命中率,胜率,进攻回合,进攻效率,防守效率,篮板效率,抢断效率,助攻率等。
    TeamAnalysis.getSeasonHotTeams 筛选条件包括但不仅限于以下几个方面:场均得分,场均篮板,场均助攻,场均盖帽,场均抢断,三分命中率,投篮命中率,罚球命中率等
    TeamAnalysis.End 系统应该允许用户要求结束球队分析任务
    TeamAnalysis.End.Close 在用户确认球队分析认为完成后,系统关闭分析任务,开始新的球队分析任务
    3.2.2球员数据分析
    3.2.2.1特性描述
    当需要查看球员信息时,用户开始查看球员信息
    3.2.2.2刺激/响应序列
    刺激1:用户输入球员信息
    响应:系统显示球员的具体信息
    刺激2:用户输入球员排序条件
    响应:系统显示排序后的球员信息
    刺激3:用户输入球员筛选条件
    响应:系统显示筛选后的球员信息
    刺激4:用户取消数据查看任务
    响应:系统关闭或者结束数据查看任务
    刺激5:用户需要查看当日/当赛季热点球员的信息
    响应:系统显示当日/当赛季热点球员的信息
    刺激6:用户需要查看进步最快球员
    响应:系统显示进步最快的球员
    刺激7:用户需要查看球员的近期/过往比赛信息
    响应:系统显示球员的近期/过往比赛信息
    3.2.2.3相关功能需求
    编号 需求描述
    PlayerAnalysis.Input 系统应该允许用户在查看任务中进行键盘输入
    PlayerAnalysis.Input.Find 在用户输入查找球员命令时,系统要执行查询命令,参见PlayerAnalysis.Find
    PlayerAnalysis.Input.ProgressPlayer 在用户需要查看进步最快球员信息
    PlayerAnalysis.Input.HotPlayer 在用户需要查看当日/当赛季热点球员信息时,系统要执行查询热点球员命令
    PlayerAnalysis.Input.RecentMatches 在用户需要查看最近比赛信息时,系统需要执行显示数据命令
    PlayerAnalysis.Input.PastMatches 在用户需要查看球员过往信息,系统需要执行查看过往比赛命令
    PlayerAnalysis.Input.Sort 在用户输入排序球员命令时,系统要执行排序命令,参见PlayerAnalysis.Sort
    PlayerAnalysis.Input.Screen 在用户输入筛选命令时,系统要执行筛选命令,参见PlayerAnalysis.Screen
    PlayerAnalysis.Find 在用户请求查询球员时,系统允许用户输入球员名称
    PlayerAnalysis.Find.Valid 用户输入已有球员姓名时,系统显示球员信息(参见)
    PlayerAnalysis.Find.InValid 用户输入其他输入时,系统提示输入无效
    PlayerAnalysis.Find.Cancel 用户输入取消查询命令时,系统结束查询任务,开始一个新的球员数据分析任务
    PlayerAnalysis.Sort 用户输入排序依据(球员信息科作为排序依据参见PlayerAnalysis.Player),系统显示排序后的球员信息
    PlayerAnalysis.Sort.null 用户输入的排序依据不存在,系统提示排序依据无效
    PlayerAnalysis.Sort.Default 用户输入排序命令后,系统默认排序依据为球员名称
    PlayerAnalysis.Sort.Cancel 在用户输入取消排序命令时,系统结束排序任务,开始一个新的球员数据分析任务
    PlayerAnalysis.Screen 在用户请求筛选球员时,系统允许输入筛选条件
    PlayerAnalysis.Sreeen.Sort 用户输入正确的筛选条件后,系统对符合条件的球队排序并显示前50的球员(排序依据为得分,篮板,助攻,得分/篮板/助攻(加权比为1:1:1))
    PlayerAnalysis.Screen.Sort.Cancel 用户数据结束筛选命令后,系统结束当前任务,开始新的球员分析任务
    PlayerAnalysis.Player 所有的球员都具有如下信息并可为排序依据::球员名称,所属球队,参赛场数,先发场数,篮板数,助攻数,在
    场时间,本文转载自http://www.biyezuopin.vip/onews.asp?id=14960投篮命中率,三分命中率,罚球命中率,进攻数,防守数,抢断数,盖帽数,失误数,犯规数,得分,效率,GmSc 效率值,真实命中率,投篮效率,篮板率,进攻篮板率,防守篮板率,助攻率,抢断率,盖帽率,失误率,使用率等

PlayerAnalysis.Player.HotPlayer 当日热点球员筛选条件包括但不仅限于以

下几个方面:得分,篮板,助攻,盖帽,抢断

当季热点球员筛选条件包括但不仅限于以下几个方面:场均得分,场均篮板,场均助攻,场均盖帽,场均抢断,三分命中率,投篮命中率,罚球命中率等

package test;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Arrays;
import java.util.Timer;
import java.util.TimerTask;

public class main {
public static void main(String[] args) throws IOException
{
	Console console = new Console();
	PrintStream out = System.out;
	console.execute(out, "--datasource K:/NBAData".split(" "));
	console.execute(out, "-player -sort score.desc,assist.desc -n 2".split(" "));
//	outTestCase();
//	testTeam();
//	testAll();
}

static String[] commands = new String[]
		{
		 "--datasource K:/NBAData",
		 "-team -all -total",
		 "-team",
//		 "-team -all -n 10",
//		 "-team -all -n 3",
//		 "-team -hot assist -n 5",
//		 "-team -hot score -n 5",
//		 "-team -hot rebound -n 5",
//		 "-team -hot  blockShot -n 5",
//		 "-team -hot  steal -n 5",
//		 "-team -hot foul -n 5",
//		 "-team -hot fault -n 5",
//		 "-team -hot shot -n 5",
//		 "-team -hot three -n 5",
//		 "-team -hot penalty -n 5",
//		 "-team -hot defendRebound -n 9",
//		 "-team -hot offendRebound -n 5",
//		 "-team -hot  -n 5",
//		 "-team -avg -n 5 -sort shot.asc",
//		 "-team -total -all -n 10 -sort shot.desc",
//		 "-team -total -all -n 30 -sort point.desc",
//		 "-team -total -all -n 5 -sort assist.desc",
//		 "-team -total -all -n 23 -sort rebound.desc",
//		 "-team -total -all -n 10 -sort blockShot.desc",
//		 "-team -total -all -n 24 -sort steal.desc",
//		 "-team -total -all -n 45 -sort foul.desc",
//		 "-team -total -all -n 60 -sort fault.desc",
//		 "-team -total -all -n 16 -sort shot.desc",
//		 "-team -total -all -n 10 -sort three.desc",
//		 "-team -total -all -n 10 -sort penalty.desc",
//		 "-team -total -all -n 10 -sort defendRebound.desc",
//		 "-team -total -all -n 10 -sort offendRebound.desc",
//		 "-team -total -all -n 10 -sort shot.asc",
//		 "-team -total -all -n 30 -sort point.asc",
//		 "-team -total -all -n 10 -sort assist.asc",
//		 "-team -total -all -n 1 -sort rebound.asc",
//		 "-team -total -all -n 14 -sort blockShot.asc",
//		 "-team -total -all -n 10 -sort steal.asc",
//		 "-team -total -all -n 43 -sort foul.asc",
//		 "-team -total -all -n 23 -sort fault.asc",
//		 "-team -total -all -n 10 -sort shot.asc",
//		 "-team -total -all -n 10 -sort three.asc",
//		 "-team -total -all -n 34 -sort penalty.asc",
//		 "-team -total -all -n 10 -sort defendRebound.asc",
//		 "-team -total -all -n 10 -sort offendRebound.asc",
//		 "-team -avg -all -n 10 -sort shot.desc",
//		 "-team -avg -all -n 30 -sort point.desc",
//		 "-team -avg -all -n 5 -sort assist.desc",
//		 "-team -avg -all -n 23 -sort rebound.desc",
//		 "-team -avg -all -n 10 -sort blockShot.desc",
//		 "-team -avg -all -n 24 -sort steal.desc",
//		 "-team -avg -all -n 45 -sort foul.desc",
//		 "-team -avg -all -n 60 -sort fault.desc",
//		 "-team -avg -all -n 16 -sort shot.desc",
//		 "-team -avg -all -n 10 -sort three.desc",
//		 "-team -avg -all -n 10 -sort penalty.desc",
//		 "-team -avg -all -n 10 -sort defendRebound.desc",
//		 "-team -avg -all -n 10 -sort offendRebound.desc",
//		 "-team -avg -all -n 10 -sort shot.asc",
//		 "-team -avg -all -n 30 -sort point.asc",
//		 "-team -avg -all -n 10 -sort assist.asc",
//		 "-team -avg -all -n 1 -sort rebound.asc",
//		 "-team -avg -all -n 14 -sort blockShot.asc",
//		 "-team -avg -all -n 10 -sort steal.asc",
//		 "-team -avg -all -n 43 -sort foul.asc",
//		 "-team -avg -all -n 23 -sort fault.asc",
//		 "-team -avg -all -n 10 -sort shot.asc",
//		 "-team -avg -all -n 10 -sort three.asc",
//		 "-team -avg -all -n 34 -sort penalty.asc",
//		 "-team -avg -all -n 10 -sort defendRebound.asc",	
//		 "-team -avg -all -n 10 -sort offendRebound.asc",
//		 "-team -high -n 5 -sort stealEfficient.asc",
//		 "-team -high -n 15 -sort winRate.desc",
//		 "-team -high -n 60 -sort offendRound.desc",
//		 "-team -high -n 1 -sort offendEfficient.desc",
//		 "-team -high -n 4 -sort defendEfficient.desc",
//		 "-team -high -n 30 -sort offendReboundEfficient.desc",
//		 "-team -high -n 8 -sort defendReboundEfficient.desc",
//		 "-team -high -n 32 -sort stealEfficient.desc",
//		 "-team -high -n 30 -sort assistEfficient.desc",
//		 "-player",
//		 "-player -all -n 10",
//		 "-player -high -n 10 -sort frequency.desc",
//		 "-player -high -n 10 ",
//		 "-player -high",
//		 "-player -hot rebound -n 5",
//		 "-player -hot assist -n 5",
//		 "-player -hot score -n 5",
//		 "-player -hot rebound -n 10",
//		 "-player -hot assist -n 10",
//		 "-player -hot score -n 10",
//		 "-player -king assist -season",
//		 "-player -king score -season",
//		 "-player -king rebound -season",
//		 "-player -avg -n 5 -filter position.F,league.West,age.<=22",
//		 "-player -avg -n 5 -filter position.F,league.East,age.22<X<=25",
//		 "-player -avg -n 5 -filter position.F,league.All,age.25<X<=30",
//		 "-player -avg -n 5 -filter position.F,league.West,age.>30",
//		 "-player -total -all -n 10 -filter position.G,league.West -sort shot.desc",
//		 "-player -avg -n 5 -filter position.C,league.West,age.All",
//		 "-player -avg -n 5 -filter position.C,league.West",
//		 "-player -avg -n 5 -filter league.West",
//		 "-player -avg -n 5 -sort point.desc",
//		 "-player -avg -n 5 -sort rebound.desc",
//		 "-player -avg -n 5 -sort assist.desc",
//		 "-player -avg -n 5 -sort blockShot.desc",
//		 "-player -avg -n 5 -sort steal.desc",
//		 "-player -avg -n 5 -sort foul.desc",
//		 "-player -avg -n 5 -sort fault.desc",
//		 "-player -avg -n 5 -sort shot.desc",
//		 "-player -avg -n 5 -sort three.desc",
//		 "-player -avg -n 5 -sort penalty.desc",
//		 "-player -avg -n 5 -sort defendRebound.desc",
//		 "-player -avg -n 5 -sort offendRebound.desc",
//		 "-player -avg -n 5 -sort rebound.asc",
//		 "-player -avg -n 5 -sort point.asc",
//		 "-player -avg -n 5 -sort rebound.asc",
//		 "-player -avg -n 5 -sort assist.asc",
//		 "-player -avg -n 5 -sort blockShot.asc",
//		 "-player -avg -n 5 -sort steal.asc",
//		 "-player -avg -n 5 -sort foul.asc",
//		 "-player -avg -n 5 -sort fault.asc",
//		 "-player -avg -n 5 -sort shot.asc",
//		 "-player -avg -n 5 -sort three.asc",
//		 "-player -avg -n 5 -sort penalty.asc",
//		 "-player -avg -n 5 -sort defendReboundEfficient.asc",
//		 "-player -avg -n 5 -sort offendReboundEfficient.asc",
//		 "-player -avg -n 5 -sort rebound.asc",
//		 "-player -total -n 5 -sort point.desc",
//		 "-player -total -n 5 -sort rebound.desc",
//		 "-player -total -n 5 -sort assist.desc",
//		 "-player -total -n 5 -sort blockShot.desc",
//		 "-player -total -n 5 -sort steal.desc",
//		 "-player -total -n 5 -sort foul.desc",
//		 "-player -total -n 5 -sort fault.desc",
//		 "-player -total -n 5 -sort shot.desc",
//		 "-player -total -n 5 -sort three.desc",
//		 "-player -total -n 5 -sort penalty.desc",
//		 "-player -total -n 5 -sort defendReboundEfficient.desc",
//		 "-player -total -n 5 -sort offendReboundEfficient.desc",
//		 "-player -total -n 5 -sort rebound.asc",
//		 "-player -total -n 5 -sort point.asc",
//		 "-player -total -n 5 -sort rebound.asc",
//		 "-player -total -n 5 -sort assist.asc",
//		 "-player -total -n 5 -sort blockShot.asc",
//		 "-player -total -n 5 -sort steal.asc",
//		 "-player -total -n 5 -sort foul.asc",
//		 "-player -total -n 5 -sort fault.asc",
//		 "-player -total -n 5 -sort shot.asc",
//		 "-player -total -n 5 -sort three.asc",
//		 "-player -total -n 5 -sort penalty.asc",
//		 "-player -high -total -n 5 -sort defendReboundEfficient.asc",
//		 "-player  -total -n 5 -sort offendReboundEfficient.asc",
//		 "-player -total -n 5 -sort rebound.asc",
//		 "-player -king rebound -daily",
//		 "-player -king assist -daily",
//		 "-player -king score -daily",
		 
		};

public static void testAll()
{

//	    Timer  timer = new Timer();
//	    TimerTask task = new TimerTask()
//	    {

//			public void run() {
				Console console = new Console();
				PrintStream out = System.out;
				long start = System.currentTimeMillis();
				for (String c : commands)
				{
					System.out.println(c);
					console.execute(out, c.split(" "));
				}
				long end = System.currentTimeMillis();
				System.out.println("time : "+(end - start));
//			}
	    	
//	    };
//	    timer.schedule(task, 400,6000);
			
}

public static void outTestCase() throws IOException
{
 String temp = null;
 BufferedWriter bw = new BufferedWriter(new FileWriter("k:/1.txt"));
 String[] begins =new String[]{
		 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>",
		 "<autotest>",
		 "    <config>",
		 "        <output>",
		 "            <extension>.out</extension>",
		 "        </output>",
		 "    </config>",
		 "    <tests>"
 };
 String[] end = new String[]
		 {
		 "    </tests>",
		 "</autotest>"
		 };

 for (String s : begins )
 {
	 bw.write(s);
	 bw.newLine();
 }
 
 
 for (int i = 0; i < commands.length; i++)
 {
	 
	 bw.write("        <test-case name=\""+(i+1)+"\">");
	 bw.newLine();
	 bw.write("            <command>"+commands[i]+"</command>");
	 bw.newLine();
	 bw.write("            <description>"+commands[i]+"</description>");
	 bw.newLine();
	 bw.write("            <time-limit>1000</time-limit>");
	 bw.newLine();
	 bw.write("        </test-case>");
	 bw.newLine();
 }
 for (String s : end)
 {
	 bw.write(s);
	 bw.newLine();
 }
 bw.close();
}

public static void testTeam()
{
	String[] commands = new String[]
	{
	 "--datasource K:/NBAData",
//	 "-team",
//	 "-team -all -n 10",
//	 "-team -hot assist -n 5",
//	 "-team -avg -n 5 -sort shot.asc",
//	 "-team -total -all -n 10 -sort shot.desc",
	 "-team -total -all -n 60 -sort fault.desc",
   
	};
	Console console = new Console();
	PrintStream out = System.out;
	for (String c : commands)
	{
		console.execute(out, c.split(" "));
	}
	out.close();
}

public static void testPlayer()
{
	String[] commands = new String[]
			{
			"--datasource C:/NBAData",
			"-player",
			"-player -all -n 10",
			"-player -high -n 10 -sort frequency.desc",
			"-player -hot assist -n 5",
			"-player -king score -season",
			"-player -avg -n 5 -filter position.F",
			"-player -total -all -n 10 -filter position.F,league.West -sort shot.desc"
			};
			PrintStream out = System.out;
			Console console = new Console();
			for (String c : commands)
			{
				try{
				console.execute(out, c.split(" "));
				out.flush();
				}catch (Exception e )
				{
					e.printStackTrace();
				}
			}
			out.close();
}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值