[7주차] EDA_11

심하림·2023년 6월 13일
0

EDA

목록 보기
12/14

04. Self Oil Station Price Analysis

1. 셀레니움 설치

2. 셀프 주유소가 정말 저렴하나요? - 데이터 확보하기 위한 작업

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service as ChromeService

service = ChromeService(executable_path='../driver/chromedriver')
driver = webdriver.Chrome(service=service)
url = "https://www.opinet.co.kr/searRgSelect.do"
driver.get(url)

3. 셀레니움으로 접근

    1. 해당 URL로 한 번에 접근이 안될때
    1. 메인페이지로 접속이 되고, 팝업창이 하나 나올때
    1. 대기시간을 두고 작업할 수 있게 할때
import time
# 시간을 두고 실행할 수 있도록 import itme을 줌
# time.sleep(대기시간)을 넣어줌

def main_get():
    # 페이지 접근
    service = ChromeService(executable_path="../driver/chromedriver")
    driver = webdriver.Chrome(service=service)
    url = "https://www.opinet.co.kr/searRgSelect.do"
    driver.get(url)
    time.sleep(3)

    # 팝업창 화면 전화
    driver.switch_to_window(driver.window_handles[-1])

    # 팝업창 닫기
    driver.close()
    time.sleep(3)

    # 메인화면 전화
    driver.switch_to_window(driver.window_handles[-1])

    # 접근 URL 다시 요청
    driver.get(url)
   
main_get()

- 지정 사이트에 서울시 입력

  • SIDO_MN0인 ID이름 불러오기

  • option인 TAG_NAME이름 불러오기

  • vlaue 속성값 내용 불러오기

  • for문으로 서울특별시 찾기

    - for문의 두가지 사용방법
  • 공백데이터 제외, idx[0]확인

  • 키값입력

- 지정 사이트에 '구' 입력

  • 엑셀파일 받는 3가지 방법

  • import time이용, tqdm이용 '모든 구' 엑셀파일 받기

4. 데이터 정리하기

  • glob을 사용하기위해 프로그램 설치

  • 파이썬 버전에 따라 각 설치파일이 다름
  • python 3.8 이기때문에 pip3- glob2설치
  • glob : 같은형식의 이름을 갖고있는 파일 한꺼번에 가져오기

    ( 지역_.xls --> (지역_)로 시작하는 파일 ()다른내용이더라도 .xls로 마무리되는 파일 모두!)
  • 데이터 읽어오기 -> 컬럼명 변경

  • 각각담겨있던 엑셀파일 하나의 tmp_raw로 리스트에 담기

  • concat()

    - 형식이 동일하고 연달아 붙이기만 하면 될 때는 concat()
    - 구조가 동일한 여러문자열을 하나의문자열로 합치는 함수
  • 현재 컬럼 확인

  • 필요 컬럼의 내용만 불러오기

# 필요한 컬럼만 가져오기, 순서/이름바꾸기도 가능
stations = pd.DataFrame({
    "상호" : station_raw["상호"],
    "주소" : station_raw["주소"],
    "가격" : station_raw["휘발유"],
    "셀프" : station_raw["셀프여부"],
    "상표" : station_raw["상표"],
})
stations.tail(2)

  • 사용할 "주소"컬럼의 내용 split()

    	- for문으로 분리 + split()

    - "구"의 values만 가지고 오기
  • DataFrame에 컬럼 "구"담기

unique(), nunique()

# 하나의 컬럼에 유니크(유일/고유)값 구하기(nan 포함)
stations["A"].unique()
# 하나의 칼럼 유니크 값 보기 (nan 포함 x)
stations['A'].value_counts().index.values
stations['A'].dropna().unique()
# 하나의 칼럼 유니크 값 개수 nan 포함 x defalut drop=True
stations['A'].nunique(dropna=True) 
# 하나의 칼럼 유니크 값 개수 nan 포함 o
stations['A'].nunique(dropna=False) 
  • stations의 "구"의 하나씩의값 확인

  • 가격데이터값변형, 가격정보 있는 주유소정보만 데이터에 남기기, 완성된 데이터표

  • index재정렬, 불필요한 내용 정리

5. 주유 가격 정보 시각화

  • 시각화를 위한 import

  • Box Plot구조 설명


boxplot 만들기

pandas

seaborn

  • seaborn이용 전체 만들기

    • 브랜드별 셀프 유무에 따른 가격 차이

지도 시각화

  • 시각화에 필요한 import

  • 수집된 데이터로 최고/최저 비교

  • 최고/최저의 평균

  • 최종 시각화

분석

  • 유가정보
    서울시 데이터를 분석해 봤을때, 각 지역별로 높은 금액대와 낮은금액대가 지역에 상관없이 골고루 분포 되어 있었지만 서울의 가장 중심인 강남구/강동구/강북구 가 가장 높은 금액대가 많은 것으로 확인 되었고, 서울의 중심부를 지나 수도권쪽으로 벗어나면 휘발유의 가격이 낮은 가격대가 많이 형성되어 있다고 볼 수 있었다. 물론 모든 정보들은 평균값과 비교해 결과를 도출 해 내었다.

오류 코드

  • 💡 오류

    	1. 터미널에서 code . 입력해도 vscode가 실행되지 않음.


    2. code . 실행을 위해 작동 코드를 넣으면 bash: /user/local/bin/brew : No such file or directory가 계속 생성됨

  • 해결방법
    1 . vscode에서 명령팔레트(cmd+shift+p)로 code명령 실행

    1. 혼자 해결되지않아 슬랙에 공유하고 같은 기수의 능력자 분께서 1차 해답을 주심 ㅜㅜ
    • .bash_profile 찾기 : .bash_profile은 숨김파일(숨김파일 보여주는 단축키 cmd+shift+'+')로 가려져 있기 때문에 터미널에서 ls -a로 위치를 찾는다. (보통, User/myname/.bash_profile 있기 때문에 숨김파일만 보이게 한다면 모두 찾을수 있다!)
    • 파일내용 지우기
    1. homebrew 삭제 후 재설치

      삭제

      		```

      삭제코드 터미널에 입력

      sudo /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"
      		```

      재설치

      		```

      설치코드(homebrew 사이트에서도 받을수 있음)

      /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
      		```
      ** 주의점
      설치 완료후 꼭!!
      코드 입력해주기!!!
    • 설치완료하면 뜨는메세지
    • 터미널에 직접 입력하기
  • 정상작동 성공 !!! (code 작동이 안된건 4일정도 됐는데.. 드디어 정상작동 성공 ㅠㅠ 힘든여정이었다.. 고생했다 내자신!!! 도와주신 동기분도 감사할 따름 ㅠㅠㅠ)

  • 💡 오류

    - 잘 되던 By가 안되서 당황.. 


    - 원인 확인 : import할때 누락(늘 수업시작할때 꼼꼼하게 다시 체크하기!)
    - 해결

0개의 댓글