데이터 분석이란?
데이터 분석에 대해 자세히 궁금하신 분은 아래의 글을 참고해주세요!
이 도서가 얼마나 인기가 많을까요?
#공개데이터 세트
#CSV
#판다스
#데이터 프레임
1. 도서관 데이터 준비
가장 인기가 많은 도서를 찾기 위해 도서관 정보나루 홈페이지에서 서울특별시교육청남산도서관 장서 대출목록 (2023년 11월).csv를 다운 받아주도록 하겠습니다.
csv 파일?
CSV 파일은 콤마(,)로 구분된 텍스트입니다.
→ 한 줄이 하나의 레코드(record)이며 레코드는 콤마로 구분된 여러 필드(field)로 구성됩니다.
데이터는 엑셀처럼 표 형태여야 하기 때문에 레코드에 있는 필드 개수는 모두 동일합니다.
CSV 파일은 메모장과 같은 일반 텍스트 편집기에서도 열어 볼 수 있습니다.
그럼 이제 파이썬으로 남산도서관 대출 데이터가 담긴 CSV 파일을 읽어보도록 하겠습니다.
1-1. 첫 번째 방법 : 코렙에 데이터 다운로드 하기 : gdwon 패키지
import gdown
gdown.download('https://bit.ly/3eecMKZ', '남산도서관 장서 대출목록 (2021년 04월).csv', quiet-False)
빈 코드 셀에서 위와 같이 입력을 하면 gdown 패키지를 사용하여 데이터를 이용할 수 있습니다.
1-2. 두 번째 방법 : 내 컴퓨터 파일을 업로드하기
위와 같은 장소에 파일을 드래그하여 놓으면 파일을 업로드 할 수 있습니다.
주의) 일정 시간이 지나면 업로드한 파일이 지워질 수 도 있습니다.
2. 파이썬으로 CSV 파일 출력하기
CSV파일은 텍스트 파일이라서 파이썬의 open() 함수
로 읽을 수 있습니다.
with문
으로 파일을 연 다음 readline()메소드
를 활용해 파일을 한 줄 읽을 수 있습니다.
정리를 하자면
with문
으로 파일 열기open()
함수로 파일 읽기readline()
함수로 파일을 한 줄 씩 읽기
with open('서울특별시교육청남산도서관 장서 대출목록 (2023년 11월).csv') as f:
print(f.readline())
이렇게 입력을 하고 나면 UnicodeDecodError
라는 오류가 발생하게 되는데요.
현재 파일이 한글 텍스트이기 때문에 발생한 오류 같습니다.
따라서 인코딩을 다시 설정해주도록 하겠습니다!
2-1. 파일 인코딩 형식 확인 하기 : chardet.detect() 함수
먼저 파일의 인코딩 형식을 확인해보도록 하겠습니다.
chardet
패키지의 chardet.detect()
함수를 사용하면 문자 인코딩 방식을 알아 낼 수 있습니다.
그 다음 알아낸 문자로 인코딩 형식을 다시 지정해줍니다.
2-2. 인코딩 형식 지정하기 : encoding 매개변수
파일의 인코딩 형식을 알게 되었다면 encoding 매개변수
로 인코딩 형식을 EUC-KR
로 지정하면 됩니다.
with open('서울특별시교육청남산도서관 장서 대출목록 (2023년 11월).csv', encoding='EUC-KR') as f:
print(f.readline())
이렇게 입력을 하게 되면 오류가 해결되고 한 줄씩 데이터가 잘 나오게 됩니다!!
하지만 한 줄 씩 읽어서 데이터 분석하기에는 어려움이 있습니다. 따라서 CSV 파일을 읽고 처리하는데 유용한 함수를 많이 제공하는 판다스 패키지를 사용해보도록 하겠습니다.
3. 데이터프레임 다루기 : 판다스
판다스는 CSV파일을 읽어 데이터 프레임이라는 표 형식 데이터로 저장합니다.
여기서 표 형식 데이터는 행과 열로 구성된 데이터 구조를 말합니다.
3-1. CSV 파일을 데이터 프레임으로 읽기 : read_csv() 함수
판다스에서 CSV파일을 읽을 때는 read_csv()
함수를 사용합니다.
read_csv() 함수를 호출하려면 판다스를 임포트 해야합니다.as
키워드를 사용하여 pandas.read_csv()를 pd.read_csv로 짧게 사용할 수 있습니다!
또한 판다스는 CSV파일을 읽을 때, 어떤 종류의 데이터가 저장되어있는지 자동으로 파악합니다. 그런데 메메모리를 효율적으로 사용하기 위해 CSV 파일을 조금씩 나누어 읽습니다. 이때 자동으로 파악한 데이터 타입이 달라지면 경고가 발생하게 됩니다. 이 와 같은 오류를 해결하기 위해서는 low_memory 매개변수
함수를 사용하면 됩니다.
import pandas as pd
df = pd.read_csv('서울특별시교육청남산도서관 장서 대출목록 (2023년 11월).csv', encoding='EUC-KR', low_memory=False)
이제 데이터를 제대로 가져왔는지 확인해 보도록 하겠습니다
head() 메소드
를 이용한다면 데이터 프레임의 처음 다섯 개 행을 확인 할 수 있습니다!
그런데 맨 마지막을 끝을 보니 Unnamed:13 이라는 열이 생겼네요
이 열이 생긴 이유는 CSV 파일에 각 라인의 끝에 콤마(,)가 있어 판다스는 이를 보고 마지막에 하나의 열이 더 있다고 판단해서 위와 같은 열을 표시하게 된 것입니다. 이를 처리하는 방법은 2장에서 알아보도록 하겠습니다!
3-2. 데이터 프레임을 CSV 파일로 저장하기 : to_csv() 메소드
판다스의 데이터프레임을 CSV로 저장할 때는 to_csv()
메소드를 사용합니다.
to_csv()메소드는 기본적으로 UTF-8 형식으로 저장되어있기 때문에 encoding 매개변수를 사용하지 않아도 됩니다.
이제 to_csv() 메소드를 활용하여 데이터 프레임을 ns_202311.csv 파일로 저장하겠습니다.
df.to_csv('ns_202311.csv')
CSV파일을 다시 open()함수
로 확인을 해보면
with open('ns_202311.csv') as f:
for i in range(3):
print(f.readline(), end='')
,번호,도서명,저자,출판사,발행년도,ISBN,세트 ISBN,부가기호,권,주제분류번호,도서권수,대출건수,등록일자,Unnamed: 13
0,1,그래봤자 개구리,장현정 쓰고 그림,키다리,2023,9791157856374,,7,,813.8,1,0,2023-11-27,
1,2,고양이 해결사 깜냥,홍민정 지음 ;김재희 그림,창비,2023,9788936448523,,7,6,813.8,1,0,2023-11-27,
앞서 출력했던 CSV 파일 결과와 다르게 CSV 파일 맨 왼쪽에 데이터 프레임에 있던 행 인덱스가 함께 저장되어있는 것을 볼 수 있습니다.
이 CSV 파일을 다시 데이터 프레임으로 읽으면
ns_df = pd.read_csv('ns_202311.csv', low_memory=False)
ns_df.head()
Unnamed:0이라는 첫번째 열과 중복됩니다.
CSV 파일에 인덱스가 이미 있다는 것을 알려주기 위해 index_col
매개변수를 사용하겠습니다.
첫번째 열에 인덱스가 있으므로 0으로 지정합니다.
ns_df = pd.read_csv('ns_202311.csv', index_col = 0, low_memory=False)
ns_df.head()
또 다른 방법으로 는 index매개변수
를 false로 지정합니다.
df.to_csv('ns_202311.csv', index=False)
이해가 안 가는 부분이 있거나 설명이 미흡한 부분이 있다면 댓글로 알려주세용!!
'혼공학습단 > 데이터 분석 with 파이썬' 카테고리의 다른 글
[데이터 분석] 혼공학습단 11기_5주차 (0) | 2024.02.03 |
---|---|
[데이터 분석] 혼공학습단 11기_4주차 (4) | 2024.01.27 |
[데이터 분석] 혼공학습단 11기_3주차 (0) | 2024.01.21 |
[데이터 분석] 혼공학습단 11기_2주차 (0) | 2024.01.10 |
[데이터 분석] 혼공학습단 11기_1주차 (0) | 2024.01.03 |