พื้นที่เก็บข้อมูลนี้มีการรวบรวมเครื่องมือโครงการและทรัพยากรที่เปิดใช้งานการวิเคราะห์ที่มีประสิทธิภาพและการสร้างภาพข้อมูลฟุตบอล
พื้นที่เก็บข้อมูลนี้มีการรวบรวมเครื่องมือโครงการและทรัพยากรที่มีจุดมุ่งหมายเพื่อสนับสนุนการสร้างข้อมูลเชิงลึกที่มีความหมายจากข้อมูลฟุตบอล Python ใช้สำหรับการสกัดการประมวลผลการวิเคราะห์และการสร้างภาพข้อมูลเหตุการณ์ข้อมูลทีมที่รวมข้อมูลมูลค่าตลาดและอื่น ๆ
พื้นที่เก็บข้อมูลถูกแบ่งย่อยออกเป็นโครงการมัดและโครงการย่อยซึ่งแต่ละโครงการมีวัตถุประสงค์เพื่อทำการวิเคราะห์โดยละเอียดสร้างข้อมูลเชิงลึกที่เฉพาะเจาะจงหรือแนะนำระดับระบบอัตโนมัติในการวิเคราะห์ข้อมูลฟุตบอล การใช้เนื้อหาของพื้นที่เก็บข้อมูลนี้มีการสร้างภาพนวนิยายและข้อมูลที่ให้ข้อมูลจำนวนหนึ่งและแบ่งปันและแบ่งปันกับชุมชนการวิเคราะห์ข้อมูลฟุตบอลผ่าน Twitter (@_jkds_)
เพื่อสนับสนุนผู้อื่นที่ต้องการพัฒนาทักษะการวิเคราะห์ข้อมูลของพวกเขาภายในบริบทของข้อมูลฟุตบอลฉันได้ผลิตคู่มือการเริ่มต้นใช้งาน
ต้นไม้ด้านล่าง (คลิกแบบเลื่อนลงเพื่อขยาย) นำเสนอโครงสร้างโฟลเดอร์ของที่เก็บ Git นี้ โปรดทราบว่าบางไฟล์แต่ละไฟล์ถูกละเว้นจากแผนภาพเพื่อความเรียบง่าย
football-data-analytics
│
├── analysis_tools
│ ├── __init__.py
│ ├── get_football_data.py [not included in git repo]
│ ├── logos_and_badges.py
│ ├── models.py
│ ├── pitch_zones.py
│ ├── statsbomb_custom_events.py
│ ├── statsbomb_data_engineering.py
│ ├── whoscored_custom_events.py
│ ├── whoscored_data_engineering.py
│ ├── wyscout_data_engineering.py
│
├── data_directory
│ ├── leaguetable_data
│ ├── misc_data
│ │ ├── articles
│ │ ├── images
│ ├── statsbomb_data [contents not included in git repo]
│ ├── transfermarkt_data
│ ├── whoscored_data [contents not included in git repo]
│ ├── wyscout_data
│
├── model_directory
│ ├── pass_cluster_model
│ │ ├── PassClusterModel65.joblib
│ ├── xg_model
│ │ ├── log_regression_xg_model.joblib
│
├── projects
│ ├── 00_data_import_and_misc_work
│ │ ├── download_yt_video.py
│ │ ├── import_data_fbref.py
│ │ ├── import_data_leaguetable.py
│ │ ├── import_data_whoscored.py
│ │ ├── scrape_data_transfermarkt.py
│ │ ├── misc_work
│ ├── 01_wc2018_box2box_mids
│ │ ├── worldcup_b2b_mids.py
│ ├── 02_player_team_valuation
│ │ ├── team_player_value_analysis.py
│ ├── 03_model_development_and_implementation
│ │ ├── pass_cluster_data_collection.py
│ │ ├── shot_xg_plot.py
│ │ ├── xg_log_regression_model.py
│ │ ├── xg_neural_network.py
│ ├── 04_match_reports
│ │ ├── off_def_shape_report_ws.py
│ │ ├── pass_report_ws.py
│ │ ├── shot_report_understat.py
│ ├── 05_competition_reports_top_players
│ │ ├── player_defensive_contribution.py
│ │ ├── player_effective_carriers.py
│ │ ├── player_effective_passers.py
│ │ ├── player_high_defensive_actions.py
│ │ ├── player_impact_on_team.py
│ │ ├── player_penalty_takers.py
│ │ ├── player_threat_creators.py
│ │ ├── player_threat_creators_zonal_comparison.py
│ ├── 06_competition_reports_top_teams
│ │ ├── team_ball_winning.py
│ │ ├── team_common_zonal_actions.py
│ │ ├── team_cross_success.py
│ │ ├── team_delta_threat_creation.py
│ │ ├── team_fullback_combinations.py
│ │ ├── team_setpiece_shot_concession.py
│ │ ├── team_threat_creation.py
│ │ ├── xg_league_table_sb.py
│ ├── 07_player_reports
│ │ ├── advanced_swarm_radar.py
│ │ ├── player_report_fullback.py
│ ├── 08_evolution_of_shooting
│ │ ├── shot_characteristics_trending.py
│ ├── 09_league_position_metric_correlation
│ │ ├── team_metric_pts_correlation.py
│ ├── 10_team_buildup_passes
│ │ ├── team_pass_tendencies.py
│ ├── 11_justice_league
│ │ ├── justice_league.py
│ ├── 99_private_work
│
├── .gitignore
│
├── Getting Started with Football Analytics.md
│
├── LICENSE
│
├── README.md
ดังที่แสดงในโครงสร้างโฟลเดอร์ด้านบนที่เก็บมีโฟลเดอร์คีย์สามโฟลเดอร์:
โดยทั่วไปแต่ละโครงการทำตามขั้นตอนเชิงตรรกะจำนวนหนึ่ง:
โครงการมีหมายเลขขึ้นอยู่กับตัวระบุเชิงตัวเลขของพื้นที่โฟลเดอร์โครงการที่พวกเขาได้ดำเนินการและจัดเก็บ ทศนิยมจะใช้เมื่อมีการดำเนินงานย่อย/ชิ้นงานย่อยมากกว่าหนึ่งชิ้นในพื้นที่โฟลเดอร์เดียวกัน ตัวอย่างเช่นโครงการย่อย 2.1 และ 2.2 เป็นงานสองชิ้นแยกที่มีอยู่ภายในโครงการ 2 ซึ่งเก็บไว้ในพื้นที่โฟลเดอร์ 02_player_team_valuation_transfermarkt เลือกชื่อโครงการเพื่อขยายแบบเลื่อนลงและหาข้อมูลเพิ่มเติม
แหล่งข้อมูล: รายงานการจับคู่ StatsBomb & FIFA
พื้นที่โครงการ: 01_wc2018_box2box_mids
รหัส: worldcup_b2b_mids.py
สรุปและผลผลิต: การตรวจสอบกล่องที่มีประสิทธิภาพมากที่สุดไปยังบ็อกซ์มิดฟิลด์ในการแข่งขันฟุตบอลโลกปี 2018 จำนวนตัวชี้วัดที่กำหนดเองถูกใช้เพื่อทำคะแนนมิดฟิลด์กลางในการชนะบอลการเก็บรักษาลูกและความคิดสร้างสรรค์และการเคลื่อนไหว กล่องที่ดีต่อกล่องกองกลางถูกกำหนดให้เป็นกองกลางกลางที่เก่งในแต่ละพื้นที่เหล่านี้
แหล่งข้อมูล: Transfermarkt
พื้นที่โครงการ: 00_data_import_and_misc_work & 02_player_team_valuation
รหัส: scrape_data_transfermarkt.py & team_player_value_analysis.py
สรุปและผลลัพธ์: การพัฒนาเครื่องมือในการขูดข้อมูลทีมและตลาดมูลค่าผู้เล่นจาก transfermarkt.co.uk การสร้าง "ภาพลูกเสือ" ที่เน้นผู้เล่นจากลีกที่กำหนดด้วยการผสมผสานที่ดีของอายุและการมีส่วนร่วมเป้าหมายต่อมูลค่าตลาด£ m งานยังสำรวจการใช้แบบจำลองทางสถิติเพื่อทำนายมูลค่าตลาดตามประสิทธิภาพของผู้เล่น
แหล่งข้อมูล: Transfermarkt
พื้นที่โครงการ: 00_data_import_and_misc_work & 02_player_team_valuation
รหัส: scrape_data_transfermarkt.py & team_player_value_analysis.py
สรุปและผลลัพธ์: การพัฒนาเครื่องมือในการขูดข้อมูลทีมและตลาดมูลค่าผู้เล่นจาก transfermarkt.co.uk การสอบสวนของทีมภายใต้/การดำเนินการตามการจัดอันดับลีกและการจัดอันดับค่าทีมรวม
แหล่งข้อมูล: wyscout
พื้นที่โครงการ: model_directory & 03_model_development_and_implementation
รหัส: xg_log_regression_model.py, xg_neural_network.py & shot_xg_plot.py
สรุปและผลลัพธ์: การใช้งานและการทดสอบแบบจำลองความน่าจะเป็นตามเป้าหมายที่คาดหวังขั้นพื้นฐาน งานนี้รวมถึงการพัฒนาและการเปรียบเทียบรูปแบบการถดถอยโลจิสติกส์เป้าหมายที่คาดหวังและโมเดลเป้าหมายของเครือข่ายประสาทซึ่งแต่ละครั้งได้รับการฝึกฝนมากกว่า 40000 นัดในลีก 'Big Five' ของยุโรปในช่วงฤดูกาล 2017/2018 แบบจำลองนี้ใช้ในการคำนวณเป้าหมายที่คาดหวังสำหรับผู้เล่นสโมสรและลีกเฉพาะในช่วงเวลาที่กำหนด
แหล่งข้อมูล: OPTA
พื้นที่โครงการ: model_directory, 03_model_development_and_implementation & repo ภายนอก: ml_models_collection
รหัส: pass_cluster_data_collection.py, models.py, repo ภายนอก: ml_model.ipynb
สรุปและเอาท์พุท: การใช้งาน 5,000,000+ ผ่านกับลีก "บิ๊ก 5" ของยุโรป (OPTA Data, 2019/20 - 2022/23) ฉันได้สร้างรูปแบบการจัดกลุ่มที่สามารถส่งผ่านที่ประสบความสำเร็จให้กับหนึ่งใน 65 กลุ่ม งานนี้เกี่ยวข้องกับการสร้างท่อเรียนรู้ของเครื่องจักรและการทดสอบอัลกอริทึมการจำแนกประเภทที่หลากหลาย โมเดลที่เลือกใช้ AK หมายถึงอัลกอริทึมการจัดกลุ่มเพื่อกำหนดบัตรผ่านซึ่งฉันได้บรรจุไว้ในฟังก์ชั่นการจัดกลุ่มเพื่อสนับสนุนโครงการวิเคราะห์ฟุตบอลของฉันจำนวนมาก
แหล่งข้อมูล: Statsbomb
พื้นที่โครงการ: การวิเคราะห์ _tools
รหัส: models.py
สรุปและผลลัพธ์: การใช้วิธี Monte-Carlo เพื่อจำลองความน่าจะเป็นของผลลัพธ์การจับคู่แต่ละรายการตามเหตุการณ์การยิงและเป้าหมายที่คาดหวัง (XG) จำนวนมาก (10,000+) ของการจำลองดำเนินการในการแข่งขันที่กำหนดเพื่อความน่าจะเป็นชนะโดยประมาณสำหรับแต่ละทีมและความน่าจะเป็น คะแนนที่คาดหวังในการแข่งขันที่กำหนดนั้นจะคำนวณเป็นเพียง 3 × Win_Probability + 1 × DART_PROABILITY วิธีการที่นำมาใช้นั้นพึ่งพาสมมติฐานที่ว่า XG แสดงถึงความน่าจะเป็นในการให้คะแนนและเหตุการณ์การยิงแต่ละครั้งนั้นเป็นอิสระ
แหล่งข้อมูล: understat
พื้นที่โครงการ: 04_match_reports
รหัส: shot_report_understat.py
สรุปและเอาท์พุท: การพัฒนาสคริปต์เพื่อดึงข้อมูลการยิงจาก understat และสร้างรายงานการถ่ายภาพสำหรับการจับคู่ที่เลือกใด ๆ
แหล่งข้อมูล: opta/whoscored
พื้นที่โครงการ: 04_match_reports
รหัส: pass_report_ws.py
สรุปและผลลัพธ์: การออกแบบและการพัฒนาอัลกอริทึมที่ระบุและนับผ่านที่คล้ายกันตามพื้นที่ของสนามที่พวกเขาเริ่มและเสร็จสิ้น การสร้างรายงานการไหลผ่านระหว่างโซนสำหรับการจับคู่ที่เลือก
แหล่งข้อมูล: opta/whoscored
พื้นที่โครงการ: 04_match_reports
รหัส: pass_report_ws.py
สรุปและผลลัพธ์: การออกแบบและการพัฒนาอัลกอริทึมเพื่อคำนวณดินแดนของผู้เล่นตามตำแหน่งของการกระทำในการเล่นทั้งหมดตลอดการแข่งขันรวมถึงการลบค่าผิดปกติ การสร้างรายงานรูปร่างสำหรับการจับคู่ที่เลือกใด ๆ รวมถึงการคำนวณพื้นที่อาณาเขตเป็นพร็อกซีสำหรับพื้นที่พิทช์ที่ครอบคลุม
แหล่งข้อมูล: opta/whoscored
พื้นที่โครงการ: 05_competition_reports_top_players
รหัส: player_defensive_contribution.py
สรุปและผลลัพธ์: การประเมินผลการสนับสนุนการป้องกันของผู้เล่นทุกคนในช่วงระยะเวลาของการแข่งขันโดยมีการระบุผู้เล่นชั้นนำโดยการวัดเช่นการกู้คืนและการชนะบอลต่อการสัมผัส 100 ครั้ง งานรวมถึงการใส่ใจของแผนภาพการกระจายเพชรที่สามารถนำกลับมาใช้ใหม่สำหรับพล็อตการกระจาย 2D ใด ๆ
แหล่งข้อมูล: opta/whoscored
พื้นที่โครงการ: 05_competition_reports_top_players
รหัส: player_defensive_contribution.py
สรุปและผลลัพธ์: การประเมินจำนวนการกระทำการป้องกันที่เสร็จสมบูรณ์ในฝ่ายค้านที่สามโดยผู้เล่นทุกคนในช่วงระยะเวลาของการแข่งขันแสดงให้เห็นว่าใครมีแนวโน้มที่จะปกป้องจากด้านหน้า
แหล่งข้อมูล: opta/whoscored
พื้นที่โครงการ: 05_competition_reports_top_players
รหัส: player_effective_passers.py
สรุปและผลลัพธ์: การระบุผู้สัญจรที่มีประสิทธิภาพผ่านการประเมินการผ่านในการเล่นทั้งหมดที่เสร็จสมบูรณ์ตลอดระยะเวลาของการแข่งขัน ตัวชี้วัดเช่น Progressive Passs, การคุกคามที่คาดหวังสะสมและส่งผ่านเข้าไปในกล่องฝ่ายค้านต่อ 90 ถูกนำมาใช้เพื่อระบุผู้เล่นชั้นนำ งานนี้เกี่ยวข้องกับการดำเนินการตามรูปแบบการคุกคามที่คาดหวังซึ่งพัฒนาโดย Karun Singh
แหล่งข้อมูล: opta/whoscored
พื้นที่โครงการ: 05_competition_reports_top_players
รหัส: player_effective_carriers.py
สรุปและผลลัพธ์: การระบุผู้ให้บริการที่มีประสิทธิภาพผ่านการประเมินการดำเนินการเสร็จสมบูรณ์ตลอดระยะเวลาของการแข่งขัน งานนี้เกี่ยวข้องกับการพัฒนาโมดูลเพื่ออนุมานเหตุการณ์พกพาจากข้อมูลเหตุการณ์ OPTA (ไม่ได้บันทึกไว้)
แหล่งข้อมูล: opta/whoscored
พื้นที่โครงการ: 05_competition_reports_top_players
รหัส: player_effective_carriers.py
สรุปและผลลัพธ์: การระบุผู้สร้างภัยคุกคามชั้นนำผ่านการประเมินเหตุการณ์/การกระทำต่าง ๆ เสร็จสิ้นตลอดระยะเวลาของการแข่งขันภายในพื้นที่ต่าง ๆ ของสนาม งานนี้เกี่ยวข้องกับการดำเนินการตามรูปแบบการคุกคามที่คาดหวังซึ่งพัฒนาโดย Karun Singh
แหล่งข้อมูล: opta/whoscored
พื้นที่โครงการ: 05_competition_reports_top_players
รหัส: player_threat_creators.py
สรุปและผลผลิต: การระบุผู้ลงโทษสูงสุดในการแข่งขันหลายครั้ง คุณภาพการลงโทษได้รับการประเมินระยะทางเฉลี่ยของฉันในการลงโทษตามเป้าหมายจากผู้รักษาประตู Midriff โดยมีการลงโทษนอกเป้าหมายกำหนดระยะทางเป็นศูนย์ งานนี้รวมถึงการใช้งาน "การคาดการณ์ 3 มิติ" ภายในแผนย่อย 2D
แหล่งข้อมูล: opta/whoscored
พื้นที่โครงการ: 05_competition_reports_top_players
รหัส: player_impact_on_team.py
สรุปและผลผลิต: การพิจารณาว่าตัวชี้วัด Aggregrated ของทีม (การคุกคามที่คาดหวังจากทีมทีมคาดหวังว่าการคุกคามของทีมจะได้รับการคุกคามที่แตกต่างกันเป็นอย่างไร ฯลฯ ) แตกต่างกันไปเมื่อผู้เล่นเฉพาะเจาะจงอยู่ในสนามเทียบกับเมื่อพวกเขาไม่ได้เล่น
แหล่งข้อมูล: opta/whoscored
พื้นที่โครงการ: 06_competition_reports_top_teams
รหัส: team_threat_creation.py
สรุปและผลลัพธ์: การจัดอันดับของทีมโดยภัยคุกคามทั้งหมดที่สร้างขึ้นผ่านการผ่านในการเล่นและดำเนินการต่อ 90 รวมถึงการระบุโซนที่แต่ละทีมสร้างภัยคุกคาม
แหล่งข้อมูล: opta/whoscored
พื้นที่โครงการ: 06_competition_reports_top_teams
รหัส: team_ball_winning.py
สรุปและผลผลิต: การจัดอันดับของทีมโดยค่าเฉลี่ยความสูงขึ้นสนามที่พวกเขาชนะบอลกลับรวมถึงการระบุโซนที่พวกเขาได้ครอบครองลูกบอลจากฝ่ายค้าน
แหล่งข้อมูล: opta/whoscored
พื้นที่โครงการ: 06_competition_reports_top_teams
รหัส: team_cross_success.py
สรุปและผลลัพธ์: การจัดอันดับทีมโดยอัตราความสำเร็จข้ามในการเล่น งานนี้รวมถึงคำจำกัดความที่กำหนดเองของการข้ามที่มีประสิทธิภาพ (หรือประสบความสำเร็จ) ซึ่งการข้ามที่มีประสิทธิภาพเป็นสิ่งที่ตามมาด้วยการยิงหรือการส่งผ่านภายใน 5 วินาทีของการเล่น (โดยไม่คำนึงถึงผลลัพธ์ข้าม inital)
แหล่งข้อมูล: opta/whoscored
พื้นที่โครงการ: 06_competition_reports_top_teams
รหัส: team_fullback_combinations.py
สรุปและผลลัพธ์: การจัดอันดับของทีมด้วยความถี่ที่กลับมารวมกัน การผ่านระหว่างเต็มรูปแบบของแต่ละทีมจะถูกระบุและเน้นขึ้นอยู่กับว่าการผ่านจะนำไปสู่การยิงประตูหรือไม่
แหล่งข้อมูล: opta/whoscored
พื้นที่โครงการ: 06_competition_reports_top_teams
รหัส: team_delta_threat_creation.py
สรุปและผลผลิต: การจัดอันดับทีมโดยการปรับปรุงภัยคุกคามทั้งหมดที่เกิดขึ้นจากการผ่านในการเล่นและดำเนินการต่อ 90 - ฤดูกาลปัจจุบันเทียบกับฤดูกาลที่ผ่านมา รวมถึงการบัญชีสำหรับทีมที่อยู่ในแผนกข้างต้นหรือต่ำกว่าในปีที่แล้ว การเปลี่ยนแปลงในการสร้างภัยคุกคามก็ถูกทำลายโดยเขตพิทช์
แหล่งข้อมูล: opta/whoscored
พื้นที่โครงการ: 06_competition_reports_top_teams
รหัส: team_setpiece_shot_concession.py
บทสรุปและผลผลิต: การสอบสวนความสามารถของทีมในการปกป้องฉากผ่านโอกาสรวมที่ยอมรับภายใน 5 วินาทีของฝ่ายค้าน "ทางอ้อม" ชิ้นส่วน ชุด "ทางอ้อม" อ้างถึงมุมและฟรีคิกที่ลูกบอลยังคงอยู่ในการเล่นหลังจากที่ชุดชิ้นนั้นถูกนำไปเตะฟรีและเป้าหมายโดยตรงจากชุดชิ้นส่วนจะถูกแยกออกจากการวิเคราะห์
แหล่งข้อมูล: Statsbomb
พื้นที่โครงการ: 06_competition_reports_top_teams
รหัส: xg_league_table_sb.py
สรุปและผลลัพธ์: การสร้างตารางลีกต่างๆตามประสิทธิภาพ XG, XG ของทีม, การปันส่วน XG/XT และตัวชี้วัดอื่น ๆ อีกมากมาย
แหล่งข้อมูล: opta/whoscored
พื้นที่โครงการ: 07_player_reports
รหัส: player_report_fullback.py
สรุปและเอาท์พุท: รายงานผู้เล่นเฉพาะด้านหลังรวมถึงการพัฒนากลไกที่ยืดหยุ่น/แข็งแกร่งเพื่อเปรียบเทียบรายงานขึ้นอยู่กับผู้เล่นที่คล้ายกันและจากนั้นจัดอันดับชุดของผู้เล่นกับการกลับทั้งหมดภายในลีกที่เลือก
แหล่งข้อมูล: opta/whoscored
พื้นที่โครงการ: 07_player_reports
รหัส: advanced_swarm_radar.py
สรุปและผลลัพธ์: การพัฒนาวิธีการใหม่และนวัตกรรมในการแสดงภาพประสิทธิภาพของผู้เล่น เรดาร์ "ฝูง" สามารถโปรไฟล์ประเมินและเปรียบเทียบผู้เล่นได้อย่างรวดเร็ว แต่ยังให้บริบทที่ลึกซึ้งยิ่งขึ้นผ่านการกระจายการกระจายของคะแนนเมตริกในกลุ่มผู้เล่นเปรียบเทียบ
แหล่งข้อมูล: opta/whoscored
พื้นที่โครงการ: 08_evolution_of_shooting
รหัส: shot_characteristics_trending.py
สรุปและผลผลิต: งานชิ้นหนึ่งที่เกี่ยวข้องกับสมาคมการวิเคราะห์ฟุตบอลอาชีพ (APFA) สำรวจว่าศิลปะการยิงมีการเปลี่ยนแปลงในฟุตบอลและให้ข้อมูลเชิงลึกเกี่ยวกับวิวัฒนาการของการยิงในพรีเมียร์ลีก
APFA - วิวัฒนาการของการถ่ายทำในบทความเว็บพรีเมียร์ลีก
APFA - วิวัฒนาการของการยิงในพรีเมียร์ลีก
แหล่งข้อมูล: opta/whoscored
พื้นที่โครงการ: 09_league_position_metric_correlation
รหัส: team_metrics_pts_correlation.py
สรุปและผลลัพธ์: งานสำรวจเพื่อระบุลักษณะของทีมที่ประสบความสำเร็จในลีกเฉพาะ การตรวจสอบว่าช่วงของตัวชี้วัดของทีมมีความสัมพันธ์กับคะแนนที่สะสมในฤดูกาลโดยใช้ข้อมูลจาก 5+ ฤดูกาลอย่างไร ผลลัพธ์จากโครงการนี้รวมอยู่ในวิดีโอ Tifo - ทำไม Everton ถึงดีกว่าที่คุณคิด
แหล่งข้อมูล: opta/whoscored
พื้นที่โครงการ: 10_team_buildup_passes
รหัส: team_pass_tendencies.py
สรุปและผลลัพธ์: การแสวงหาผลประโยชน์ของงานก่อนหน้าในการจัดกลุ่มผ่านเพื่อระบุแนวโน้มการผ่านของทีมในการสะสม Inolves นี้มองไปที่กลุ่มทั่วไปสำหรับการผ่าน 6 ครั้งแรกที่ทีมทำในพื้นที่ต่าง ๆ ของสนาม
แหล่งข้อมูล: Statsbomb
พื้นที่โครงการ: 11_justice_league
รหัส: Justice_league.py
สรุปและผลลัพธ์: การแสวงหาผลประโยชน์ของงานก่อนหน้านี้ในการสร้างแบบจำลองคะแนนเพื่อจำลองฤดูกาลเต็มของการแข่งขันและสร้างอันดับตารางลีกใหม่ตามผลลัพธ์การจับคู่ที่น่าจะเป็น (หรือคะแนนที่คาดหวัง)