CSV : 콤마로 구분된 텍스트 파일. 한 줄이 하나의 레코드(로우,행)이며 레코드는 콤마로 구분된 여러 필드(컬럼,열)로 구성됨. 데이터는 엑셀처럼 표 형태여야 하기에 레코드에 있는 필드 개수는 모두 동일함.
→ 텍스트를 단순하게 나열한 구조라 프로그래밍 언어에서 사용하기 편리함
코랩에 데이터 다운로드하기 : gdown 패키지
gdown 패키지를 임포트 하는 코드를 작성
gdown 패키지는 구글 드라이브를 포함하여 웹에서 대용량 파일을 다운로드할 수 있는 패키지임
이 방식을 사용하면 다운로드 코드가 노트북에 저장되기 때문에 노트북을 다시 열 때 이 코드 셀을 실행해 주기만 하면 CSV 파일이 자동으로 준비됨
내 컴퓨터 파일을 업로드하기
파이썬으로 CSV 파일 출력하기
CSV 파일은 텍스트 파일이므로 파니썬의 open() 함수로 읽을 수 있음. with 문으로 파일을 연 다음 readline() 메서드로 파일에서 한 줄을 읽어서 출력해보기
오류 : 파이썬의 open() 함수는 기본적으로 텍스트 파일이 UTF-8 형식으로 저장되어 있다고 가정함. 하지만 한글 텍스트는 EUC-KR을 사용하는 일이 잦음
파일 인코딩 형식 확인하기 : chardet.detected() 함수
파이썬에서 chardet 패키지의 chardet.detect() 함수를 사용하면 문자 인코딩 방식을 알아낼 수 있음
open()함수로 텍스트 파일을 열 때 mode 매개변수를 바이너리 읽기 모드인 ‘rb’로 지정함. 바이너리 모드로 지정하면 문자 인코딩 형식에 상관없이 파일을 열 수 있으므로 오류가 발생하지 않음
open()함수 mode 매개변수 기본값은 텍스트 읽기모드인 ‘r’임
다만 텍스트 파일을 바이너리 모드로 읽으면 모든 글자를 1바이트로 인식하기 때문에 한글과 같은 유니코드 문자를 화면에 올바르게 출력할 수 없음
chardet.detect() 함수에 데이터를 넣어 어떤 인코딩을 사용하는지 출력하기
→ UTF-8이 아니라 EUC-KR로 인코딩 되어 있어서 open() 함수에서 오류가 발생
<aside> 💡
인코딩 : 문자를 컴퓨터가 이해할 수 있는 0과 1의 이진(바이너리)형태로 바꾸는 것을 말함
UTE-8 : 전 세계 모든 문자를 컴퓨터에 표현하기 위해 만들어진 유니코드를 인코딩하는 방식 중의 하나로 최대 4바이트까지 사용
EUC-KR : 한글을 위한 완성형 인코딩 중 하나로 2바이트를 사용
</aside>
인코딩 형식 지정하기
open()함수로 파일을 읽을 때 encording 매개변수로 인코딩 형식을 ‘EUC-KR’로 지정하면 됨. 이번에는 처음 두 줄을 읽어 출력해보기
아주 큰 CSV 데이터를 열어 볼 때는 open() 함수와 readline() 메서드로 처음 몇 줄을 출력해 볼 것. 파일 내용을 빠르게 확인 가능
판다스는 CSV 파일을 읽어 데이터프레임이라는 표 형식 데이터로 저장함.
배열은 같은 종류의 데이터가 순서대로 나열된 데이터 구조를 말함. 배열은 나열된 축이 하나인 경우 1차원 배열, 축이 2개인 경우 2차원 배열이라고 함
판다스의 시리즈는 1차원 배열, 이때 시리즈에 담긴 데이터는 모두 동일한 종류여야 함. 예를 들면 모두 정수이거나 문자열
리스트는 정수나 문자열을 섞어 쓸 수 있는 훨씬 유연한 데이터 구조
데이터 프레임은 2차원 배열. 열마다 다른 데이터 타입을 사용할 수 있음, 같은 열에 있는 데이터는 모두 같은 종류여야 함
CSV 파일을 데이터 프레임으로 읽기 : read_csv() 함수
판다스에서 CSV 파일을 읽을 때는 read_csv() 함수를 사용, 앞에 데이터가
EUC-KR로 저장되어 있다는 것을 알았으므로 encording 매개변수를 ‘EUC-KR’로 지정
판다스를 임포트해야함. 파이썬 프로그래머들은 파이썬 패키지 이름을 짧게 줄여쓰는 것을 좋아한다.. 파이썬의 as 키워드로 임포트할 패키지 이름을 pd로 바꿈
→ DtypeWarnig이 발생.
: 판다스는 CSV파일을 읽을 때 열에 어떤 종류의 데이터가 저장되어 있는지 자동으로 파악함. 그런데 메모리를 효율적으로 사용하기 위해 CSV 파일을 조금씩 나누어 읽음. 이때 자동으로 파악한 데이터 타입이 달라지면 경고가 발생
해결 방법은 low_memory 매개변수를 False로 지정하여 파일을 나누어 읽지 않고 한 번에 읽는 것
<aside> 💡
Dtype 매개변수
low_memory 매개변수를 False로 지정하면 경고는 발생하지 않지만, CSV 파일을 한번에 모두 읽기 때문에 많은 메모리를 사용함. CSV 아주 큰 경우 메모리 부족 오류가 발생할 수 있음. 다른 방법은 열의 데이터 타입을 자동으로 찾지 않도록 아예 dtype 매개변수로 데이터 타입을 지정하는 것.
→ 경고가 발생했던 열의 데이터 타입을 문자열로 지정
</aside>