import numpy as np
import pandas as pd
import string
import nltk
nltk.download('stopwords')
from nltk.corpus import stopwords
my_stopwords = stopwords.words('english')

def message_cleaning(sentence):
    # 1. 구두점 제거
    Test_punc_removed = [char for char in sentence if char not in string.punctuation]
    # 2. 각 글자들을 하나의 문자열로 합친다.
    Test_punc_removed_join = ''.join(Test_punc_removed)
    # 3. 문자열에 불용어가 포함되어 있는지 확인해서, 불용어 제거한다.
    Test_punc_removed_join_clean = [word for word in Test_punc_removed_join.split() if word.lower() not in my_stopwords]
    # 4. 결과로 남은 단어들만 리턴한다.
    return Test_punc_removed_join_clean

from sklearn.feature_extraction.text import CountVectorizer
vec = CountVectorizer(analyzer = message_cleaning)

testing_sample = ['Hello, I am Ryan, I would like to book a hotel in Bali by January 24th', 'money viagara!!!!!']
X = vec.fit_transform(testing_sample)

X = X.toarray()
X

CountVectorizer를 import해주고 모델링 할 때 analyzer 파라미터에 문자열 전처리에 적용할 함수를 대입한다.

vec.fit_transform으로 대입한 문자열 데이터의 고유한 단어를 세서 각 개수를 Vectorize한다.

 

# 결과
[nltk_data] Downloading package stopwords to /root/nltk_data...
[nltk_data]   Package stopwords is already up-to-date!
array([[1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1],
       [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0]])

vec.transform에 새로운 문자열을 넣으면 이전에 계산한 고유한 단어들이 몇개 있는지 Vectorize한다.

new_date = ['Hello World!']
vec.transform(new_date).toarray()
# array([[0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]])

 

경력과 연봉의 관계를 분석하여, 경력이 주어졌을때 연봉을 예측하려 한다. 데이터를 살펴보니 아래와 같은 그래프로 나왔다고 가정했을 때,

아래 그림처럼, 해당 분포를 만족하는 직선을 찾으려 하는 것이 목표다

즉 b0,b1의 값을 찾아 가는 과정을 학습이라고 부른다!

# Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

X와 y를 설정하고 카테고리컬 문자열 데이터 fit_transform을 통해 원핫인코딩을 해준다.

 X, y 준비 끝났으니 학습용과 테스트용으로 데이터 분리하고 모델링한후 mse를 구한다.

아래는 신규데이터 예측 방법이다. np.array를 reshape 하고 인코더의 transform을 통해 데이터 전처리를 하고 예측한다.

+ Recent posts