데이터 수집
데이터 수집은 데이터 분석의 가장 기본적이고 중요한 단계이다. 이 단계에서는 분석하고자 하는 문제에 대한 적절한 데이터를 모으는 작업이 이루어진다.
왜냐하면, 데이터 수집 없이는 분석이나 예측을 수행할 수 없기 때문이다. 데이터는 분석의 기초를 이루는 원재료와 같은 것으로, 어떤 데이터를 수집하느냐에 따라 그 후의 분석 결과가 크게 달라질 수 있다.
또한, 데이터 수집은 분석 대상을 정의하고 이해하는 데도 중요한 역할을 한다. 수집된 데이터는 해당 분야나 상황에 대한 정보나 지식을 제공하며, 이를 통해 분석가들은 문제를 더 잘 이해하고, 적절한 분석 방법을 선택할 수 있게 된다.
결론적으로, 데이터 수집은 데이터 분석의 첫 번째 단계로서 분석의 방향을 정하고, 분석의 품질을 결정하는 중요한 과정이다. 이 단계에서 오류가 발생하면 그 후의 모든 분석 과정에 문제가 생길 수 있으므로, 데이터 수집 단계는 매우 신중하게 수행되어야 한다.
(본인은 '주피터 노트북'을 사용하여 데이터를 수집할 것이다.)
· 데이터 출처와 타입
본인은 한국전력거래소로부터 "시간별 전력수요량" 공공데이터를 수집하고자 한다.
(수집 위치 : data.go.kr)
다운로드한 데이터는 'CSV' 형식의 파일이다. CSV 형식의 파일은 각 각의 값들이 컴마(,)로 구분되어 있는 텍스트 파일이다. 특히, 대용량의 데이터를 효율적으로 저장하고 처리할 수 있기 때문에 데이터 분석에서 주로 사용되는 파일 형식이다.
'CSV' 파일은 데이터의 양이 많거나 복잡한 경우에 자칫 데이터가 깨져 잘못 표시될 수 있다. 따라서, 이런 경우에는 판다스와 같은 데이터 분석 라이브러리를 활용해 CSV 파일을 로드하고 처리하는 것이 좋다.
다운로드한 '시간별 전력수요량.csv' 파일을 열어 어떠한 데이터 구조를 가지고 있는지 살펴보았다.
열은 '날짜, 1시~24시'의 데이터를 담고 있고, 행은 '연월일, 발전량... '에 대한 데이터를 담고 있다. 구조를 먼저 확인하여 이해를 도왔으니 이제 해당 파일을 호출하여, 판다스 라이브러리를 활용해 분석해 보도록 하자.
· 데이터 조회(호출)
데이터 분석에 사용할 판다스를 'Import' 한다. 별칭은 일반적으로 'pd'로 사용하며, 전 세계 표준은 아니지만 표준처럼 사용되는 약어이다. 이 판다스를 사용하여 데이터를 로드할 수 있다.
import pandas as pd
file_path = "./01_data/한국전력거래소_시간별 전력수요량_20211231.csv"
df = pd.read_csv(file_path,
header=1,
skipfooter=2,
usecols="A:C")
우선, 데이터를 분석할 '시간별 전력수요량.csv' 파일이 저장된 경로를 변수 'file_path'에 할당하였다. 이렇게 하면 'file_path' 변수를 통해 파일의 위치를 참조할 수 있게 된다. 이후 판다스를 사용하여 이 파일을 열고 데이터를 읽어 올 수 있다.
- file_path : 데이터 파일의 위치를 나타낸다. 이 변수에 파일의 위치를 저장한다.
- pd.read_csv : 판다스의 'read_csv' 메서드를 호출하는 코드이다. 이 메서드는 CSV 파일을 읽어서 데이터프레임(DataFrame) 객체로 변환한다.
- header = 1 : 'header'은 제목으로 사용할 행의 이름을 지정하는 키워드이다. 'header = 1'은 첫 번째(인덱스 1의) 행을 열 이름으로 사용하라는 의미이다. 인덱스는 0부터 시작하므로, 이 경우 두 번째 행이 열 이름으로 설정된다.
- skipfooter = 2 : 'skipfooter'은 포함시키지 않을 행을 지정하는 키워드이다. 'skipfooter = 2'는 마지막 두 행을 무시하고 데이터를 읽어오라는 의미이다.
- usecols = "A:C" : 'usecols'는 가지고 올 열의 범위를 지정하는 키워드이다. A열부터 C열까지의 데이터만 읽어오라는 의미이다.
- df : 이 변수는 'pd.read_csv' 메서드가 반환한 데이터프레임 객체를 저장하는 변수이다. 이 변수를 통해 데이터에 접근하고, 이를 분석할 수 있다.
여기서 중요한 점은 'pd.read_csv' 메소드를 사용하여 데이터 파일을 불러오고 데이터프레임 객체로 변환하여 변수(df)에 저장한다는 것이다. 해당 변수는 이후 분석을 위해 다양한 방법으로 처리할 수 있다.
(만약 UnicodeDecodeError 에러가 발생한다면, 인코딩 문제일 가능성이 높으니 'pd.reda_csv(file_path, encoding = "utf-8" 또는 "euc-kr")을 입력해 주도록 하자.)
· 데이터 검증
일반적으로 데이터의 전반적인 구조와 열의 이름을 확인하고, 그 후에 데이터프레임의 전체적인 정보를 확인하며, 마지막으로 결측치나 이상치가 있는지 확인하는 과정을 다룬다.
이는 먼저 데이터의 구조와 열의 이름을 확인함으로써 데이터에 대한 이해를 높이고, 이후에 전체적인 정보와 기술 통계를 통해 데이터의 분포와 특성을 파악하기 위함이다.
하지만 이는 단지 일반적인 순서일 뿐, 분석 목적이나 데이터의 특성에 따라 순서를 변경할 수도 있다. 중요한 점은 이 과정을 통해 얻은 정보를 바탕으로 올바른 데이터 분석을 수행하는 것이다.
1_데이터의 전반적인 구조와 열의 이름을 확인
df.head()
df.head(1)
df.tail()
df.tail(1)
col_list = df.columns
- head() : 상위 데이터를 조회할 때 사용하는 함수이다. 데이터의 행열이 많을 경우 기본 상위 5개, 하위 5개를 추출해서 보여주며, 이 함수는 데이터프레임의 처음 n개의 행을 출력한다. 'tail(1)'의 경우 상위 하나의 데이터만 보여준다.
- tail() : 하위 데이터를 조회할 때 사용하는 함수이다. 이 함수는 데이터프레임의 마지막 n개의 행을 출력한다. 'tail(1)'의 경우 맨 하위의 데이터 하나만 출력된다.
- columns() : 데이터프레임의 속성 중 하나로, 데이터프레임의 열 이름들을 반환한다. 이때, 반환되는 모든 열 이름들은 리스트 형태로 출력된다. 이렇게 반환된 열 이름들은 필요에 따라 변수에 담아 활용함으로써 데이터 분석에 사용될 수 있다.
이 함수들은 데이터프레임의 일부를 빠르게 살펴보기 위해 사용된다.
2_데이터프레임의 전반적인 정보 확인
df.info()
- Info() : Info 함수는 데이터프레임의 전반적인 정보를 제공하는 함수이다. 이 함수를 사용하면 데이터프레임의 열 개수, 각 열의 이름, 각 열의 테이터 타입, 결측치(non, null) 데이터 등을 확인할 수 있다.
'RangeIndex'는 전체 행(row)의 개수를 나타내고, 'non-null'은 각 열에서 결측치가 아닌 값의 개수를 나타낸다. 따라서 이 정보를 통해 전체 행의 개수와 각 컬럼의 개수가 일치하면 "결측 데이터가 존재하지 않는다."는 의미이고, 일치하지 않으면 "결측 데이터가 존재"한다는 의미이다. 위의 데이터프레임은 각 행과 열의 개수가 '365'로 일치하기에 결측치가 존재하지 않는 데이터프레임이라는 것을 확인할 수 있다.
3_기술 통계를 확인
df.describe()
- describe() : describe 함수는 임의의 데이터프레임 또는 시리즈의 기본적인 통계 정보를 요약하여 변환하는 집계 함수이다. 이 함수는 기초통계 데이터를 출력한다. 따라서 숫자값을 가지는 컬럼에 대해서만 통계 데이터를 제공한다.
기술 통계 | 통계치 |
count | 결측치를 제외한 데이터의 개수 |
mean | 평균값 |
std | 표준편차 |
min | 최소값 |
25% | 1사분위수(Q1, 하위 25%) |
50% | 중앙값(Q2, 하위 50%) |
75% | 3사분위수(Q3, 하위 75%) |
max | 최대값 |
데이터 수집은 데이터 분석의 첫 단계로, 정확한 분석 결과를 도출하기 위해 중요한 과정이다. 다음은 데이터 수집과 관련하여 기억하면 좋은 내용들이다.
- 데이터 출처 확인 : 데이터의 출처를 확인하고, 출처가 신뢰할 수 있는 곳인지를 반드시 확인해야 한다. 이는 데이터 품질을 보장하는 첫걸음이다.
- 적절한 데이터 선택 : 분석 목표에 따라 적절한 데이터를 선택해야 한다. 분석 목표를 달성하는 데 필요한 모든 정보를 포함하고 있는지를 확인해야 한다.
- 데이터의 구조 이해 : 데이터를 불러온 후, head(), tail(), columns 등의 함수를 사용하여 데이터의 구조를 파악한다. 이를 통해 각 열이 어떤 데이터를 나타내는지 파악할 수 있다.
- 데이터의 특성 확인 : info(), describe() 등의 함수를 사용하여 데이터의 전반적인 정보와 기술 통계를 확인한다. 이를 통해 데이터의 특성과 분포를 파악할 수 있다.
데이터 수집 단계를 통해 수집하고자 하는 데이터의 목적성과 특성을 정확하게 이해하고,
품질 좋은 데이터를 수집하는 것은 데이터 분석의 성공을 위한 핵심적인 단계이다.
이 다음은 다음 단계인 "데이터 저장"에 관하여 다루어 보도록 하겠다.
(참조하실 분들은 아래의 링크를 확인)
2023.11.29 - [[파이썬]/데이터 분석] - [데이터 분석] 판다스를 활용하여 파일에 데이터를 저장하기(+CSV 개념)
2023.11.29 - [[파이썬]/데이터 분석] - [데이터 분석] sqlalchemy, pymysql 라이브러리를 활용하여 데이터베이스에 데이터 저장하기(+DB 연결)
'[파이썬] > 데이터 분석' 카테고리의 다른 글
[데이터 분석] 판다스를 활용한 데이터프레임 재구성 (0) | 2023.11.30 |
---|---|
[데이터 분석] 판다스를 활용한 데이터프레임 생성 및 개념 (1) | 2023.11.29 |
[데이터 분석] sqlalchemy, pymysql 라이브러리를 활용하여 데이터베이스에 데이터 저장하기(+DB 연결) (1) | 2023.11.29 |
[데이터 분석] 판다스를 활용하여 파일에 데이터를 저장하기(+CSV 개념) (1) | 2023.11.29 |
[데이터 분석] 판다스(Pandas) 라이브러리 설치 및 개념 (2) | 2023.11.28 |