コード例 #1
0
ファイル: Manager.cs プロジェクト: Puppetplay/BeThe2016_VER02
        // 투수정보를 가지고 온다.
        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);
        }
コード例 #2
0
ファイル: Manager.cs プロジェクト: Puppetplay/BeThe2016_VER02
        //  한경기의 한쪽 팀의 분석정보를 가져온다.
        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);
        }
コード例 #3
0
ファイル: Manager.cs プロジェクト: Puppetplay/BeThe2016
        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;
            }
        }
コード例 #4
0
ファイル: Manager.cs プロジェクト: Puppetplay/BeThe2016
        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;
        }
コード例 #5
0
        //  한경기의 한쪽 팀의 분석정보를 가져온다.
        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);
        }
コード例 #6
0
ファイル: Manager.cs プロジェクト: Puppetplay/BeThe2016_VER02
        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);
            }
        }
コード例 #7
0
ファイル: Manager.cs プロジェクト: Puppetplay/BeThe2016_VER02
        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);
        }
コード例 #8
0
        //  한경기의 한쪽 팀의 분석정보를 가져온다.
        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);
        }