[혼자 공부하는 데이터 분석 with 파이썬] - 데이터 분석, 데이터 수집
01 데이터 분석하기
CSV 파일이란?
CSV 파일은 Comma Separated Values 파일의 약어로, 쉽게 말해 쉼표로 데이터를 구분하는 파일 형식이다. 주로 엑셀과 같은 스프레드시트 프로그램에서 사용되며, 각 열의 값이 쉼표로 구분되어 있다.
코랩에 데이터 다운로드 하기
import gdown
gdown.download('<https://bit.ly/3eecMKZ>',
'남산도서관 장서 대출목록 (2021년 04월).csv', quiet=False)
import란?
import는 파이썬 프로그램에 모듈이나 패키지를 포함하는 데 사용되는 파이썬의 키워드이다. 프로그램의 모듈에 정의된 기능을 사용할 수 있습니다. 가져오기를 사용하여 내장 파이썬 모듈이나 설치한 타사 모듈을 가져올 수 있다.
gdown 패키지란?
gdown 패키지는 구글 드라이브를 포함하여 웹에서 대용량 파일을 다운로드 할 수 있는 파이썬 패키지이다.
csv 파일 출력하기
with 문으로 파일을 연 다음 readline() 메서드로 파일을 출력한다.
readline()
파일에서 한 줄을 읽는 데 사용되는 메서드이다. 이는 문자열 형태로 라인을 반환한다. 다시 호출하면 다음 줄을 읽고 파일의 끝까지 이어진다.
with open('남산도서관 장서 대출목록 (2021년 04월).csv') as f:
print(f.readline())
with 문이란?
with 문은 파일이나 소켓과 같은 일종의 리소스의 사용을 보다 간결하게 만들어 준다. with 블록 안에서 파일과 같은 리소스를 사용하면, 블록이 끝난 후 자동으로 리소스를 해제해준다. 이것은 파일을 열고 닫을 때 발생할 수 있는 실수를 방지할 수 있도록 도와준다.
파이썬 f란?
파이썬에서 문자열을 포맷하는 새로운 방법으로, f-string이라고도 부른다. f-string은 문자열을 포맷하는 새로운 방식으로, 기존의 문자열 포맷 함수보다 더 간단하고 직관적이다. f-string은 문자열 앞에 f 라는 접두어를 붙이고, 중괄호 {} 안에 변수나 표현식을 넣는 형태로 사용됩니다. 예시: name = "Alice" print(f"My name is {name}")

UnicodeDecodeError - UTF-8 코덱이 어떤 바이트를 읽을 수 없다는 오류 발생
오류의 원인 >> 파이썬의 open() 함수는 기본적으로 텍스트 파일이 UTF-8 형식으로 저장되어 있다.
한글 텍스트는 여전히 완성형 인코딩인 EUC-KR을 사용한다.
오류해결 방법 >> 파이썬에서 chardet.detect() 함수를 사용하여 문자 인코딩 방식을 알아낸다.
이때 mode='rb' 로 지정 - 바이너리 모드로 지정하면 문자 인코딩 형식에 상관없이 파일을 열 수 있다.
바이너리 모드란?
바이너리 모드는 파일을 텍스트가 아닌 이진 데이터로 읽거나 쓰는 것을 의미한다. 이 모드를 사용하면 파일의 데이터를 더 정확하게 처리할 수 있다. 일반적으로 이미지, 비디오, 음악 파일 등과 같이 이진 데이터를 다룰 때 사용한다. rb는 read binary의 약자로, 파일의 데이터를 이진 형식으로 읽기 위한 모드이다.

csv 파일은 EUC-KR로 인코딩 되어 있다는 사실 발견
인코딩 형식 지장하기
encoding 매개변수로 인코딩 형식을 EUC-KR로 지정한다.

인코딩 형식을 지정하자 파일 출력 완료
데이터 프레임 다루기 with 판다스
판다스란?
판다스(Pandas)는 파이썬(Python)으로 데이터 분석할 때 필요한 패키지 중 하나이다. 판다스를 이용하면 csv 파일, excel 파일 등 다양한 종류의 파일을 읽어들여 데이터프레임이라는 표 형식 데이터로 저장할 수 있으며 데이터프레임은 2차원 배열로, 열마다 다른 데이터 타입을 사용할 수 있다.
판다스에서 csv 파일을 읽을 때 read_csv() 함수 사용

as 키워드란?
as 키워드는 Python에서 모듈, 클래스, 함수 등에 대한 이름을 별칭(alias)으로 지정할 때 사용하는 키워드이다. 예를 들어, import pandas as pd와 같이 키워드를 이용하여 pandas 모듈을 pd라는 별칭으로 지정할 수 있다. 이렇게 별칭을 지정하면 모듈이나 함수의 이름이 길어서 타이핑하기 어려울 때 간결하게 사용할 수 있다.
파이썬 df란?
파이썬에서 df란, 데이터프레임(DataFrame)의 줄임말입니다. 데이터프레임은 행과 열로 구성된 2차원 데이터이다. 파이썬에서 데이터 분석을 수행할 때, 대부분 데이터프레임을 사용한다.
DtypeWarning - csv 파일은 메모리를 효율적으로 사용하기 위해 조금씩 나누어 읽다가 오류가 발생한다.
오류 해결 방법 >> low_memory 매개변수를 False로 지정하여 파일을 나누어 읽지 않고 한 번에 읽게 한다.


head() 메서드를 사용하여 데이터 프레임의 처음 다섯 개 행을 확인
head() 메서드란?
head() 메서드는 파이썬 데이터 분석 라이브러리인 판다스에서 사용되며, 주어진 데이터프레임의 첫 n개의 행을 표시하는 데 사용된다. 기본적으로 이 메소드는 DataFrame의 첫 다섯 행을 표시하지만, 메소드에 정수 인수를 전달하여 변경할 수 있다.
데이터프레임을 CSV 파일로 저장하기
판다스 데이터프레임을 CSV로 저장할 때 to_csv() 메서드를 사용한다.
df.to_csv('ns_202104.csv')
readline() 메서드를 세번 적는 대신 for 문으로 세번 반복하여 CSV 파일을 열 수 있다.
with open('ns_202104.csv') as f:
for i in range(3):
print(f.readline(), end='')
파이썬에서 i는 루프에서 흔히 사용되는 변수 이름이다. 특히 for 루프에서는 주로 값을 시퀀스로 나타내는 현재 반복을 나타내는 데 사용된다. 표현식 for i in range(3)은 가 각 반복에서 0, 1, 2 값을 갖도록 3번 반복하는 루프를 생성한다.
for 문이란?
for 변수 in 일련의 항목:
# 실행할 코드
for 루프는 파이썬에서 일련의 항목(리스트, 튜플, 문자열)이나 기타 반복 가능한 객체를 반복하는 데 사용된다. 루프의 각 반복에서 변수는 일련의 항목의 다음 요소의 값을 취한다.
end=’’이란?
end=''는 print() 함수에서 출력하는 끝 문자열을 지정하는 파라미터이다. 기본값은 개행(\\n)이지만 를 지정하면 줄바꿈 없이 문자열을 이어서 출력한다.
02 데이터 수집하기
API
API란?
다른 응용 프로그램과 상호 작용할 수 있는 수단을 제공하는 것으로, API를 사용하면 다른 서비스의 기능을 자신의 프로그램에 쉽게 통합할 수 있다.
HTTP란?
인터넷을 통해 데이터를 전송하기 위한 프로토콜로, 웹 브라우저와 서버가 서로 통신할 때 사용된다.
HTML이란?
웹 페이지를 만드는 데 사용되는 표준 마크업 언어이다. 여러 가지 태그와 속성을 사용하여 웹 페이지의 콘텐츠를 구조화하는 방법을 제공한다. 웹 브라우저는 그 후 HTML을 해석하여 콘텐츠를 시각적으로 매력적이고 정보성 있는 방식으로 표시한다.
웹 기반 API는 주로 CSV, JSON, XML 형태로 데이터를 전달
JSON
- JSON (JavaScript Object Notation)은 인간이 읽고 쓰기 쉽고 기계가 구문 분석 및 생성하기 쉬운 경량 데이터 교환 형식이다.
- JSON은 종종 XML 대안으로 서버와 웹 응용 프로그램 간에 데이터를 전송하는 데 사용된다.
- 중괄호 안에 키와 값이 있으며 이 둘은 콜론(:)으로 연결하고 키와 값에 문자열을 쓰려면 큰따옴표("")를 사용한다.

- JSON 패키지에서 파이썬 객체를 JSON 형식에 맞는 텍스트로 바꿀 때는 json.dumps() 함수를 사용
- JSON 문자열을 파이썬 객체로 변환 할 때는 json.loads() 함수를 사용
- JSON 문자열을 데이터프레임으로 바꿀 때는 read_json() 함수를 사용 또는 DataFrame 클래스를 사용
XML
- XML (Extensible Markup Language)은 데이터를 저장하고 전송하는 데 사용되는 마크업 언어이다. HTML과 유사하다.
- 시작 태그<>와 종료 태그</>로 감싼다.
- 태그 이름은 영문자와 숫자를 사용하며 시작 태그와 종료 태그의 이름은 동일하다.

- XML 문자열을 파이썬 객체로 변환할 때 fromstring() 함수를 사용
- 자식 엘리먼트 확인할 때 findtext() 메서드를 사용
- 동일한 이름을 가진 여러 개의 자식 엘리먼트를 찾을 때는 findall() 메서드와 for 문을 함께 사용
API를 호출하는 URL 작성하기
파라미터란?
컴퓨터 프로그램에서 함수나 메서드 등이 호출될 때, 그 함수에 입력으로 전달되는 값을 의미한다. 즉, 함수나 메서드를 호출할 때 전달하는 인자(argument) 값들이 파라미터이다. 파라미터를 통해 함수나 메서드에서 필요한 데이터를 전달하고, 그 데이터를 처리하여 결과를 반환한다. 파라미터는 함수나 메서드를 정의할 때 지정되며, 이를 통해 함수나 메서드가 어떤 인자를 받아들이는지, 어떤 작업을 수행하는지 등을 명시할 수 있다.
HTTP GET 방식이란?
웹 통신에서 지정된 리소스로부터 데이터를 요청하는 데 사용되는 방법이다. GET 방법은 지정된 리소스의 표현을 요청한다. 파라미터와 값은 =문자로 연결, 파라미터와 파라미터 사이는 &문자로 연결, 호출 URL과 파라미터는 ?문자로 연결되어 있다.

파이썬으로 API 호출하기
파이썬으로 API 호출할 때 requests 패키지 사용

웹 스크래핑 사용하기
- loc 메서드란?
- 판다스가 제공하는 loc 메서드는 행과 열의 그룹에 액세스하는 데 사용된다. 대괄호를 사용하여 행의 목록과 열의 목록을 받는다. 리스트 대신에 슬라이스 연산자(:)를 쓸 수도 있다.
시작과 끝을 지정하지 않고 슬라이스 연산자를 사용하면 전체를 의미한다.

뷰티플수프(Beautiful Soup)
HTML, XML을 분석하기 위한 파이썬 라이브러리이다.
requests 패키지로 가져온 HTML에서 원하는 태그나 텍스트를 찾는 기능을 제공한다.
from bs4 import BeautifulSoup
soup = BeautifulSoup(r.test, 'html.parser')
파싱이란?
코드나 마크업과 같은 기호 문자열을 분석하여 그 구조와 의미를 결정하는 과정이다. 종종 컴퓨터 과학에서 인간이 읽을 수 있는 코드를 기계가 읽을 수 있는 형식으로 변환하는 데 사용된다.
파서란?
컴퓨터 프로그램에서 입력받은 데이터를 의미있는 단위로 분해하고 해석하는 모듈이다. 파서는 구문 분석기(Parser)로도 불리며, 주로 컴파일러나 인터프리터에서 사용된다.
태그 위치를 찾을 때 find() 메서드를 사용, attrs 매개변수에는 찾으려는 태그의 속성을 딕셔너리로 지정
prd_link = soup.find('a', attrs={'class':'gd_name'})
- 상세 페이지 HTML 가져올 때 requests.get() 함수를 사용
- 특정 HTML 태그를 모두 찾아서 리스트로 반환 할 때 find_all() 메서드를 사용
- 태그 안에 텍스트를 가져 올 때 get_test() 메서드를 사용
- 행 또는 열에 함수를 일괄 적용하여 반복 작업을 수행 할 때 apply() 메서드를 사용
- 판다스에서 두 데이터프레임을 합치거나 데이터 프레임과 시리즈를 합칠 때 merge() 함수 사용
웹 스크래핑을 사용하여 데이터를 추출하는 방법
- requests 패키지와 뷰티플수프를 사용
- 데이터프레임에 있는 모든 도서의 쪽수를 가져오기 위해서 apply() 메서드를 사용
- 판다스 시리즈 객체를 원래 데이터프레임과 합치기 위해서 merge() 메서드를 사용