-
[혼자 공부하는 데이터 분석 with 파이썬] 01 데이터분석카테고리 없음 2023. 9. 9. 19:26
01 데이터 분석
데이터 분석: 데이터를 '수집' '처리' '분석' '모델링' 하여 의사 결정을 내리는데 도움을 주는 작업
'' 새로운 도서를 출간할 때 얼마나 판매되는 지 예측하고 싶다 ''
데이터 수집 - 도서 데이터 찾기
01) gdown 패키지 임포트 하여 데이터 업로드
#gdown 패키지 : 구글 드라이브를 포함하여 웹에서 대용량 데이터 다운로드 패키지
import gdown'남산도서관 장서 대출목록(2021년 04월).cvs',quiet=False)02) 파이썬으로 cvs 파일 출력하기
cvs 파일 = 텍스트 파일이므로 open() 함수로 읽기
with 문으로 파일 열기
readline() 메서드로 파일에서 한줄 출력
with open('남산도서관 장서 대출목록(2021년 04월).cvs') as f:print(f.readline())---------------------------------------------------------------------------
UnicodeDecodeError Traceback (most recent call last)
<ipython-input-5-68d6ea9ac0aa> in <cell line: 1>() 1 with open('남산도서관 장서 대출목록(2021년 04월).cvs') as f: ----> 2 print(f.readline())
/usr/lib/python3.10/codecs.py in decode(self, input, final) 320 # decode input (taking the buffer into account) 321 data = self.buffer + input --> 322 (result, consumed) = self._buffer_decode(data, self.errors, final) 323 # keep undecoded input until the next call 324 self.buffer = data[consumed:]
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb9 in position 0: invalid start byte
오류 : open()함수는 기본적으로 텍스파일이 UTF-8 저장한다고 가정함 (한글 텍스트 인코딩 : ECU-KR)
해결 : 문자 인코딩 방식 알아내기
① chardet 패키지의 chardet.detect() 함수를 사용
open() 함수로 텍스트 파일 열때 mode 매개변수를 바이너리 읽기 모드인 'rb'로 지정
(바이너리 모드로 지정하면 문자 인코딩 형식에 상관없이 파일열기 가능)
import chardetwith open('남산도서관 장서 대출목록(2021년 04월).cvs',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월).cvs',encoding='EUC-KR') as f:print(f.readline())print(f.readline())번호,도서명,저자,출판사,발행년도,ISBN,세트 ISBN,부가기호,권,주제분류번호,도서권수,대출건수,등록일자, "1","인공지능과 흙","김동훈 지음","민음사","2021","9788937444319","","","","","1","0","2021-03-19",
03 데이터 프레임 다루기: 판다스
read_cvs() : 판다스에서 CVS파일 읽기
as 키워드 : 파이썬 패키지를 짧게 바꾸기
import pandas as pddf = pd.read_csv('남산도서관 장서 대출목록(2021년 04월).cvs',encoding='EUC-KR',low_memory=False)head() 메서드 : 데이터프레임 처음 다섯개 행 확인
df.head()to_cvs() 메서드: 판다스의 데이터프레임을 cvs로 저장
print() 함수에 end=' ' 을 지정하면 줄바꿈 문자를 출력하지 않기 때문에 cvs파일에 저장된 그대로 출력 가능
with open('ns_202104.csv') as f:for i in range(3):print(f.readline(),end='')index_col 매개변수 :
cvs파일에 데이터프레임에 있던 행 인덱스가 같이 저장됨
Unnamed:0 이라는 첫번째 열과 중복
① index_col=0 이라고 이미 인덱스 있음을 알려줌으로서 해결
② to_cvs() 메서드에 index_col=False 라고 지정함 => 인덱스 빼고 저장
ns_df = pd.read_csv('ns_202104.csv',index_col=0, low_memory=False)ns_df.head()