데이터 적재

Keywords

python, 파이썬, numpy, 넘파이, 넘피, pandas, 판다스, machine learning, 기계학습, 머신러닝, 회귀, 분류, 군집

데이터 분석 첫 단계인 데이터 적재와 분석이 완료된 정보를 저장하는 방법을 알아 본다.

데이터 적재

CSV 파일 적재

데이터를 적재하는 가장 기본적인 방법은 pandas.read_csv() 함수를 사용하는 것이다.

pandas.read_csv(filepath_or_buffer, 
                sep='구분자', 
                header="컬럼명이 있는 행번호", 
                encoding="인코딩종류", 
                na_values=["결측치로 인식할 값"], 
                keep_default_na=Fasle)

keep_default_na 값을 True로 설정하면 기본 결측치 목록(NaN, N/A, NA, NULL, None, 빈문자열)을 그대로 사용한다. 반면 False로 지정하면 na_values 목록만 결측치로 변환한다. False 지정 후 na_values를 설정하지 않으면 어떤 값도 자동으로 결측치로 변환되지 않는다.

import pandas as pd

url = "https://raw.githubusercontent.com/mcnakhaee/palmerpenguins/master/\
palmerpenguins/data/penguins.csv"

dataset = pd.read_csv(url)

print(dataset.head())
  species     island  bill_length_mm  bill_depth_mm  flipper_length_mm  \
0  Adelie  Torgersen            39.1           18.7              181.0   
1  Adelie  Torgersen            39.5           17.4              186.0   
2  Adelie  Torgersen            40.3           18.0              195.0   
3  Adelie  Torgersen             NaN            NaN                NaN   
4  Adelie  Torgersen            36.7           19.3              193.0   

   body_mass_g     sex  year  
0       3750.0    male  2007  
1       3800.0  female  2007  
2       3250.0  female  2007  
3          NaN     NaN  2007  
4       3450.0  female  2007  

header 위치를 변경하면 다음과 같은 결과를 얻는다.

dataset = pd.read_csv(url, header = 1)

print(dataset.head())
   Adelie  Torgersen  39.1  18.7    181    3750    male  2007
0  Adelie  Torgersen  39.5  17.4  186.0  3800.0  female  2007
1  Adelie  Torgersen  40.3  18.0  195.0  3250.0  female  2007
2  Adelie  Torgersen   NaN   NaN    NaN     NaN     NaN  2007
3  Adelie  Torgersen  36.7  19.3  193.0  3450.0  female  2007
4  Adelie  Torgersen  39.3  20.6  190.0  3650.0    male  2007

원본 데이터에는 결측치를NA로 처리했다. keep_default_na 옵션 변경에 따라 결측치는 다르게 처리된다.

dataset = pd.read_csv(url, keep_default_na=False)

print(dataset.head())
  species     island bill_length_mm bill_depth_mm flipper_length_mm  \
0  Adelie  Torgersen           39.1          18.7               181   
1  Adelie  Torgersen           39.5          17.4               186   
2  Adelie  Torgersen           40.3            18               195   
3  Adelie  Torgersen             NA            NA                NA   
4  Adelie  Torgersen           36.7          19.3               193   

  body_mass_g     sex  year  
0        3750    male  2007  
1        3800  female  2007  
2        3250  female  2007  
3          NA      NA  2007  
4        3450  female  2007  

데이터 저장

처리된 데이터는 상황이나 과제에 따라 다양한 형태로 저장할 수 있다. 우선 가장 일반적인 csv 형태로 저장하는 방법을 알아 본다.

CSV 파일 저장

DataFrame.to_csv('저장할 경로',
                encoding='인코딩지정',
                index='인덱스포함여부',
                sep='구분자')

데이터 저장 시 어떤 인코딩을 적용했는지 명시적으로 지정한다. pandas 경우 utf-8을 기본 인코딩으로 사용한다. 반면 윈도우즈 엑셀은 cp949를 인코딩으로 사용한다. 이렇게 인코딩이 다른 경우 한글이 깨지는 현상이 발생한다.

import pandas as pd

# 한글이 포함된 DataFrame 생성
df = pd.DataFrame({
    "이름": ["홍길동", "김철수"],
    "부서": ["생산관리", "스마트팩토리"]
})

# UTF-8로 저장 (BOM 없음)
df.to_csv("korean_utf8.csv", index=False, encoding="utf-8")
df_broken = pd.read_csv(
    "korean_utf8.csv",
    encoding="cp949",
    encoding_errors="replace"
)

print(df_broken)
    �씠由�         遺��꽌
0  �솉湲몃룞     �깮�궛愿�由�
1  源�泥좎닔  �뒪留덊듃�뙥�넗由�

위 예제는 utf-8로 저장하고 cp949로 읽었을 때 상황이다. 인코딩을 맞추게 되면 정상 출력된다.

df_matched = pd.read_csv(
    "korean_utf8.csv",
    encoding="utf-8",
    encoding_errors="replace"
)

print(df_matched)
    이름      부서
0  홍길동    생산관리
1  김철수  스마트팩토리