import pandas as pd
from palmerpenguins import load_penguins
# 데이터 로드
df = load_penguins()
# 데이터 미리보기
df.head()
# 다양한 형식으로 저장
df.to_csv("penguins.csv", index=False) # CSV 파일로 저장
df.to_excel("penguins.xlsx", index=False) # Excel 파일로 저장
# SQLite 데이터베이스에 저장
import sqlite3
conn = sqlite3.connect("penguins.db")
result = df.to_sql("penguins", conn, if_exists="replace", index=False)
conn.close()1 데이터 로드 및 구조 점검
pandas 데이터 로드, CSV 파일 읽기, Excel 파일 읽기, SQLite pandas, 데이터 구조 확인, 파이썬 데이터 분석 기초
데이터 분석의 첫 단계는 데이터 수집이다. 데이터는 로컬 파일, 데이터베이스, 또는 외부 시스템에서 확보할 수 있으며, 형태는 상황에 따라 다양하다. 가장 일반적인 형태는 CSV와 Excel 파일이지만, API 호출이나 데이터베이스 쿼리를 통해 직접 취합하는 경우도 있다. 이 장에서는 다양한 소스로부터 데이터를 불러오는 방법과 불러온 데이터의 구조를 확인하는 방법을 학습한다.
1.1 데이터 로드
데이터를 분석하기 위해서는 먼저 파일이나 데이터베이스에 저장된 데이터를 메모리에 적재해야 한다. Python의 pandas 라이브러리는 다양한 형식의 데이터를 손쉽게 로드할 수 있는 함수를 제공한다. 여기서는 CSV, Excel, SQLite 데이터베이스 형태의 데이터를 불러오는 방법을 살펴본다.
예제에서는 남극 팔머 제도에 서식하는 펭귄 데이터를 담은 palmerpenguins 데이터셋을 사용한다. 이 데이터셋은 펭귄의 종, 서식지, 신체 측정값 등의 정보를 포함하고 있다.
예제: palmerpenguins 데이터셋 준비
1.1.1 CSV 파일 로드
CSV(Comma-Separated Values)는 쉼표로 구분된 텍스트 파일 형식으로, 데이터 교환에 가장 널리 사용되는 형식이다. pandas의 read_csv() 함수를 사용하면 CSV 파일을 DataFrame 형태로 불러올 수 있다.
예제: CSV 파일 불러오기
import pandas as pd
# CSV 파일 로드
df_from_csv = pd.read_csv("penguins.csv")
# 상위 5개 행 확인
df_from_csv.head()| species | island | bill_length_mm | bill_depth_mm | flipper_length_mm | body_mass_g | sex | year | |
|---|---|---|---|---|---|---|---|---|
| 0 | Adelie | Torgersen | 39.1 | 18.7 | 181.0 | 3750.0 | male | 2007 |
| 1 | Adelie | Torgersen | 39.5 | 17.4 | 186.0 | 3800.0 | female | 2007 |
| 2 | Adelie | Torgersen | 40.3 | 18.0 | 195.0 | 3250.0 | female | 2007 |
| 3 | Adelie | Torgersen | NaN | NaN | NaN | NaN | NaN | 2007 |
| 4 | Adelie | Torgersen | 36.7 | 19.3 | 193.0 | 3450.0 | female | 2007 |
1.1.2 Excel 파일 로드
Excel 파일(.xlsx, .xls)은 비즈니스 환경에서 자주 사용되는 형식이다. pandas의 read_excel() 함수를 사용하면 Excel 파일을 불러올 수 있으며, 특정 시트를 지정하여 읽을 수도 있다.
예제: Excel 파일 불러오기
import pandas as pd
# Excel 파일 로드
df_from_excel = pd.read_excel("penguins.xlsx")
# 상위 5개 행 확인
df_from_excel.head()| species | island | bill_length_mm | bill_depth_mm | flipper_length_mm | body_mass_g | sex | year | |
|---|---|---|---|---|---|---|---|---|
| 0 | Adelie | Torgersen | 39.1 | 18.7 | 181.0 | 3750.0 | male | 2007 |
| 1 | Adelie | Torgersen | 39.5 | 17.4 | 186.0 | 3800.0 | female | 2007 |
| 2 | Adelie | Torgersen | 40.3 | 18.0 | 195.0 | 3250.0 | female | 2007 |
| 3 | Adelie | Torgersen | NaN | NaN | NaN | NaN | NaN | 2007 |
| 4 | Adelie | Torgersen | 36.7 | 19.3 | 193.0 | 3450.0 | female | 2007 |
1.1.3 SQLite 데이터베이스 로드
데이터베이스는 대량의 데이터를 체계적으로 관리하는 시스템이다. SQLite는 파일 기반의 경량 데이터베이스로, 별도의 서버 설치 없이 사용할 수 있다. pandas의 read_sql() 함수를 사용하면 SQL 쿼리 결과를 DataFrame으로 불러올 수 있다.
예제: SQLite 데이터베이스에서 데이터 불러오기
import sqlite3
import pandas as pd
# 데이터베이스 연결
conn = sqlite3.connect("penguins.db")
# SQL 쿼리 실행 및 결과 로드
query = "SELECT * FROM penguins"
df_from_sql = pd.read_sql(query, conn)
# 연결 종료
conn.close()
# 상위 5개 행 확인
df_from_sql.head()| species | island | bill_length_mm | bill_depth_mm | flipper_length_mm | body_mass_g | sex | year | |
|---|---|---|---|---|---|---|---|---|
| 0 | Adelie | Torgersen | 39.1 | 18.7 | 181.0 | 3750.0 | male | 2007 |
| 1 | Adelie | Torgersen | 39.5 | 17.4 | 186.0 | 3800.0 | female | 2007 |
| 2 | Adelie | Torgersen | 40.3 | 18.0 | 195.0 | 3250.0 | female | 2007 |
| 3 | Adelie | Torgersen | NaN | NaN | NaN | NaN | NaN | 2007 |
| 4 | Adelie | Torgersen | 36.7 | 19.3 | 193.0 | 3450.0 | female | 2007 |
1.2 데이터 구조 및 타입 확인
데이터를 성공적으로 불러온 후에는 데이터의 전반적인 구조를 파악해야 한다. 데이터의 크기(행과 열의 개수), 각 컬럼의 이름과 데이터 타입, 결측값 유무 등을 확인하는 것이 데이터 분석의 기본이다. 이러한 정보는 후속 분석 방향을 결정하고 데이터 전처리 계획을 수립하는 데 필수적이다.
1.2.1 데이터 크기 확인
DataFrame의 크기는 shape 속성을 통해 확인할 수 있다. shape는 (행의 개수, 열의 개수) 형태의 튜플을 반환한다.
예제: 데이터 크기 확인
import pandas as pd
df = pd.read_csv("penguins.csv")
# 데이터 크기 확인 (행, 열)
df.shape(344, 8)
1.2.2 데이터 기본 정보 확인
info() 메서드는 DataFrame의 전반적인 정보를 요약하여 보여준다. 각 컬럼의 데이터 타입, 결측값이 아닌 데이터의 개수, 메모리 사용량 등을 한눈에 파악할 수 있다.
예제: 데이터 기본 정보 확인
# 데이터 구조 및 타입 정보
df.info()<class 'pandas.DataFrame'>
RangeIndex: 344 entries, 0 to 343
Data columns (total 8 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 species 344 non-null str
1 island 344 non-null str
2 bill_length_mm 342 non-null float64
3 bill_depth_mm 342 non-null float64
4 flipper_length_mm 342 non-null float64
5 body_mass_g 342 non-null float64
6 sex 333 non-null str
7 year 344 non-null int64
dtypes: float64(4), int64(1), str(3)
memory usage: 21.6 KB
위 코드를 실행하면 다음과 같은 정보를 확인할 수 있다.
| 정보 항목 | 설명 |
|---|---|
| RangeIndex | 전체 행의 개수 |
| Data columns | 컬럼의 개수 |
| Column | 각 컬럼의 이름 |
| Non-Null Count | 결측값이 아닌 데이터의 개수 |
| Dtype | 각 컬럼의 데이터 타입 (int64, float64, object 등) |
| memory usage | DataFrame이 사용하는 메모리 크기 |
1.2.3 컬럼별 데이터 타입 확인
각 컬럼의 데이터 타입만 간단히 확인하고 싶을 때는 dtypes 속성을 사용한다.
예제: 컬럼별 데이터 타입 확인
# 각 컬럼의 데이터 타입
df.dtypesspecies str
island str
bill_length_mm float64
bill_depth_mm float64
flipper_length_mm float64
body_mass_g float64
sex str
year int64
dtype: object
1.2.4 기술 통계량 확인
수치형 데이터의 기본적인 통계량(평균, 표준편차, 최솟값, 최댓값 등)은 describe() 메서드로 확인할 수 있다.
예제: 기술 통계량 확인
# 수치형 컬럼의 기술 통계량
df.describe()| bill_length_mm | bill_depth_mm | flipper_length_mm | body_mass_g | year | |
|---|---|---|---|---|---|
| count | 342.000000 | 342.000000 | 342.000000 | 342.000000 | 344.000000 |
| mean | 43.921930 | 17.151170 | 200.915205 | 4201.754386 | 2008.029070 |
| std | 5.459584 | 1.974793 | 14.061714 | 801.954536 | 0.818356 |
| min | 32.100000 | 13.100000 | 172.000000 | 2700.000000 | 2007.000000 |
| 25% | 39.225000 | 15.600000 | 190.000000 | 3550.000000 | 2007.000000 |
| 50% | 44.450000 | 17.300000 | 197.000000 | 4050.000000 | 2008.000000 |
| 75% | 48.500000 | 18.700000 | 213.000000 | 4750.000000 | 2009.000000 |
| max | 59.600000 | 21.500000 | 231.000000 | 6300.000000 | 2009.000000 |
1.3 요약
이 장에서는 데이터 분석의 첫 단계인 데이터 로드와 구조 점검 방법을 학습했다. 주요 내용은 다음과 같다.
데이터 로드
- CSV 파일:
pd.read_csv()함수 사용
- Excel 파일:
pd.read_excel()함수 사용
- SQLite 데이터베이스:
pd.read_sql()함수 사용
데이터 구조 확인
shape: 데이터의 크기(행, 열) 확인
info(): 컬럼명, 데이터 타입, 결측값 개수, 메모리 사용량 확인
dtypes: 각 컬럼의 데이터 타입 확인
describe(): 수치형 데이터의 기술 통계량 확인
데이터를 정확하게 불러오고 그 구조를 이해하는 것은 모든 데이터 분석 작업의 기반이다. 다음 장에서는 데이터 특성과 패턴을 파악하는 탐색적 데이터 분석(EDA)을 학습할 것이다.