yEverything

[혼공분석] 1주차_데이터 분석을 시작하며 본문

데이터 분석/혼자 공부하는 데이터 분석 with 파이썬

[혼공분석] 1주차_데이터 분석을 시작하며

yEvery 2025. 1. 7. 20:37

01-1 데이터 분석이란

 

데이터 분석: 유용한 정보를 발견하고 결론을 유추하거나, 의사 결정을 돕기 위해 데이터를 조사, 정제, 변환, 모델링하는 과정

데이터 과학: 통계학 데이터 분석, 머신러닝, 데이터 마이닝 등을 아우르는 큰 개념

 

데이터 분석은 올바른 의사 결정을 돕기 위한 통찰을 제공하는데 초점을 맞추고,

데이터 과학은 한 걸음 더 나아가 문제 해결을 위한 최선의 솔루션을 만드는 데 초점을 맞춘다.

 

데이터 분석가는 프로그래밍, 수학·통계, 도메인 지식( 비즈니스 문제에 대한 전문 지식)이 모두 필요

 

데이터 분석을 도와주는 도구란 어떤 종류의 소프트웨어를 말한다.

데이터 분석에서 많이 사용하는 프로그래밍 언어는 파이썬과 R이다.

데이터가 데이터베이스 형태로 있다면 SQL을 사용할 수 있다. SQL은 범용적인 프로그래밍 언어는 아니고 데이터베이스를 다루기 위해 고안된 언어로 시각화나 통계적인 분석을 수행하기는 어렵다.

 

파이썬과학 계산 분야에서 오래 사용해왔고,

데이터 처리에 사용할 패키지가 풍부하여 모든 분야의 데이터 과학에서 가장 중요한 언어가 되었다. 

 

R 통계 계산을 위해 개발된 언어로 범용 프로그래밍 언어는 아니다. 많은 통계 패키지와 그래프를 만들 수 있는 도구를 제공한다. 데이터 수집, 전처리 등을 수행하기는 까다롭고, 만들어진 모델을 적용하기도 어렵다.

 

파이썬 필수 패키지

넘파이: 고성능 과학 계산다차원 배열을 위한 파이썬 패키지
판다스: 파이썬 데이터 분석을 위한 전문 패키지, 데이터프레임을 사용
맷플롯립: 파이썬 데이터 시각화를 위한 기본 패키지, 파이썬의 다른 과학 패키지와 호환성이 높다.
사이파이: 넘파이를 기반으로 구축된 수학과 과학 계산 전문 패키지
사이킷런: 파이썬의 독보적인 머신러닝 패키지, 넘파이와 사이파이에 크게 의존

 

데이터 마이닝: 데이터에서 패턴 혹은 지식을 추출하는 작업, 머신러닝, 통계학, 데이터베이스 시스템과 관련이 많다. 비교적 규칙을 만드는 과정이 투명

머신러닝: 데이터에서 자동으로 규칙을 학습하여 문제를 해결하는 소프트웨어를 만드는 기술, 딥러닝도 머신러닝 알고리즘의 한 종류, 데이터 마이닝과 다르게 규칙이나 패턴을 사용하는 주체가 사람이 아닌 컴퓨터, 결정이 내려진 이류를 알기가 어려운 경우가 많다.

모델: 머신러닝으로 학습한 소프트웨어 객체

 

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

 

구글 코랩: 구글이 대화식 프로그래밍 환경인 주피터 노트북을 커스터마이징한 것, 웹 브라우저에서 무료로 파이썬 프로그램을 테스트하고 저장할 수 있는 서비스

코랩 노트북은 구글 크라우드의 가상 서버를 사용

 

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

 

공공데이터포털에서 관련 데이터 찾기 → 원하는 도서 판매 데이터 없음, 도서관 데이터 발견, 대신할 수 있다고 판단  → 도서관 대출 데이터 검색 → 도서관 정보나루 웹사이트에서 보유 도서가 많은 남산도서관의 대출 데이터 csv, 엑셀 파일 다운로드

 

CSV: 콤마로 구분된 텍스트 파일, 한 줄이 레코드, 레코드는 콤마로 구분된 여러 필드로 구성, 데이터는 표 형태여야 하기 떄문에 레코드에 있는 필드 개수는 모두 동일

엑셀에서 행은 CSV 파일에서 한 줄, 열은 콤마로 구분

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

구글 드라이브에서 코랩으로 다운로드하는 방식

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

open() 함수로 읽기, with문으로 파일을 연 다음 readline() 메서드로 파일에서 한 줄을 읽어서 출력

UnicodeDecodeError 발생 → UTF-8 코덱이 어떤 바이트를 읽을 수 없다. 

open() 함수는 기본적으로 텍스트 파일이 UTF-8 형식으로 저장되어 있다고 가정

한글 텍스트는 완성형 인코딩인 EUC-KR을 사용하는 일이 잦다.

import chardet
with open('남산도서관 장서 대출목록 (2021년 04월).csv', mode='rb') as f:
	d = f.readline()
print(chardet.detect(d))

→chardet 패키지의 chardet.detect() 함수를 사용하여 문자 인코딩 방식을 알아낸다.

open() 함수의 mode 매개변수를 바이너리 읽기 모드인 rb로 지정하면 문자 인코딩 형식에 상관없이 파일을 열 수 있어 오류가 발생하지 않는다.

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

open() 함수의 encoding 매개변수로 EUC-KR을 지정 → 오류 없이 출력

 

판다스 시리즈: 1차원 배열과 비슷, 시리즈에 담긴 데이터는 모두 동일한 종류

판다스 데이터 프레임: 2차원 배열과 비슷, 열마다 다른 데이터 타입을 사용할 수 있다. 같은 열에 있는 데이터는 모두 같은 종류, 데이터프레임의 한 열을 따로 선택하면 시리즈 객체라고 할 수 있다.


추가숙제(선택): p.71~73 남산 도서관 데이터를 코랩에서 데이터프레임으로 출력하고 화면 캡처하기

판다스에서 CSV 파일을 읽을 때는 read_csv() 함수를 사용

DtypeWarning: 판다스는 CSV 파일을 읽을 때, 열에 어떤 종류의 데이터가 저장되어 있는지 자동으로 파악, 메모리를 효율적으로 사용하기 위해 CSV 파일을 조금씩 나누어 읽는다. 이때 자동으로 파악한 데이터 타입이 달라지면 이런 경고가 발생

→ low_memory 매개변수를 False로 지정하여 파일을 나누어 읽지 않고 한 번에 읽도록 한다.

head() 메서드를 사용하여 데이터프레임의 처음 다섯 개 행을 확인

 

CSV 파일의 첫 행이 열 이름이 아니라면 read_csv() 함수를 호출할 때 header 매개변수를 None으로 지정,

names 매개변수에 열 이름 리스트를 따로 전달(중복된 이름이 있어서는 X)

 

Unnamed: 13 : CSV 파일의 각 라인의 끝에 있는 ,를 보고 마지막에  하나의 열이 더 있다고 판단해서 해당 열 표시


판다스의 데이터프레임을 CSV로 저장할 때 to_csv() 메서드 사용, 기본적으로 UTF-8 형식으로 저장.

print() 함수에 end=''를 지정하면 줄바꿈 문자를 출력하지 않기 때문에 CSV 파일에 저장된 그대로 출력할 수 있다.

CSV 파일에 인덱스가 이미 있다는 것을 알려 주려면 index_col 매개변수를 사용, 인덱스가 있으므로 0으로 지정


기본 숙제(필수): p.81의 확인 문제 4번 풀고 인증하기

header 매개변수의 기본값은 infer이다.

names 매개변수에는 열 이름의 리스트를 지정한다.

dtype 매개변수에는 필요한 열의 데이터 타입을 지정한다.