유용한 정보를 발견하고 결론을 유추하거나, 의사 결정을 돕기 위해 데이터를 조사, 정제, 변환, 모델링하는 과정
데이터 분석과 자주 언급되는 데이터 과학은 통계학, 데이터 분석, 머신러닝, 데이터 마이닝 등을 아우르는 큰 개념
데이터 분석과 데이터 과학의 차이점
데이터 분석은 올바른 의사 결정을 돕기 위한 통찰을 제공하는데 초점을 맞추고, 데이터 과학은 문제 해결을 위한 최선의 솔루션을 만드는데 초점을 맞춘다.
gdown: 구글 드라이브를 포함하여 웹에서 대용량 파일을 다운로드할 수 있는 패키지
import gdown
gdown.download('https://bit.ly/3eecMKZ', '남산도서관 장서 대출목록 (2021년 04월).csv', quiet=False)
코랩을 사용하면 gdown 패키지가 코랩에 이미 설치 되어 있기 때문에 추가로 설치할 필요가 없지만, jupyter를 사용하면 추가로 패키지를 설치 해야 한다.
jupyter에서는 ! pip 명령어를 통해 파이썬에 필요한 패키지를 쉽게 다운로드 할 수 있다.
with open('남산도서관 장서 대출목록 (2021년 04월).csv') as f:
print(f.readline())
with 구문
readline()
💡 파이썬의 open() 함수는 기본적으로 텍스트 파일이 UTF-8 형식으로 저장되어 있다고 가정하지만, 한글 텍스트는 EUC-KR 형식을 사용하는 일이 많습니다.
import chardet
with open('남산도서관 장서 대출목록 (2021년 04월).csv', mode='rb') as f:
d = f.readline()
print(chardet.detect(d))
// 출력
{'encoding': 'EUC-KR', 'confidence': 0.99, 'language': 'Korean'}
with open('남산도서관 장서 대출목록 (2021년 04월).csv', encoding='EUC-KR') as f:
print(f.readline())
// 출력
번호,도서명,저자,출판사,발행년도,ISBN,세트 ISBN,부가기호,권,주제분류번호,도서권수,대출건수,등록일자,
"1","인공지능과 흙","김동훈 지음","민음사","2021","9788937444319","","","","","1","0","2021-03-19",
판다스는 CSV 파일을 읽어 데이터프레임(Data Frame)이라는 표 형식 데이터로 저장한다.
판다스에는 시리즈(Series)라는 데이터 구조도 있다.
# csv 파일 읽기 예제
import pandas as pd
df = pd.read_csv('남산도서관 장서 대출목록 (2021년 04월).csv', encoding='EUC-KR')
코드를 실행하면 아래와 같은 오류가 발생 합니다.
DtypeWarning: Columns (5,6,9) have mixed types. Specify dtype option on import or set low_memory=False.
오류가 발생하는 원인은 판다스는 CSV 파일을 읽을 때 '도서명'과 '대출건수' 같은 열에 어떤 종류의 데이터가 저장되어 있는지 자동으로 파악하는데 메모리를 효율적으로 사용하기 위해 CSV 파일을 조금씩 나누어 읽는다. 이 때 자동으로 파악한 데이터 타입이 달라지면 경고가 발생 합니다.
위와 같은 문제를 해결하기 위해서는 크게 2가지 해결 방법이 존재 합니다.
💡 dtype 매개변수로 데이터 타입을 지정
- 열의 데이터 타입을 자동으로 찾지 않도록 데이터 타입을 지정💡 low_memory 매개변수를 False로 지정
- 파일을 나누어 읽지 않고 한 번에 읽기.
- 파일을 한 번에 모두 읽기 때문에 많은 메모리를 사용.
# dtype 매개변수 사용 예제
import pandas as pd
df = pd.read_csv('남산도서관 장서 대출목록 (2021년 04월).csv', encoding='EUC-KR', dtype={'ISBN' : str, '세트 ISBN' : str, '주제분류번호' : str})
import pandas as pd
dt = pd.read_csv('남산도서관 장서 대출목록 (2021년 04월).csv', encoding='EUC-KR', dtype={'ISBN' : str, '세트 ISBN' : str, '주제분류번호' : str})
dt.head()
💡CSV의 첫 번째 행은 열 이름으로 인식합니다. 만약 CSV 파일의 첫 번째 행이 열 이름이 아니라면, read_csv() 함수를 호출할 떄 header 매개변수를 None으로 지정하고, names 매개변수에 열 이름 리스트를 따로 전달해 줍니다. 이 때 names 매개변수에 전달하는 열 이름에 중복된 이름이 있어서는 안 된다.
💡to_csv() 함수를 사용해서 저장하면 데이터프레임에 행 인덱스가 함께 저장된다. 그래서 데이터프레임을 저장한 csv파일을 다시 데이터프레임으로 읽으면 인덱스 열이 추가로 생성이 된다.
필수 숙제
판다스 read_csv() 함수의 매개변수 설명이 옳은 것은 무엇인가요?
1. header 매개변수의 기본값은 1로 csv 파일의 첫 번째 행을 열 이름으로 사용합니다.
- header 매개변수의 기본값은 0 (첫번째 행) 입니다.
2. names 매개변수에 행 이름을 리스트로 지정할 수 있습니다.
- 열 이름을 리스트로 지정할 수 있습니다.
3. encoding 매개변수에 csv 파일의 인코딩 방식을 지정할 수 있습니다. 💡(정답)
4. dtype 매개변수를 사용하려면 모든 열의 데이터 타입을 지정해야 합니다.
- 특정 열의 데이터 타입만 지정해도 됩니다.
추가 숙제
남산 도서관 데이터를 코랩에서 데이터프레임으로 출력하고 화면 캡처하기
ref.) 공공 데이터 세트를 찾을 수 있는 대표 사이트