[Python]데이터 수집

2023. 12. 22. 16:29· 공부/Python
목차
  1. AI 데이터 분석 과정
  2. 데이터 종류
  3. 데이터 소스
  4. 외부 데이터 불러 오기
  5. CSV 파일
  6. Excel 파일
  7. 자동 생성된 index는 저장을 하지 말자
  8. json 파일
  9. pickle 파일
  10. 웹 크롤링(crawling)
  11. BeautifulSoup 객체 생성
  12. 벅스 Top 100 웹 크롤링
반응형

AI 데이터 분석 과정

Untitled.png

  • 데이터 수집
    • 오픈데이터 API, 웹 크롤링, 파일 읽기, DB 액세스

데이터 종류

  • 정형데이터(Structure data)
    • 미리 정해진 형식으로 구조화된 데이터
    • 예) 엑셀 시트, RDBMS 테이블
  • 반정형데이터(Semi-structure data)
    • 특정한 형식에 따라 저장된 데이터이지만 정형데이터와 달리 형식에 대한 설명을 함께 제공
      • 구조를 해석하는 파싱(일종의 번역) 과정이 필요하며 파일 형태로 저장
      • 예) XML, JSON
  • 비정형데이터(Unstructured data)
    • 정해진 구조가 없이 저장된 데이터
      • 빅데이터의 대부분을 차지
    • 예) 텍스트, 영상, 이미지 SNS

데이터 소스

  • 데이터가 존재하는 곳

미디어(SNS등) ,클라우드 , 웹, 사물인터넷, 데이터베이스 , 오픈 데이터/ API

Untitled.png

외부 데이터 불러 오기

  • 판다스는 다양한 형식의 파일로부터 데이터 불러오기 함수를 제공한다.
    • 외부 데이터는 불러와 정형 데이터 구조(데이터 프레임)으로 변환

판다스에서 지원하는 외부 데이터 파일 형식

  • csv 파일
    • pd.read_csv() 함수
    • df.to_csv() 메소드
  • excel 파일
    • pd.read_excel() 함수
    • df.to_excel() 메소드
  • json 파일
    • pd.read_json() 함수
    • df.to_json() 메소드
  • 피클(pickle) 파일
    • pd.read_pickle() 함수
    • df.to_pickle() 메소드

CSV 파일

  • CSV(Comma-separated values)
  • 각 라인의 컬럼들이 콤마로 분리된 텍스트 파일 포맷
  • CSV 파일 읽기/저장
    • df = pd.read_csv(‘파일경로/이름’)
    • df.to_csv(‘파일경로/이름‘, index=False)

Untitled.png

index=False 를 사용하여 저장하는 이유 → df1은 csv를 불러 올 때 인덱스를 생략하여 데이터 프레임 변환과정에서 자동으로 인덱스가 붙어 버렸는데 이 인덱스를 저장하기는 싫어서(쓸모없는 데이터이기때문)

Excel 파일

  • pd.read_excel(’파일경로/이름’) ← 해당 엑셀 파일 데이터프레임으로 변
  • df.to_excel(’파일경로/이름’, index=False) ← df라는 데이터프레임 엑셀 파일로 저장

자동 생성된 index는 저장을 하지 말자

Untitled.png

만약 판다스로 데이터를 불러 올 때 index_col를 지정하지 않았으면 저장 할때 index=False라는 옵션을 꼭 주어서 저장하자 , 안그러면 위의 사진처럼 쓸모없는 순서 인덱스가 추가된다.

Untitled.png

json 파일

  • JavaScript Object Notation의 약자
  • json 파일 읽기/저장

→ json은 저장 할 때는 인덱스를 따로 저장하지 않음

import pandas as pd
file_path1 = 'weather.json'

df1 = pd.read_json(file_path1) # read_json() 함수로 데이터프레임 변환
df.to_json('sample_data.json') # json 파일 저장

file_path2 = 'sample_data.json'
df2 = pd.read_json(file_path2) # 저장 파일 확인
print(df2)

Untitled.png

pickle 파일

  • 파이썬에서 객체를 저장하기 위한 이진 파일 형식
  • 텍스트 파일 : json, excel, csv … 등등
  • 이진 파일 : 음악, 한글 파일, …

텍스트파일 : (아스키코드, 유니코드) 등 문자코드로 바꿔서 저장 → 메모장으로 읽을 수 있는 데이터들

이진 파일 : 자체 포맷이 있음, 텍스트로 변환하지 않고 객체, 정수 등등 있는 그대로 저장, 메모장으로 열었을 때 읽을 수가 없다

import pandas as pd
file_path1 = 'weather.pkl'

df1 = pd.read_pickle(file_path1) # read_pickle() 함수로 데이터프레임 변환
df1.to_pickle('sample_data.pkl') # pickle 파일 저장

file_path2 = 'sample_data.pkl'
df2 = pd.read_pickle(file_path2) # 저장 파일 확인
print(df2)

Untitled.png

엑셀, csv 파일은 자동으로 인덱스를 생성함

  • 저장 시 디폴트로 인덱스도 저장함

pickle, json 파일은 자동으로 인덱스를 생성 함

  • 저장 시 인덱스는 저장되지 않음

웹 크롤링(crawling)

  • 웹 페이지를 원본 그대로 불러와 웹 페이지 내에 데이터를 추출하는 기술
    • 웹 스크래이핑(Scraping)이라고도 함
    • 크롤링을 전용 소프트웨어는 웹크롤러(Crawler)라고 함
    • 파이썬 크롤링 라이브러리 : Beautifulsoup
  • Beautifulsoup을 이용한 웹 크롤링 절차
    • 데이터를 웹 크롤링하기 위해서는 웹소켓을 이용하여 원하는 웹사이트에 연결 요청을 진행
    • 연결 요청을 응답으로 웹서버는 읍답(Response)를 보내면 보통 HTML이나 JSON형식으로 반환
    • 반환된 HTML, JSON데이터를 Beautiful Soup으로 파싱

BeautifulSoup4, requests 라이브러리 필요

BeautifulSoup 객체 생성

  • requests 모듈 사용
  • page = requests.get**("https://www.daangn.com/hot_articles")**
  • soup = BeautifulSoup**(**page.content, ‘html.parser’)
    • 첫번째 인자 : HTML 텍스트(page.content, page.text)
    • 두번째 인자 : 파서 종류
      • html.parser : 기본 설치, 보통 속도
      • lxml : lxml 모듈 추가 설치 필요, 매우 빠름
      • html5lib : 브라우저와 같은 방식, 매우 느림
  • urllib.request 모듈 사용
    • fr = urlopen('https://www.naver.com/’)
    • soup = BeautifulSoup(fr.read(), 'html.parser')

HTML 태그(요소) 이름을 속성으로 가짐

  • 태그(요소) 탐색 가능
  • ex) soup.h2 : 첫번째 h2 태그 추출 (태그 + 내용)
  • ex) soup.h2.string == soup.h2.text : 첫번째 p 태그의 내용만 추출
  •  

Untitled.png

from bs4 import BeautifulSoup as bs
import requests

page = requests.get('https://www.daangn.com/hot_articles')
soup = bs(page.content, "html.parser")

print(soup.h2)
print('---------------------------------')
print(soup.h2.string)
print(soup.h2.text)

Untitled.png

h2태그의 첫번째 요소를 출력하였음

  • soup.find(‘태그명’)
    • 첫번째 태그명 추출 **== soup.**태그명
  • soup.find(‘태그명’, attrs={‘속성’:‘값’})
    • attrs 속성을 가진 첫번째 태그 추출
    • cf**)** 태그의 내용만 추출 : tag.text 속성 == tag.get_text**()** 메소드
import requests
page = requests.get('https://www.daangn.com/hot_articles')
soup = bs(page.content, "html.parser")

print(soup.h2)
print(soup.find('h2'))
print(soup.find('h2').text)
print("-----------------------------------")
print(soup.find("h1",{"id":"hot-articles-head-title"}))
  • soup.find_all(‘태그명’)
    • 태그명을 가진 모든 태그 추출
    • 반환타입 : bs4.element.ResultSet
  • soup.find_all(‘태그명’, attrs={‘속성’:‘값’})
    • 태그명 중에서 attrs 속성을 가진 태그 추출
# soup.find_all('태그명')
import requests

page = requests.get('https://www.daangn.com/hot_articles')
soup = bs(page.content, "html.parser")

print(soup.find_all('h2'))
print(len(soup.find_all("h2")))
print("-----------------------------------")
print(soup.find_all(attrs={"class":"head-title"}))
print(len(soup.find_all(attrs={"class":"head-title"})))

Untitled.png

벅스 Top 100 웹 크롤링

from urllib.request import urlopen
from bs4 import BeautifulSoup as bs

fr = urlopen("https://music.bugs.co.kr/chart?wl_ref=M_left_02_01")
soup = bs(fr.read(), 'html.parser')

# td 태그에 check라는 class가 있는 td 태그를 모두 가져온다.
musics = soup.find_all("td", "check")
artists2 = soup.find_all("p", {"class":"artist"})


# musics의 각 태그들에 대해서
for i, music in enumerate(musics):
  # input 태그안에 title 속성값을 parsing 한다.
  print("{}위 : {} {}".format(i+1, music.input['title'], soup.select('.artist')[i+1].get_text()))

Untitled.png

반응형
  1. AI 데이터 분석 과정
  2. 데이터 종류
  3. 데이터 소스
  4. 외부 데이터 불러 오기
  5. CSV 파일
  6. Excel 파일
  7. 자동 생성된 index는 저장을 하지 말자
  8. json 파일
  9. pickle 파일
  10. 웹 크롤링(crawling)
  11. BeautifulSoup 객체 생성
  12. 벅스 Top 100 웹 크롤링
'공부/Python' 카테고리의 다른 글
  • [Python]맷플롯립
  • [Python]판다스
  • [Python]데이터 전처리
  • [Python]데이터분석과 머신러닝
Future0_
Future0_
rm -rf /
Future0_
Luna Developer Blog
Future0_
전체
오늘
어제
  • 분류 전체보기 (112)
    • 프로그래밍 (4)
      • 알고리즘 (4)
    • 보안 (14)
      • Dreamhack (4)
      • Hackthebox (1)
      • Webhacking (9)
    • 프로젝트 (4)
    • 공부 (80)
      • Database (2)
      • Python (11)
      • System (4)
      • Java (13)
      • JSP (13)
      • Spring (11)
      • Kotlin (16)
      • 자료구조 (10)
      • 기계학습 (0)
    • Docker (4)
    • Github (2)
    • Tip (1)
    • 잡담 (2)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • Java
  • shared preference
  • 코틀린기본문법
  • spring
  • android studio 삭제
  • jsp
  • 자료구조
  • 상속
  • Android Studio
  • 자바빈즈
  • React
  • 키 해시
  • docker
  • ViewModel
  • native app
  • 디버깅키해시
  • Python
  • cs
  • webhacking
  • dreamhack
  • 알고리즘
  • Computer science
  • api 통신
  • 프로그래밍
  • 1.9.22
  • Kotlin
  • Database
  • 컴퓨터
  • SpringBoot
  • 보안

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
Future0_
[Python]데이터 수집
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.