csv 파일이 comma로 제대로 분리 되어있지 않으면 read_csv에서 에러가 발생할 수 있다.

이 때 error_bad_lines = False 파라미터를 사용하면 위 사진처럼 문제가 있는 line을 건너뛰고 읽어온다.

df = pd.DataFrame({'Animal': ['Falcon', 'Falcon',
                              'Parrot', 'Parrot'],
                   'Max Speed': [380., 370., 24., 26.]})
df
   Animal  Max Speed
0  Falcon      380.0
1  Falcon      370.0
2  Parrot       24.0
3  Parrot       26.0

DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=NoDefault.no_default, observed=False, dropna=True) 에서 by에 원하는 column으로 묶어서 함수를 적용 시킬 수 있다.

df.groupby(['Animal']).mean()
       Max Speed
Animal
Falcon      375.0
Parrot       25.0

max(), min(), sum() 등의 함수가 있다.

# import libraries 
import pandas as pd  
import numpy as np 
import matplotlib.pyplot as plt 
import random
import seaborn as sns
from fbprophet import Prophet

df = pd.read_csv('avocado.csv', index_col = 0)
df = df.sort_values(by='Date')

라이브러리와 데이터를 import 해준다. Prophet 분석을 위해 Date와 AveragePrice column만 가져와서 ds 와 y로 바꿔준다.

avocado_prophet_df = df[['Date', 'AveragePrice']]
avocado_prophet_df.columns = ['ds', 'y']

Prophet 객체를 만들고 기존의 데이터로 학습시킨뒤 예측하고자 하는 기간을 정해서 predict 함수에 대입한다.

prophet = Prophet()
prophet.fit(avocado_prophet_df)
future = prophet.make_future_dataframe(365)
forecast = prophet.predict(future)
prophet.plot(forecast)
plt.savefig('chart1.jpg')

prophet.plot_components(forecast)
plt.savefig('chart2.jpg')

WordCloud 에서 mask 파라미터에 이미지를 np.array로 변환해 대입하면 마스크 모양으로 나온다.

 

 

 

 

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]])

 

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
    
message_cleaning('Hello~~! my name is, heheheh! nice to meet you!!!@')
# ['Hello', 'name', 'heheheh', 'nice', 'meet']

sentence에 문자열을 넣으면 먼저 문자열을 하나씩 char로 꺼내와서 char에 string.puctuation 안에 있는 기호가 들어잇는지 확인한다. 그리고 각 글자들을 하나의 문자열로 합친다.

split 함수를 통해 단어로 쪼갠 뒤 소문자 변환 한 것이 stopwords안에 있는지 확인하고 리턴한다.

 

Hyper Parameter 하이퍼 파라미터!! 사람이 설정해줘야 되는 값이고,  어떤값을 설정해야 똑똑한 인공지능이 나올지는 아무도 모른다.

param_grid 라는 변수에 딕셔너리로 파라미터 경우의 수를 대입하고 GridSearchCV모델을 만든다.

GridSearchCV.best_estimator_로 가장 좋은 조합을 가져오고 GridSearchCV.best_params_로 가장 좋은 모델에 사용된 하이퍼 파라미터를 가져온다.

프로젝트를 위해, 아나콘다 프롬프트를 실행하고, 다음을 인스톨 한다. conda install -c conda-forge wordcloud

데이터를 불러온다.

verified_reviews 를 하나의 리스트로 만들고 " " (공백) 으로 합쳐서, 하나의 문자열로 만듭니다.

WordCloud 를 이용하여, 화면에 많이 나온 단어들을 시각화 한다. STOPWORDS를 import한 뒤 집합에 불용어를 add함수로 추가한다.

 

라이브러리와 데이터를 불러온다.

제일 가까운 두점을 찾고 그 점의 중점을 한 점으로 치환한다. 또 그다음 제일 가까운 두 점을 찾고 계속 반복해나간다. 이런식으로 Dendrogram 을 그리고, 점 사이의 거리를 보면서 최적의 클러스터 갯수를 찾아보자. 

최적의 클러스터 갯수는 5개로 가정하고 모델링 후 예측한다.

 

k 개의 그룹을 만든다. 즉, 비슷한 특징을 갖는 것들끼리 묶는것, 다음을 두개, 세개, 네개 그룹 등등 원하는 그룹으로 만들 수 있다.

몇개로 분류할지는 어떻게 결정하는가? K의 갯수를 정하는 방법 

그룹의 중심점과 각 점간의 거리를 합한 것이 WCSS다

WCSS와 클러스터의 수를 시각화하여 꺽이는 지점을 클러스터 수로 정한다.

이것을 팔꿈치와 비슷하다 여거 Elbow Method라 이름지었다

먼저 데이터와 라이브러리를 불러온 뒤 전처리 해준다.

적절한 k 값(몇 개 그룹)을 찾기 위해서는 . WCSS값을 확인해야 한다! 따라서 K를 2부터 10까지 다 수행해 보고나서
WCSS 값을 확인해 본다. 이때, 엘보우 메소드를 이용해서, 최적의 K 값을 찾도록 한다.

이 때 최적의 k는 5라 가정하고 예측치를 데이터프레임에 대입하였다.

+ Recent posts