[혼공학습단 11기] 혼자 공부하는 데이터 분석 with 파이썬 Ch 01

수빈·2024년 1월 7일
0

01-1 데이터 분석이란

데이터 분석과 데이터 과학

  • 데이터 분석 (data analysis) : 유용한 정보를 발견하고 결론을 유추하거나, 의사 결정을 돕기 위해 데이터를 조사, 정제, 변환, 모델링하는 과정. 비즈니스 결정을 내리기 위한 도구로 사용. 1)기술통계, 2)탐색적 데이터 분석, 3)가설검정의 세 방법으로 나눌 수 있다.
  • 데이터 과학 (data science) : 통계학 데이터 분석, 머신러닝, 데이터 마이닝을 아우르는 큰 개념

데이터 분석은 올바른 의사 결정을 돕기 위한 통찰을 제공하는 데 초점을 맞추고, 데이터 과학은 문제 해결을 위한 최선의 솔루션을 만드는 데 초점을 맞춘다고 생각하면 된다.

데이터 분석가

  • 프로그래밍, 수학, 통계, 도메인 지식 등이 모두 필요하다. - 프로그래밍이나 수학, 통계 등은 책에서 배울 수 있지만, 도메인 지식은 일반화하여 설명하기 어렵기 때문에 해당 분야에서 직접 경험을 쌓거나 전문가의 도움을 받아야 한다.
  • 데이터 수집, 데이터 처리, 데이터 정제, 데이터 분석, 모델링 등을 통해 작업을 수행한다.

데이터 분석을 위한 도구

  • 파이썬과 R
  • 데이터가 DB 형태로 있다면 SQL 또한 사용 가능하다
  • 구글 코랩
  • 파이썬 필수 패키지 : 넘파이, 판다스, 맷플롯립, 사이파이, 사이킷런 -> 코랩에서 모두 기본제공

데이터 마이닝

데이터에서 패턴 혹은 지식을 추출하는 작업

데이터 과학자

데이터를 분석하여 모델(머신러닝으로 학습한 소프트웨어 객체)을 만드는 일을 한다. 데이터를 모으고 분석하는 일이 더 중요하기 때문에 모델 과학자가 아닌 데이터 과학자라고 부른다.

01-2 구글 코랩과 주피터 노트북

구글 코랩은 주피터 노트북을 구글이 커스터마이징한 것이다.

01-3 이 도서가 얼마나 인기가 좋을까요?

도서 데이터 찾기

문제에 맞는 데이터가 있으면 좋지만, 없는 상황도 종종 발생한다. 그렇게 되면 공개 데이터 세트를 찾아보아야 한다. 공공데이터포털 홈페이지 (https://www.data.go.kr/)에 접속해 [도서 판매 데이터] 를 검색한 후, [도서관 대출 데이터] 를 가져오는 방향으로 바꾼다.

국립중앙도서관이 운영하고 있는 <도서관 정보나루> 웹사이트에 접속하여 도서관 별 대출 데이터를 확인한다. 그 중 보유 도서가 많은 남산 도서관의 대출 데이터를 사용한다. (https://www.data4library.kr/openDataV?libcode=4707)

코랩에서 데이터 다운로드 및 확인

코드 출처 : https://github.com/rickiepark/hg-da

import gdown

gdown.download('https://bit.ly/3eecMKZ',
               '남산도서관 장서 대출목록 (2021년 04월).csv', quiet=False)

위의 코드를 사용해 코랩에서 데이터 파일을 다운로드한다.

그리고 아래의 코드를 사용해 파일을 연다. encoding이 UTF-8이 아닌 EUC-KR 이므로 [chardet.detect] 함수를 사용하여 확인 과정 또한 거쳐야 한다.

with open('남산도서관 장서 대출목록 (2021년 04월).csv', encoding='euc-kr') as f:
    print(f.readline())
    print(f.readline())

데이터 프레임 다루기 : 판다스

판다스는 CSV 파일을 읽어 데이터프레임이라는 표 형식 데이터(tabular data)로 저장한다. 판다스에는 데이터프레임 외에 시리즈라는 데이터 구조 또한 존재한다.
시리즈는 1차원 배열, 데이터프레임은 2차원 배열로 생각하면 된다. 데이터프레임의 한 열을 선택한 경우 시리즈 객체이다.

CSV 파일 데이터프레임으로 읽기 : read_csv()

판다스에서 CSV 파일을 읽는 경우 read_csv() 함수를 사용한다.
판다스는 CSV 파일을 읽을 때 각 열에 어떤 종류의 데이터가 저장되어 있는지를 자동으로 파악한다. 근데 메모리를 효율적으로 사용하기 위해 CSV 파일을 조금씩 나누어 읽는데, 이 때 자동으로 파악한 데이터 타입이 달라지면 경고가 발생한다. low_memory 매개변수를 False로 지정한다면 파일을 나누어 읽지 않고 한 번에 읽어 이러한 문제가 발생하지 않게 된다.

import pandas as pd
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})

df.head() 함수를 사용하면 데이터프레임의 처음 다섯 개의 행 확인이 가능하다.

첫 번째 열은 데이터 프레임의 인덱스이다. 판다스는 행마다 0부터 시작하는 인덱스 번호를 자동으로 붙여준다.
CSV의 첫 번째 행은 열 이름으로 인식한다. 만약 열 이름이 중복해서 등장한다면 자동으로 이름 뒤에 숫자를 붙여 고유한 이름으로 만든다.
만약 첫 행이 열 이름이 아니라면 read_csv() 함수 호출 시 header 매개변수를 None으로 지정해 열 이름이 없다는 사실을 알리고, names 매개변수를 사용해 열 이름 리스트를 따로 전달해 주어야 한다. 이 때는 열 이름에 중복된 이름이 있으면 안된다!

데이터프레임 CSV 파일로 저장하기 : to_csv()

위에서 read_csv()를 사용해 데이터를 읽어온 것과 반대로, 판다스의 데이터프레임을 CSV 파일로 to_csv() 함수를 사용해 저장할 수도 있다. 이 함수는 기본적으로 UTF-8 방식으로 저장하기 때문에 다시 열 때 매개변수 설정이 필요가 없다.

df.to_csv('ns_202104.csv')
ns_df = pd.read_csv('ns_202104.csv', low_memory=False)
ns_df.head()

위의 코드를 실행해 데이터 프레임을 ns_202104.csv 파일로 저장한 후 다시 데이터프레임으로 출력하였다.

근데 원래 데이터의 일부가 아니었던, 행 인덱스가 함께 저장되었다.
파일에 이미 인덱스가 붙어있다는 것을 알려주려면 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)

1주차 기본미션 : p. 81의 확인 문제 4번 풀고 인증하기

답 -> 3. encoding 매개변수에 CSV 파일의 인코딩 방식을 지정할 수 있습니다.

profile
CS공부 하고 있는 수빈입니다.

0개의 댓글