RCB GM 에뮬레이터: IPL 데이터 세트에서 EDA 실행

7527 단어 datasciencepython
영화'머니볼'(Moneyball, 2011)에서 오클랜드 A의 빌리 비언 사장(Billy Beane)이 경제학자 피터 브랜드(Peter Brand)를 고용해 데이터를 사용해 게임 방식을 바꾼 것을 기억하십니까?(정말로, 만약 당신이 아직 보지 않았다면, 나는 당신이 한 번 보고 돌아오기를 강력히 건의합니다!)그래, 우리는 이번이 크리켓 분야임에도 불구하고 같은 일을 할 것이다.
우리가 해야 할 일은 탐색적 데이터 분석인 약칭 EDA라는 분석 데이터 집합으로 그 주요 특징을 정리하는 과정이다.이를 위해 this IPL Dataset를 사용하겠습니다.우선, 우리가 무엇을 가지고 있는지 보여 주시겠어요?
import pandas as pd 
import numpy as np
df=pd.read_csv("matches.csv")
df.head()

그래, 이건 많은 소식이야!Pandas Dataframe info() 방법을 사용하여 분해합니다.
df.info()

RCB의 사장으로서, 당신의 업무는 사용 가능한 데이터에서 가능한 한 많은 정보를 추출하는 것입니다.이것은 정확한 문제를 제기하는 것을 포함한다.우리의 데이터 집합을 자세히 살펴보면 얼마나 많은 데이터가 진정으로 유용합니까?심판은 아니지.우리 얘네 버릴까요?
df.drop(["umpire1", "umpire2", "umpire3"], inplace=True, axis=1)
df.head()

지금 우리가 합작할 수 있는 거야!그러나 GM(그리고 일반적인 데이터 과학)으로서의 문제는 어떤 질문을 해야 할지 알려주는 사람이 없다는 것이다.정확한 문제를 제기하는 것이 왕왕 문제에 대답하는 것보다 더 어렵다.다음은 내가 이 데이터 집합이 대답할 수 있다고 생각하는 다섯 가지 문제다.
  • 특정 장소에서 먼저 공을 치거나 먼저 슛하는 것이 유리합니까?
  • 각 팀은 어느 장소에서 실력이 가장 강합니까?
  • 빗물의 영향을 받은 경기에서 추격팀은 정말 우세합니까?
  • 특정 지점에서 주사위 던지기를 이기는 것이 얼마나 중요합니까?
  • 서로 다른 팀에 비해 우리의 성적은 어떻습니까?
  • 이제 우리 하나하나 우리의 데이터를 탐구합시다!(꼭 이 순서는 아니지만.)👻)

    문제1) 특정 장소에서 동전 던지기를 이기는 것이 얼마나 중요한가?


    Pandas의 가장 멋있는 점은 논리를 연결해서 SQL보다 더 간결하게 원하는 출력을 얻을 수 있다는 것이다.우리의 데이터 집합은 매 경기의 우승자를 제공했다.우리도 누가 매 경기에서 동전 던지기를 이겼는지 안다.2와 2를 함께 놓고 동전을 던져 이긴 팀도 이겼다면 이 두 가지는 반드시 같아야 한다.마지막으로, 우리는 장소에 따라 이 데이터를 제공해야 한다.다른 하나는 백분율이 우리에게 원시 숫자보다 더 유용하다는 것이다.
    df[df["toss_winner"]==df["winner"]].value_counts("venue")/df.value_counts("venue")*100
    

    이게 얼마나 쉬운지 볼까요?필터된 데이터를 value counts () 방법으로 그룹화한 다음 해당 필드에서 진행되는 총 경기로 나누는 것을 주의하십시오.이는 색인을 사용하여 유사한 데이터 객체를 검색할 수 있기 때문에 Panads의 또 다른 시각적 특성입니다.
    우리는 어떤 장소에서는 주사위 던지기에 대한 의존도가 100퍼센트라는 것을 보았다.그러나 우리가 이 경기장에서 몇 경기를 치렀는지 보면 더욱 뚜렷한 화면이 나올 것이다.경기가 많을수록 이 숫자는 50에 가깝다.

    문제2) 특정 장소에서 먼저 공을 치거나 먼저 슛하는 것이 유리한가?


    이제 이 질문에 대답하는 과정은 첫 번째 직감과 같다.이번에는 우리가 원하는 형식의 데이터를 얻기 위해 조정을 해야 한다.
    fielding_wins=df[((df["toss_winner"]==df["winner"]) & (df["toss_decision"]=="field")) | ((df["toss_winner"]!=df["winner"]) & (df["toss_decision"]=="bat"))].value_counts("venue")
    fielding_wins.sort_index(inplace=True)
    
    batting_wins=df[((df["toss_winner"]==df["winner"]) & (df["toss_decision"]=="bat")) | ((df["toss_winner"]!=df["winner"]) & (df["toss_decision"]=="field"))].value_counts("venue")
    missing_rows=pd.Series([0,0],index=["Green Park", "Holkar Cricket Stadium"])
    batting_wins=batting_wins.append(missing_rows)
    batting_wins.sort_index(inplace=True)
    
    choices=fielding_wins>batting_wins
    
    encoder={True:"Field", False:"Bat"}
    choices.map(encoder)
    

    이것이 바로 우리의 결과다!많은 코드처럼 보이지만 논리는 이해하기 어렵지 않다.위에서 아래로의 방법에 따라 우리는 반드시
  • 수비팀과 타팀의 승리를 비교
  • 이 두 집합의 인덱스가 같은 수량의 원소를 가지도록 확보
  • 두 개의 서브집합을 다른 변수에 저장하여 그것들에 대해 조작을 수행하도록 한다
  • 마지막으로, 우리는 우리의 삶을 더욱 가볍게 하기 위해'Bat'과'Field'에 진가를 비출 것이다.
    (솔직히: 난 한꺼번에 한 게 아니야. 네가 여기서 본 모든 게 깔끔한 코드 블록으로 포장되어 있어. 앞에 경고가 많고 머리가 긁히고 많은 시도와 오류가 있어)

    문제3) 빗물의 영향을 받은 경기에서 추격팀이 정말 우세한가?


    판다의 힘으로 코드 한 줄로 이 질문에 대답합시다!만약 지금까지 코드를 따르고 있다면, 이것은 지름길일 것입니다.
    df[(((df["toss_winner"]==df["winner"]) & (df["toss_decision"]=="field")) | ((df["toss_winner"]!=df["winner"]) & (df["toss_decision"]=="bat")))& (df["dl_applied"]==1)].size/df[df["dl_applied"]==1].size*100
    

    자, 시작합시다. 추격팀이 빗물의 영향을 받은 81%의 경기를 이겼습니다.

    문제4) 각 팀은 어느 장소에서 가장 강합니까?


    이것은 약간의 사고와 일부 분야의 지식을 필요로 한다.우선, 우리가 필요로 하는 것은 이긴 사람이 맞은 장소의 계수다.물론, 우리는 모든 팀이 특정한 장소에서, 보통 그들의 홈경기에서 가장 잘 한다는 것을 안다.이 쌍의 계수는 정렬 목록의 맨 위에 있어야 한다. (예를 들어 여러 번 이름을 바꾼 팀을 제외하고는.)이런 직감을 이용하여 우리는 다음과 같은 코드 세션으로 우리의 질문에 대답할 수 있다.
    team_venue_counts=df.groupby(["winner", "venue"]).agg("count")["id"]
    team_venue_counts=team_venue_counts.sort_values(ascending=False)
    team_venue_counts.head(9)
    

    우리는 팀이 홈경기에서 확실히 가장 많은 승리를 거두었다는 것을 보았다.그러나 한 퍼센트가 홈경기에서의 활약을 더 잘 반영할 수 있다.이긴 쪽의 필드 쌍과 필드 계수를 포함한 조립, 추가, 재배열이 필요하다.불행하게도 이 과정의 복잡성은 본문의 목적을 넘어섰다.계속해!

    문제5) 팀별 실적은 어떤가?


    여기에는 우리 팀이'팀 1'과'팀 2'열에 나타나기 때문에 복잡한 절차가 포함되어 있다.그러나 어쨌든 코드는 매우 간단하다.
    as_team1_wins=df[(df["team1"]=="Royal Challengers Bangalore") & (df["winner"]=="Royal Challengers Bangalore")].value_counts("team2")
    as_team1_games=df[(df["team1"]=="Royal Challengers Bangalore")].value_counts("team2")
    
    as_team2_wins=df[(df["team2"]=="Royal Challengers Bangalore") & (df["winner"]=="Royal Challengers Bangalore")].value_counts("team1")
    as_team2_games=df[(df["team2"]=="Royal Challengers Bangalore")].value_counts("team1")
    
    (as_team1_wins+as_team2_wins)/(as_team1_games+as_team2_games)*100
    

    지금 나는 이것이 약간 해커 같다는 것을 인정하지 않을 수 없다.데이터를 저장하는 데 사용되는 변수의 크기가 완전히 같지 않다. 이로 인해 둘 사이에 있는 낸이 생겼다.하지만 판다는 남은 부분을 어떻게 처리해야 할지 알고 있다는 것이 인상적이다!
    그 다음으로 우리는'굴기하는 포나 슈퍼 자이언트'와'굴기하는 포나 슈퍼 자이언트'가 각각 두 개의 단독 항목이 있는 것을 보았다.이것은 당연히 정리할 만한 가치가 있다!
    이제 네 차례야!너는 네가 이 오류들을 복구할 수 있다고 생각하니?사장으로서 이 데이터 세트를 통해 얻을 수 있는 또 다른 견해는 무엇입니까?더 좋은 견해를 얻기 위해서, 당신은 어떤 다른 데이터로 그것을 보충해야 합니까?마지막으로 가장 중요하지 않은 것은 무엇이 우리의 발견을 시각화하는 가장 좋은 방법일 수 있는가 하는 것이다.
    질문이 있습니까?너는 내가 어떤 다른 방법이 있다고 생각하니?언제든지 저에게 말씀해 주십시오. 저는 매우 기꺼이 회답할 것입니다.

    좋은 웹페이지 즐겨찾기