반응형

java spring 개발시 사용하는 gradle 이란?

 

정의 : 그루비(Groovy)를 기반으로 한 빌드 도구

 

XML 기반으로 빌드 스크립트를 사용하는 MAVEN 과 달리 DSL(Domain Specific Language)를 사용한다.

 

설치 방법 : https://gradle.org/install/

 

Gradle | Installation

Install the Gradle build tool on Linux, macOS or Windows, either manually or using a package manager like SDKMAN! or Homebrew.

gradle.org

Gradle 설치 전 JDK 버전이 8이상 확인!

 

gradle init 으로 샘플 프로젝트 생성

위 명령어 실행하면 해당 폴더에 아래와 같은 파일 생성

각 파일별 용도 기입 예정...

반응형

'프로그래밍 > JAVA' 카테고리의 다른 글

JTable column size 내용길이에 맞춰 조절하기  (0) 2016.01.20
Titleborder 색 변경  (0) 2015.12.27
[팁] JarBundler 이용법.  (0) 2015.12.08
[팁] application bundle 위치  (0) 2015.12.08
JAVA L&F(Look & Feel)  (0) 2015.12.05
반응형

관리자 페이지 또는 필요에 따라 로그인 2차인증이 필요할 경우가 있다.

구글에서 제공하는 TOTP 기반의 google authenticator 앱으로 무료로 사용할 수가 있다.

여기서 TOTP와 2-factor 인증 방법에 대해 이해가 필요하다.

 

TOTP란?

정의 : 시간 기반 일회용 비밀번호(Time-based one-time password) 현재 시간의 고유성의 원천으로 사용하여 일회용 비밀번호를 생성하는 컴퓨터 알고리즘.

알고리즘 : 사용자가 입력한 otp 코드와 로컬에서 유닉스 시간 기반으로 생성한 코드가 일치 여부를 판단.

                  google authenticator 앱에서는 HOTP 알고리즘으로 인증을 진행.

 

2-factor authentication(2FA)

정의 : 이중인증절차라고 하며 로그인을 시도한 주체가 계정의 실제 소유자인지 확인하여 계정 보안을 높여주는 절차

 

QR코드 생성은 아래 url을 QR코드로 변경하여 표시하면 된다.

 

otpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=Example

Label : Example

User : alice@google.com

secret_key : JBSWY3DPEHPK3PXP

 

위 예시에서 secret_key 는 특정 문자열을 Base32 인코딩한 결과만 Google Authenticator에서 인식된다.

 

google authenticator 앱에 QR 코드로 장치를 등록하는데 해당 QR을 생성하는 예시를 들어주는 사이트 공유

https://dan.hersam.com/tools/gen-qr-code.php

 

Generate QR Codes for Google Authenticator

 

dan.hersam.com

위 사이트에서 QR 만드는 예시를 참고하여 앱 또는 웹 어플리케이션에서 QR을 생성하여 보여주고 인증이 완료된 사용자를 저장하고 해당 사용자에 대해서는 이후 로그인 시도 시 google authenticator 인증 코드를 입력 받을 수 있도록 구현.

반응형
반응형

sqlalchemy는 파이썬에서 DB에 접근하기 위한 ORM 라이브러리다.

 

ORM은 Object Relational Mapping의 약어로써 객체(Object)와 관계형 DB(Relational)을 연결(Mapping) 해주는 것을 의미한다.

객체지향언어에서 객체(클래스)에 DB 테이블을 매핑시켜 사용한다고 생각하면 이해가 쉽다.

ORM은 설계에 따라 사용이 용이할 수도 어려워질 수가 있다.

 

* sqlalchemy

사이트 : https://www.sqlalchemy.org/

 

SQLAlchemy - The Database Toolkit for Python

The Python SQL Toolkit and Object Relational Mapper SQLAlchemy is the Python SQL toolkit and Object Relational Mapper that gives application developers the full power and flexibility of SQL. It provides a full suite of well known enterprise-level persisten

www.sqlalchemy.org

지원하는 Databases : SQLite, Postresql, MySQL, Oracle, MS-SQL, Firebird, Sybase 등..

사용가능한 Python 버전 : 2.5이후 또는 3.x 버전

 

SQLAlchemy를 사용하기 위해 우선적으로 DB Engine을 생성해야 한다

from sqlalchemy import create_engine
#engine 생성
#password 특수문자 포함 시 password에 url 인코딩 필요
engine = create_engine("postgresql://{username}{password}@{host}/{database}")

#password 인코딩 예시
import urllib.parse
print(urllib.parse.quote_plus("kx@jj5/g")) #'kx%40jj5%2Fg' 출력

from sqlalchemy import URL
#URL을 이용한 engine생성
#password에 특수문자가 포함 시 인코딩 하지 않고 사용할 수 있음.
url_object = URL.create(
	drivername="",
    username={username},
    password={password},
    host={host},
    database={database},
    query={"charset":"cp949"}
    )
engine = create_engine(url_object)

위와 같이 생성한다.

 

* 각 DB별 engine 생성 샘플

# mysql default
engine = create_engine("mysql://scott:tiger@localhost/foo")

# mysqlclient (a maintained fork of MySQL-Python)
engine = create_engine("mysql+mysqldb://scott:tiger@localhost/foo")

# PyMySQL
engine = create_engine("mysql+pymysql://scott:tiger@localhost/foo")

#Oracle
engine = create_engine("oracle://scott:tiger@127.0.0.1:1521/sidname")
engine = create_engine("oracle+cx_oracle://scott:tiger@tnsname")

# mssql pyodbc
engine = create_engine("mssql+pyodbc://scott:tiger@mydsn")

# pymssql
engine = create_engine("mssql+pymssql://scott:tiger@hostname:port/dbname")

# sqlite://<nohostname>/<path>
# where <path> is relative:
engine = create_engine("sqlite:///foo.db")

# Unix/Mac - 4 initial slashes in total
engine = create_engine("sqlite:////absolute/path/to/foo.db")

# Windows
engine = create_engine("sqlite:///C:\\path\\to\\foo.db")

# Windows alternative using raw string
engine = create_engine(r"sqlite:///C:\path\to\foo.db")

참고 문서 : https://docs.sqlalchemy.org/en/20/core/engines.html#supported-databases

반응형

'프로그래밍 > Python' 카테고리의 다른 글

[PYTHON] 파이썬 함수 매개변수  (0) 2022.08.11
[Python] flask_restful fields  (0) 2021.10.08
Single Linked list 구현  (0) 2018.03.22
창원시 버스 API 사용하기  (1) 2016.02.22
반응형

Question :

 

You are given a table, Projects, containing three columns: Task_ID, Start_Date and End_Date. It is guaranteed that the difference between the End_Date and the Start_Date is equal to 1 day for each row in the table.

If the End_Date of the tasks are consecutive, then they are part of the same project. Samantha is interested in finding the total number of different projects completed.

Write a query to output the start and end dates of projects listed by the number of days it took to complete the project in ascending order. If there is more than one project that have the same number of completion days, then order by the start date of the project.

Sample Input

Sample Output

2015-10-28 2015-10-29
2015-10-30 2015-10-31
2015-10-13 2015-10-15
2015-10-01 2015-10-04


Explanation

The example describes following four projects:

  • Project 1: Tasks 1, 2 and 3 are completed on consecutive days, so these are part of the project. Thus start date of project is 2015-10-01 and end date is 2015-10-04, so it took 3 days to complete the project.
  • Project 2: Tasks 4 and 5 are completed on consecutive days, so these are part of the project. Thus, the start date of project is 2015-10-13 and end date is 2015-10-15, so it took 2 days to complete the project.
  • Project 3: Only task 6 is part of the project. Thus, the start date of project is 2015-10-28 and end date is 2015-10-29, so it took 1 day to complete the project.
  • Project 4: Only task 7 is part of the project. Thus, the start date of project is 2015-10-30 and end date is 2015-10-31, so it took 1 day to complete the project.

 

Answer :

 

select *
from(
    select MIN(val) as startdate, MAX(val) as enddate
    from(
        (select ROW_NUMBER() over(order by (select End_Date)) as ID, End_Date as val
        from Projects
        where End_Date not in (select Start_Date
        from Projects)

        union all

        select ROW_NUMBER() over(order by (select Start_Date)) as ID, Start_Date as val
        from Projects
        where Start_Date not in (select End_Date
        from Projects))
         ) Y
    group by ID
) Z
order by datediff(dd,startdate,enddate), startdate
반응형
반응형

파이썬에서 사용하는 함수 매개변수 종류에 대해 작성

 

파이썬에서는 아래 5가지 종류의 함수 매개변수를 선언해서 사용할 수 있다.

1. default arguments

2. keyword arguments

3. positional arguments

4. arbitrary positional arguments

5. arbitrary keyword arguments

 

1. default arguments

  • 기본 매개변수는 함수가 정의되는 동안 제공된는 값이다.
  • "=" 기호를 사용해 매개변수의 기본값을 설정한다.
  • 기본 매개변수는 함수 호출 동안 선택적으로 사용된다.
  • 함수 호출 시 기본 매개변수에 값을 제공하면 기본 매개변수에 덮어 씌여진다.
  • 함수는 기본 매개변수를 원하는 만큼 가질 수 있다. (갯수 제한 없음)
  • 기본값 설정이 필수적이지 않다.

예시)

def add(a, b=5, c=10):
	return (a+b+c)

위 예시는 b,c가 기본 매개변수로 설정되어 있는 것을 보여준다.

아래 함수 호출 예시를 참고

print(add(3)) #return 18 a = 3, b = 5, c = 10
print(add(3,4)) #return 17 a = 3, b = 4, c = 10
print(add(2,3,4)) #return 9 a = 2, b = 3, c =4

 

2. Keyword Arguments

  • key = value 형식으로 사용하는 매개변수
  • 함수에 정의된 매개변수 순서를 따르지 않아도 값이 통과된다.
  • 키워드 매개변수는 함수에 정의 된 매개변수랑 일치해야한다.
  • 함수 호출시 사용되는 매개변수 타입 중 하나이다.

예시)

def add(a,b=5,c=10):
    return (a+b+c)

위와 같이 함수를 선언한다.

아래 예시와 같이 함수 호출시 매개변수를 key=value 로 사용하는 것을 keyword arguments 라 한다.

정의된 매개변수 순서를 지키지 않고 매개변수 키 값만 알맞게 설정하여 호출 가능하다.

print (add(b=10,c=15,a=20)) #return 45
print (add(a=10)) #return 25

 

3. Positional Arguments

  • 위치 매개변수 함수 호출 시 매개변수 위치에 값을 대입하여 호출하는 것을 의미한다.

예시)

def add(a,b,c):
    return (a+b+c)
    
print (add(10,20,30)) #return 60
print (add(10,c=30,b=20)) #return 60

위 첫번째 print 문과 같이 매개변수 위치에 값을 설정하여 호출 가능하다.

두번째 print 문처럼 keyword 매개변수와 섞어서 사용이 가능하다.

 

위 세가지 매개변수 사용에 대해 주의할 점!

 

#1. default 매개변수는 non-defualt 매개변수보다 앞에 선언할 수 없다.
def add(a=5,b,c):
    return (a+b+c)
#Output:SyntaxError: non-default argument follows default argument

#2. keyword 매개변수는 positional 매개변수보다 앞에 선언할 수 없다.
def add(a,b,c):
    return (a+b+c)
print (add(a=10,3,4))
#Output:SyntaxError: positional argument follows keyword argument

#3. 선언되지 않은 keyword 매개변수는 사용불가
def add(a,b,c):
    return (a+b+c)
print (add(a=10,b1=5,c=12))
#Output:TypeError: add() got an unexpected keyword argument 'b1'

#4. 중복된 keyword 매개변수 사용 불가
def add(a,b,c):
    return (a+b+c)
print (add(a=10,b=5,b=10,c=12))
#Output:SyntaxError: keyword argument repeated

 

4. arbitrary positional arguments

  • 매개변수 앞에 *를 사용하여 선언한 매개변수
  • 매개변수 선언을 가변적으로 설정할 때 사용한다.
  • 매개변수를 list 타입과 동일하게 사용

예시)

def add(*b):
    result=0
    for i in b:
         result=result+i
    return result

print (add(1,2,3,4,5)) #return 15
print (add(10,20)) #return 30

위 예시처럼 add 함수에 매개변수를 가변적으로 설정하여 호출이 가능하다

 

5. arbitrary keyword arguments

  • 매개변수 앞에 **를 사용하여 선언한 매개변수
  • 4번과 같이 매개변수를 가변적으로 설정할 수 있고 key:value 매개변수를 dictionary 타입과 동일하게 사용

예시)

def fn(**a):
    for i in a.items():
        print (i)
fn(numbers=5,colors="blue",fruits="apple")
'''
return
('numbers', 5)
('colors', 'blue')
('fruits', 'apple')
'''

 

참고 사이트 : https://levelup.gitconnected.com/5-types-of-arguments-in-python-function-definition-e0e2a2cafd29

반응형

'프로그래밍 > Python' 카테고리의 다른 글

[Python]sqlalchemy 사용법  (0) 2022.12.07
[Python] flask_restful fields  (0) 2021.10.08
Single Linked list 구현  (0) 2018.03.22
창원시 버스 API 사용하기  (1) 2016.02.22
반응형

SP명세서 쿼리.sql
0.00MB
테이블명세서쿼리.sql
0.04MB

 

쿼리 바리로기로 등록하면 편한 쿼리

--단축키 쿼리
/*
도구 > 옵션 > 환경 > 키보드 > 쿼리 바로 가기
*/
--ctrl+3 : stored procedure, function 내용 보기
sp_helptext test_procedure

--ctrl+4 : 해당 문자열을 포함하는 프로시저 찾기
SELECT DISTINCT A.NAME FROM dbo.SYSOBJECTS AS A INNER JOIN dbo.SYSCOMMENTS AS B ON A.ID = B.ID WHERE A.TYPE = 'P' AND B.TEXT LIKE 

--ctrl+5 : 해당 컬럼명을 사용하는 테이블 찾기
SELECT T.name AS table_name, C.name AS column_name FROM sys.tables AS T INNER JOIN sys.columns AS C ON T.object_id = C.object_id WHERE C.name =
반응형

'Database > SQL Server' 카테고리의 다른 글

SQL 매월 마지막일 출력  (0) 2019.06.20
트랜잭션 격리수준과 with(nolock) 힌트  (0) 2019.04.29
B-TREE 구조  (0) 2018.11.15
SQL 실행계획  (0) 2018.11.12
[MSSQL] Table Column 속성 변경  (0) 2018.06.25
반응형

앙상블 기법

  • 단일 머신러닝 모델을 연결하여 더 효율적인 모델을 만드는 기법
  • 앙상블의 아이디어는 많은 시행의 결과가 이성적으로 합리적인 결과를 기대함
  • 크게 Bagging과 Boosting 방법으로 나눈다.

Bagging(bootstrap agrregating)

  • 샘플을 여러번 뽑아(Bootstrap) 각 모델을 학습시켜 결과물을 집계(Aggregration)
  • Train데이터에서 임의로 여러개의 샘플을 추출하여 모델 학습하는 과정을 반복하여 개별 학습모델을 생성
  • 각 모델은 서로 독립적
  • 각 모델별로 Test 데이터를 예측한 값으로 투표(Voting) 또는 평균(Regression)을 통해 최종 예측
  • 이러한 Bagging 기법을 이용한 모델이 Random Forest

출처 : https://icim.nims.re.kr/post/easyMath/838

Boosting

  • 잘못 분류된 샘플에 더 많은 가중치를 주어 학습
  • Bagging과 달리 모델 결과에 가중치를 주어 다음 모델에 영향을 끼침(Sequential 하다)
  • 잘못 분류된 데이터에 집중하여 새로운 분류 규칙을 만드는 단계를 반복

출처: Medium (Boosting and Bagging explained with examples)

  • Boosting 모델
    1. Adaboost
    2. XGBoost
    3. LightGBM
    4. CatBoost

Bagging과 Boosting의 장단점

  1. Boosting은 Bagging의 비해 오류가 적다.
  2. Boosting은 Overfitting 될 가능성이 있으며 속도가 느리다

 

출처 : https://bkshin.tistory.com/entry/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-11-%EC%95%99%EC%83%81%EB%B8%94-%ED%95%99%EC%8A%B5-Ensemble-Learning-%EB%B0%B0%EA%B9%85Bagging%EA%B3%BC-%EB%B6%80%EC%8A%A4%ED%8C%85Boosting

 

머신러닝 - 11. 앙상블 학습 (Ensemble Learning): 배깅(Bagging)과 부스팅(Boosting)

앙상블(Ensemble) 앙상블은 조화 또는 통일을 의미합니다. 어떤 데이터의 값을 예측한다고 할 때, 하나의 모델을 활용합니다. 하지만 여러 개의 모델을 조화롭게 학습시켜 그 모델들의 예측 결과들

bkshin.tistory.com

https://icim.nims.re.kr/post/easyMath/838

 

앙상블의 Bagging과 Boosting | 알기 쉬운 산업수학 | 산업수학혁신센터

 

icim.nims.re.kr

 

반응형
반응형

시계열 분석에 대한 내용 정리

 

시계열 데이터란?

  • 시간에 따라 순차적으로 저장된 데이터
  • 정상 시계열 : 시계열의 평균, 분산, 공분산이 일정하고 일정한 추세가 없으면 정상 시계열
  • 비정상 시계열 : 정상 시계열에 만족하지 못한 시계열, 주로 현실에서 수집한 데이터들이 이에 해당
  • 시계열 예시 : 주가, 상품 판매 추세, 날씨
  • 비정상 시계열을 정상 시계열 형태로 가공하여 모델 학습

 

시계열 분석 방법

  1. 추세(Trend) : 시간에 따른 움직임
  2. 계절성(Seasonality) : 계절 변화가 표현
  3. 주기(Cyclical) : 계정성 이외의 기간적인 데이터
  4. 불규칙(Irregular) : 패턴이 없는 불규칙적인 데이터

 

시계열 데이터 모델

  • ARMA(Auto-regressive Moving Average)
    • AR(자기회귀모형)과 MA(이동평균모형)이 결합된 모델
  • ARIMA : 자기회귀누적이동평균 모델
    • 비정상적 시계열 자료에 대한 분석 방법
    • 4단계로 구분 : 1. 모형식별 > 2. 모수 추정 > 3. 모델 적합 > 4. 예측
    • SARIMA(Seasonal ARIMA) : 비정상 시계열 자료에 계절효과가 추가
  • ES(Exponential Smoothing) : 지수 창함수를 사용하여 시계열 데이터를 완만하게 만드는 방법
    • Moving Average방법과 유사
    • N개에 포함된 모든 데이터에 각각 다른 비중을 부여하여 하지만 최근 실적에 가중치를 더 두고 산술평균을 계산하여 다음을 예측
  • LSTM(Long Short-Term Memory) : 공부 후 작성 예정

 

반응형
반응형

8가지의 머신러닝 모델 정확성 증가 방법

우리는 100% 완벽한 데이터를 가지고 모델을 생성할 수 없기 때문에 오차가 있다고 가정한 내에서 가장 높은 성능을 나타내는 모델을 구현하기 위해 노력한다. 모델 성능을 높이기 위해서는 EDA(탐색적 데이터 분석) 가 필수적이다.

 

  1. 학습 데이터 추가
    • 데이터가 너무 적으면 모델 성능이 잘 나오지 않는다.
    • 하지만 너무 많은 데이터로 학습할 시 Overfitting(과적합)문제가 발생할 수 도 있다.
  2. 결측치 및 이상치 제거
    • 결측치가 있으면 학습이 안될 수 있다.
    • 이상치는 학습에 영향을 많이 끼친다. 꼭 제거할 필요는 없고 이상치 확인 후 처리 방법을 고민한다.
  3. Feature Engineering
    • 존재하는 데이터로부터 데이터 변환 또는 생성하는 과정.
    • Feature Transformation : 정규화, Log변환, 차원축소 등..
    • Feature Creation : 매일 판매량 데이터에서 각 판매일에 대한 휴일여부를 추가
  4. Feature Selection
    • 학습에 필요한 Feature를 선택하는 과정.
    • https://blackas119.tistory.com/71?category=779040 참고
  5. Multiple algorithms
    • 좋은 성능을 나타내는 알고리즘을 선택하는 것은 실제로 하는게 어려운 일입니다.
    • 따라서 여러가지 알고리즘에 대해 적용하고 성능을 확인해봐야 한다.
  6. Algorithm Tuning
    • 알고리즘 사용시 여러가지의 매개변수를 선택하게 된다. 적절한 매개변수를 통해 정확한 성능을 나타내도록 한다.
    • 예를 들어, K-means 알고리즘에서 적절한 K 를 찾는 과정
  7. Ensemble Method
  8. Cross Validation

참고 사이트 : https://www.analyticsvidhya.com/blog/2015/12/improve-machine-learning-results/

 

How To Increase Accuracy Of Machine Learning Model

8 proven ways for improving machine learning model accuracy which includes cross validation, engineering, ensemble & outliers in data science.

www.analyticsvidhya.com

 

반응형
반응형

머신러닝 또는 딥러닝 시 고려해야 할 사항 중 데이터 전처리 내 Feature 선택에 대한 방법들

 

Feature란?

모델 학습 시 사용되는 입력 값. 즉 일반적으로 말하는 머신러닝 또는 딥러닝에서 사용되는 '독립변수들'이라고 보면 된다.

*이 글에서는 Feature라는 단어 대신 독립변수라는 단어를 사용.

 

학습시 어떤 독립변수를 사용할 지에 따라 학습 시간, 성능에 많은 영향을 끼친다.

크게 독립변수들은 숫자형과 문자형 두가지로 분류한다.

 

python3 pandas dataframe 예시 코드

import pandas as pd
sample = pd.read_csv(...) #샘플 데이터 파일을 읽는다.

print(sample.dtypes[sample.dtypes == "object"].index) #문자형 독립변수들
print(sample.dtypes[sample.dtypes != "object"].index) #숫자형 독립변수들
print(sample.info()) # 각 컬럼의 데이터 타입을 알 수 있다

 

변수 선택 방법을 통해 불필요한 독립변수들을 제거하는 방법

  1. wrapper방법 : 독립변수를 여러개의 하위집합으로 만들어 각각 모델을 학습 및 평가하여 가장 좋은 성능을 선택
    적용 예시 : https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.RFE.html
  2. filter방법 : 각 독립변수들과 종속변수에 대한 상관관계를 평가하여 선택 (지도학습에서 사용)

*종속변수는 학습시 사용되는 정답값

 

  • Feature Selection: Select a subset of input features from the dataset.
    • 비지도 학습 : 종속변수를 사용하지 않는다 (e.g. remove redundant variables).
      • 독립변수들 간의 상관관계를 이용하여 선택
    • 지도학습 : 종속변수를 사용한다. (e.g. remove irrelevant variables).
      • Wrapper: 독립변수들의 하위집합 중 성능이 좋을 것을 찾는다.
        • RFE
      • Filter: 종속변수와 독립변수의 관계를 기반하여 독립변수 하위 집합을 선택한다.
        • Statistical Methods
        • Feature Importance Methods
      • Intrinsic(Embedded): 학습 중 자동적으로 알고리즘으로 독립변수를 선택한다.
        • Decision Trees
        • Lasso
        • Redge
        • Elastic Net
  • Dimensionality Reduction: 입력데이터를 저차원 공간에 반영(?)
    Dimensionality Reduction의 경우 추가 공부하여 이후 다시 작성할 예정...

위 지도학습 내 Intrinsic(Embedded) 방법에 대해 다른 포스터에서 다시 작성할 예정

 

아래 사진은 독립변수들의 데이터 타입을 나타내는 사진 예시이다.

 

 

 

결론적으로 Feature selection에 대한 정답은 없다. 처음에는 휴리스틱하게 판단한 정보를 가지고 테스트를 하면서 점차적으로 성능을 끌어올리는게 현재까지는 최선의 방법인 것으로 판단된다.

 

참고 사이트 : https://machinelearningmastery.com/feature-selection-with-real-and-categorical-data/

반응형

+ Recent posts