본문 바로가기
DB 공부하기

230404_DB복습

by 보랏 2023. 4. 4.

안녕하세요. 보랏입니다.

오늘 ORM(객체관계맵핑 데이터베이스)와 XGBoost코드를 배웠습니다.

 

복습시작하겠습니다.

 

1. ORM(Object Relational Mapping)

  • Object Relational Mapping(객체-관계-매핑)의 약자
  • 객체와 데이터베이스의 관계를 매핑해주는 도구
  • 프로그래밍 언어의 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 도구
  • 프로그래밍 언어의 객체와 관계형 데이터베이스 사이의 중계자(통역자) 역할
  • MVC패턴에서 모델을 기술하는 도구 & 객체와 모델 사이의 관계를 기술하는 도구

MVC(MVC design pattern)

  • 소프트웨어 설계와 관련된 디자인 패턴으로, 소프트웨어 공학에서의 ‘흔히 사용되는’ 설계 패턴을 의미

ORM사용이유

  • 객체 지향 프로그래밍은 클래스를 이용하고 관계형 데이터베이스는 테이블을 이용하는데 객체 모델과 관계형 모델간의 불일치 존재
  • ORM을 이용해서 데이터베이스 접근을 프로그래밍 언어의 관점에서 맞출 수 있음
  • ORM을 이용해서 객체 간의 관계를 바탕으로 sql을 자동으로 생성하여 불일치를 해결
  • sql문을 직접 작성하지 않고 엔티티를 객체로 표현 가능
  • ORM을 이용해서 객체를 통해 간접적으로 DB를 다룰수 있음

ORM장점

  • 직관적인 코드(가독성) + 비지니스 로직 집중 가능(생산성)
    • ORM을 이용하면 SQL 쿼리가 아닌 메서드로 데이터를 조작 가능
    • → 프로그래머가 객체 모델로 프로그래밍하는 것에 더 집중 가능
    • 각종 객체에 대한 코드를 별도로 작성하기 때문에 코드 가독성을 높여줌
    • SQL의 절차적이고 순차적인 접근이 아닌 객체 지향적인 접근으로 생산성 증가
  • 재사용 및 유지보수 편리성 증가
    • ORM은 디자인 패턴을 견고하게 만드는 데 유리
    • 독립적, 재활용 가능
  • DBMS에 대한 종속성 저하
    • 객체 간 관계를 바탕으로 SQL을 자동으로 생성하여 RDBMS의 데이터 구조 및 프로그래밍 언어의 객체 모델 사이의 간격을 좁힘

ORM 단점

  • 완벽한 ORM으로만 서비스 구현이 어려움
    • 사용하기는 편리하지만 설계는 신중해야함
    • 프로그램의 복잡성이 커질 경우 난이도가 높음

 

 

2. iris_data XGBoost코드

from xgboost import XGBClassifier

import pandas as pd 
import numpy as np 
from sklearn import datasets
iris = datasets.load_iris()

df = pd.DataFrame(data= np.c_[iris['data'] , iris['target']], columns=[iris.feature_names + ['target']] )
df

 

### (1) 두 배열을 왼쪽에서 오른쪽으로 붙이기 
   : np.r_[a, b]
   : np.hstack([a, b])
   : np.concatenate((a, b), axis = 0)

### (2) 두 배열을 위에서 아래로 붙이기
   : np.r_[[a], [b]]
   : np.vstack([a, b])
   : np.concatenate((c, d), axis = 1) # for 2D ~ array

### (3) 두 개의 1차원 배열을 칼럼으로 세로로 붙여서 2차원 배열 만들기
   : np.c_[a, b]
   : np.column_stack([a, b])
   : np.concatenate((c.T, d.T), axis = 1) # for 2D~ array

 

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(iris['data'], iris['target'], random_state= 42)

from sklearn.metrics import accuracy_score
xgb = XGBClassifier(booster = 'gbtree', objective = 'multi:softprob', max_depth = 6, 
             learning_rate = 0.1, n_estimators = 100, n_jobs = -1)
xgb.fit(X_train, y_train)

accuracy_score(xgb.predict(X_test), y_test) -> 1.0

X, y = datasets.load_diabetes(return_X_y=True)

from sklearn.model_selection import cross_val_score
from xgboost import XGBRegressor

xgb_reg = XGBRegressor(booster='gbtree', objective='reg:squarederror', max_depth=6, 
             learning_rate = 0.1, n_estimators=100, n_jobs=-1)

 

 

 

'DB 공부하기' 카테고리의 다른 글

230406_DB복습  (0) 2023.04.07
230405_DB복습  (0) 2023.04.05
230403_DB복습  (0) 2023.04.03
230329_DB복습  (0) 2023.03.29
230327_DB복습  (0) 2023.03.27