[패스트 캠퍼스] 데이터 분석 부트캠프 16기/학습일지

[패스트캠퍼스] 데이터분석 부트캠프 (4주 차)

루루23 2024. 10. 7. 10:42
반응형

Selenium

공통

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

browser = webdriver.Chrome()
url = ''
browser.get(url)

 

SRT 예매

  • 도착지/목적지 기본값 삭제 및 입력
browser.find_element(By.ID, 'dptRsStnCdNm').clear()
browser.find_element(By.ID, 'dptRsStnCdNm').send_keys('부산')
  • 옵션 선택하기
from selenium.webdriver.support.ui import Select
select_element = browser.find_element(By.NAME, 'dptDt')
select = Select(select_element)
select.select_by_value(input('예매할 날짜(8자리, 예:20240924: '))
  • 매진 풀릴 때까지 새로고침 반복 / 예시는 10번으로 작성
for i in range(10):
    time.sleep(1)
    try:
        status = browser.find_element(By.XPATH, '//*[@id="result-form"]/fieldset/div[6]/table/tbody/tr[2]/td[6]/a')
        if status.text == '매진':
            browser.refresh()
        else:
            status.click()
    except:
        browser.find_element(By.CLASS_NAME, 'btn_large').click()
        
 

 

구글 플레이스토어 리뷰

  • 앱 이름 입력받기
keyword = input('검색할 앱: ')
url = f'https://play.google.com/store/search?q={keyword}&c=apps'
  • 모달스크롤 다운
modal = browser.find_element(By.CLASS_NAME, 'fysCi')
modal.click()

for i in range(3):
    js_code = 'arguments[0].scrollTo(0, arguments[0].scrollHeight);'
    browser.execute_script(js_code, modal)
    time.sleep(1)
  • 리뷰 가져오기
containers = browser.find_elements(By.CLASS_NAME, 'RHo1pe')
reviews = []

for container in containers:
    name = container.find_element(By.CLASS_NAME, 'X5PpBb').text
    text = container.find_element(By.CLASS_NAME, 'h3YV2d').text
    rating = container.find_element(By.CLASS_NAME, 'iXRFPc').get_attribute('aria-label')[10]
    date = container.find_element(By.CLASS_NAME, 'bp9Aid').text
    try:
        like = container.find_element(By.CLASS_NAME, 'AJTPZc').text.split(' ')[1].split('명이')[0]
    except:
        like = '0'
    
    reviews.append({
        'name':name,
        'text':text,
        'rating':rating,
        'date':date,
        'like':like})

 

Matplotlib

선그래프

import matplotlib.pyplot as plt

x = np.arange(0,10,1)
y = np.sin(x)

plt.plot(x, y)
  • 주요 매개변수
    • x, y: 각각 X축과 Y축에 해당하는 데이터
    • color: 선 색상, ex) 'r'은 빨강, 'b'는 파랑.
    • linestyle: 선 스타일, default: '-'(실선) / '--' / '-.' / ':'(점선) 등
    • marker: 각 데이터 포인트에 마커 추가, ex) 'o'는 원, 's'는 사각형
    • label: 범례에 나타날 선의 이름 설정
  • 추가 기능
    • 제목, 축 이름: plt.title( ), plt.xlabel( ), plt.ylabel( )
    • 범례: plt.legend( )
    • 축 범위: plt.xlim( ), plt.ylim( )
    • 축 눈금: plt.xticks( ), plt.yticks( )

 

산점도

plt.scatter(x, y, c=colors, s=sizes, alpha=0.5, cmap='viridis')
plt.colorbar()
  • 주요 매개 변수
    • x, y: 각각 X축과 Y축에 해당하는 데이터.
    • color (c): 점의 색상, 'r', 'b' 등
    • size (s): 각 점의 크기
    • marker: 점 모양, 기본값은 'o'(원), '^'(삼각형), 's'(사각형) 등
    • alpha: 투명도, 0(완전 투명) ~ 1(불투명)
    • cmap: 컬러맵

 

막대 그래프

categories = ['A', 'B', 'C', 'D']
values = [4, 7, 1, 8]

plt.bar(categories, values)
  • 주요 매개변수
    • x: 막대의 x축, 보통 범주형 데이터
    • height: y축 값
    • width: 막대의 너비
    • color: 막대의 색상

 

Seaborn

import seaborn as sns
tips = sns.load_dataset('tips')
#산점도
sns.scatterplot(data=tips, x='total_bill', y='tip', hue='sex')

#선형회귀
sns.lmplot(data=tips, x='total_bill', y='tip', hue='sex')

#막대그래프
sns.barplot(data=tips, x='day', y='total_bill')

#히스토그램, kde:밀도곡선
sns.histplot(tips['total_bill'], kde=True)

#상자그림
sns.boxplot(data=tips, x='day', y='tip', hue='size', palette='Set3')
#히트맵
flights = sns.load_dataset('flights')
flights_pivot = flights.pivot(index='month', columns='year', values='passengers')
sns.heatmap(flights_pivot, annot=True, fmt='d')
반응형