/// <summary> /// Calculates the league PerGame. /// </summary> /// <param name="playerStats">The player stats.</param> /// <param name="teamStats">The team stats.</param> /// <returns></returns> public static PlayerStats CalculateLeagueAverages(Dictionary<int, PlayerStats> playerStats, Dictionary<int, TeamStats> teamStats) { var lps = new PlayerStats(new Player(-1, -1, "League", "Averages", Position.None, Position.None)); foreach (int key in playerStats.Keys) { lps.AddPlayerStats(playerStats[key]); } var ls = new TeamStats(-2, "League"); for (int i = 0; i < teamStats.Count; i++) { ls.AddTeamStats(teamStats[i], Span.Season); ls.AddTeamStats(teamStats[i], Span.Playoffs); } ls.CalcMetrics(ls); ls.CalcMetrics(ls, true); lps.CalcMetrics(ls, ls, ls, true); lps.CalcMetrics(ls, ls, ls, true, playoffs: true); var playerCount = (uint) playerStats.Count; for (int i = 0; i < lps.Totals.Length; i++) { lps.Totals[i] /= playerCount; lps.PlTotals[i] /= playerCount; } //ps.CalcAvg(); return lps; }
/// <summary>Calculates the league PerGame.</summary> /// <param name="playerStats">The player stats.</param> /// <param name="teamStats">The team stats.</param> /// <returns></returns> public static PlayerStats CalculateLeagueAverages( Dictionary<int, PlayerStats> playerStats, Dictionary<int, TeamStats> teamStats) { var lps = new PlayerStats(new Player(-1, -1, "League", "Averages", Position.None, Position.None)); foreach (var key in playerStats.Keys) { lps.AddPlayerStats(playerStats[key]); } var ls = new TeamStats(-2, "League"); for (var i = 0; i < teamStats.Count; i++) { ls.AddTeamStats(teamStats[i], Span.Season); ls.AddTeamStats(teamStats[i], Span.Playoffs); } ls.CalcMetrics(ls); ls.CalcMetrics(ls, true); foreach (var name in PlayerStatsHelper.MetricsNames) { try { lps.Metrics[name] = playerStats.Where(ps => !Double.IsNaN(ps.Value.Metrics[name]) && !Double.IsInfinity(ps.Value.Metrics[name])) .Average(ps => ps.Value.Metrics[name]); } catch (InvalidOperationException) { lps.Metrics[name] = Double.NaN; } try { lps.PlMetrics[name] = playerStats.Where(ps => !Double.IsNaN(ps.Value.PlMetrics[name]) && !Double.IsInfinity(ps.Value.Metrics[name])) .Average(ps => ps.Value.PlMetrics[name]); } catch (InvalidOperationException) { lps.Metrics[name] = Double.NaN; } } var playerCount = (uint) playerStats.Count; for (var i = 0; i < lps.Totals.Length; i++) { lps.Totals[i] /= playerCount; lps.PlTotals[i] /= playerCount; } //ps.CalcAvg(); return lps; }
/// <summary> /// Updates the tab viewing the year-by-year overview of the player's stats. /// </summary> private void updateYearlyReport() { var psrList = new List<PlayerStatsRow>(); var psCareer = new PlayerStats(new Player(_psr.ID, _psr.TeamF, _psr.LastName, _psr.FirstName, _psr.Position1, _psr.Position2)); string qr = "SELECT * FROM PastPlayerStats WHERE PlayerID = " + _psr.ID + " ORDER BY CAST(\"SOrder\" AS INTEGER)"; DataTable dt = _db.GetDataTable(qr); foreach (DataRow dr in dt.Rows) { var ps = new PlayerStats(); bool isPlayoff = ParseCell.GetBoolean(dr, "isPlayoff"); ps.GetStatsFromDataRow(dr, isPlayoff); Dictionary<string, double> tempMetrics = isPlayoff ? ps.PlMetrics : ps.Metrics; PlayerStats.CalculateRates(isPlayoff ? ps.PlTotals : ps.Totals, ref tempMetrics); string type = isPlayoff ? "Playoffs " + ParseCell.GetString(dr, "SeasonName") : "Season " + ParseCell.GetString(dr, "SeasonName"); var curPSR = new PlayerStatsRow(ps, type, isPlayoff) { TeamFDisplay = ParseCell.GetString(dr, "TeamFin"), TeamSDisplay = ParseCell.GetString(dr, "TeamSta") }; psrList.Add(curPSR); psCareer.AddPlayerStats(ps); } for (int i = 1; i <= _maxSeason; i++) { var displayNames = new Dictionary<int, string>(); SQLiteIO.GetSeasonDisplayNames(MainWindow.CurrentDB, i, ref displayNames); string pT = "Players"; if (i != _maxSeason) { pT += "S" + i; } string q = "select * from " + pT + " where ID = " + _selectedPlayerID; DataTable res = _db.GetDataTable(q); if (res.Rows.Count == 1) { var ps = new PlayerStats(res.Rows[0], MainWindow.TST); PlayerStats.CalculateRates(ps.Totals, ref ps.Metrics); var psr2 = new PlayerStatsRow(ps, "Season " + MainWindow.GetSeasonName(i)); psr2.TeamFDisplay = Misc.GetDisplayName(displayNames, psr2.TeamF); psr2.TeamSDisplay = Misc.GetDisplayName(displayNames, psr2.TeamS); psrList.Add(psr2); psCareer.AddPlayerStats(ps); } pT = "PlayoffPlayers"; if (i != _maxSeason) { pT += "S" + i; } q = "select * from " + pT + " where ID = " + _selectedPlayerID; res = _db.GetDataTable(q); if (res.Rows.Count == 1) { var ps = new PlayerStats(res.Rows[0], MainWindow.TST, true); if (ps.PlTotals[PAbbr.GP] > 0) { PlayerStats.CalculateRates(ps.PlTotals, ref ps.PlMetrics); var psr2 = new PlayerStatsRow(ps, "Playoffs " + MainWindow.GetSeasonName(i), true); psr2.TeamFDisplay = Misc.GetDisplayName(displayNames, psr2.TeamF); psr2.TeamSDisplay = Misc.GetDisplayName(displayNames, psr2.TeamS); psrList.Add(psr2); psCareer.AddPlayerStats(ps, true); } } } PlayerStats.CalculateRates(psCareer.Totals, ref psCareer.Metrics); psrList.Add(new PlayerStatsRow(psCareer, "Career", "Career")); var psrListCollection = new ListCollectionView(psrList); Debug.Assert(psrListCollection.GroupDescriptions != null, "psrListCollection.GroupDescriptions != null"); psrListCollection.GroupDescriptions.Add(new PropertyGroupDescription("Group")); dgvYearly.ItemsSource = psrListCollection; }