Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Pre&Post Processors
- KDN-Minerva 프로젝트에서 전처리 및 후처리는 효율성과 검증성을 고려하여 Pandas를 사용하여 개발하였습니다. 모든 프로세서는 Argument를 받아 동작하여 -h 옵션을 입력하여 상세 도움말을 보는게 가능합니다.
- 모든 전후처리 프로세서는 CSV파일을 기반으로 동작함을 전제합니다. JSON, Avro 등 다른 형식의 파일들은 전혀 호환되지 않음을 명심하세요.
- ## Discretization(이산화)
- ### 개요
- 이산화의 의미는 도메인별로 다른 의미로 쓰이지만 여기서는 데이터마이닝 관점에서의 이산화(연속형 변수를 범주형으로 변화)를 기술합니다. 이산화 방법은 여러가지가 있지만 여기서는 심플하게 Equal-width 이산화 방법을 사용합니다.
- ### 실행 결과
- - Input Data
- ```
- id,employee_id,user_type,username,password,score
- 1,,SUPER ADMIN,admin,admin,60
- 2,1,NORMAL,robin,robin,70
- 3,2,ADMIN,taylor,taylor,80
- 4,3,ADMIN,vivian,vivian,10
- 5,4,NORMAL,harry,harry,30
- 6,7,ADMIN,melinda,melinda,50
- 7,8,NORMAL,harley,harley,40
- ```
- - Command
- ```python discretization.py --sep="," --column="score"```
- - Output Data
- ```
- lower,upper,count
- 66.0, 80.0,2
- 38.0, 52.0,2
- 52.0, 66.0,1
- 24.0, 38.0,1
- 9.93, 24.0,1
- ```
- ## Encoding(인코딩)
- ### 개요
- 인코딩을 위한 전처리 프로세서입니다. 별다른 설명이 필요없으므로 -h 옵션을 통해 help문서를 참조하세요
- ## Indexing(인덱싱)
- ### 개요
- 전체 컬럼들중 선택된 몇개의 컬럼들만으로 구성된 레코드들을 가지고 옵니다.
- ### 실행 결과
- - Input Data
- ```
- id,employee_id,user_type,username,password,score
- 1,,SUPER ADMIN,admin,admin,60
- 2,1,NORMAL,robin,robin,70
- 3,2,ADMIN,taylor,taylor,80
- 4,3,ADMIN,vivian,vivian,10
- 5,4,NORMAL,harry,harry,30
- 6,7,ADMIN,melinda,melinda,50
- 7,8,NORMAL,harley,harley,40
- ```
- - Command
- ```python indexing.py --sep="," --columns="id,username"```
- - Output Data
- ```
- id,username
- 1,admin
- 2,robin
- 3,taylor
- 4,vivian
- 5,harry
- 6,melinda
- 7,harley
- ```
- ## Normalization(정규화)
- ### 개요
- 데이터를 0~1 사이의 값으로 변환시켜주는 프로세서입니다. 정규화 방법은 Min-Max Normalization 방법을 사용하며 정규화된 값은 ```(X - X의 최소값) / (X의 최대값 - X의 최소값)``` 을 사용하게 됩니다.
- ### 실행 결과
- - Input Data
- ```
- id,employee_id,user_type,username,password,score
- 1,,SUPER ADMIN,admin,admin,60
- 2,1,NORMAL,robin,robin,70
- 3,2,ADMIN,taylor,taylor,80
- 4,3,ADMIN,vivian,vivian,10
- 5,4,NORMAL,harry,harry,30
- 6,7,ADMIN,melinda,melinda,50
- 7,8,NORMAL,harley,harley,40
- ```
- - Command
- ```python normalization.py --sep="," --columns="score"```
- - Output Data
- ```
- id,employee_id,user_type,username,password,score
- 1,,SUPER ADMIN,admin,admin,0.7142857142857143
- 2,1.0,NORMAL,robin,robin,0.8571428571428571
- 3,2.0,ADMIN,taylor,taylor,1.0
- 4,3.0,ADMIN,vivian,vivian,0.0
- 5,4.0,NORMAL,harry,harry,0.2857142857142857
- 6,7.0,ADMIN,melinda,melinda,0.5714285714285714
- 7,8.0,NORMAL,harley,harley,0.42857142857142855
- ```
- ## Remove Duplicates(중복제거)
- ### 개요
- 데이터에서 중복된 레코드를 제거하게 됩니다. 중복이 되는 기준이 되는 컬럼을 지정할 수 있습니다.
- ### 실행 결과
- - Input Data
- ```
- id,employee_id,user_type,username,password,score
- 1,,SUPER ADMIN,admin,admin,60
- 2,1,NORMAL,robin,robin,70
- 3,2,ADMIN,taylor,taylor,80
- 4,3,ADMIN,vivian,vivian,10
- 5,4,NORMAL,harry,harry,30
- 6,7,ADMIN,melinda,melinda,50
- 7,8,NORMAL,harley,harley,40
- ```
- - Command
- ```python remove_duplicates.py --sep="," --subset="user_type"```
- - Output Data
- ```
- id,employee_id,user_type,username,password,score
- 1,,SUPER ADMIN,admin,admin,60
- 2,1,NORMAL,robin,robin,70
- 3,2,ADMIN,taylor,taylor,80
- ```
- ## Sampling(표본 추출)
- ### 개요
- 데이터에서 샘플레코드들을 뽑아내기 위해 사용됩니다.
- ### 실행 결과
- - Input Data
- ```
- id,employee_id,user_type,username,password,score
- 1,,SUPER ADMIN,admin,admin,60
- 2,1,NORMAL,robin,robin,70
- 3,2,ADMIN,taylor,taylor,80
- 4,3,ADMIN,vivian,vivian,10
- 5,4,NORMAL,harry,harry,30
- 6,7,ADMIN,melinda,melinda,50
- 7,8,NORMAL,harley,harley,40
- ```
- - Command
- ```python sampling.py --n=3 --sep=","```
- - Output Data
- ```
- id,employee_id,user_type,username,password,score
- 4,3,ADMIN,vivian,vivian,10
- 1,,SUPER ADMIN,admin,admin,60
- 3,2,ADMIN,taylor,taylor,80
- ```
- ## Smoothing(평활화)
- ### 개요
- 데이터가 가지고 있는 노이즈를 제거하기 위해 사용됩니다. 주로 시계열 데이터에 적합합니다. 평활화에는 다양한 방법이 연구되어 사용되고 있지만 본 프로세서는 심플하게 Moving-Average Smoothing만을 수행합니다.
- ### 실행 결과
- - Input Data
- ```
- 기준일자,지역,발전소,발전량(KWh)
- 2016-01-01 00:00:00,일산,수원환경사업소태양광,2370
- 2016-01-01 00:00:00,당진,당진자재창고태양광,1320
- 2016-01-01 00:00:00,호남,황금물류센터태양광,3476
- 2016-01-01 00:00:00,호남,광양항태양광,4116
- 2016-01-01 00:00:00,울산,울산태양광,1772
- 2016-01-01 00:00:00,당진,당진매립장태양광,1791
- 2016-01-01 00:00:00,동해,동해태양광,2321
- 2016-01-01 00:00:00,당진,당진취수로태양광,1809
- 2016-01-01 00:00:00,당진,당진태양광,1477
- 2016-01-02 00:00:00,당진,당진태양광,1685
- 2016-01-02 00:00:00,당진,당진취수로태양광,1917
- 2016-01-02 00:00:00,당진,당진자재창고태양광,1446
- 2016-01-02 00:00:00,동해,동해태양광,2198
- 2016-01-02 00:00:00,일산,수원환경사업소태양광,2885
- 2016-01-02 00:00:00,울산,울산태양광,973
- 2016-01-02 00:00:00,당진,당진매립장태양광,1818
- 2016-01-02 00:00:00,호남,황금물류센터태양광,2030
- ```
- - Command
- ```python smoothing.py --sep="," --time_column="기준일자" --columns="발전량(KWh)"```
- - Output Data
- ```
- 기준일자,발전량(KWh)
- 2016-01-01 00:00:00,
- 2016-01-01 00:00:00,
- 2016-01-01 00:00:00,
- 2016-01-01 00:00:00,
- 2016-01-01 00:00:00,2610.8
- 2016-01-01 00:00:00,2495.0
- 2016-01-01 00:00:00,2695.2
- 2016-01-01 00:00:00,2361.8
- 2016-01-01 00:00:00,1834.0
- 2016-01-02 00:00:00,1816.6
- 2016-01-02 00:00:00,1841.8
- 2016-01-02 00:00:00,1666.8
- 2016-01-02 00:00:00,1744.6
- 2016-01-02 00:00:00,2026.2
- 2016-01-02 00:00:00,1883.8
- 2016-01-02 00:00:00,1864.0
- 2016-01-02 00:00:00,1980.8
- ```
- ## Standardization(표준화)
- ### 개요
- 기존 변수에 범위를 정규 분포로 변환할 경우 사용됩니다. 표준화된 값은 ```(X - X의평균값) / (X의 표준편차)``` 을 사용하게 됩니다.
- ### 실행 결과
- - Input Data
- ```
- id,employee_id,user_type,username,password,score
- 1,,SUPER ADMIN,admin,admin,60
- 2,1,NORMAL,robin,robin,70
- 3,2,ADMIN,taylor,taylor,80
- 4,3,ADMIN,vivian,vivian,10
- 5,4,NORMAL,harry,harry,30
- 6,7,ADMIN,melinda,melinda,50
- 7,8,NORMAL,harley,harley,40
- ```
- - Command
- ```python standardization.py --sep="," --columns="score"```
- - Output Data
- ```
- id,employee_id,user_type,username,password,score
- 1,,SUPER ADMIN,admin,admin,0.47415646781615983
- 2,1.0,NORMAL,robin,robin,0.8890433771552996
- 3,2.0,ADMIN,taylor,taylor,1.3039302864944393
- 4,3.0,ADMIN,vivian,vivian,-1.600278078879539
- 5,4.0,NORMAL,harry,harry,-0.7705042602012595
- 6,7.0,ADMIN,melinda,melinda,0.05926955847702005
- 7,8.0,NORMAL,harley,harley,-0.3556173508621197
- ```
- ## Treat Anomaly(이상값 처리)
- ### 개요
- 상한임계치와 하한임계치를 설정하여 그 이상에 해당하는 값을 제거합니다.
- ### 실행 결과
- - Input Data
- ```
- id,employee_id,user_type,username,password,score
- 1,,SUPER ADMIN,admin,admin,60
- 2,1,NORMAL,robin,robin,70
- 3,2,ADMIN,taylor,taylor,80
- 4,3,ADMIN,vivian,vivian,10
- 5,4,NORMAL,harry,harry,30
- 6,7,ADMIN,melinda,melinda,50
- 7,8,NORMAL,harley,harley,40
- ```
- - Command
- ```python treat_anomaly.py --sep="," --columns="score" --uppers=70 --lowers=30```
- - Output Data
- ```
- id,employee_id,user_type,username,password,score
- 1,,SUPER ADMIN,admin,admin,60
- 2,1.0,NORMAL,robin,robin,
- 3,2.0,ADMIN,taylor,taylor,
- 4,3.0,ADMIN,vivian,vivian,
- 5,4.0,NORMAL,harry,harry,
- 6,7.0,ADMIN,melinda,melinda,50
- 7,8.0,NORMAL,harley,harley,40
- ```
- ## Treat Missing Value(결측값 처리)
- ### 개요
- 결측치를 처리하는 프로세서입니다.
- ### 실행 결과
- - Input Data
- ```
- id,employee_id,user_type,username,password,score
- 1,,SUPER ADMIN,admin,admin,60
- 2,1,NORMAL,robin,robin,70
- 3,2,ADMIN,taylor,taylor,80
- 4,3,ADMIN,vivian,vivian,10
- 5,4,NORMAL,harry,harry,30
- 6,7,ADMIN,melinda,melinda,50
- 7,8,NORMAL,harley,harley,40
- ```
- - Command
- ```python treat_missing_val.py --sep="," --fill="NaN"```
- - Output Data
- ```
- id,employee_id,user_type,username,password,score
- 1,NaN,SUPER ADMIN,admin,admin,60
- 2,1.0,NORMAL,robin,robin,70
- 3,2.0,ADMIN,taylor,taylor,80
- 4,3.0,ADMIN,vivian,vivian,10
- 5,4.0,NORMAL,harry,harry,30
- 6,7.0,ADMIN,melinda,melinda,50
- 7,8.0,NORMAL,harley,harley,40
- ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement