brunch

You can make anything
by writing

C.S.Lewis

by 김영하 Aug 03. 2023

데이터 불러오기 문제 해결 (인코딩)

나도 해보는 공공데이터 분석 및 시각화 2

어제는 atoti라는 라이브러리를 소개시켜드리려고 몇 가지 준비를 하다 그 과정이 좀 까다로운 것 같아 고민을 하다 글을 올리지 못 했네요... 


"가급적 쉽게 간단히 조금씩" 이라는 개념으로 소개 시켜드리려고 하니 글이 너무 짧아도 쉬워도 이해해 주세요 ^^


궁금하신 점이나 어려운 점이 있으시면 언제든지 fermat39@naver.com (김영하)로 연락주세요


이번 시간에는 아래와 같은 "한국가스공사_월별 천연가스 생산량_20221031.csv"를 불러와 보겠습니다.

실습 환경은 구글 colab에서 진행합니다. 구글 colab이 준비되면 "한국가스공사_월별 천연가스 생산량_20221031.csv" 파일을 업로드 해줍니다.


https://www.data.go.kr/data/15049906/fileData.do


해당 사이트에서 보면 아래와 같이 데이터 차체는 굉장히 간단합니다. 컬럼은 3개이고, 데이터는 82개행 밖에 되지 않습니다.


그러나, 파일을 불러오려고 하면 분석은 커녕 아래와 같이 에러가 발생합니다.

"utf-8" codec이 문제라고 하네요...


https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html


판다스 공식문서에서 read_csv에 대해서 찾아보면, encoding이라는 파라미터를 지정하지 않으면 기본 encoding이 "utf-8"이라고 하는군요! 



그런데 인코딩은 또 뭔지... 데이터 분석의 첫시작부터 좌절입니다... ㅠㅠ


간단히 말해 인코딩은 문자를 처리하는 방식입니다. 가장 유명한 인코딩 방식은 ASCII 코드입니다. 컴퓨팅 환경은 미국을 중심으로 개발되어 왔습니다. 영문자는 대소문자만 총 52개면 충분합니다. 여기에 특수문자를 추가해도 문자열을 표시하기에 충분합니다. 총 7비트만으로도 128개 문자를 표현할 수 있어서 영문을 출력하기에는 큰 문제가 없습니다. 그러나 ASCII로는 각 나라별 언어를 표현할 수 없다. 이런 문제를 해결한 코드가 유니코드입니다. 이 유니코드는 언어와 상관없이 모든 문자를 16비트로 표현하기에 최대 65,536자를 표현할 수 있습니다. 한글은 http://www.unicode.org/charts/PDF/UAC00.pdf 에 정의되어 있습니다.


그런데 우리가 불러오려는 데이터 파일은 이 "utf-8"이 아닌 것 같습니다. 그래서 "chardet"이라는 파이썬 패키지를 설치하고 chardetect 명령어를 통해서 데이터 파일의 인코딩을 확인하니 아래와 같이 EUC-KR 이라고 99%의 자신감을 가지고 알려줍니다.

위키페디아에서 찾아보니


EUC-KR은 KS X 1001와 KS X 1003을 사용하는 8비트 문자 인코딩EUC의 일종이며 대표적인 한글 완성형 인코딩이기 때문에 보통 완성형이라고 불린다.


라고 하는군요... 뭔가 한글처리를 할 때 utf-8보다는 EUC-KR로 하것 같습니다. 일단 encoding 파라미터에 "EUC-KR"을 전달해서 다시 불러오겠습니다.


일단 에러가 발생하지 않습니다! 아래와 같이 데이터가 잘 준비되었습니다.

데이터도 중요하지만, 문자가 한글로 되어 있는 여부와 그 한글이 어떻게 인코딩되었는지 확인도 중요하다는 것을 알게되었습니다!


encoding 파라미터 정말 중요하군요! ^^


그럼 이만!

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari