피벗: Pandas 및 SQLite 사용
피벗
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에서는 사용할 수 없습니다. 이 연산자를 사용하기 위해 정확히 동일한 쿼리를 사용하지만 세 가지 차이점이 있습니다.
따라하고 싶다면 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에서는 사용할 수 없습니다. 이 연산자를 사용하기 위해 정확히 동일한 쿼리를 사용하지만 세 가지 차이점이 있습니다.
SELECT team_long_name, home_team_goal goals
FROM Match
JOIN Team
ON Team.team_api_id = Match.home_team_api_id
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
pd.pivot_table(df, columns = ['team'], values = ['goals','games'], aggfunc = np.sum)
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
따라서 최종 쿼리는 다음과 같이 끝나야 합니다.
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 웹 페이지 외에 재설정에 대한 팁이나 요령이 있다면 듣고 싶습니다.
Reference
이 문제에 관하여(피벗: Pandas 및 SQLite 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/trossii/pivot-with-pandas-and-sqlite-1h0c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)