본문 바로가기

Computer Engineering/Big Data Analytics Using Python

[빅데이터 분석] 3. 데이터 준비

반응형

우리가 생각하는 데이터는 어떤 데이터가 있을까?

 

스마트폰 메모리에 저장되어 있는 데이터는 사진, 동영상, 어플리케이션 등등으로 이루어져 있다.

 

이같은 데이터는 모두 같은 종류의 데이터일까?

 

  • 데이터의 구분
    1. 정형 데이터
      고정된 형식으로 저장된 데이터
      1. 엑셀
      2. 관계형 DB
    2. 반정형 데이터
      고정된 형식은 아니지만 기본 구조가 있는 데이터
      1. XML
      2. HTML
      3. JSON
    3. 비정형 데이터
      1. 문서
      2. 이미지
      3. 동영상
  • 데이터 준비

외부 데이터를 불러와 정형 데이터 구조로 변환해주는 기능을 제공하는

판다스 라이브러리를 이용해 데이터를 불러오고 쓰도록 한다.

 

  • 불러오기
    read_(파일 포맷)

 

  • 쓰기
    to(파일 포맷)

#pip로 python만 한정된 패키지 관리자고 conda 는 범용 설치 가능

 

  • 데이터 백업
    • 원 데이터를 백업하는 과정
    • raw 데이터를 손실하지 않기위해 가장 먼저 해야하는 작업

1. .csv

#판다스 라이브러리 불러오기
import pandas as pd

#파일경로를 찾고 변수 file_path에 저장
file_path='C:\data\bicycle.csv'

#read csv() 함수로 데이터프레임 변환
df1= pd.read_csv(file_path, engine='python')
df1

 

파일경로를 입력할 때 \와 \의 차이를 구분해야한다.

\로 입력할 때는 \\로 입력해야 경로를 인식한다.

#데이터 불러오기
import pandas as pd
file_path = 'C:\data\bicycle.csv'
df=pd.read_csv(file_path, encoding='CP949')

#to_csv 함수를 사용 csv 파일로 내보내기
#data 폴더에 sample_data.csv 저장
df4.to_csv('C:\data\sample_data.csv')

#저장 파일 확인
file_path='C:\data\sample_data.csv'
df5=pd.read_csv(file_path)
print(df5)

 

 

2. .xlsx

 

import pandas as pd

file_path = 'C:\data\bicycle.xlsx'
df2 = pd.read_excel(file_path, encoding='CD949')

#데이터프레임 출력
df2
#데이터 불러오기
import pandas as pd
file_path='C:\data\bicycle.xlsx'
df6=pd.read_excel(file_path, encoding='CP949')

#to_excel 메소드를 사용하여 excel 파일로 내보내기
#파일명은 sample_data1.xlsx로 저장
df6.to_excel('C:\data\sample_data1.xlsx')

3. .json

import pandas as pd
file path='C:\data\read.json'
df3 = pd.read_json(file_path)

#데이터 프레임 출력
df3
#데이터 불러오기
import pandas as pd
file_path= 'C:\data\read.csv'
df7=pd.read_jsom(file_path)
df7

#to_json() 메소드를 사용하여 JSON 파일로 내보내기
#파일명은 smaple_data_json.json으로 저장
df7.to_json ('C:\data\sample_data_json.json')
  • 피클 저장하기

파이썬의 모든 객체를 파일로 저장하는 피클

저장 to_pickle, 불러오기 read_pickle

import pickle
import pandas as pd

temp=pd.DataFrame({'a':[1], 'b':[2]})

#데이터 저장
temp.to_pickle('filename.pkl')

#데이터 로드
data=pd.read_pickle('filename.pkl')

 

  • 파이썬 웹 크롤링
    BeautifulSoup 라이브러리를 이용한 웹 크롤링
pip install requests
pip install BeautifulSoup4

라이브러리 설치

  • BeautifulSoup 문법
    • from bs4 import BeautifulSoup
    • a=BeautifulSoup(html소스, 'html.parser')
    • a.find('p')
    • a.find_all('p',class_=,id=)
    • a.get_text()
    • a.p['class']
  • 네이버 웹 크롤링

1. 네이버 날씨 웹페이지 가져오기

from bs4 import BeautifulSoup as bs
from pprint import pprint
import requests

html=requests.get('https://search.naver.com/search.naver?ie=UTF-8&query=%EB%82%A0%EC%94%A8&sm=chr_hty')
print(html.text)

2. 파싱

  • html 구성 <태그 속성 = 속성값>
  • 태그 : div, 속성 : class, 속성값 : detial_box

 

from bs4 import BeautifulSoup as bs
from pprint import pprint
import requests

html = requests.get('https://search.naver.com/search.naver?ie=UTF-8&query=%EB%82%A0%EC%94%A8&sm=chr_hty')
soup = bs(html.text, 'html.parser')

#미세먼지 관련 블록 추출
dustdata_one=soup.find('div',{'class': 'detail_box'})
print(dustdata_one)

 

from bs4 import BeautifulSoup as bs
from pprint import pprint 
import requests

html=requests.get('https://search.naver.com/search.naver?ie=UTF-8&query=%EB%82%A0%EC%94%A8&sm=chr_hty')
soup = bs(html.text, 'html.parser')

#미세먼지 관련 블록 추출
dustdata_one = soup.find('div', {class:'detail_box'})

dustdata_all=dustdata_one.findAll('dd')
pprint(dustdata_all)

3. 텍스트 추출

from bs4 import BeautifulSoup as bs
from pprint import pprint
import requests

html = requests.get('https://search.naver.com/search.naver?ie=UTF-8&query=%EB%82%A0%EC%94%A8&sm=chr_hty')
soup =bs(html.text, 'html.parser')

#미세먼지 관련 블록 추출
dustdata_one = soup.find('div',{'class':'detail_box'})
dustdata_all=dustdata_one.findAll('dd')

fine_dust_code = dustdata_all[0].find('span', {'class':'num'})
fine_duest_con = dustdata_all[0].find('span', {'class':'num'}).text

print(fine_dust_code)
print(find_dust_con)

미세먼지

from bs4 import BeautifulSoup as bs
from pprint import pprint
import requests

html = requests.get('https://search.naver.com/search.naver?ie=UTF-8&query=%EB%82%A0%EC%94%A8&sm=chr_hty')
soup =bs(html.text, 'html.parser')

#미세먼지 관련 블록 추출
dustdata_one = soup.find('div',{'class':'detail_box'})
dustdata_all=dustdata_one.findAll('dd')

fine_dust_code = dustdata_all[0].find('span', {'class':'num'}).text
fine_duest_con = dustdata_all[1].find('span', {'class':'num'}).text

print(ultra_fine_dust)

초미세먼지

반응형