Notice
Recent Posts
Recent Comments
Link
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
관리 메뉴

yooonicode

python 데이터 분석 - ch1, 2 본문

데이터분석

python 데이터 분석 - ch1, 2

yooonii 2023. 9. 9. 11:31

데이터 분석의 의미는 분야나 상황에 따라 다름

위키피디아의 데이터 분석 : 유용한 정보를 발견하고 결론을 유추하거나, 의사 결정을 돕기 위해 데이터를 조사, 정제, 변환, 모델링하는 과정, 다양한 접근 방법과 형태로 비즈니스와 과학 분야에서 사용함

⭐현대 사회에서의 데이터 분석은 비즈니스 결정을 과학적으로 내리기 위한 도구로 사용됨

 

데이터 과학과 데이터 분석은 동일하게 취급되는 경향, 하지만

데이터 과학은 통계학 데이터 분석, 머신러닝, 데이터 마이닝을 포함하는 큰 개념

- 프로그래밍, 통계학, 시각화와 더불어 비즈니스 감각을 갖추어야 함

 

데이터 분석은 올바른 의사결정을 돕기위한 통찰의 제공,

데이터 과학은 확장되어 문제 해결을 위한 최선의 솔루션 제공

두 가지 영역 모두 빅데이터를 사용함

 

데이터분석의 통계학적 세 가지 관점

1. 기술 통계 descriptive statistics | 관측한 실험을 통해 수집한 데이터의 정량화, 요약 기법 | ex] 평균 계산, 최대 최소 구하기

2. 탐색적 데이터 분석 EDA; explatory data analysis | 데이터 시각화, 주요 특징 찾고 분석하기

3. 가설검정 hypothesis testing | 주어진 데이터를 바탕으로 가정이 합당한지 평가하는 통계 방법

 


 

데이터 분석가 | 프로그래머, 통계학자, 그래픽 디자이너가 아닌 프로그래밍 기술, 통계학을 이해하며 정보의 시각적 표현이 가능한 사람, 또한 해당 비즈니스에 대한 깊은 지식 또한 갖춰야 함

드류 콘웨이의 데이터 과학 벤다이어그램

넓은 의미의 데이터 분석 (좁은 의미도 포함) 좁은 의미의 데이터 분석
- 데이터 수집
- 데이터 처리
- 데이터 정제
- 모델링
- 기술 통계
- 탐색적 데이터 분석
- 가설 검정

데이터 분석에 주로 사용되는 언어 - 파이썬과 R

Python R
- 귀도 반 로섬이 1991년에 만든 범용 프로그래밍 언어
- 문법이 단순해 초보자 추천
- 오픈소스, 환경에 구애받지 않음
- 과학 계산 분야에서 오래 사용해왔음, 처리에 사용할 패키지가 풍부하여 모든 분야의 데이터 과학에서 중요한 언어
- 데이터 분석, 머신러닝에서 표준 언어처럼 사용됨
- 1995년에 통계 계산을 위해 개발된 언어, 범용 프로그래밍 언어는 아님
- 많은 통계 패키지, 그래프 도구를 제공
- 데이터 수집, 전처리에 어려움
- 만들어진 모델을 제품 환경에 적용하기 어려움
- 통계 관련 패키지는 R이 더 많아 학교나 기업에서 많이 사용

데이터 분석 환경 - 구글 코랩 ; https://colab.research.google.com 

 

Google Colaboratory

 

colab.research.google.com

파이썬 패키지 - https://pypi.org

 

PyPI · The Python Package Index

The Python Package Index (PyPI) is a repository of software for the Python programming language.

pypi.org

R 패키지 - https://cran.r-project.org 

 

The Comprehensive R Archive Network

 

cran.r-project.org


파이썬 대표 패키지

넘파이 ; numerical python - 주로  np
고성능 과학 계산과 다차원 배열을 위한 패키지
- 대부분의 파이썬 데이터 분석 패키지는 데이터를 다룰 때 넘파이 배열을 사용
판다스 ; 주로 pandas as pd
파이썬 데이터 분석을 위한 전문 패키지
넘파이 배열과 다르게 마이크로소프트 엑셀처럼 숫자와 문자를 섞어 표 형태로 저장할 수 있는 데이터프레임;dataframe을 사용
넘파이의 과학 계산보다, 판다스는 편리한 데이터 처리와 분석 작업을 위해 많은 기능을 제공
다양한 그래프 출력 기능

➡️ 파이썬 데이터 분석에서 기본 자료 구조로 넘파이와 판다스를 주로 사용함

맷플롯립 ; matplotlib 사이파이 ; sci-py
파이썬 데이터 시각화를 위한 기본 패키지
- 정적, 동적 그래프 그리기(고품질)
파이썬의 다른 과학 패키지와 호환성이 높음
+ 이외에도 seaborn, bokeh와 같은 시각화 툴 이용
넘파이를 기반으로 구축된 수학과학 계산 전문 패키지
- 미적분, 확률, 선형대수, 최적화 등을 알고리즘으로 구현
사이킷런 ; scikit-learn
파이썬의 독보적인 머신러닝 패키지 - 넘파이와 사이파이에 의존
- 전체 데이터 과학 분야에서 가장 널리 사용하는 머신러닝 패키지

데이터 마이닝과 머신러닝에 대하여

데이터 마이닝 머신러닝
데이터에서 패턴, 지식의 추출 작업
머신러닝, 통계학, 데이터 베이스 시스템과 관련 있음
- 사람이 의사 결정을 내리기 위해 활용됨
데이터에서 자동으로 규칙을 학습하여 문제를 해결하는 소프트웨어를 만드는 기술, 딥러닝도 알고리즘의 한 종류
⭐ 데이터 마이닝과 다르게 규칙이나 패턴을 사용하는 주체가 사람이 아닌 컴퓨터
- 데이터 마이닝 알고리즘은 규칙을 만드는 과정이 투명한 데 비하여 머신러닝 알고리즘은 결정이 내려진 이유를 알기 어려움
머신러닝으로 학습한 소프트웨어 객체를 "모델"이라고 하며 데이터 과학자가 하는 일은 데이터 분석 및 모델 제작
좋은 데이터가 준비되어 있다면 모델을 만드는 과정은 쉬움, 데이터 전처리가 중요하다

데이터 분석 환경 - 구글 코랩 ; https://colab.research.google.com 

- 구글이 대화식 프로그래밍 환경인 주피터 노트북을 커스터마이징한 것

- 웹 브라우저에서 코드 작성및 실행 가능

- 클라우드 기반, 구글 드라이브에 자동 저장, 패키지 사전 설치 및 제공

더보기

왜 노트북을 사용하는가? 코드 설명 문서 없이 코드와 텍스트를 함께 볼 수 있음


파이썬에서 엑셀 파일 사용하는 패키지 openpyxl, xlsxwriter, 판다스 패키지의 read_excel()

➡️ 웬만하면 csv ; comma separated values

gdown 패키지 ; 구글 드라이브를 포함한 웹에서 대용량 파일을 다운로드 할 수 있는 패키지, 코랩에 이미 설치됨

인코딩 오류라서 chardet.detect()써서 형식 확인 - mode 매개변수를 바이너리 읽기 모드인 rb로 지정

바이너리 모드로 지정한다면 문자 인코딩 형식에 무관하게 파일을 열 수 있어 오류 발생하지 않음

+ 텍스트 파일을 바이너리 모드로 읽으면 모든 글자가 1바이트라 유니코드 문자의 화면 출력은 불가

EUC-KR(한글을 위한 완성형 인코딩, UTF-8은 전세계의 모든 문자를 표현하는 유니코드 인코딩 방식)로 인코딩 해주려면

만약 한글인데 인식 못한다면 - NFC 방식이 아닌 NFD 방식으로 저장되어 있는 것

- 한글은 자음, 모음 코드가 유니코드에 별도로 존재하기 때문에, 맥OS에서 파일을 받으면 NFD

해결방법


판다스 ; CSV 파일을 읽고, 데이터프레임이라는 표 형식 데이터로 저장 ( 행과 열로 구성된 데이터 구조 )

+ 시리즈 라는 데이터 구조도 있음

 

배열 : 같은 종류의 데이터가 순서대로 나열된 데이터 구조

➡️ 판다스 시리즈와 비슷함, 시리즈에 담긴 데이터는 모두 동일한 종류여야 함

+ 파이썬의 리스트는 시리즈와는 다름, 리스트는 문자열 정수 섞어쓸 수 있음

 

판다스 데이터프레임: 데이터를 가로 세로로 나열한 2차원 배열과 유사, 데이터 프레임은 열마다 다른 데이터 타입 가능

- 다만 같은 열에 있는 데이터 타입은 모두 같아야함, 데이터프레임의 한 열을 선택하면 시리즈 객체

warning 왜뜨냐면

판다스는 어느 열에 어느 종류의 데이터가 저장되어 있는지 파악하는데 메모리의 효율적 사용을 위해서

CSV 파일을 조금씩 나눠읽음, 자동으로 파악한 데이터 타입이 달라지면 경고가 발생함

low_memory 매개변수를 False로 지정하여 파일을 한 번에 읽게끔 설정해주면 해결됨

근데 그럼 많은 메모리를 사용하게 됨,

다른 방법으로는 dtype 매개변수를 애초에 설정해주는 것이 있음

딕셔너리 형식으로 설정

아무튼 df.head() 해줬음

첫 번째 열은 데이터프레임의 인덱스이고, 첫 행을 열이름으로 가져가기 때문에

첫 행이 열이름이 되지 않게 하려면

read_csv() 호출시에 header = None 지정하고, names = 리스트로 따로 지정해줘야함 (중복 안됨)

+ csv 파일 읽을때 read_table() 쓸 수 있다. read_table()은 read_csv()와 유사한데, 구분자가 탭(\t)을 사용한다.

= read_table() = read_csv(sep='\t')

 

판다스의 데이터프레임 저장하려면 to_csv() - 기본적으로 UTF-8로 저장, open() 할 때 encoding 매개변수 지정 안해도 됨

unnamed: 0이 이미 인덱스 역할을 하고 있으므로 read_csv() 할 때 index_col=0으로 지정 or to_csv() 할 때 index=False로

+ df.to_excel로 데이터 프레임을 엑셀로 저장할 수 있음 - 기본적으로 openpyxl을 사용하는데, 한글 데이터 쓰면 오류 발생하여 xlsxwriter 패키지 사용하여 해결 가능

더보기

!pip install xlsxwriter

df.to_excel('filename.xlsx', index=False, engine='xlsxwriter')


 

국내 공개 데이터 세트

https://www.data.go.kr

 

공공데이터 포털

국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase

www.data.go.kr

https://www.bigdata-map.kr 

 

통합 데이터지도 – 공공 민간 빅데이터 통합 검색

통합 데이터지도는 빅데이터 플랫폼 및 센터가 생산 유통한 공공‧민간 데이터를 쉽게 연계∙활용할 수 있도록 합니다. 데이터를 친숙하게 이용하고 나아가 데이터 거래의 장을 구축하여 데이

www.bigdata-map.kr

https://aihub.or.kr 

 

AI-Hub

자세히보기 AI 허브가 추천하는 검색어입니다. 태그를 클릭하여 검색결과를 확인하세요.

aihub.or.kr

https://kosis.kr 

 

KOSIS 국가통계포털

내가 본 통계표 최근 본 통계표 25개가 저장됩니다. 닫기

kosis.kr


 

해외 공개 데이터세트

https://datasetsearch.research.google.com

 

Dataset Search

 

datasetsearch.research.google.com

https://www.kaggle.com/datasets 

 

Find Open Datasets and Machine Learning Projects | Kaggle

Download Open Datasets on 1000s of Projects + Share Projects on One Platform. Explore Popular Topics Like Government, Sports, Medicine, Fintech, Food, More. Flexible Data Ingestion.

www.kaggle.com

https://en.wikipedia.org/wiki/List_of_datasets_for_machine-learning_research 

 

List of datasets for machine-learning research - Wikipedia

From Wikipedia, the free encyclopedia OAIS 2.0 These datasets are applied for machine learning (ML) research and have been cited in peer-reviewed academic journals. Datasets are an integral part of the field of machine learning. Major advances in this fiel

en.wikipedia.org

https://registry.opendata.aws 

 

Registry of Open Data on AWS

 

registry.opendata.aws

https://archive.ics.uci.edu/ml 

 

UCI Machine Learning Repository

Welcome to the UC Irvine Machine Learning Repository We currently maintain 644 datasets as a service to the machine learning community. Here, you can donate and find datasets used by millions of people all around the world!

archive.ics.uci.edu


온라인 포럼

https://www.facebook.com/groups/datacommunity 

 

데이터 분석 커뮤니티 | Facebook

데이터 분석을 익히는데 유용한 자료와 꿀팁을 공유합니다. 누구나 질문할 수 있고 누구나 답변할 수 있습니다. 공유는 사랑입니다.

www.facebook.com

https://www.facebook.com/groups/KaggleKoreaOpenGroup

 

Facebook에 로그인

Notice 계속하려면 로그인해주세요.

www.facebook.com

https://www.facebook.com/groups/TensorFlowKR 

 

TensorFlow KR | Facebook

TensorFlow (TF), 딥러닝의 모든 이야기를 나누는 곳, 텐서플로우 코리아(TF-KR)입니다. - 저희 TFKR 커뮤니티에 올라온 글을 인용하거나 기사화 할 때는 해당 글의 작성자와 사전에 논의해 주시는 것을

www.facebook.com

https://www.facebook.com/groups/PyTorchKR 

 

PyTorch KR | Facebook

PyTorch를 이용한 자유로운 머신러닝 이야기의 장, PyTorch 한국 사용자 그룹 PyTorch KR입니다. 파이토치 한국 사용자 모임 Discuss: https://discuss.pytorch.kr.

www.facebook.com

https://www.facebook.com/groups/ScikitLearnKR 

 

사이킷런 코리아 | Facebook

텐서플로 코리아, 케라스 코리아, 파이토치 코리아도 있는데... 사이킷런은 없어서 그냥 만들어 봅니다. :) 카카오 오픈채팅 방(http://bit.ly/tensor-chat)에도 놀러 오세요~.

www.facebook.com


API | 두 프로그램이 서로 대화하기 위한 방법의 정의

- 데이터 분석가가 데이터베이스에 직접 접근하기 어려운 경우

DB 접근 권한이 엄격히 관리되거나, 민감한 개인 정보, 네트워크의 분리로 물리적 접근이 불가능한 경우

인증된 URL만 있으면 필요한 데이터에 편리하게 접근할 수 있는 방식

ex] 윈도우/맥OS 같은 운영체제에서 문서 작성 프로그램이 디스크의 파일을 읽고 쓰도록 API 제공, 기상청의 API 이용해 정보 얻기

 

 HTTP | 웹 페이지를 서비스 하기 위해 웹 서버 소프트웨어(엔진엑스, 아파치) 사용할 때 웹 브라우저와 소통하기 위해 HTTP 프로토콜(통신규약)의 사용, 인터넷에서 웹 페이지를 전송하는 기본 통신 방법

웹 브라우저는 웹 서버에 웹 페이지를 요청할때 HTTP로 요청, 웹 서버에서 웹 데이터를 전송할 때 HTML의 형식 등으로 전달

 

아무튼 HTTP 프로토콜을 사용하여 API를 만드는 것이 웹 기반의 API가 됨


웹 서버에서 웹 데이터를 전송할 때 HTML의 형식 등으로 전달

HTML | 웹 브라우저가 화면에 표시할 수 있는 문서의 한 종류이자 웹 페이지를 위한 표준 언어, 마크업 언어

아무 웹에서나 ctrl+U or 크롬이면 마우스 오른쪽 버튼 + [페이지 소스 보기]

 

웹 기반 API에서는, 웹 서버와 웹 브라우저가 대화하는 방식과 비슷하지만 HTML을 주고받는 것이 아닌

CSV, JSON, XML 을 전송, 데이터 요청을 HTTP로 사용함

➡️ HTML 구조는 복잡하고, 프로그램에 버그가 생길 가능성이 높으며 오류를 찾기 위해 데이터를 확인할 때 장황해서 쉽게 이해하기 힘듦

API ; 프로그램 사이의 대화 방식을 결정함, HTTP 프로토콜을 사용하는 웹 기반 API가 널리 사용됨
웹 기반 API의 데이터 전달 : CSV, JSON, XML 형태로 전달 (셋 다 텍스트 파일, JSON = XML > CSV)

CSV는 각 행마다 항목의 개수가 맞지 않으면 읽을 수 없고, 행과 열로만 구성되어 복잡한 데이터 구조의 표현 어려움
JSON, XML은 다양한 구조의 생성이 가능함
JSON - JavaScript Object Notation
- 자바스크립트 언어를 위해 만들어졌지만 현재는 범용적인 포맷
- 딕셔너리와 리스트의 중첩과 유사함, 키와 값을 콜론으로 연결함 {"name": "value"} > 항상 큰따옴표

웹 기반 API에서는 파이썬 객체 전송 못하고 문자열로 바꾸어 전송해야함

➡️ HTTP 프로토콜이 텍스트 기반이라서 데이터를 전송하려면 객체를 텍스트로 변환해야 함 (직렬화 ↔️ 역직렬화)

ensure_ascii = False ? 딕셔너리 d에 한글이 포함되어있기 때문에, json_dumps()는 아스키 문자 외의 다른 문자를 16진수로 표현하여 출력하기 때문에 한글이 제대로 보이지 않음

⬆️ 이런 식으로 웹 기반 API는 전송하려는 파이썬 객체를 json.dumps() 함수를 사용하여 JSON 문자열로 변환하여 전송해야함, 파이썬 프로그램에서 사용하려면 파이썬 딕셔너리로 바꾸어야 함 - json.loads()

json.loads()로 JSON을 파이썬 객체로 변환하였음, dict
직접 json.loads()에 전달하여 딕셔너리로 변경할 수 있다
딕셔너리 안에 리스트 중첩 가능, 인덱스로 꺼내올 수 있음
"""는 긴 문자열을 줄바꿈하여 입력 가능하게 하며, sname 아니라 name... 첫번째 딕셔너리의 name키 값 반환

➡️ JSON 문자열을 dataframe으로 변환하는 1️⃣read_json() 2️⃣DataFrame 클래스 사용

d4_str을 파이썬 객체로 변환한 d4를 가지고 df 만들기


XML | eXtensible Markup Language

HTML은 웹페이지 표현은 잘하지만 구조적이진 않아서 API에는 부적합

➡️ XML은 사람과 컴퓨터가 둘다 편한 포맷을 위해 고안됨

<books> <book>과 같이 복수형으로 쓰는 것이 대부분, 특수/공백 문자 포함 불가

- 엘리먼트들이 계층 구조를 이루며 정보를 표현, 시작 태그와 종료 태그로 감싼다

- 태그는 <>, 이름은 영문자와 숫자를 사용하며 시작과 종료 태그의 이름은 같아야함

⬆️ 윗 그림에서 <book>엘리먼트는 세 개의 하위 엘리먼트를 가지고 있으며, <book>은 부모 엘리먼트/노드 이며, <name>, <year>, <author> 엘리먼트는 자식 엘리먼트이다. + 맨 먼저 등장하는 book 엘리먼트는 루트 엘리먼트라고도 불린다.

et.fromstring() | XML 문자열의 파이썬 객체 변환
x_str 문자열을 XML로 변환하기


⬆️ 파이썬 객체의 반환이 아닌, ElementTree안의 Element 클래스 객체를 type 함수로 확인함

⬆️ book 객체의 tag 속성을 출력하여 엘리먼트 이름을 확인함

⭐ book 객체를 리스트로 변환하여, 자식 엘리먼트를 구함 (순서대로는 찾을 수 없음)

➡️ 이후, book_childs의 각 항목을 변수에 하나씩 할당한 후 text 속성으로 출력함

순서대로 자식 엘리먼트를 찾을 수 없으니, findtext() 활용하여 자식 엘리먼트를 자동 탐색하여 텍스트 반환
조금 더 복잡한 구조, books.tag의 출력값 books와 애초의 books는 다른 개념
findall(), findtext()와 for 문의 중첩 사용

JSON : API에서 전달한 텍스트를 json.loads() 이용하여 파이썬 객체로 바꿔 내용 추출
XML : xml.etree.ElementTree 모듈 안 fromstring() 함수 사용해 루트 엘리먼트 추출, findall()으로 자식 엘리먼트의 텍스트 추출

+ XML을 바로 판다스로 : pd.read_xml() / JSON을 바로 판다스로 : pd.read_json()


http://data4library.kr/api/loanItemSrch?format=json&startDt=2021-04-01&endDt=2021-04-30&age=20&authKey=인증키 정보나루 홈페이지에서 회원가입후 받은 인증키

파이썬에서 URL 호출해 데이터 받는 방법 ➡️ requests 패키지

requests.get()함수는 HTTP GET, 반환 값은 API 호출 결과인 Response 클래스 객체

r.json()에서는 웹 서버로 받은 JSON 문자열을 파이썬 객체로 반환하는 역할

response키가 하나의 딕셔너리를 값으로 가지고, docs 키는 리스트를 값으로 가지며, 그 리스트는 여러 개의 딕셔너리를 갖고 있음 ➡️ 판다스 데이터프레임으로 변환하려면 data 딕셔너리의 구조를 변환해야함

data['response']['docs'] 안의 리스트를 돌며 딕셔너리를 빈 리스트에 추가하는 for 문

➡️ list comprehension? books=[d['doc'] for d in data['response']['docs']] 로 가능

판다스 DataFrame 크래스에 리스트 넘기기
json으로 변환하여 저장


▶ 웹 스크래핑

웹 브라우저는 HTML을 보여주는데, 정보나루의 API에는 도서쪽수에 관한 정보가 없음

requests 패키지를 이용하여 가능할까?

1. request.get()으로 도서 검색 결과 가져오기

2. 검색 결과에서 상세 페이지로 연결되는 URL 찾기

3. request.get()으로 도서 상세 페이지 가져오기

4. 상세 페이지에서 쪽수 추출

 

yes24 검색창의 도서 isbn 입력검색  URL은 https://www.yes24.com/Product/Search?query=isbn 으로, isbn이 뒤에 있는데

query 파라미터에 ISBN을 넣으면 결과 페이지를 얻을 수 있음 ➡️ HTML 뜯어서 가져가려면, 프로그램은 어떻게 해야할까?

 

⭐ 웹 크롤링 / 웹 스크래핑 | 웹 사이트의 페이지를 옮기며 프로그램으로 데이터 추출하는 작업

20대가 가장 좋아하는 도서 목록 가져온 후 다섯개 행의 출력, 열 이름 모두 써서 슬라이싱
iloc는 위치 인덱스라서 books_df.iloc[[0,1], [2,3]]으로 쓰면 같은 코드 / 슬라이스 연산자, :는 전체를 의미함 / ::2는 한개씩 건너 뜀(스텝)
requests.get()으로 첫번째 도서 검색결과 HTML 가져오기

⬆️ ISBN과 URL위한 변수 정의, 파이썬의 format() 이용해 isbn 변수의 값을 url 변수에 저장하며, {}안의 값이 isbn으로 바뀌게 됨

이후, requests.get()의 반환 응답 객체 사용하여 HTML 출력하기

 

✔️ HTML에서 상세 페이지로의 링크 찾기 : 뷰티풀수프(이외에도 스크래피scrapy, HTML안의 내용을 찾는 파이썬 패키지)

➡️ 크롬 개발자 도구 (F12 또는 마우스 우클릭 후 검사) : select아이콘 누른 후 커서를 올리면 HTML 위치를 알 수 있음

F12
우측 상단 Select 누르고 이름 위에 커서 올리기

1. 뷰티플수프 패키지에서 BeautifulSoup 클래스 임포트

2. 클래스의 객체 생성 ➡️ soup = BeautifulSoup(파싱할 HTML문서, 파서)

+ 파서 | 입력 데이터를 받아 데이터 구조를 만드는 소프트웨어 라이브러리, 파싱에 사용하는 것 ➡️ 이런 과정이 파싱

html.parser는 파이썬 기본 내장 HTML 파서, lxml 패키지를 사용할 수 있으나 HTML 표준 검사과정에서 실패할 수 있음

개발자도구에서 <a> 태그 안에 있었던 것을 알 수 있음
soup.find('div', attrs = {'id': 'search'}는 id 속성이 search인 <div> 찾아라,

응용하여 class 속성이 gd_name인 <a> 태그를 추출하였고

prd_link는 링크를 포함하고 있으며, 뷰티플수프의 Tag클래스,

이를 출력하면 태그 안의 HTML을 출력함, 링크 주소인 href 속성의 값만을 얻어냄

 

✔️ 도서 상세 페이지 HTML 가져오기 > 다시 requests.get(url), print(r.text)로 HTML 출력

➡️ 다시 개발자도구, 쪽수가 포함된 HTML 위치 찾기

id = "infoset_specific" class="gd_infoSet infoSet_noLine" 태그 안에 있음

➡️ 뷰티플수프 객체를 생성하고 find()메서드로 <div> 태그 찾아서 출력

길다.

+ 사실 <div> 대신의 <table>을 찾아도 된다, prd_detail = soup.find('table', attrs={'class': 'tb_nor tb_vertical'}, 하지만 table 태그가 상세페이지 안에서 항상 유일한지 알 수 없음

 ✔️ 태이블 태그를 리스트로 가져오기 find_all()

<tr> 태그에는 "쪽수, 무게, 크기"가 담겨 있고, <td>에는 값이 담겨 있으니까

<td> 태그 안의 모든 텍스트를 가져왔고, "쪽수, 무게, 크기"에 해당하는 <tr> 찾아야 하니까 find_all() 이용해서 리스트로 반환 받고, 출력함

✔️ get_text() 이용하여 <td>안의 텍스트를 가져옴, prd_tr_list 리스트 순회하며 쪽수 행을 출력해봄(page_td), 쪽수만 출력하기 위해 split()

 

⭐ 하나의 함수로 만들면

확인작업


✔️ apply()

10개 가져와서 top10_book한 후에, 반복작업해줄 apply() 가져올것

apply()의 첫번째 매개변수는 실행할 함수이므로, get_page_cnt2()를 만들어줌 - 쪽수 구해서 isbn13열의 값을 함수로 전달

get_page_cnt2()를 apply()에 사용, 각 행이므로 axis=1, 0이면 열이다. 결괏값은 page_count에 판다스 시리즈로 저장됨

lambda 함수를 이용해서 함수 이름 없이 한줄로 쓸 수 있게끔 함 근데 어렵다
merge() 함수로 도서명과 쪽수를 합쳐주었다 객체의 인덱스를 기준으로 합친다면 left, right_index = True.


✔️ 웹 스크래핑 주의사항

1. 웹사이트에서 스크래핑 허락 유무 확인하기 - robots.txt 파일에 http://www.yes24.com/robots.txt 

2. HTML 태그의 특정 가능성 확인하기 : 웹페이지 중에 로딩된 후, 자바스크립트를 사용하여 데이터 가져오는 사이트는 고급 도구(셀레니움)을 활용해야함

 

더보기

requests 패키지와 뷰티플수프로 첫 도서의 쪽수를 가져오고 수행한 작업을 함수로 만들기

ISBN 입력받고 쪽수 반환하여 웹 스크래핑 작업을 모두 가능하게끔 함

데이터 프레임의 모든 쪽수를 가져오려 만든 함수와 apply() 메서드 활용

반환된 판다스 시리즈 객체를 데이터프레임과 합치려 merge() 메서드 활용


merge() 함수의 매개 변수는 left, right_index (합칠 기준이 인덱스) 이외에도

on = 'col1'처럼 합칠때 기준이 되는 열이 있을 때,

how = 'inner'(기본값)으로 프레임의 값이 같은 행만 합침

left = 첫번째 프레임을 기준으로

right = 두번째 프레임을 기준으로

outer = 모든 행을 유지하며 합침(col1의 값이 다른 행은 별개의 행으로 추가됨)

left_on, right_on = 'col1' | 합칠 기준의 열 이름이 다른 경우에 매개변수에 다르게 지정, pd.merge(df1, df2, on='col1')과 효과 동일한 pd.merge(df1, df2, left_on='col1', right_on='col1')

 

'데이터분석' 카테고리의 다른 글

python 데이터 분석 - ch 6  (0) 2023.09.22
python 데이터 분석 - ch 5  (0) 2023.09.22
python 데이터 분석 - ch 4  (1) 2023.09.15
python 데이터 분석 - ch 3  (0) 2023.09.15
빅데이터 응용 - 1  (0) 2023.09.07