The study area includes four wilderness areas located in the Roosevelt National Forest of northern Colorado. Each observation is a 30m x 30m patch. You are asked to predict an integer classification for the forest cover type(FCT).
The training set (15120 observations) contains both features and the Cover_Type. The test set contains only the features. You must predict the Cover_Type for every row in the test set (565892 observations).
Data Fields
Elevation - 미터 단위 고도
Aspect - 방위각의 종횡비 (위치)
Slope - 경사 기울기
Horizontal_Distance_To_Hydrology - 해수면까지의 수평거리
Vertical_Distance_To_Hydrology - 해수면까지의 수직거리
Horizontal_Distance_To_Roadways - 도로와의 수평 거리
Hillshade_9am (0 to 255 index) - 여름, 오전 9시 Hillshade
Hillshade_Noon (0 to 255 index) - 여름, 정오 Hillshade
Hillshade_3pm (0 to 255 index) - 여름, 오후 3시 Hillshade
Horizontal_Distance_To_Fire_Points - 산불 발화점까지 수평거리
library(ggplot2) # 시각화 코드 # install.packages("dplyr") # install.packages("tidyr") library(dplyr) # 데이터 가공 library(reshape) # 데이터 가공 <-- tidyr library(readr) # 파일 입출력
# ---- 훈련 검증용 데이터 분류 ---- set.seed(1234) idx = sample(1:nrow(pos_final_df), nrow(pos_final_df) * 0.7, replace = FALSE) train = pos_final_df[idx, ] test = pos_final_df[-idx, ]
Logistic Regression Model Develop
1 2 3 4 5 6 7 8 9 10 11
# --- 로지스틱 회귀 모형 개발 ---
start_time = Sys.time()
glm_model = step(glm(pos_binary ~ ., data = train[-1], family = binomial(link = "logit")), direction = "backward") # 후진소거법
End_time = Sys.time() difftime(End_time, start_time, units = "secs")
Step: AIC=2202.56
Logistic regression 안의 평가 기준
낮을 수록 좋다.
Step: AIC=2202.2 pos_binary ~ love + veri + just + size + dress + fit + will + back + like + tri + flatter + top + length + realli + shirt + materi
모형 성능 측정
1 2 3 4 5 6
# ---- 모형 성능 측정 ---- # install.packages("pROC") library(pROC) preds = predict(glm_model, newdata = test, type = "response") roc_glm = roc(test$pos_binary, preds) plot.roc(roc_glm, print.auc=TRUE)
정리
1. 정형 데이터 가져 오기
2. 정형 데이터 가공
- 좋아요 수를 활용하여 긍정/부정 data 나눔
3. 정형 데이터 분리 : 텍스트 데이터 따로 분리
4. 텍스트 데이터 처리 (전처리, 토큰화, 코퍼스, DTM)
5. 텍스트 데이터 + 기존 data 합침
6. ML 모형 진행 (다른 모형을 진행 해도 된다. )
하지만, 혹시 지금까지 배운 내용이 너무 어렵다면 python으로만 하는 것도 나쁘지 않다.
Cloning into 'Mecab-ko-for-Google-Colab'...
remote: Enumerating objects: 91, done.[K
remote: Total 91 (delta 0), reused 0 (delta 0), pack-reused 91[K
Unpacking objects: 100% (91/91), done.
/content/Mecab-ko-for-Google-Colab
Installing konlpy.....
Collecting konlpy
Downloading konlpy-0.5.2-py2.py3-none-any.whl (19.4 MB)
[K |████████████████████████████████| 19.4 MB 2.4 MB/s
[?25hCollecting JPype1>=0.7.0
Downloading JPype1-1.3.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl (448 kB)
[K |████████████████████████████████| 448 kB 23.5 MB/s
[?25hRequirement already satisfied: lxml>=4.1.0 in /usr/local/lib/python3.7/dist-packages (from konlpy) (4.2.6)
Collecting colorama
Downloading colorama-0.4.4-py2.py3-none-any.whl (16 kB)
Requirement already satisfied: tweepy>=3.7.0 in /usr/local/lib/python3.7/dist-packages (from konlpy) (3.10.0)
Requirement already satisfied: numpy>=1.6 in /usr/local/lib/python3.7/dist-packages (from konlpy) (1.19.5)
Collecting beautifulsoup4==4.6.0
Downloading beautifulsoup4-4.6.0-py3-none-any.whl (86 kB)
[K |████████████████████████████████| 86 kB 2.4 MB/s
[?25hRequirement already satisfied: typing-extensions in /usr/local/lib/python3.7/dist-packages (from JPype1>=0.7.0->konlpy) (3.10.0.2)
Requirement already satisfied: requests-oauthlib>=0.7.0 in /usr/local/lib/python3.7/dist-packages (from tweepy>=3.7.0->konlpy) (1.3.0)
Requirement already satisfied: requests[socks]>=2.11.1 in /usr/local/lib/python3.7/dist-packages (from tweepy>=3.7.0->konlpy) (2.23.0)
Requirement already satisfied: six>=1.10.0 in /usr/local/lib/python3.7/dist-packages (from tweepy>=3.7.0->konlpy) (1.15.0)
Requirement already satisfied: oauthlib>=3.0.0 in /usr/local/lib/python3.7/dist-packages (from requests-oauthlib>=0.7.0->tweepy>=3.7.0->konlpy) (3.1.1)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.7/dist-packages (from requests[socks]>=2.11.1->tweepy>=3.7.0->konlpy) (1.24.3)
Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.7/dist-packages (from requests[socks]>=2.11.1->tweepy>=3.7.0->konlpy) (3.0.4)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/dist-packages (from requests[socks]>=2.11.1->tweepy>=3.7.0->konlpy) (2021.10.8)
Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.7/dist-packages (from requests[socks]>=2.11.1->tweepy>=3.7.0->konlpy) (2.10)
Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /usr/local/lib/python3.7/dist-packages (from requests[socks]>=2.11.1->tweepy>=3.7.0->konlpy) (1.7.1)
Installing collected packages: JPype1, colorama, beautifulsoup4, konlpy
Attempting uninstall: beautifulsoup4
Found existing installation: beautifulsoup4 4.6.3
Uninstalling beautifulsoup4-4.6.3:
Successfully uninstalled beautifulsoup4-4.6.3
Successfully installed JPype1-1.3.0 beautifulsoup4-4.6.0 colorama-0.4.4 konlpy-0.5.2
Done
Installing mecab-0.996-ko-0.9.2.tar.gz.....
Downloading mecab-0.996-ko-0.9.2.tar.gz.......
from https://bitbucket.org/eunjeon/mecab-ko/downloads/mecab-0.996-ko-0.9.2.tar.gz
--2021-12-15 08:19:45-- https://bitbucket.org/eunjeon/mecab-ko/downloads/mecab-0.996-ko-0.9.2.tar.gz
Resolving bitbucket.org (bitbucket.org)... 104.192.141.1, 2406:da00:ff00::22c0:3470, 2406:da00:ff00::22e9:9f55, ...
Connecting to bitbucket.org (bitbucket.org)|104.192.141.1|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://bbuseruploads.s3.amazonaws.com/eunjeon/mecab-ko/downloads/mecab-0.996-ko-0.9.2.tar.gz?Signature=Djk%2BX4VYfoZUGHzDRgTrcVVdFvE%3D&Expires=1639557778&AWSAccessKeyId=AKIA6KOSE3BNJRRFUUX6&versionId=null&response-content-disposition=attachment%3B%20filename%3D%22mecab-0.996-ko-0.9.2.tar.gz%22&response-content-encoding=None [following]
--2021-12-15 08:19:46-- https://bbuseruploads.s3.amazonaws.com/eunjeon/mecab-ko/downloads/mecab-0.996-ko-0.9.2.tar.gz?Signature=Djk%2BX4VYfoZUGHzDRgTrcVVdFvE%3D&Expires=1639557778&AWSAccessKeyId=AKIA6KOSE3BNJRRFUUX6&versionId=null&response-content-disposition=attachment%3B%20filename%3D%22mecab-0.996-ko-0.9.2.tar.gz%22&response-content-encoding=None
Resolving bbuseruploads.s3.amazonaws.com (bbuseruploads.s3.amazonaws.com)... 52.216.113.163
Connecting to bbuseruploads.s3.amazonaws.com (bbuseruploads.s3.amazonaws.com)|52.216.113.163|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1414979 (1.3M) [application/x-tar]
Saving to: ‘mecab-0.996-ko-0.9.2.tar.gz’
mecab-0.996-ko-0.9. 100%[===================>] 1.35M 1.07MB/s in 1.3s
2021-12-15 08:19:48 (1.07 MB/s) - ‘mecab-0.996-ko-0.9.2.tar.gz’ saved [1414979/1414979]
Done
Unpacking mecab-0.996-ko-0.9.2.tar.gz.......
Done
Change Directory to mecab-0.996-ko-0.9.2.......
installing mecab-0.996-ko-0.9.2.tar.gz........
configure
make
make check
make install
ldconfig
Done
Change Directory to /content
Downloading mecab-ko-dic-2.1.1-20180720.tar.gz.......
from https://bitbucket.org/eunjeon/mecab-ko-dic/downloads/mecab-ko-dic-2.1.1-20180720.tar.gz
--2021-12-15 08:21:19-- https://bitbucket.org/eunjeon/mecab-ko-dic/downloads/mecab-ko-dic-2.1.1-20180720.tar.gz
Resolving bitbucket.org (bitbucket.org)... 104.192.141.1, 2406:da00:ff00::6b17:d1f5, 2406:da00:ff00::22cd:e0db, ...
Connecting to bitbucket.org (bitbucket.org)|104.192.141.1|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://bbuseruploads.s3.amazonaws.com/a4fcd83e-34f1-454e-a6ac-c242c7d434d3/downloads/b5a0c703-7b64-45ed-a2d7-180e962710b6/mecab-ko-dic-2.1.1-20180720.tar.gz?Signature=ZNAR2x6%2FNWxJ4p%2BOkG%2BjdG77Dqk%3D&Expires=1639558279&AWSAccessKeyId=AKIA6KOSE3BNJRRFUUX6&versionId=tzyxc1TtnZU_zEuaaQDGN4F76hPDpyFq&response-content-disposition=attachment%3B%20filename%3D%22mecab-ko-dic-2.1.1-20180720.tar.gz%22&response-content-encoding=None [following]
--2021-12-15 08:21:19-- https://bbuseruploads.s3.amazonaws.com/a4fcd83e-34f1-454e-a6ac-c242c7d434d3/downloads/b5a0c703-7b64-45ed-a2d7-180e962710b6/mecab-ko-dic-2.1.1-20180720.tar.gz?Signature=ZNAR2x6%2FNWxJ4p%2BOkG%2BjdG77Dqk%3D&Expires=1639558279&AWSAccessKeyId=AKIA6KOSE3BNJRRFUUX6&versionId=tzyxc1TtnZU_zEuaaQDGN4F76hPDpyFq&response-content-disposition=attachment%3B%20filename%3D%22mecab-ko-dic-2.1.1-20180720.tar.gz%22&response-content-encoding=None
Resolving bbuseruploads.s3.amazonaws.com (bbuseruploads.s3.amazonaws.com)... 54.231.82.195
Connecting to bbuseruploads.s3.amazonaws.com (bbuseruploads.s3.amazonaws.com)|54.231.82.195|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 49775061 (47M) [application/x-tar]
Saving to: ‘mecab-ko-dic-2.1.1-20180720.tar.gz’
mecab-ko-dic-2.1.1- 100%[===================>] 47.47M 13.0MB/s in 4.5s
2021-12-15 08:21:25 (10.5 MB/s) - ‘mecab-ko-dic-2.1.1-20180720.tar.gz’ saved [49775061/49775061]
Done
Unpacking mecab-ko-dic-2.1.1-20180720.tar.gz.......
Done
Change Directory to mecab-ko-dic-2.1.1-20180720
Done
installing........
configure
make
make install
apt-get update
apt-get upgrade
apt install curl
apt install git
bash <(curl -s https://raw.githubusercontent.com/konlpy/konlpy/master/scripts/mecab.sh)
Done
Successfully Installed
Now you can use Mecab
from konlpy.tag import Mecab
mecab = Mecab()
사용자 사전 추가 방법 : https://bit.ly/3k0ZH53
NameError: name 'Tagger' is not defined 오류 발생 시 런타임을 재실행 해주세요
블로그에 해결 방법을 남겨주신 tana님 감사합니다.
네이버 쇼핑 리뷰 데이터에 대한 이해와 전처리
1 2 3 4 5 6 7 8 9 10
import re import pandas as pd import numpy as np import matplotlib.pyplot as plt import urllib.request from collections import Counter from konlpy.tag import Mecab from sklearn.model_selection import train_test_split from tensorflow.keras.preprocessing.text import Tokenizer from tensorflow.keras.preprocessing.sequence import pad_sequences
('ratings_total.txt', <http.client.HTTPMessage at 0x7f7d3557f750>)
해당 데이터에는 열 제목이 별도로 없음. 그래서 임의로 두 개의 열제목인 “ratings”와 “reviews” 추가
1 2 3
# (1) 데이터 불러오고, 전체 리뷰 개수 출력 # 200,000 totalDt = pd.read_table('ratings_total.txt', names=['ratings', 'reviews']) print('전체 리뷰 개수 :',len(totalDt)) # 전체 리뷰 개수 출력
ratings열의 경우 1, 2, 4, 5라는 네 가지 값을 가지고 있습니다. reviews열에서 중복을 제외한 경우 199,908개입니다. 현재 20만개의 리뷰가 존재하므로 이는 현재 갖고 있는 데이터에 중복인 샘플들이 있다는 의미입니다. 중복인 샘플들을 제거해줍니다.
1 2 3
# (2) review열에서 중복 데이터 제거 drop_duplicates() 함수 활용 totalDt.drop_duplicates(subset=['reviews'], inplace=True) print('총 샘플의 수 :',len(totalDt))
# 한글과 공백을 제외하고 모두 제거 # (4) 한글 및 공백 제외한 모든 글자 제거 train_data['reviews'] = train_data['reviews'].str.replace("[^ㄱ-ㅎㅏ-ㅣ가-힣 ]","") train_data['reviews'].replace('', np.nan, inplace=True) print(train_data.isnull().sum())
ratings 0
reviews 0
label 0
dtype: int64
테스트 데이터에 대해서도 같은 과정을 거칩니다.
1 2 3 4 5 6 7 8 9 10
# (5) 데스트 데이터에 적용하기 # 코드 1 중복 제거 # 코드 2 정규 표현식 수행 # 코드 3 공백은 Null 값으로 변경 # 코드 4 Null 값 제거 test_data.drop_duplicates(subset = ['reviews'], inplace=True) # 중복 제거 test_data['reviews'] = test_data['reviews'].str.replace("[^ㄱ-ㅎㅏ-ㅣ가-힣 ]","") # 정규 표현식 수행 test_data['reviews'].replace('', np.nan, inplace=True) # 공백은 Null 값으로 변경 test_data = test_data.dropna(how='any') # Null 값 제거 print('전처리 후 테스트용 샘플의 개수 :',len(test_data))
전처리 후 테스트용 샘플의 개수 : 49977
토큰화
형태소 분석기 Mecab을 사용하여 토큰화 작업을 수행한다.
1 2 3
# (6) Mecab 클래스 호출하기 mecab = Mecab() print(mecab.morphs('와 이런 것도 상품이라고 차라리 내가 만드는 게 나을 뻔'))
train_data['tokenized'] = train_data['reviews'].apply(mecab.morphs) train_data['tokenized'] = train_data['tokenized'].apply(lambda x: [item for item in x if item notin stopwords])
1 2
test_data['tokenized'] = test_data['reviews'].apply(mecab.morphs) test_data['tokenized'] = test_data['tokenized'].apply(lambda x: [item for item in x if item notin stopwords])
단어와 길이 분포 확인하기
긍정 리뷰에는 주로 어떤 단어들이 많이 등장하고, 부정 리뷰에는 주로 어떤 단어들이 등장하는지 두 가지 경우에 대해서 각 단어의 빈도수를 계산해보겠습니다. 각 레이블에 따라서 별도로 단어들의 리스트를 저장해줍니다.
이제 기계가 텍스트를 숫자로 처리할 수 있도록 훈련 데이터와 테스트 데이터에 정수 인코딩을 수행해야 합니다. 우선, 훈련 데이터에 대해서 단어 집합(vocaburary)을 만들어봅시다.
1 2 3
# (9) 정수 인코딩 클래스 호출 및 X_train 데이터에 적합하기 tokenizer = Tokenizer() tokenizer.fit_on_texts(X_train)
단어 집합이 생성되는 동시에 각 단어에 고유한 정수가 부여되었습니다. 이는 tokenizer.word_index를 출력하여 확인 가능합니다. 등장 횟수가 1회인 단어들은 자연어 처리에서 배제하고자 합니다. 이 단어들이 이 데이터에서 얼만큼의 비중을 차지하는지 확인해봅시다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
threshold = 2 total_cnt = len(tokenizer.word_index) # 단어의 수 rare_cnt = 0# 등장 빈도수가 threshold보다 작은 단어의 개수를 카운트 total_freq = 0# 훈련 데이터의 전체 단어 빈도수 총 합 rare_freq = 0# 등장 빈도수가 threshold보다 작은 단어의 등장 빈도수의 총 합
# 단어와 빈도수의 쌍(pair)을 key와 value로 받는다. for key, value in tokenizer.word_counts.items(): total_freq = total_freq + value
# 단어의 등장 빈도수가 threshold보다 작으면 if(value < threshold): rare_cnt = rare_cnt + 1 rare_freq = rare_freq + value
print('단어 집합(vocabulary)의 크기 :',total_cnt) print('등장 빈도가 %s번 이하인 희귀 단어의 수: %s'%(threshold - 1, rare_cnt)) print("단어 집합에서 희귀 단어의 비율:", (rare_cnt / total_cnt)*100) print("전체 등장 빈도에서 희귀 단어 등장 빈도 비율:", (rare_freq / total_freq)*100)
단어 집합(vocabulary)의 크기 : 39998
등장 빈도가 1번 이하인 희귀 단어의 수: 18213
단어 집합에서 희귀 단어의 비율: 45.53477673883694
전체 등장 빈도에서 희귀 단어 등장 빈도 비율: 0.7935698749320282
단어가 약 40,000개가 존재합니다. 등장 빈도가 threshold 값인 2회 미만. 즉, 1회인 단어들은 단어 집합에서 약 45%를 차지합니다. 하지만, 실제로 훈련 데이터에서 등장 빈도로 차지하는 비중은 매우 적은 수치인 약 0.8%밖에 되지 않습니다. 아무래도 등장 빈도가 1회인 단어들은 자연어 처리에서 별로 중요하지 않을 듯 합니다. 그래서 이 단어들은 정수 인코딩 과정에서 배제시키겠습니다.
등장 빈도수가 1인 단어들의 수를 제외한 단어의 개수를 단어 집합의 최대 크기로 제한하겠습니다.
1 2 3 4
# 전체 단어 개수 중 빈도수 2이하인 단어 개수는 제거. # 0번 패딩 토큰과 1번 OOV 토큰을 고려하여 +2 vocab_size = total_cnt - rare_cnt + 2 print('단어 집합의 크기 :',vocab_size)
단어 집합의 크기 : 21787
이제 단어 집합의 크기는 21,787개입니다. 이를 토크나이저의 인자로 넘겨주면, 토크나이저는 텍스트 시퀀스를 숫자 시퀀스로 변환합니다. 이러한 정수 인코딩 과정에서 이보다 큰 숫자가 부여된 단어들은 OOV로 변환하겠습니다.
이제 서로 다른 길이의 샘플들의 길이를 동일하게 맞춰주는 패딩 작업을 진행해보겠습니다. 전체 데이터에서 가장 길이가 긴 리뷰와 전체 데이터의 길이 분포를 알아보겠습니다.
1 2 3 4 5 6
print('리뷰의 최대 길이 :',max(len(l) for l in X_train)) print('리뷰의 평균 길이 :',sum(map(len, X_train))/len(X_train)) plt.hist([len(s) for s in X_train], bins=35, label='bins=35', color="skyblue") plt.xlabel('length of samples') plt.ylabel('number of samples') plt.show()
리뷰의 최대 길이 : 85
리뷰의 평균 길이 : 15.307521459871541
리뷰의 최대 길이는 85, 평균 길이는 약 15입니다.
그리고 그래프로 봤을 때, 전체적으로는 60이하의 길이를 가지는 것으로 보입니다.
1 2 3 4 5 6 7 8
defbelow_threshold_len(max_len, nested_list): count = 0 for sentence in nested_list: if(len(sentence) <= max_len): count = count + 1 print('전체 샘플 중 길이가 %s 이하인 샘플의 비율: %s'%(max_len, (count / len(nested_list))*100))
최대 길이가 85이므로 만약 80으로 패딩할 경우, 몇 개의 샘플들을 온전히 보전할 수 있는지 확인해봅시다.
from tensorflow.keras.layers import Embedding, Dense, GRU from tensorflow.keras.models import Sequential from tensorflow.keras.models import load_model from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint
embedding_dim = 100 hidden_units = 128
model = Sequential() model.add(Embedding(vocab_size, embedding_dim)) model.add(GRU(hidden_units)) model.add(Dense(1, activation='sigmoid'))
es = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=4) mc = ModelCheckpoint('best_model.h5', monitor='val_acc', mode='max', verbose=1, save_best_only=True)
package ‘BH’ successfully unpacked and MD5 sums checked package ‘RcppParallel’ successfully unpacked and MD5 sums checked
The downloaded binary packages are in C:\Users\brill\AppData\Local\Temp\RtmpmuDZXg\downloaded_packages √ checking for file ‘C:\Users\brill\AppData\Local\Temp\RtmpmuDZXg\remotes2cd0f4c5d4d\junhewk-RcppMeCab-e1800aa/DESCRIPTION’ (414ms)
byte-compile and prepare package for lazy loading in method for ‘asJSON’ with signature ‘“blob”‘: no definition for class “blob”
help
** installing help indices converting help for package ‘jsonlite’ finding HTML links … done base64 html flatten html fromJSON html prettify html rbind_pages html read_json html serializeJSON html stream_in html unbox html validate html
building package indices
installing vignettes
testing if installed package can be loaded from temporary location
testing if installed package can be loaded from final location
testing if installed package keeps a record of temporary installation path
DONE (jsonlite)
R packages 설치
1 2
install.packages(c("stringr", "hash", "tau", "Sejong", "RSQLite", "devtools"), type = "binary")
The downloaded source packages are in ‘C:\Users\brill\AppData\Local\Temp\RtmpmuDZXg\downloaded_packages’ install.packages(c(“stringr”, “hash”, “tau”, “Sejong”, “RSQLite”, “devtools”),
checking for LF line-endings in source and make files and shell scripts
checking for empty or unneeded directories
looking to see if a ‘data/datalist’ file should be added
building ‘KoNLP_0.80.2.tar.gz’
‘C:/Users/brill/Documents/R/win-library/4.1’의 위치에 패키지(들)을 설치합니다. (왜냐하면 ‘lib’가 지정되지 않았기 때문입니다)
installing source package ‘KoNLP’ …
using staged installation
R
data
inst
byte-compile and prepare package for lazy loading
help
** installing help indices converting help for package ‘KoNLP’ finding HTML links … done HangulAutomata html KtoS html MorphAnalyzer html SimplePos09 html SimplePos22 html StoK html backupUsrDic html buildDictionary html concordance_file html concordance_str html convertHangulStringToJamos html convertHangulStringToKeyStrokes html convertTag html editweights html extractNoun html get_dictionary html is.ascii html is.hangul html is.jaeum html is.jamo html is.moeum html mergeUserDic html mutualinformation html reloadAllDic html reloadUserDic html restoreUsrDic html scala_library_install html statDic html tags html useNIADic html useSejongDic html useSystemDic html
Content type ‘application/java-archive’ length 5744974 bytes (5.5 MB)
downloaded 5.5 MB
[1] TRUE [1] 5744974 Successfully installed Scala runtime library in C:/Users/brill/Documents/R/win-library/4.1/00LOCK-KoNLP/00new/KoNLP/java/scala-library-2.11.8.jar ** testing if installed package can be loaded from final location ** testing if installed package keeps a record of temporary installation path
DONE (KoNLP)
명사 분리기 KoNLP 설치
1 2
library(KoNLP) useNIADic()
library(KoNLP) useNIADic() Backup was just finished! Downloading package from url: https://github.com/haven-jeon/NIADic/releases/download/0.0.1/NIADic_0.0.1.tar.gz Installing 16 packages: colorspace, viridisLite, RColorBrewer, munsell, labeling, farver, base64enc, htmltools, scales, isoband, gtable, jquerylib, tinytex, ggplot2, data.table, rmarkdown ‘C:/Users/brill/Documents/R/win-library/4.1’의 위치에 패키지(들)을 설치합니다. (왜냐하면 ‘lib’가 지정되지 않았기 때문입니다) trying URL ‘https://cran.rstudio.com/bin/windows/contrib/4.1/colorspace_2.0-2.zip' Content type ‘application/zip’ length 2645307 bytes (2.5 MB) downloaded 2.5 MB
package ‘colorspace’ successfully unpacked and MD5 sums checked package ‘viridisLite’ successfully unpacked and MD5 sums checked package ‘RColorBrewer’ successfully unpacked and MD5 sums checked package ‘munsell’ successfully unpacked and MD5 sums checked package ‘labeling’ successfully unpacked and MD5 sums checked package ‘farver’ successfully unpacked and MD5 sums checked package ‘base64enc’ successfully unpacked and MD5 sums checked package ‘htmltools’ successfully unpacked and MD5 sums checked package ‘scales’ successfully unpacked and MD5 sums checked package ‘isoband’ successfully unpacked and MD5 sums checked package ‘gtable’ successfully unpacked and MD5 sums checked package ‘jquerylib’ successfully unpacked and MD5 sums checked package ‘tinytex’ successfully unpacked and MD5 sums checked package ‘ggplot2’ successfully unpacked and MD5 sums checked package ‘data.table’ successfully unpacked and MD5 sums checked package ‘rmarkdown’ successfully unpacked and MD5 sums checked
The downloaded binary packages are in C:\Users\brill\AppData\Local\Temp\RtmpmuDZXg\downloaded_packages √ checking for file ‘C:\Users\brill\AppData\Local\Temp\RtmpmuDZXg\remotes2cd0437ea43\NIADic/DESCRIPTION’ …
text = "뿌리산업’의 기반이 되는 공정기술의 범위가 관련법 제정 10년 만에 확대 개편된다. 뿌리기업 우대 지원과 청년층 등 신규인력 유입 지원을 강화하기 위한 법적 토대도 마련된다. 산업통상자원부는 이 같은 내용을 담은 ‘뿌리산업 진흥과 첨단화에 관한 법률(뿌리산업법) 시행령’ 개정안이 14일 국무회의에서 의결돼 오는 16일부터 시행된다고 밝혔다. 먼저 뿌리산업법 기반 공정기술(뿌리기술)의 범위가 기존 6개(주조, 금형, 소성가공, 용접, 표면처리, 열처리)에서 14개로 늘어난다. 구체적으로 소재 다원화 공정기술에 사출·프레스, 정밀가공, 적층제조, 산업용 필름 및 지류 등 4개 기술이 포함된다. 산업부는 이를 통해 세라믹, 플라스틱, 탄성소재, 탄소, 펄프 등 다양한 소재 기반 제조 공정을 확산할 계획이다. 또 지능화 공정기술로 로봇, 센서, 산업 지능형 소프트웨어, 엔지니어링 설계 등 4개 기술이 추가된다. 뿌리기술 범위가 확대되면서 뿌리산업의 범위도 기존 6대 산업, 76개 업종에서 14대 산업, 111개 업종으로 늘어난다. 이번 개정을 통해 뿌리기업 확인 절차, 확인서 유효기간(3년), 사후관리 등에 관한 규정도 신설됐다. 뿌리기업은 뿌리기술을 활용해 사업을 영위하는 업종 또는 뿌리기술에 활용되는 장비 제조 분야를 말한다. 뿌리기업 확인 제도는 외국인 근로자 고용 우대 혜택 등이 주어지는 뿌리산업 관련 우대 지원 대상을 명확히 정하기 위한 것으로 국가뿌리산업진흥센터에서 확인서를 발급해오고 있다. 2012년부터 1만1766건이 발급됐으며 현재 5843건이 유효한 것으로 집계됐다. ‘일하기 좋은 뿌리기업’ 선정을 위한 기준과 절차, 지원 내용 등에 관한 규정도 새로 만들어졌다. ‘일하기 좋은 뿌리기업’은 뿌리산업에 청년층 등 신규 인력 유입을 촉진하기 위해 근로·복지 환경, 성장 역량 등이 우수한 기업을 산업부가 선정해 홍보 등을 지원하는 제도다. 산업부는 이번 개정 사항이 원활히 시행될 수 있도록 업종별 협·단체, 뿌리기업, 지자체 등을 대상으로 적극 홍보할 방침이다. 아울러 매년 발간하는 뿌리산업 백서를 통해 새롭게 추가되는 8대 차세대 공정기술에 대한 내용, 기술 동향 등을 상세하게 제공하기로 했다. 산업부 관계자는 “이번 개정은 2011년 뿌리산업법 제정 후 10년 만에 뿌리기술을 소재다원화와 지능화 중심으로 확장한 것으로, 뿌리산업의 기술 융복합화와 첨단화를 촉진하고 신규 인력 유입 지원을 강화하기 위한 법적 토대를 마련하였다는 데에 의의가 있다”고 말했다."
deftry_func(x, idx): try: return100/x[idx] except ZeroDivisionError: print("did't divide zero") except IndexError: print("not in range of Index") except TypeError: print("there is type Error") except NameError: print("it is not definated parameter") finally: print("무조건 실행됨")
defmain(): a = [50, 60, 0, 70] print(try_func(a,1))
# Zero Division Error print(try_func(a,0))
# Index Error print(try_func(a,5))
# type Error print(try_func(a, "hi"))
if __name__ == "__main__": main()
어떻게던 프로그램이 돌아 갈 수 있도록 만들어 주는 것이 중요하다.
class 정리
__init__ : set_name, set_id 해 주지 않고, 통합시켜주는 역할
__eq__, __ne__ : 부등호 연산자
상속, 다형성(서로다른 클래스에서 공통으로 쓰는 함수)
Exception
class attribute / instance attribute / instance method 차이
def__init__(self, name, salary = 30000): self.name = name if salary< Employee.MIN_SALARY: raise SalaryExcept("급여가 너무 낮아요!") self.salary = salary
defgive_bonus(self, amount): if amount > Employee.MAX_Bonus: print("보너스가 너무 많아 ") elif self.salary + amount < Employee.MIN_SALARY : print("보너스 지급 후의 급여도 매우 낮다. ") else: self.salary += amount
if __name__ == "__main__": emp = Employee("YH", salary= 10000)