윈도우 함수
ROW_NUMBER(), RANK(), DENSE_RANK(), LEAD(), LAG() 등
sum()
select
e.emp_no, e.name, e.dept_no, e.salary,
sum(e.salary) over (partition by e.dept_no) as total_dept_sal,
sum(e.salary) over (partition by e.dept_no order by e.emp_no) as emp_sal
from employee e;
dense_rank()
select e.emp_no, e.name, e.salary,
dense_rank() over (order by e.salary desc) as dense_ranks
from employee e;
데이터 모델링 개요 및 정규화
데이터 모델
: 현실 세계를 추상화하여 사람, 장소, 사물, 범주에 대한 데이터 구조와 이들간의 관계를 시각적으로 표현
데이터의 논리적 구조를 정의함
데이터 모델 종류
- 계층적 데이터 모델 (Hierarchical Data Model)
- 네트워크 데이터 모델 (Network Data Model)
- 개체-관계형 데이터 모델 (Entity - Relationship Data Model)
- 관계형 개체 모델 (Relational Data Model)
- 차원 데이터 모델 (Dimensional Data Model)
- 객체지향 데이터 모델 (Object Oriented Data Model)
- 그래프 데이터 모델 (Graph Data Model)
Selenium 사용 실습
Python을 사용하여 Selenium 라이브러리를 통해
구글 파이낸스에서 특정 주식(여기서는 카카오 주식)의 현재 가격과 업데이트 시간을 가져오는 스크립트
# -*- coding: utf-8 -*-
"""
Created on Thu Jul 11 15:21:50 2024
@author: User
"""
# Selenium 및 관련 라이브러리 임포트
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
import time
# 크롬 드라이버 설정 및 초기화
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
# 주가와 업데이트 시간을 가져오는 함수 정의
def fetch_price_and_date(driver):
# 구글 파이낸스에서 카카오 주식 페이지로 이동
url = "https://www.google.com/finance/quote/035720:KRX?hl=ko"
driver.get(url)
# 페이지 로드 대기
time.sleep(5) # 동적 콘텐츠 로드를 위한 대기 시간
# 주가와 업데이트 시간 요소를 찾기
price_element = driver.find_element(By.XPATH, '//*[@class="YMlKec fxKbKc"]')
date_element = driver.find_element(By.XPATH, '//*[@class="ygUjEc"]')
name_element = driver.find_element(By.XPATH, '//*[@class="zzDege"]')
# 각 요소의 텍스트를 가져오기
price = price_element.text
date = date_element.text
name = name_element.text
# 회사 이름, 주가, 업데이트 시간을 반환
return name, price, date
# 함수를 호출하여 회사 이름, 주가, 업데이트 시간을 가져오기
name, price, date = fetch_price_and_date(driver)
# 결과 출력
print(f"회사 이름: {name}")
print(f"오늘 주가: {price}")
print(f"업데이트 시간: {date}")
# 드라이버 종료
driver.quit()
- 라이브러리 임포트:
- selenium: 웹 페이지를 자동으로 제어하기 위한 라이브러리.
- webdriver_manager: 크롬 드라이버를 자동으로 설치 및 관리하기 위한 라이브러리.
- time: 주로 대기 시간을 설정하기 위한 라이브러리.
- 크롬 드라이버 설정 및 초기화:
- webdriver.Chrome(): 크롬 브라우저를 제어하는 객체를 생성.
- ChromeService(ChromeDriverManager().install()): 크롬 드라이버를 설치하고 초기화.
- fetch_price_and_date 함수 정의:
- 특정 URL(카카오 주식 페이지)로 이동.
- 페이지가 완전히 로드되도록 5초 대기.
- find_element를 사용하여 주가, 업데이트 시간, 회사 이름 요소를 찾아 텍스트를 추출.
- 추출한 값을 반환.
- 함수 호출 및 결과 출력:
- 함수를 호출하여 회사 이름, 주가, 업데이트 시간을 가져오고 이를 출력.
- 드라이버 종료:
- driver.quit(): 모든 브라우저 창을 닫고 드라이버를 종료.
Python을 사용하여 Selenium으로 웹 페이지에서 실시간 가격 정보를 가져와 MySQL 데이터베이스에 저장
import time
from datetime import datetime
from selenium import webdriver
from selenium.webdriver.common.by import By
import pymysql
# MySQL 데이터베이스 연결 설정
db_connection = pymysql.connect(
host='localhost', # MySQL 서버 주소
user='root', # MySQL 사용자 이름
password='0000', # MySQL 비밀번호
database='test1' # 사용할 데이터베이스 이름
)
cursor = db_connection.cursor()
# 데이터베이스와 테이블을 생성하는 함수
def create_database_and_table():
cursor.execute("CREATE DATABASE IF NOT EXISTS crypto_prices")
cursor.execute("""
CREATE TABLE IF NOT EXISTS btcusdt_prices (
id INT AUTO_INCREMENT PRIMARY KEY,
timestamp DATETIME NOT NULL,
price DECIMAL(10, 2) NOT NULL
)
""")
db_connection.commit()
# 데이터베이스와 테이블 생성
create_database_and_table()
# Selenium WebDriver 설정
driver = webdriver.Chrome() # 혹은 다른 브라우저 드라이버 사용
url = "https://www.bitget.com/asia/futures/usdt/BTCUSDT"
driver.get(url)
# 데이터베이스에 가격 데이터를 삽입하는 함수
def insert_price_data(timestamp, price):
sql = "INSERT INTO btcusdt_prices (timestamp, price) VALUES (%s, %s)"
cursor.execute(sql, (timestamp, price))
db_connection.commit()
# 웹 페이지에서 현재 가격을 가져오는 함수 (XPath를 이용)
def fetch_current_price():
try:
# 적절한 XPath로 수정 필요
price_element = driver.find_element(By.XPATH, '//*[@id="root"]/div/div[3]/div/div[1]/div[2]/div/div[2]/li')
price = float(price_element.text.replace(',', '')) # 텍스트에서 가격 추출 및 변환
return price
except Exception as e:
print(f"Error fetching price: {e}")
return None
# 일정 간격으로 가격 데이터를 가져와 저장하는 함수
def fetch_and_store_prices(interval=10, duration=60):
start_time = time.time()
while (time.time() - start_time) < duration:
current_price = fetch_current_price()
if current_price is not None:
current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
insert_price_data(current_time, current_price)
print(f"Stored price {current_price} at {current_time}")
time.sleep(interval)
# 1분 동안 10초 간격으로 가격 데이터 가져와 저장
fetch_and_store_prices(duration=60)
# 데이터베이스 연결 종료 및 Selenium 드라이버 종료
cursor.close()
db_connection.close()
driver.quit()
'파이썬 & 머신러닝과 딥러닝' 카테고리의 다른 글
데이터 수집 및 정제 (데이터 결합, 데이터 변환, 데이터 정제), 시각화 (0) | 2024.07.15 |
---|---|
파이썬 분석 도구 및 주요 함수의 이해, 데이터 수집 및 정제 (데이터 선택) (1) | 2024.07.12 |
데이터베이스 DDL, 뷰, 인덱스 (0) | 2024.07.10 |
데이터베이스 CTE, 상관 서브쿼리, 다중 컬럼 서브쿼리, DML (0) | 2024.07.09 |
데이터베이스 SQL 기본 질의문, 연산자, 함수 및 단일행 함수 (1) | 2024.07.05 |