피벗: Pandas 및 SQLite 사용

4141 단어
SQL은 가장 많이 사용되는 것은 아니지만 가장 많이 사용되는 쿼리 언어 중 하나가 되었습니다. 그래서 언어 경험을 바탕으로 SQLite와 Pandas를 사용하여 피벗 테이블을 만드는 혼합 블로그를 작성할 것이라고 생각했습니다. 마지막에는 재미를 위해 SQL에서 Pivot 연산자를 사용하는 방법도 보여 드리겠습니다.

피벗



Pivot에서 수행할 수 있는 작업은 행을 열로 변환하여 일종의 "긴 보기"를 만드는 것입니다. 이것이 왜 유용한지 바로 의아해할 수 있지만 읽기 쉬운 방식으로 쿼리 결과를 보거나 제시하고자 할 때 유용할 수 있습니다. Pandas를 사용하면 pivot_table을 사용하는 것처럼 간단하고 SQL을 사용하면 위에서 언급한 것처럼 매끄러운 Pivot 연산자가 있습니다.

일부 데이터 확보



따라하고 싶다면 Kaggle에서 오늘 게시물에 대한 축구 데이터를 가져올 것입니다. 다운로드가 완료되면 패키지를 가져오고 멋진 다운로드 폴더에서 데이터를 가져오고 싶을 것입니다.

import sqlite3
import pandas as pd
import numpy as np
conn = sqlite3.connect('../../Downloads/database.sqlite')
cur = conn.cursor()


sqlite에 익숙하지 않은 경우 위에서 우리는 쿼리를 만들 수 있도록 데이터 및 cur에 대한 연결을 설정했습니다.

데이터 쿼리



이제 데이터와 SQLite 설정이 있으므로 쿼리를 시작할 수 있습니다. 예를 들어 홈 경기에서 어떤 팀이 가장 많은 골을 넣었는지 알아내어 누가 고향 팬들에게 감사하는지 알아보는 것이 재미있을 것이라고 생각했습니다! 이렇게 하려면 Match 테이블과 Team 테이블을 함께 조인해야 합니다.

SELECT team_long_name, home_team_goal goals
FROM Match 
JOIN Team
ON Team.team_api_id = Match.home_team_api_id


위에서 우리는 team_api_id에 결합된 두 테이블을 가지고 있기 때문에 전체 팀 이름과 그들이 홈 팀이었을 때 각 경기에서 득점한 골 수를 가져올 수 있습니다. 이제 결과를 표시하려면 cur에게 함수를 실행하도록 지시해야 합니다. 그런 다음 정보를 Pandas DataFrame으로 가져올 수 있습니다.

cur.execute("""
SELECT team_long_name,home_team_goal
FROM Match 
JOIN Team
ON Team.team_api_id = Match.home_team_api_id;
""")
df = pd.DataFrame(cur.fetchall())
df.columns = [x[0] for x in cur.description]
df




내가 아직 총 목표 금액의 값을 합산하지 않았지만 Pandas pivot_tables에는 이에 대한 옵션이 있습니다.

피벗으로 변경



이제 컬럼이 있으므로 이 모든 것이 무엇인지, 피벗에 대해 살펴볼 수 있습니다. Pandas에서 피벗 테이블을 생성하는 것은 매우 간단합니다. pivot_table 함수와 다음 데이터만 있으면 됩니다.

데이터: 사용하려는 DataFrame
값: 행에 대해 원하는 정보
열: 새 열에 원하는 것
Aggfunc: 값을 전달하려는 집계 함수

그렇게 간단하므로 플러그를 꽂고 무슨 일이 일어나는지 봅시다.

pd.pivot_table(df, columns = ['team'], values = ['goals','games'], aggfunc = np.sum)




피벗 테이블은 완성되었지만 팀이 너무 많습니다. 상위 5개를 얻고 재정렬하기 위해 재인덱싱과 iloc의 조합을 사용할 수 있지만 SQL 구문이 있고 order by 및 limit를 사용하여 쉽게 재정렬할 수 있는데 왜 그렇게 해야 합니까?

SELECT team_long_name team,SUM(home_team_goal) goals
FROM Match 
JOIN Team
ON Team.team_api_id = Match.home_team_api_id
GROUP BY team_long_name
ORDER BY goals DESC
LIMIT 5




SQL 피벗



SQL은 앞에서 언급한 피벗 연산자도 제공하지만 아쉽게도 SQLite에서는 사용할 수 없습니다. 이 연산자를 사용하기 위해 정확히 동일한 쿼리를 사용하지만 세 가지 차이점이 있습니다.
  • 호출할 수 있도록 쿼리를 하위 쿼리로 만들어야 합니다
  • .
  • Pivot 연산자로 하위 쿼리를 호출해야 합니다
  • .
  • 열로 사용할 값을 선택해야 합니다
  • .

    따라서 최종 쿼리는 다음과 같이 끝나야 합니다.

    SELECT * FROM  
    (SELECT team_long_name team,SUM(home_team_goal) goals
    FROM Match 
    JOIN Team
    ON Team.team_api_id = Match.home_team_api_id
    GROUP BY team_long_name
    ORDER BY goals DESC
    LIMIT 5
    )
    AS Home_Team_Goals
    PIVOT(
        goals
        FOR team IN ([Real Madrid CF],[FC Barcelona],[Celtic],[FC Bayern Munich],[PSV])
    ) AS TopHomePivotTable
    


    결론



    데이터에서 피벗 테이블을 만드는 것은 간단합니다. SQL 구문을 사용하는 Pivot에 대한 이미지가 없는 것에 대해 사과하지만 MySQL의 루트 암호에 문제가 있으며 터미널을 통해 재설정하는 데 문제가 있습니다. 누구든지 MySQL 웹 페이지 외에 재설정에 대한 팁이나 요령이 있다면 듣고 싶습니다.

    좋은 웹페이지 즐겨찾기