전체 글 705

소프트웨어 설계 원리

추상화(abstraction) - 상세한 수준의 구현 고민이 아닌, 상위수준에서 제품의 구현을 먼저 생각하는것(필수적인 것만). - data 추상화, control 추상화, procedure 추상화로 나뉨. - 시스템을 분할하여 컴포넌트가 어떻게 상호작용 하는지, 컴포넌트의 구현 방법을 생략하고, 외부 인터페이스에 초점을 맞추는 것이 추상화의 개념 - ex) print()라는 함수가 있을 때, print함수의 내부 구조 및 내부적인 동작과정을 생각하지 않고, print()함수가 "출력함수이다" 라고 이해하는 것. 정보은닉(information hiding) - 각 모듈의 내부 내용을 감추고, 인터페이스를 통해서 메세지를 전달할 수 있도록 하는 개념 - 내부 정보 접근을 제한하여 한 모듈이 다른 모듈의 구..

순차자료구조, 연결자료구조

순차자료구조 연결자료구조 메모리 저장 방식 메모리 저장 시작위치부터 빈자리 없이 자료를 순서대로 연속적으로 저장하는 방식 메모리에 저장된 물리적 위치나 순서에 상관없이 링크에 의해 논리적인 순서를 표현하는 방식 논리/물리 순서 일치 여부 논리적인 순서와 물리적인 순서가 일치하는 방식 논리적인 순서와 물리적인 순서가 일치하지 않음 삽입, 삭제 삽입, 삭제 시 연속적인 물리주소를 유지하기 위해 원소들을 이동, 오버헤드 발생 삽입 삭제되어도 물리적인 순서는 변경되지 않음 탐색 데이터 탐색시 즉각적으로 접근 가능 데이터 탐색시 O(n)의 복잡도를 가짐 프로그램기법 배열(동적배열, 정적배열) 포인터

역공학(reverse engineering)

역공학의 정의 이미 만들어진 시스템을 역으로 추적하여 처음의 문서나 설계기법 등의 자료를 얻어 내는 일. 시스템을 이해하여 수정하는 소프트웨어 유지보수 단계에 수행하는 일련의 활동. 소프트웨어 생명주기의 마지막 단계에서 얻어지는 프로그램 또는 문서 등을 이용하여 생명주기 초기 단계의 산출물에 해당하는 정보 또는 문서를 만들어 내는일. 리버스 엔지니어링 input : 원시코드, 목적코드, 라이브러리, 문서 output : 구조도, 자료 흐름도, 제어 흐름 그래프, 개체 관계도 역공학이 필요한 경우 - 기 가동중인 시스템의 유지보수가 어려운 경우 - 변경이 빈번하여 시스템 효율이 저하된 경우 - 파일 시스템으로 개발된 업무를 관계형 데이터베이스로 재구축 하려는 경우 - 기본 메인 프레임을 다운 사이징 하는 ..

소프트웨어 재사용

소프트웨어 재사용 - 기존의 소프트웨어 또는 지식을 이용하여 새로운 소프트웨어를 구축하는 일 - 설계, 요구명세, 검사, 아키텍쳐 등도 포함. 소프트웨어 재사용의 목적 - 신뢰성 : 기능, 안정, 속도 등의 사전 상능 검증 - 확장성 : 검증된 기능 기반으로 upgrade 용이 - 생산성 : 비용, 시간, 위험 등 전체적 개발 프로세스 향상 소프트웨어 재사용의 대상 1. 일반적 지식 - 환경정보 : 교육 및 활용을 통해 얻어진 지식 - 외부지식 : 개발 및 특정분야의 참여를 통해 얻은 지식 2. 설계 정보 - 기본설계 - 상세설계 3. 데이터정보 - 시스템 데이터 - 시험사례 4. 프로그램 코드 - 모듈 - 프로그램 소프트웨어 재사용의 원칙 1. 범용성 : 특정 응용분야만이 아닌 일반적으로 활용될..

csv 데이터를 특정 형식으로 read하기 (pandas read_csv, usecols, dtype)

read_csv 판다스의 모듈 중, csv파일을 읽어 데이터프레임 타입으로 반환하는 read_csv라는 함수가 있다. data_frame = pd.read_csv() 함수의 파라미터 중 데이터의 타입을 지정하여 받을 수 있는 것이 있어서 이를 살펴본다 usecols usecols파라미터는 csv파일에서 사용할 컬럼을 지정한다. data_type = {"f_1":'float16', "f_2":'float16'} df = pd.read_csv(folder_path + "/train.csv", usecols = data_types_dict.keys(), ) dtype dtype 파라미터는 컬럼이름을 key로, 데이터타입을 value로 하는 dictionary 객체를 넣는다. data_type = {"f_1":..

소프트웨어 개발 방법론 (구조적방법론 정보공학적방법론 객체지향방법론 CBD방법론)

1. 구조적 방법론 - 기능중심의 방법론 - 업무활동 중심의 방법론 - 프로그램 로직 중심 - ex) 파일을 불러오는 프로그램을 만들때 -> 파일을 가져오는 기능을 중심으로 프로그램 구현 2. 정보공학 방법론 - 데이터 중심의 방법론 - ex) 파일을 불러오는 프로그램을 만들때 -> ppt, excel, 등 데이터의 타입별로 프로그램 구현 3. 객체지향 방법론 - 객체, 클래스간의 관계를 식별하여 구현 - 프로그램 단위는 객체 - 주요 지원언어 : c++, java 4. CBD방법론 - 컴포넌트 중심의 개발 방법론 - 인터페이스 중시 * 인터페이스 : 사용자와 시스템가 맞닿는, 혹은 그 둘을 연결시켜주는 면으로써, 두개의 다른 데이터 타입을 연결시켜주는 것 - 객체방법론의 진화 - 주요 산출물 : 유스..

소프트웨어 개발 생명주기

1. 폭포수 모델 - 단계적 개발 방법론 2. 프로토타이핑 모델 - 요구분석 단계에서 나온 주요 요구사항을 바탕으로 프로토타입 설계 3. V모델 - 프로젝트 적용 관리 용이하다 - 프로젝터의 검증 및 확인을 강조한 모델. - 개발활동과 테스트 활동이 어떻게 연관되어 있는지 잘 설명, 전체 개발 주기동안 개별 활동과 이에 해당하는 테스트 활동이 병행 4. VP모델 - v모델에 프로토타이핑 기법을 추가, 프로젝트의 불확실성 요소, 리스크를 줄일 수 있음 5. 점증적 모델 - 고객이 원하는 날짜에 모든 기능을 가진 시스템 구현이 어려울때, 핵심 부분만 먼저 개발하여 동작하게 한 후, 나머지를 구현하는 방식 - 몇번의 확장을 통해 개발됨. - 각 단계의 버전은 몇 가지 제한된 기능에 한하여 동작, 추후 시스템 ..

소프트웨어 공학의 4가지 중요요소

1. 사람 - 사람과 조직에 의해 움직이므로 사람에 대한 의존성이 크다 - 다른 공학보다 다양한 이슈가 생기므로 소프트웨어 개발을 일목요연하게 정리하는것은 불가능 2. 도구 - 어떤일을 수행할 때 일관성을 목적으로 사용하는 방법이나 자동화 반자동화 시켜 놓는것을 말함 - 모델링, 형상관리, 요구관리 등 다양한 도구 존재 3. 방법 - 계획수립, 추정, 소프트웨어분석, 자료구조, 프로그램구조, 알고리즘, 코딩, 테스팅 등으로 구성 - 소프트웨어 품질에 대한 평가기준 도입 4. 절차 - 방법과 도구를 결합하여 소프트웨어를 합리적으로 적시에 개발할 수 있도록 하는것 - 진행을 평가해주는 마일스톤 등의 순서를 정의

함수 파라미터를 변수로 묶어서 넣기 (*args, **kwargs)

함수의 파라미터를 변수로 만들어주는 것 *args, **kwargs 함수의 파라미터 값이 매우 많은 경우가 있다. (catboost의 예) 이 경우 함수의 파라미터값을 줄줄 써주어야 하는 불편함이 있다. 이를 방지하기 위해 변수에 함수 파라미터를 넣고, 해당 변수만 함수의 input값으로 주면 코드를 깔끔하게 할 수 있다. 이를 가능하게 해주는 것이 *args와 **kwargs이다. 먼저 파라미터 a,b,c가 있는 다음과 같은 함수가 있다. def func(a,b,c): print("a : ",a) print("b : ",b) print("c : ",c) 이를 *args와 **kwargs *args 파라미터들을 튜플형태로 묶어준다. 파라미터 순서에 맞게 튜플 값들의 순서를 맞춰주어야 한다. input_a..

train_test_split 데이터 나누기

train_test_split from sklearn.model_selection import train_test_split 데이터셋을 나눠주는 train_test_split 에 대해서 알아본다. 옵션값 x_train, x_valid, y_train, y_valid = train_test_split(train_x, train_y, test_size=0.2, shuffle=True, stratify=train_y, random_state=42) 1. test_size : test 사이즈의 비율 2. shuffle : split하기 전 섞을것인지 3. stratify : class label의 비율을 맞춰서 split할것인지 4. random_state : 실행할 때 마다 똑같이 섞을것인지 다르게 섞을것인지..

파이썬 함수주석(Function Annotations), (->, : , __anotations__)

파이썬 Function Annotations 파이썬에서 함수를 구현할때, input과 output의 type을 주석으로서 명시해줄 수 있다. 다음과 같이 ":" 과 "->"를 하고 타입을 명시해준다. def f(a:str, b:int, c:bool)->list: 이는 a는 string타입, b는 int타입, c는 bool타입, 그리고 함수 리턴값은 list타입을 의미한다. 예시 1. code def f(a:str, b:int, c:bool)->list: print("a의 데이터타입은 string : ",a) print("b의 데이터타입은 int : ",b) print("c의 데이터타입은 bool : ",c) return [a,b,c] return_value = f("hello",10,True) print..

prophet cross_validation 사용법

cross_validation from fbprophet.diagnostics import cross_validation import fbprophet as Prophet model = Prophet.Prophet().fit(data) df_cv = cross_validation(model, initial='730 days', period='180 days',horizon = '365 days') 모델을 학습한 후 cross_validation으로 체크한다. 이때 parameter값들 initial, peroid, horizion의 의미를 정리한다. 공식문서 다음과 같이 정의 되어있다. This cross validation procedure can be done automatically for a ra..

mongodb 명령어

1. 용어 sql mongo db database database table collection row document column field 2. 특정 조건에 맞는 값 찾기 : db.collection.find({“column”:{“$parameter”:x”}}) parameter 설명 gt(e) 주어진 값 보다 큰값(같은 값) lt(e) 주어진 값 보다 작은값(같은 값) ne 주어진 값과 일치하지 않는 값 in 주어진 배열 안에 속하는 값 nin 주어진 배열안에 속하지 않는 값 3. 포함시킬 칼럼찾기 : db.collection.find({"column":a},{"column1":1,"column2":0}) 파라미터 설명 1 주어진 배열 안에 속하는 값 0 주어진 배열안에 속하지 않는 값 4. 정렬하..

DB/MONGODB 2021.08.10

파이썬 시간 datetime 클래스

함수 의미 timetype.strftime(“%Y%m%d”) time 타입의 객체를 “20210510” 형식으로 바꿈 timetype-timedelta(days=1) 하루 전으로 시간을 옮김 datetime.datetime.strptime(“2021-07-19”,”%Y%m%d”) 문자열을 time 타입으로 (2021-07-19 00:00:00) dateobj.date() 분단위 까지 있는 시간타입을 일단위까지 만들어줌 (2021-07-19 00:00:00 => 2021-07-19 ) dateobj.weekday() 날짜타입의 요일을 반환 (월요일:0, 화요일:1 ...일요일:6)

깃 명령어

1. 설정 명령어 설명 git config --list name, email 확인 git checkout master -f 강제로 특정 마스터로 이동 git branch -d issue1 브랜치 삭제 2. stash 명령어 설명 git stash 수정중인 파일을 저장(https://gmlwjd9405.github.io/2018/05/18/git-stash.html) git stash list stash목록을 확인한다 git stash apply [stash이름] (git stash apply stash@{2}) 해당 stash를 가져와서 적용한다 (이름없으면 가장 최근것) git stash drop [stash이름] 해당 stash를 삭제한다 (이름없으면 가장 최근것 삭제) git stash save M..

CLI/깃허브 2021.08.10

주식용어 정리(배당, 세금)

1. 용어 용어 뜻 exchange 거래소 stock dividend 주식배당 cash dividend 현금배당 split 주식분할(액면분할) stock quote 주식시세 global equity 글로벌 주식 free riding 주식을 매도 후 3일이 지나지 않은 상태에서(예수금으로 들어오지않은 금액으로) 다른 주식을 사고 바로 팔아버리는 행위 => 현금없이 거래하는것 => 몇회이상 반복시 90일 거래정지 market capitalization (market cap) 시가총액 par value 시장가 (시장에서 거래되는 가격) face value 액면가 (초기에 정한 가격) 2. 배당 2.1 현금배당 용어 뜻 ex-dividend date 배당락일: 배당에 따른 주가 하락이 발생한 날 => 배당 기준..

금융/주식 2021.08.10