학습 목적: 데이터 분석을 해가는 과정을 읽어보며 감잡기
막힘
# 로드
%pip install gdown
# import gdown
# bool isShow = False
# gdown.download(url="url",output="filepath", quiet=isShow)
import gdown
b_csv = gdown.download('https://bit.ly/3eecMKZ',
'남산도서관 장서 대출목록 (2021년 04월).csv', quiet=False)
# 프린트
for text in b_csv.readline():
print(text)
# 파일 인코딩 체크: readmode 세팅, chardet.detect()
# 왜 확인하냐?
# - CSV 인코딩이 UTF-8, CP949, EUC-KR 등 제각각이라 한글 깨짐 방지하려고.
import chardet
with open('남산도서관 장서 대출목록 (2021년 04월).csv', 'rb') as f:
raw = f.read(10000) # 앞부분만 읽어도 OK
result = chardet.detect(raw)
print(result) # {'encoding': 'CP949', 'confidence': 0.99}
# 인코딩 형식 정하여 다시 로드
import pandas as pd
enc = result['encoding'] or 'utf-8'
df = pd.read_csv(
'남산도서관 장서 대출목록 (2021년 04월).csv',
encoding=enc,
low_memory=False # dtype 경고 없애려고
)
print(df.head())
df = pd.read_csv(
'남산도서관 장서 대출목록 (2021년 04월).csv',
encoding=enc,
errors='replace', # � 로 깨진 글자 대체
low_memory=False
)
# 판다스(Pandas): 파이썬에서 표 형태(테이블) 데이터를 다루기 위한 라이브러리
# 데이터 프레임(DataFrame): 2차원 행·열 구조, SQL 테이블이나 엑셀 시트와 유사
# 시리즈(Series): 1차원 배열, 데이터 프레임의 한 열(column)에 해당
### 판다스로 csv 다루기
# 로드
import pandas as pd
df = pd.read_csv(
'남산도서관 장서 대출목록 (2021년 04월).csv',
encoding=enc, # 앞에서 감지한 인코딩
low_memory=False # 청크별 타입 추론 비활성화
)
print(df.shape, df.columns)
# low 메모리 에러는 왜 나오나? 해결법
# 파일이 크고 칼럼마다 데이터 타입이 섞여 있으면, pandas가 작은 청크 단위로 읽으며 dtype 경고 발생
# 해결: low_memory=False 로 한 번에 읽어서 일관된 타입 추론
# 다시 csv로 저장 to_csv
df.to_csv(
'processed_data.csv',
index=False, # 인덱스 열 제거
encoding='utf-8-sig' # Excel 호환용 BOM 포함
)
# dataframe은 생성시 기본값이 자동으로 맨 왼쪽에 인덱스 열을 추가하는 것. 만약 끄고 싶다면? -> index_col=0
df = pd.read_csv('file.csv', index_col=0)
df.to_csv('file.csv', index=False)
# 엑셀로 저장 -> 필요한 라이브러리들 사용법
%pip install openpyxl
df.to_excel(
'output.xlsx',
index=False,
engine='openpyxl'
)