본문 바로가기
AI/데이터분석

데이터프레임_도서관대출데이터

by MachineJW 2023. 4. 16.

1. CSV 파일 

- CSV 파일은 콤마(,)로 구분된 텍스트파일

- 한줄을 하나의 레코드(Record)라고 함

- 레코드는 콤마로 구분된 여러 필드(Field)로 구성

- 엑셀(xlsx)의 행은 CSV로 한줄로 표현, 열은 콤마로 구분

- 데이터분석 분야에는 엑셀보다 단순한 텍스트 파일인 CSV 파일을 더 선호함.

2. 데이터 다운로드

import gdown # gdown 패키지 모듈 
# gdown  패키지는 구글 드라이브를 포함하여 웹에서 대용량 파일을 다운로드 할 수 있는 패키지
gdown.download('http://bit.ly/3eecMKZ','남산도서관 장서 대출목록 (2023년 03월).csv', quiet = False) # 가장 최신 데이터로 받음

3. csv 파일 출력

import chardet # 텍스트 파일 인코딩 방식 알아보기
with open('남산도서관 장서 대출목록 (2023년 03월).csv', mode = 'rb') as f: # open()함수의 기본 값은 읽기모드인 r
  d = f.readline()
print(chardet.detect(d))

# open 함수는 기본적으로 UTF-8 인코딩 방식을 사용

 

- 인코딩은 문자를 바이너리 형태로 바꾸는 형식이다

- UTF-8은 전 세계 모든 문자를 표현하기 위해 유니코드를 인코딩하는 방식, 한 문자당 최대 4바이트 까지

- EUC-KR은 한글을 위한 완성형 인코딩, 2바이트를 사용

# CSV파일 출력
# with open(파일 경로, 모드) as 파일 객체 : 문장
# with 구문이 종료될 때 자동으로 파일이 닫힘

with open('남산도서관 장서 대출목록 (2023년 03월).csv',encoding='EUC-KR') as f: # encoding 방식을 ECU-KR로 지정
  print(f.readline())
  print(f.readline())
# 처음 두줄을 읽기

- open 함수에서 encoding 매개변수로 인코딩 형식을 수정할 수 있음

- readline() 메서드로 처음 몇 줄을 출력할 수 있음

4. 데이터프레임 : 판다스

- 데이터프레임은 표 형식의 데이터

- 데이터베이스의 테이블과 유사한 형식(행,열)으로 구성된 2차원 배열 구조

- 1차원 배열구조로 된 시리즈(Series) 구조도 있음

# 판다스 사용 
import pandas as pd
df = pd.read_csv('남산도서관 장서 대출목록 (2023년 03월).csv',encoding='EUC-KR')

- 판다스는 CSV파일을 읽을 때 같은 열에 어떤 종류의 데이터가 저장되어 있는 지 자동으로 파악

- 판다스는 메모리를 효율적으로 사용하기 위해 자동으로 CSV파일을 조금씩 나누어 읽음

- 이때 자동으로 파악한 데이터 타입이 달라지면 경고가 발생함

df = pd.read_csv('남산도서관 장서 대출목록 (2023년 03월).csv',encoding='EUC-KR', low_memory=False ) # low_memory 매개변수를 False로 지정하여 파일을 나누어 읽지 않고 한번에 읽기

- low_memory 매개변수를 False로 지정하여 파일을 나누어 읽지 않고 한번에 읽을 수 있음

- dtype 매개변수로 데이터타입을 지정할 수도 있음

# 데이터프레임의 처음 다섯 개 행을 확인
df.head()

- 데이터프레임의 첫 번째 열은 인덱스(index)

- 판단스는 인덱스를 자동으로 추가함

- header매개변수를 None으로 지정하면 데이터 첫 행에 열 이름이 없다는것을 설정함

- names 매개변수에 열이름 리스트를 따로 전달함. names 매개변수에는 중복된 열 이름이 있으면 안됨

5. 데이터프레임을 csv/ xlsx로 저장

# 데이터프레임을 CSV 파일로 저장하기 : to_csv() 메서드
df.to_csv('df_20230416.csv')
# open 함수로 다시 읽어보기
with open('df_20230416.csv') as f:
  for i in range(0,5):
    print(f.readline())
# 다시 판다스 데이터프레임으로 읽어오면 인덱스 열이 새로 생기게된다.
ns_df = pd.read_csv('df_20230416.csv', low_memory = False)
ns_df.head()

ns_df = pd.read_csv('df_20230416.csv', index_col = 0 ,low_memory = False) #index_col 매개변수는 해당 csv 파일에 인덱스가 이미 있다는 것을 알려준다. 첫번째 열에 인덱스가 있으므로 인덱스 컬럼은 0
ns_df.head()

 # to_csv로 저장시에 인덱스를 아예 포함하지 않으려면 index 매개변수를 False로 지정
 df.to_csv('df_20230416.csv',index = False)
# 참고로 xlsx 형태로 저장도 가능함.
# 판다스는 엑셀 파일을 만들기 위해 기본적으로 openpyxl을 사용. 이 패키지로 한글데이터를 쓰면 오류발생.
# 대신에 xlsxwriter 패키지를 사용할 수 있음

# 초기 패키지 설치시 사용 : !pip install xlsxwriter
df.to_excel('df_20230416.xlsx',index = False, engine = 'xlsxwriter')

코랩환경에 생성된 파일

https://colab.research.google.com/drive/1E_8uVBz6NqmcJDgsHVu3UWGygJ3o47PL?usp=sharing 

 

Python_DataFrame_01.ipynb

Colaboratory notebook

colab.research.google.com