이전 글(데이터베이스에 저장된 데이터조회)에 이어, 이번 글에서는 "SQL 조회 결과로 판다스 데이터프레임 생성하기"에 대한 글을 작성하려 한다.
[차례]
첫 번째, 작업 전 준비과정에 대해 다룰 것이다.
두 번째, SQL 문을 통해 데이터베이스로부터 응답받은 결과가 여러 건일 때의 값을 변수에 담아 임시로 보관할 것이다.
세 번째, 판다스 라이브러리를 사용하여 위의 변수가 가진 데이터를 새로운 데이터프레임에 옮겨줄 것이다.
네 번째, 커서로부터 새로운 데이터프레임으로 데이터가 옮겨질 때, 변환되는 데이터 타입에 대해 살펴볼 것이다.
[사용 툴]
- Jupyter notebook(웹 기반 대화형 코딩 환경)
- MariaDB(오픈 소스 관계형 데이터베이스 관리 시스템)
(이전 글인 "데이터베이스에 저장된 데이터조회"에 대해서는 아래의 링크 확인)
2023.12.01 - [[파이썬]/데이터 분석] - [데이터 분석] pymysql 라이브러리를 활용한 데이터베이스에 저장된 데이터 조회하기(cursor, execute, fetchall & fetchone, close)
· 데이터프레임 생성 및 결과값을 저장하기 위한 준비과정
이전 글에서는 'pymysql' 라이브러리를 사용해 입력한 접속 정보를 토대로, 지정한 데이터베이스에 연결하였다. 이후 SQL 문을 생성하여 커서(cursor)를 통해 데이테베이스로 전달하였고, 'execute' 함수를 사용해 전달한 SQL 문을 실행하도록 하였다. 커서(cursor)는 이 실행 결과에 대한 응답을 받아오고, 저장한다. 그리고 이 응답받은 결과값은 SQL 문의 영향을 받은 행의 수만 반환이 되기 때문에, 실제 값을 조회하여야 한다. 이때 'fetchone()', 'fetchall()' 함수를 사용해 실제 값을 한 건, 혹은 여러 건 조회하였다.
이제는 조회한 여러 건의 데이터에 대한 수정, 삭제, 삽입 등을 수행하기 위한 새로운 데이터프레임을 생성 및 값을 옮겨주는 작업을 수행할 것이다.
우선 판다스, pymysql 라이브러리를 Import 하고 데이터베이스와 연결하도록 하자.
한 가지 더, SQL 쿼리 실행을 통해 데이터베이스로부터의 결과값을 받아올 커서를 호출하자.
이로써 데이터베이스에 저장된 데이터를 호출하여 사용할 수 있는 상태가 되었다.
그렇다면 여러 건의 데이터를 조회하여, 새로운 데이터프레임에 옮겨주도록 하자.
· 데이터베이스로부터 응답받은 값을 변수에 임시저장하기
우선, 데이터베이스로부터 응답받을 여러 값을 요청하도록 하자.
위 SQL 문은 데이터베이스에 저장된 'time_power_demand' 테이블의 모든 컬럼에 대한 정보를 요청하는 명령이며, 이 SQL 문은 커서(cur)를 통해 데이터베이스에 전달되고 'execute(sql)' 함수를 통해 실행된다. 데이터베이스가 응답한 결과(SQL 문을 실행함으로써 영향받은 행)를 커서(cur)에 저장하고, 'fetchall()' 함수를 통해 실제 데이터들을 조회한 결과이다.
원래라면 'fetchall()' 함수를 사용하였기 때문에, 튜플 형식의 데이터가 출력되어야 하지만, 접속 정보에서 커서의 반환 타입을 Dict로 설정하였기 때문에, 딕셔너리 형태로 반환되는 것을 볼 수 있다.
위의 결과를 변수 'rows'에 임시로 저장한다. 이는 새로 생성할 데이터프레임에 옮겨주기 위한 용도이다.
· 데이터프레임 생성 및 변수에 저장된 값을 옮겨주기
SQL 문의 실행 결과를 저장하고 있는 변수 'rows'의 데이터를 담기 위한 새로운 데이터프레임을 생성하여 준다.
데이터프레임 생성을 하기 위해서는 판다스(pandas) 라이브러리를 사용하여, 'pd.DataFrame()' 명령어를 입력해야 한다.
'DataFrame()' 함수의 매개변수로 'rows'를 할당하였다.
# 추출한 데이터를 새로운 데이터프레임에 저장하기
ymd_power_df = pd.DataFrame(rows)
ymd_power_df
이로써 'ymd_power_df' 데이터프레임은 SQL 문의 실행 결과를 저장하는 데이터프레임으로 생성되었음을 볼 수 있다.
· 데이터 타입에 대하여 유의해야 할 사항
데이터베이스에 전달된 SQL 문의 실행을 통해 반환된 값의 데이터 유형은 리스트 안의 딕셔너리 타입인 것을 위의 "SQL 문 실행을 통해 응답받은 실제 값" 사진에서 확인할 수 있다.
하지만, 'pd.DataFramd(rows)' 명령어를 사용하여 딕셔너리가 포함된 리스트를 데이터프레임으로 변환하면, 각 딕셔너리는 데이터프레임의 한 행을 형성하게 된다. 딕셔너리의 키는 데이터프레임의 열의 이름이 되고, 그 키에 해당하는 값은 해당 열의 값이 된다. (바로 위의 "데이터프레임 데이터 출력" 사진 확인)
이 경우, 'ymd_power_df ["ymd"]'는 'ymd'라는 이름의 열(column)을 참조하게 된다. 판다스 데이터프레임에서 한 열을 참조하면, 그 결과는 시리즈(Series) 객체로 반환된다. 시리즈는 1차원 배열을 나타내며, 데이터프레임의 각 열은 시리즈로 구성된다.
이는 판다스의 구조와 관련된 부분으로, 리스트 안의 딕셔너리를 데이터프레임으로 변환하면 각 딕셔너리의 키에 해당하는 열이 시리즈로 저장된다.
이렇게 생성된 데이터프레임은 데이터의 수정, 삭제, 입력, 분석(평균, 중앙값, 표준편차 등), 가공 등의 작업을 수행하는 목적으로 데이터 분석에 있어 다양하게 활용된다.
작업을 수행한 이후에는 잊지 말고 데이터베이스와의 연결을 해제하도록 하자.
이번 글에서는 "SQL 조회 결과로 판다스 데이터프레임 생성하기"에 대한 방법과 유의해야 할 사항에 대해 알아보았다.
'pymysql' 라이브러리를 사용해 접속 정보를 토대로 지정된 데이터베이스와 연결을 하였고,
커서와 'execute()' 함수를 사용해 데이터베이스에서 필요한 데이터를 요청 및 응답받아 커서에 저장된 행의 결과를 'fetctall()' 함수를 통해 실제 데이터로 변환하였다.
이후, 데이터프레임에 주입할 목적으로 변수에 임시로 저장하였고,
판다스 라이브러리를 사용하여 SQL 문의 결과값을 갖는 데이터프레임을 생성하였다.
여기서 한 가지 유의해야 할 부분이 바로 데이터 유형이라 하였다.
커서에 저장된 데이터의 유형은 리스트 안의 딕셔너리였으나,
데이터프레임으로 변환하면서 데이터 유형이 시리즈 타입으로 변경되었다.
이 시리즈 타입은 1차원 배열로서, 키는 열의 이름으로 지정되고, 값은 열의 값으로 지정된다.
이렇게 생성된 데이터프레임은 데이터 분석에서의 다양한 목적으로 활용되며,
데이터 입력, 수정, 삭제, 분석, 가공 등의 작업 처리를 통해 사용할 수 있다.
다음 글에서는 데이터의 입력, 수정, 삭제에 대해 다뤄보도록 하겠다.
'[파이썬] > 데이터 분석' 카테고리의 다른 글
판다스를 활용한 데이터프레임 데이터 추출 및 컬럼명 변경 (0) | 2023.12.03 |
---|---|
[데이터 분석] SQL 명령어를 이용한 데이터베이스 관리 : 입력, 수정, 삭제 (4) | 2023.12.02 |
[데이터 분석] pymysql 라이브러리를 활용한 데이터베이스에 저장된 데이터 조회하기(cursor, execute, fetchall & fetchone, close) (0) | 2023.12.01 |
[데이터 분석] 판다스를 활용한 데이터프레임 재구성 (0) | 2023.11.30 |
[데이터 분석] 판다스를 활용한 데이터프레임 생성 및 개념 (1) | 2023.11.29 |