// 투수정보를 가지고 온다. private PitcherInfo GetFirstPitchers(Match match, AttackType attckType, String teamInitial, DateTime dateTime) { // 경기를 가져온다. DatabaseManager dbMgr = new DatabaseManager(); var players = dbMgr.SelectAll <Player>(); var matches = dbMgr.SelectAll <Match>(); var schedules = dbMgr.SelectAll <Schedule>(); var ths = dbMgr.SelectAll <Th>(); var bats = dbMgr.SelectAll <Bat>(); // 지난 데이터의 분석기 생성 BeThe.DataAnalyzer.Manager analyzer = new BeThe.DataAnalyzer.Manager(); analyzer.MaxDateTime = dateTime; ThType tyType = attckType == AttackType.Home ? ThType.말 : ThType.초; var pitcherId = (from t in ths join b in bats on t.Id equals b.ThId where t.MatchId == match.Id && t.Number == 1 && t.ThType == tyType select b).First().PitcherId; // 투수 정보 가져오기 var pitcherInfo = analyzer.GetPitcherInfo(pitcherId, 4); return(pitcherInfo); }
// 한경기의 한쪽 팀의 분석정보를 가져온다. private AnalyzerData GetAnalyzerData(Match match, AttackType attckType, String teamInitial, DateTime dateTime) { // 분석된 데이터 만들기 AnalyzerData analyzerData = new AnalyzerData(); analyzerData.HitterInfos = new List <HitterInfo>(); // 경기를 가져온다. DatabaseManager dbMgr = new DatabaseManager(); var players = dbMgr.SelectAll <Player>(); var matches = dbMgr.SelectAll <Match>(); var schedules = dbMgr.SelectAll <Schedule>(); var ths = dbMgr.SelectAll <Th>(); var bats = dbMgr.SelectAll <Bat>(); ThType tyType = attckType == AttackType.Home ? ThType.말 : ThType.초; // 지난 데이터의 분석기 생성 BeThe.DataAnalyzer.Manager analyzer = new BeThe.DataAnalyzer.Manager(); analyzer.MaxDateTime = dateTime; // 당일 선발투수 가져오기(분석시 입력 혹은 크롤링 구현) var pitcherId = (from t in ths join b in bats on t.Id equals b.ThId where t.MatchId == match.Id && t.Number == 1 && t.ThType == tyType select b).First().PitcherId; // 투수 정보 가져오기 analyzerData.PitcherInfo = analyzer.GetPitcherInfo(pitcherId, 4); // 타자리스트 얻어오기 var hitters = analyzer.GetStartPlayerForNDays(teamInitial, 4); foreach (var hitter in hitters) { // 각타자의 정보 얻어오기 var HitInfo = GetHitterInfo(hitter.PlayerId, analyzer, teamInitial); analyzerData.HitterInfos.Add(HitInfo); } return(analyzerData); }
private Bat MakeBat(String content, Int32 number, MatchInfo matchInfo, ThType type) { try { Bat bat = new Bat(); HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(content); // Hitter Id var node = doc.DocumentNode.SelectSingleNode("//*[@class='btn_detail detail_minus']"); String item = node.GetAttributeValue("onclick", ""); String[] items = item.Split(separatorComma, StringSplitOptions.RemoveEmptyEntries); bat.HitterId = Convert.ToInt32(items[1]); Int32 count = 0; List<PitcherInfo> pitcherInfos = null; List<HitterInfo> hitterInfos = null; if (type == ThType.초) { pitcherInfos = matchInfo.HomeTeamPitcherInfos; hitterInfos = matchInfo.AwayTeamHitterInfos; count = matchInfo.AwayHitterCount++; } else { pitcherInfos = matchInfo.AwayTeamPitcherInfos; hitterInfos = matchInfo.HomeTeamHitterInfos; count = matchInfo.HomeHitterCount++; } // Pitcher Id Int32 sum = 0; foreach (var pitcherInfo in pitcherInfos) { sum += pitcherInfo.BatterCount; if (count < sum) { bat.PitcherId = pitcherInfo.PlayerId; break; } } // 세부 결과 node = doc.DocumentNode.SelectSingleNode("//td"); var delNode = node.SelectSingleNode("//table"); node.RemoveChild(delNode); delNode = node.SelectSingleNode("//span"); node.RemoveChild(delNode); bat.DetailResult = node.InnerText.Trim(); // 결과가 나지 않은 타석 제거 String[] datas = bat.DetailResult.Split(separatorBlank, StringSplitOptions.RemoveEmptyEntries); if (datas.Count() == 4) { if (datas[0] == datas[2] && datas[1] == datas[3]) { if (type == ThType.초) { matchInfo.AwayHitterCount--; } else { matchInfo.HomeHitterCount--; } return null; } } // 결과 var hitterResults = (from p in hitterInfos where p.PlayerId == bat.HitterId select p.HitterResults).First(); var hitterResult = (from r in hitterResults where r.Number == number select r).First(); bat.Result = hitterResult.Result; //1 or 2 or 3 or 안 or 홈 으로끈나는것들 //Pass -> '희' 포함 or 4구, 타방, 고4, 4구 if (bat.Result.EndsWith("1") || bat.Result.EndsWith("2") || bat.Result.EndsWith("3") || bat.Result.EndsWith("안") || bat.Result.EndsWith("홈")) { bat.PResult = PResultType.Hit; } else if (bat.Result.EndsWith("희") || bat.Result.EndsWith("4구") || bat.Result.EndsWith("타방") || bat.Result.EndsWith("고4")) { bat.PResult = PResultType.Pass; } else { bat.PResult = PResultType.Out; } hitterResults.Remove(hitterResult); // Balls bat.Balls = MakeBalls(content); return bat; } catch(Exception e) { return null; } }
private List<Bat> MakeBatts(Match match, String content, Int32 number, MatchInfo matchInfo, ThType type) { List<Bat> bats = new List<Bat>(); HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(content); var nodes = doc.DocumentNode.SelectNodes("/table[@class='tEx Ex2']/tbody[1]/tr/td"); if(nodes == null) { return null; } foreach (var node in nodes) { var bat = MakeBat(node.OuterHtml, number, matchInfo, type); if (bat != null) { bats.Add(bat); } } return bats; }
// 한경기의 한쪽 팀의 분석정보를 가져온다. private List <BatterInfo> GetAnalyzerData(Match match, AttackType attckType, String teamInitial, DateTime dateTime) { // 경기를 가져온다. DatabaseManager dbMgr = new DatabaseManager(); var players = dbMgr.SelectAll <Player>(); var matches = dbMgr.SelectAll <Match>(); var schedules = dbMgr.SelectAll <Schedule>(); var ths = dbMgr.SelectAll <Th>(); var bats = dbMgr.SelectAll <Bat>(); ThType tyType = attckType == AttackType.Home ? ThType.말 : ThType.초; // 지난 데이터의 분석기 생성 BeThe.DataAnalyzer.Manager analyzer = new BeThe.DataAnalyzer.Manager(); analyzer.MaxDateTime = dateTime; var batterInfos = new List <BatterInfo>(); Int32 pitcherId; // 당일 선발투수 가져오기(분석시 입력 혹은 크롤링 구현) try { pitcherId = (from t in ths join b in bats on t.Id equals b.ThId where t.MatchId == match.Id && t.Number == 1 && t.ThType == tyType select b).First().PitcherId; //// 투수 정보 가져오기 //Boolean isQualityStart = analyzer.IsQualityStart(pitcherId); //if (isQualityStart) //{ // return batterInfos; //} } catch { return(batterInfos); } // N경기동안 M번 선발출장한 선수들 가져오기 var hitters = analyzer.GetPlayersStartingGame(teamInitial, 5, 4); // 타자조건 실행하기 foreach (var hitter in hitters) { try { // 타석수 구하기 var pa = analyzer.GetPA(teamInitial, hitter.PlayerId); // 안타수 구하기 var hitCount = analyzer.GetHitCout(teamInitial, hitter.PlayerId); // 안타확률 구하기 var hitRatio = (hitCount * 1.0) / pa; // 팀의 지난 M경기동안 안타를 친날 구하기 var hitDayCount = analyzer.GetHitDayCountForNDays(teamInitial, hitter.PlayerId, 6); var batterInfo = new BatterInfo(); if (hitRatio > 0.2 && hitDayCount >= 5) { batterInfo.PlayerId = hitter.PlayerId; batterInfo.Name = hitter.Name; batterInfo.PA = pa; batterInfo.HitCount = hitCount; batterInfo.HitRatio = hitRatio; batterInfo.HitDayCount = hitDayCount; batterInfos.Add(batterInfo); } } catch { } } return(batterInfos); }
private Bat MakeBat(String content, Int32 number, MatchInfo matchInfo, ThType type) { try { Bat bat = new Bat(); HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(content); // Hitter Id var node = doc.DocumentNode.SelectSingleNode("//*[@class='btn_detail detail_minus']"); String item = node.GetAttributeValue("onclick", ""); String[] items = item.Split(separatorComma, StringSplitOptions.RemoveEmptyEntries); bat.HitterId = Convert.ToInt32(items[1]); Int32 count = 0; List <PitcherInfo> pitcherInfos = null; List <HitterInfo> hitterInfos = null; if (type == ThType.초) { pitcherInfos = matchInfo.HomeTeamPitcherInfos; hitterInfos = matchInfo.AwayTeamHitterInfos; count = matchInfo.AwayHitterCount++; } else { pitcherInfos = matchInfo.AwayTeamPitcherInfos; hitterInfos = matchInfo.HomeTeamHitterInfos; count = matchInfo.HomeHitterCount++; } // Pitcher Id Int32 sum = 0; foreach (var pitcherInfo in pitcherInfos) { sum += pitcherInfo.BatterCount; if (count < sum) { bat.PitcherId = pitcherInfo.PlayerId; break; } } // 세부 결과 node = doc.DocumentNode.SelectSingleNode("//td"); var delNode = node.SelectSingleNode("//table"); node.RemoveChild(delNode); delNode = node.SelectSingleNode("//span"); node.RemoveChild(delNode); bat.DetailResult = node.InnerText.Trim(); // 결과가 나지 않은 타석 제거 String[] datas = bat.DetailResult.Split(separatorBlank, StringSplitOptions.RemoveEmptyEntries); if (datas.Count() == 4) { if (datas[0] == datas[2] && datas[1] == datas[3]) { if (type == ThType.초) { matchInfo.AwayHitterCount--; } else { matchInfo.HomeHitterCount--; } return(null); } } // 결과 var hitterResults = (from p in hitterInfos where p.PlayerId == bat.HitterId select p.HitterResults).First(); var hitterResult = (from r in hitterResults where r.Number == number select r).First(); bat.Result = hitterResult.Result; //1 or 2 or 3 or 안 or 홈 으로끈나는것들 //Pass -> '희' 포함 or 4구, 타방, 고4, 4구 if (bat.Result.EndsWith("1") || bat.Result.EndsWith("2") || bat.Result.EndsWith("3") || bat.Result.EndsWith("안") || bat.Result.EndsWith("홈")) { bat.PResult = PResultType.Hit; } else if (bat.Result.EndsWith("희") || bat.Result.EndsWith("4구") || bat.Result.EndsWith("타방") || bat.Result.EndsWith("고4")) { bat.PResult = PResultType.Pass; } else { bat.PResult = PResultType.Out; } hitterResults.Remove(hitterResult); // Balls bat.Balls = MakeBalls(content); return(bat); } catch (Exception) { return(null); } }
private List <Bat> MakeBatts(Match match, String content, Int32 number, MatchInfo matchInfo, ThType type) { List <Bat> bats = new List <Bat>(); HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(content); var nodes = doc.DocumentNode.SelectNodes("/table[@class='tEx Ex2']/tbody[1]/tr/td"); if (nodes == null) { return(null); } foreach (var node in nodes) { var bat = MakeBat(node.OuterHtml, number, matchInfo, type); if (bat != null) { bats.Add(bat); } } return(bats); }
// 한경기의 한쪽 팀의 분석정보를 가져온다. private List <BatterInfo> GetAnalyzerData(Match match, AttackType attckType, String teamInitial, DateTime dateTime, Int32 alldayHitcount) { // 경기를 가져온다. DatabaseManager dbMgr = new DatabaseManager(); var players = dbMgr.SelectAll <Player>(); var matches = dbMgr.SelectAll <Match>(); var schedules = dbMgr.SelectAll <Schedule>(); var ths = dbMgr.SelectAll <Th>(); var bats = dbMgr.SelectAll <Bat>(); ThType tyType = attckType == AttackType.Home ? ThType.말 : ThType.초; // 지난 데이터의 분석기 생성 BeThe.DataAnalyzer.Manager analyzer = new BeThe.DataAnalyzer.Manager(); analyzer.MaxDateTime = dateTime; var batterInfos = new List <BatterInfo>(); Int32 pitcherId; // 당일 선발투수 가져오기(분석시 입력 혹은 크롤링 구현) try { pitcherId = (from t in ths join b in bats on t.Id equals b.ThId where t.MatchId == match.Id && t.Number == 1 && t.ThType == tyType select b).First().PitcherId; // 투수 정보 가져오기 Boolean isQualityStart = analyzer.IsQualityStart(pitcherId); if (isQualityStart) { return(batterInfos); } } catch { return(batterInfos); } // 타자리스트 얻어오기 var hitters = analyzer.GetStartPlayerForNDays(teamInitial, 3); foreach (var hitter in hitters) { try { var hitRatio = analyzer.GetHitRatio(teamInitial, hitter.PlayerId, 3); var allHitRatio = analyzer.GetHitRatio(teamInitial, hitter.PlayerId, 100); var isAllFastNumber = analyzer.IsAllFastNumber(teamInitial, hitter.PlayerId, 3); Int32 hitCount = analyzer.GetHitNumberForNDays(teamInitial, hitter.PlayerId, 1); if (hitRatio > 0.33 && allHitRatio > 0.3 && isAllFastNumber && (hitCount < 2)) { var batterInfo = new BatterInfo(); batterInfo.PlayerId = hitter.PlayerId; batterInfo.Name = hitter.Name; analyzer.MaxDateTime = analyzer.MaxDateTime.AddDays(-1); batterInfo.HitRatio = analyzer.GetHitRatio(teamInitial, hitter.PlayerId, 7); analyzer.MaxDateTime = analyzer.MaxDateTime.AddDays(1); batterInfos.Add(batterInfo); } } catch { } } return(batterInfos); }