본문 바로가기

내용 복습/python

데이터분석 with 파이썬 1

1. 데이터 분석에 사용되는 패키지

  • 넘파이(Numpy) : 고성능 과학 계산과 다차원 배열(array)을 위한 패치지. 대부분의 데이터 분석 패키지는 데이터를 다룰 때 넘파이 배열을 사용한다.
  • 판다스(pandas) : 마이크로소프트 엑셀의 시트처럼 숫자와 문자를 섞어서 표 형태로 저장할 수 있는 데이터프레임(DataFrame)을 사용. 넘파이가 과학 계산에 초첨을 맞추고 있다면, 판다스는 편리한 데이터 처리와 분석작업을 위해 많은 기능을 제공한다. 다양한 그래프 출력기능도 갖추고 있어 넘파이와 함께 자주 사용된다.
  • 맷플롯립(Matplotlib) : 데이터 시각화를 위한 기본 패키지이다. 정적/동적인 그래프를 그릴 수 있고, 고품질의 다양한 그래프가 제공됨다. 또한 다른 과학 패키지와 호환성이 높고 파이썬에서는 맷플롯립 외에도 시본(seabon), 보케(bokeh)와 같은 시각화 패키지를 사용한다.
  • 사이파이(SciPy) : 넘파이를 기반으로 구축된 수학과 과학 계산 전문 패키지입니다. 미분, 적분, 선대, 최적화 등을 알고리즘으로 구현한다.
  • 사이킷런(scikit-learn) : 독보적인 머신러닝 패키지로 넘파이와 사이파이에 크게 의존한다. 파이썬 뿐만 아니라 전체 데이터 과학 분야에서 널리 사용되는 패키지이다. 

 

2. 코랩에서 도서관 공동 데이터 작업하기

CSV는 콤마(,)로 구분된 텍스트 파일이다. 한줄이 하나의 레코드이며, 레코드는 콤마로 구분된 여러 필드로 구성된다. 데이터는 엑셀처럼 표 형태여야 하기 때문에 레코드에 있는 필드 개수는 모두 동일하다. 메모장에서 CSV를 열어보면 행(row)은 한줄로 표현되고 열(column)은 콤마로 구분된다. 엑셀은 행과 열이 셀로 구분되어 보기 편한데, 콤마로 구분된 CSV 파일은 보기에 불편하다. 하지만 텍스트를 단순하게 나열한 구조라 파이썬에선 오히려 편리하다.

 

그리고 파이썬에선 엑셀파일을 읽고 쓸 수 있도록 여러 패키지가 있는데, openpyxl, xlsxwriter 패키지가 대표적이다. 판다스 패키지역시 read_excel() 함수로 엑셀 파일을 읽을 수 있다. 하지만 데이터 과학 분야에선 응용 프로그램을 사용해야 하는 엑셀보다는 단순한 텍스트 파일인 CSV 파일을 더 선호한다.

 

  • gdown : 구글 드라이브를 포함하여 웹에서 대용량 파일을 다운로드할 수 있는 패키지이다.
  • open() : 보통 with문으로 시작하여 파일을 열 수 있게 해준다. 기본적으로 텍스트 파일이 UTF-8 형식으로 저장되어 있다고 가정한다. 하지만 한글 텍스트는 여전히 완성형 인코딩인 EUC-KR을 사용하는 일이 잦다. 그래서 CSV가 UTF-8 형식이 아니라면 아래의 에러를 발생시킬 수 있다.
- 인코딩 형식 에러
UnicodeDecodeError
: 'utf-8' codec can't decode byte 0xb9 in position 0: invalid start byte
  • chardet.detect() : 파일 인코딩 형식 확인하기. 인코딩 형식 에러가 발생했을 때 사용하면 되는데, open() 메소드에 mode='rb'를 사용해 바이너리 읽기 모드로 지정하면 문자 인코딩 형식에 상관없이 파일을 열 수 있게 된다.
- open 메소드에 바이너리 읽기모드 설정
with open('파일명', mode='rb')
- chardet.detect()로 확인 후 encoding 옵션으로 형식을 설정
with open('파일명', incoding='EUC-KR')

 

CSV는 판다스로 읽는 것이 편하다. 하지만 큰 파일을 열 때는 열리지 않을 수 있으니 open() 함수와 readline()으로 처음 몇줄을 출력해보면 빠르게 파일 내용을 확인할 수 있다.

 

 

3. 데이터프레임 다루기: 판다스

판다스는 CSV 파일을 읽어 데이터프레임이라는 표형식의 데이터로 저장한다. 판다스는 데이터 프레임 외에 시리즈라는 데이터 구조도 있다. 시리즈는 1차원 배열과 비슷한데, 담긴 데이터가 모두 동일한 종류여야 한다. 반면 판다스 데이터프레임은 데이터를 가로 세로로 나열한 2차원 배열과 비슷하다. 시리즈와 달리 열마다 다른 데이터타입을 사용할 수 있다. 대신 데이터 프레임의 같은 열에 있는 데이터는 모두 같은 종류여야 한다.

 

판다스에서 CSV파일을 데이터프레임으로 읽으려면 read_csv() 함수를 사용할 수 있다. 

import pandas as pd
df = pd.read_csv(파일명.csv', encoding='EUC-KR', low_memory=False)
DtypeWarning: Columns (5,6,9) have mixed types. Specify dtype option on import or set low_memory=False
- 판다스는 csv 파일을 읽을 때 어떤 종류의 데이터가 저장되어 있는지 자동으로 파악하는데, 메모리의 효율적 사용을 위해 CSV 파일을 조금씩 나누어 읽는다. 이때 자동으로 파악한 데이터 타입이 달라지면 위 경고가 발생한다. 해결방법은 에러문과 같이 low_memory 파라미터를 False로 지정하여 파일을 나누어 읽지 않고 한번에 읽는 것이다.

 

  • df.head() : 데이터프레임의 첫 5개 행을 확인할 수 있다. 출력할 때 판다스는 행마다 0부터 시작하는 인덱스 번호를 자동으로 붙이고 CSV의 첫 행을 열 이름으로 인식하며 만약 중복된 이름이 있다면 자동으로 숫자를 붙여 고유한 이름으로 만든다. 만약 CSV의 첫 행이 열 이름이 아니라면 read_csv() 호출 시 header 매개변수를 None으로 지정하고 names 매개변수에 열 이름 리스트를 따로 전달할 수 있다.
  • read_table() : 콤마(,)로 구분하는 read_csv와 달리 탭(\t)으로 구분된 파일을 읽는 데 사용

판다스의 데이터프레임을 CSV로 저장할 때는 to_csv() 메서드를 사용한다. 기본적으로 UTF-8로 저장하기 때문에 나중에 open() 함수로 읽을 때 encoding 파라미터를 사용하지 않아도 된다. 이 파일을 다시 데이터프레임으로 만들면 데이터프레임이 지정한 인덱스까지 함께 읽히기 때문에 index_col 매개변수를 0으로 지정하면 데이터프레임으로 만들면서 생성된 인덱스가 중복되는 것을 방지할 수 있다. 당연히 to_csv에도 index=False로 인덱스를 빼고 저장하는 것도 가능하다.

판다스는 엑셀파일을 만들기 위해 기본적으로 openyxl 패키지를 사용한다. 한글 데이터를 사용해서 오류가 발생할 때는 대신 xlsxwriter를 사용할 수도 있다.

 

 

'내용 복습 > python' 카테고리의 다른 글

FastAPI 공부 4일차  (0) 2025.05.19
FastAPI 공부 3일차  (0) 2025.05.18
FastAPI 공부 2일차  (0) 2025.04.26
FastAPI 공부내용 1일차  (0) 2025.04.25
데이터 공부 with 파이썬 2일차  (1) 2025.02.08