학습목표
- 데이터 분석과 데이터 과학을 비교하면서 데이터 분석이 무엇인지 알아봅니다.
- 예제를 실습하기 위해 구글 코랩과 주피터 노트북을 다뤄 봅니다.
- 판다스를 사용해 첫 번째 데이터를 다운로드하고 내용을 확인해 봅니다.
데이터 분석: 유용한 정보를 발견하고 결론을 유추하거나, 의사 결정을 돕기 위해 데이터를 조사, 정제, 변환, 모델링하는 과정
=> 올바른 의사 결정을 돕기 위한 통찰 제공
데이터 과학: 통계학, 데이터 분석, 머신러닝, 데이터 마이닝을 아우르는 큰 개념
=> 한 걸음 더 나아가 문제 해결을 위한 최선의 솔루션을 만드는데 초점
+ 데이터 마이닝과 머신러닝
- 데이터 마이닝: 데이터에서 패턴 혹은 지식을 추출하는 작업
- 머신 러닝: 데이터에서 자동으로 규칙을 학습하여 문제를 해결하는 소프트웨어를 만드는 기술, 규칙이나 패턴을 사용하는 주체가 사람이 아닌 컴퓨터
- 모델: 머신러니으로 학습한 소프트웨어 객체
텍스트 셀
- 셀: 코랩에서 실행하는 최소 단위
- HTML, 마크다운 혼용해서 사용 가능
코드 셀
- 파이썬 코드를 입력하고 실행할 수 있는 셀
- 위아래 셀을 오가며 코드를 실행할 수 있어 실행 순서에 주의가 필요
- Shift + Enter: 현재 셀 실행 후 다음 셀 이어서 실행
깃허브에 저장된 노트북 불러오기
csv 파일
- 콤마(,)로 구분된 텍스트 파일
- 한 줄이 하나의 레코드, 레코드는 콤마로 구분된 여러 필드로 구성
- 행은 한 줄, 열은 콤마로 구분
gdown 패키지
코드
import gdown gdown.download('https://bit.ly/3eecMKZ', '남산도서관 장서 대출목록 (2021년 04월).csv', quiet=False)
파일 인코딩 형식 확인하기: chardet.detect() 함수
- 바이너리 읽기 모드: 문자 인코딩 형식에 상관없이 파일을 열 수 있으나, 모든 글자를 1바이트로 인식하기 때문에 유니코드 문자를 화면에 올바르게 출력할 수 없음.
코드
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'}
인코딩 형식 지정하기
- encoding 매개변수로 인코딩 형식을 'EUC-KR'로 지정
코드
with open('남산도서관 장서 대출목록 (2021년 04월).csv', encoding='EUC-KR') as f: print(f.readline()) print(f.readline())
+ NFC, NFD
- NFC 방식: 혼공
- NFD 방식: ㅎㅗㄴㄱㅗㅇ
- NFD -> NFC
코드
import os import glob import unicodedata for filename in glob.glob('*.csv'): nfc_filename = unicodedata.normalize('NFC', filename) os.rename(filename, nfc_filename)
CSV 파일을 데이터프레임으로 읽기: read_csv() 함수
- low_memory 매개변수를 False로 지정
코드
df = pd.read_csv('남산도서관 장서 대출목록 (2021년 04월).csv', encoding='EUC-KR', low_memory=False)
- 열의 데이터 타입을 자동으로 찾지 않도록 dtype 매개변수로 데이터 타입을 지정할 수 있음.
코드
df = pd.read_csv('남산도서관 장서 대출목록 (2021년 04월).csv', encoding='EUC-KR', dtype={'ISBN': str, '세트 ISBN': str, '주제분류번호': str})
- head() 메서드 사용하여 데이터프레임의 처음 다섯 개 행을 확인
- header 매개변수 None으로 지정: csv 파일의 첫 행이 열 이름이 아닌 경우
- names 매개변수에 열 이름 리스트를 따로 전달, 중복된 이름이 있어서는 안됨
- Unnamed: 13열은 csv 파일이 올바르지 않은 경우에 생길 수 있음.
판다스의 read_table() 함수
- csv 파일을 읽을 때 read_table() 함수도 사용할 수 있음.
- 콤마 대신 탭으로 구분된 파일을 읽을 때 사용
- read_csv(sep='\t')과 동일
데이터프레임을 CSV 파일로 저장하기: to_csv() 메서드
코드
df.to_csv('ns_202104.csv')
- 저장한 파일을 open() 함수로 확인
- 다시 데이터프레임으로 읽으면 인덱스가 중복 발생
- index_col 매개변수를 사용하여 인덱스가 이미 있음을 알림.
코드
ns_df = pd.read_csv('ns_202104.csv', index_col=0, low_memory=False) ns_df.head()
- 데이터프레임을 csv 파일로 저장할 때 인덱스 빼고 저장
코드
df.to_csv('ns_202104.csv', index=False)
- 데이터프레임을 엑셀로 저장하기
코드
ns_df.to_exel('ns_202104.xlsx', index=False)
- 한글 데이터의 경우 오류가 발생할 수 있어 xlsxwriter 패키지 사용
코드
!pip install xlsxwriter ns_df.to_exel('ns_202104.xlsx', index=False, engine='xlsxwriter')
p. 81의 확인 문제 4번 풀고 인증하기
- 판다스 read_csv() 함수의 매개변수 설명이 옳은 것은 무엇인가요?
답: 3번
1) header 매개변수의 기본값은 1로 CSV 파일의 첫 번째 행을 열 이름으로 사용합니다.
=> header 매개변수의 기본값은 'infer'로 CSV 파일의 첫 번째 행을 열 이름으로 사용하고, header 매개변수를 1로 설정하면 CSV 파일의 두 번째 행을 열 이름으로 사용합니다.2) names 매개변수에 행 이름을 리스트로 지정할 수 있습니다.
=> names 매개변수에 열 이름을 리스트로 전달하여 지정할 수 있다.3) encoding 매개변수에 csv파일의 인코딩 방식을 지정할 수 있습니다.
4) dtype 매개변수를 사용하려면 모든 열의 데이터 타입을 지정해야 합니다.
=> dtype 매개변수로 특정 열의 데이터 타입을 지정할 수 있음.
p. 71 ~ 73 남산 도서관 데이터를 코랩에서 데이터프레임으로 출력하고 화면 캡처하기