close_btn
조회 수 350106 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print Files
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print Files

<여성의류 쇼핑몰 ABLY 구매율 1위 팬츠 리뷰 텍스트 분석>

1. '살빠졌Jean' 바지 구매 후기 1500개 크롤링

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from urllib.request import urlopen
from bs4 import BeautifulSoup
 
base_url = 'https://a-bly.com/shop/goods/goods_view.php?goodsno=11209&page={}'
review_list = []
 
for n in range(20) :  #총 20페이지 분량의 리뷰 차례대로 크롤링 
    url = base_url.format(n+1)
    webpage = urlopen(url)
    source = BeautifulSoup(webpage, 'html5lib')
    reviews = source.select('article')
    
    for review in reviews :
        review_list.append(review.get_text().strip())
        #print(review.get_text().strip())
 
review_list

cs


###/review_list/### #너무 길어서 일부만 첨부합니다!

['상품 정보 : 살빠졌진 보이핏 / 연청 / L\n사람 정보 : 키 166 / 몸무게 65-68 / 평소 바지사이즈 L, 29-30\n\n날씬한 언니들 후기들이  많아서 구매할 때 고민을 엄청 했다. \n\n-탄탄한 원단이어서 아랫배를 잘 잡아줘서 만족. 여름에는 덥고 봄가을 입기 좋을 것 같다\n-종아리가 엄청나서 다리 라인이 안예쁜데 잘 가려주면서 핏도 괜찮\n-다리가 더 두꺼워 보일까봐 연청 엄청 고민했는데, 과하지 않은 색상이어서 연청 시키길 잘한 것 같음\n-다른 옷들이랑 코디하기 편할 것 같고 활용도가 좋음',
 '키는 171cm, 몸무게는 59-60, 허벅지는 제생각엔 두꺼운편 (줄자로 잴두꺼운부분 57-58cm) \n\n평소사이즈는 몰라서 66이라한거구욤\n살이쪄서ㅠ 원래26-27입다 요즘은27-28입는데 \n요거너무 좋아요ㅠㅠ진짜ㅠㅠ 저는 연청 입고되면 또살거에요...\n여기저기 홍보하고있을정도ㅜㅜ \n접어입는게 이쁜데 제 키에는 접으면 좀 짧지만 그때그때 기분대로입어요ㅎㅎ\n\n무튼 강추합니당. 진짜 편하구 핏도 이쁘고! 종아리 굵은데 (줄자로 젤 두꺼운부분 35-36cm) 커버되고 넘 죠하요\n\n아 근데 허리부분은 일반골반위치아니구 배꼽조금위라 많이먹을땐 힘드니 참고하세용ㅋㅋㅋㅋㅋ 그래듀 넘 이뻐요♡♡',
 '연청 진청 두개 다 구매했는데 진짜 예뻐요...아직 입고 나가보진 않았는데 오자마자 입어봤는데 바지도 편하고 예쁘고ㅠ 접어입어도 예쁘고 안접어도 예뻐요!!!!짱!!',
 '키 159 몸무게 52정도 되고 완전 100% 하체비만이에요. 어느정도냐면 거의 종아리랑 허벅지랑 둘레가 비슷할 정도로 항아리 다리라서 청바지를 절대 안입었(못입었)었는데 속는 셈 치고 샀더니 진짜... ㅠㅠ\n바로 진청 추가구매하려고 들어왔다가 후기남겨요. 저같은 하비한테는 체형커버도 커버지만 일단 핏이 정말 예쁘게 떨어져요. 전체적으로 봐도 부담스럽지 않고 특히 롤업해주니까 발목이 더 얇아보이고 다리전체도 얇아보이더라구요.  한번도 온라인쇼핑몰에다가 후기 남겨본 적 없는데 너무 감사해서 적어요 정말 후회 안하실거예요 꼭 사보세요.. 아,제가 원래 하비다보니까 바지 입고 굽 낮거나 없는 신발 신는 것 보다  5~6cm 되는 구두랑 같이 코디하니까 훨씬 얇아보이고 길어보여요 정말ㅠㅠㅠ♡',
 'M 사이즈 구매했는데요, 원래 허벅지에 살이 있는편이라소 허벅지는 딱 맞고 허리는 크네요ㅜㅜ 허벅지 살을 빼고 입어야 예쁜 핏이 될꺼 같아요!\n살빠졌진 다른 바지들에 비해서는 신축성이 없어요! 무릎이 늘어날 걱정은 없는데 많이 먹는 날엔 백프로 힘들것 같습니댜 ;((',
 '살빠졌진 보이핏 후기입니다\n\n일단 너뮤 편하구용 다리도 길어보여요 \n짱짱 맘에들어요 길이도 이쁘게 잘 나왔오요',
 '저는 연청s사이즈샀어요. 일단 떨어지는 라인은 진짜 예뻐요!! 롤업을 하면 길이가 너무 많이 짧아져서ㅠㅠ 롤업은 못합니다..여름에는 약간 더울것같은 원단입니다.\n살때 참고하시라고 자세히 적을게요. 저는 키167-168정도에 49인데 허리는 안에 옷넣어입을만큼 정도이고 키크신분들은 s는 좀 짧다고 느낄수있어요!!늘어나는 스판은 전혀없지만 앉았다 일어났다는 편합니다.',
 '일단 움직일때 굉장히 편해서 좋았어요!! 색상도 기본중청으로 잘나온것같구 힐이랑 신어도 예쁠것같은..? 통이 넉넉해서 정말 통통하신분들이 입으면 커버되서 날씬해보일듯!!! 허리는  좀 크게 나온편이니까 상세 꼭 확인하고 주문하세용 ㅎㅎ',
 '바지 끝이 예쁘게 떨어지고 안뚱뚱해보여서 좋아요!0! 재구매의향있음',
 '진짜 너무 예쁩니다~~ 키168에 57이라 바지는 늘 L을 입어왔는데 저한테는 L이 많이 크더라구요! 비슷한 체형이신 분들 참고하세요!\nM으로 교환해서 받아봤는데 정말 너무 예쁩니다~ 제가 허벅지가 좀 굵어서 걱정했는데, 그런거 상관없다는 듯 바지핏이 넘 예쁘게 떨어지네요~ 보이핏 원하시는 분 꼭사세요 후회 없으실 듯합니다~~~'
1
2
review_list = " ".join(review_list)
review_list

cs

'상품 정보 : 살빠졌진 보이핏 / 연청 / L\n사람 정보 : 키 166 / 몸무게 65-68 / 평소 바지사이즈 L, 29-30\n\n날씬한 언니들 후기들이  많아서 구매할 때 고민을 엄청 했다. \n\n-탄탄한 원단이어서 아랫배를 잘 잡아줘서 만족. 여름에는 덥고 봄가을 입기 좋을 것 같다\n-종아리가 엄청나서 다리 라인이 안예쁜데 잘 가려주면서 핏도 괜찮\n-다리가 더 두꺼워 보일까봐 연청 엄청 고민했는데, 과하지 않은 색상이어서 연청 시키길 잘한 것 같음\n-다른 옷들이랑 코디하기 편할 것 같고 활용도가 좋음 키는 171cm, 몸무게는 59-60, 허벅지는 제생각엔 두꺼운편 (줄자로 잴두꺼운부분 57-58cm) \n\n평소사이즈는 몰라서 66이라한거구욤\n살이쪄서ㅠ 원래26-27입다 요즘은27-28입는데 \n요거너무 좋아요ㅠㅠ진짜ㅠㅠ 저는 연청 입고되면 또살거에요...\n여기저기 홍보하고있을정도ㅜㅜ \n접어입는게 이쁜데 제 키에는 접으면 좀 짧지만 그때그때 기분대로입어요ㅎㅎ\n\n무튼 강추합니당. 진짜 편하구 핏도 이쁘고! 종아리 굵은데 (줄자로 젤 두꺼운부분 35-36cm) 커버되고 넘 죠하요\n\n아 근데 허리부분은 일반골반위치아니구 배꼽조금위라 많이먹을땐 힘드니 참고하세용ㅋㅋㅋㅋㅋ 그래듀 넘 이뻐요♡♡ 연청 진청 두개 다 구매했는데 진짜 예뻐요...아직 입고 나가보진 않았는데 오자마자 입어봤는데 바지도 편하고 예쁘고ㅠ 접어입어도 예쁘고 안접어도 예뻐요!!!!짱!! 키 159 몸무게 52정도 되고 완전 100% 하체비만이에요. 어느정도냐면 거의 종아리랑 허벅지랑 둘레가 비슷할 정도로 항아리 다리라서 청바지를 절대 안입었(못입었)었는데 속는 셈 치고 샀더니 진짜... ㅠㅠ\n바로 진청 추가구매하려고 들어왔다가 후기남겨요. 저같은 하비한테는 체형커버도 커버지만 일단 핏이 정말 예쁘게 떨어져요. 전체적으로 봐도 부담스럽지 않고 특히 롤업해주니까 발목이 더 얇아보이고 다리전체도 얇아보이더라구요.  한번도 온라인쇼핑몰에다가 후기 남겨본 적 없는데 너무 감사해서 적어요 정말 후회 안하실거예요 꼭 사보세요.. 아,제가 원래 하비다보니까 바지 입고 굽 낮거나 없는 신발 신는 것 보다  5~6cm 되는 구두랑 같이 코디하니까 훨씬 얇아보이고 길어보여요 정말ㅠㅠㅠ♡ M 사이즈 구매했는데요, 원래 허벅지에 살이 있는편이라소 허벅지는 딱 맞고 허리는 크네요ㅜㅜ 허벅지 살을 빼고 입어야 예쁜 핏이 될꺼 같아요!\n살빠졌진 다른 바지들에 비해서는 신축성이 없어요! 무릎이 늘어날 걱정은 없는데 많이 먹는 날엔 백프로 힘들것 같습니댜 ;(( 살빠졌진 보이핏 후기입니다\n\n일단 너뮤 편하구용 다리도 길어보여요 \n짱짱 맘에들어요 길이도 이쁘게 잘 나왔오요 저는 연청s사이즈샀어요. 일단 떨어지는 라인은 진짜 예뻐요!! 롤업을 하면 길이가 너무 많이 짧아져서ㅠㅠ 롤업은 못합니다..여름에는 약간 더울것같은 원단입니다.\n살때 참고하시라고 자세히 적을게요. 저는 키167-168정도에 49인데 허리는 안에 옷넣어입을만큼 정도이고 키크신분들은 s는 좀 짧다고 느낄수있어요!!늘어나는 스판은 전혀없지만 앉았다 일어났다는 편합니다. 일단 움직일때 굉장히 편해서 좋았어요!! 색상도 기본중청으로 잘나온것같구 힐이랑 신어도 예쁠것같은..? 통이 넉넉해서 정말 통통하신분들이 입으면 커버되서 날씬해보일듯!!! 허리는  좀 크게 나온편이니까 상세 꼭 확인하고 주문하세용 ㅎㅎ 바지 끝이 예쁘게 떨어지고 안뚱뚱해보여서 좋아요!0! 재구매의향있음 진짜 너무 예쁩니다~~ 키168에 57이라 바지는 늘 L을 입어왔는데 저한테는 L이 많이 크더라구요! 비슷한 체형이신 분들 참고하세요!\nM으로 교환해서 받아봤는데 정말 너무 예쁩니다~ 제가 허벅지가 좀 굵어서 걱정했는데, 그런거 상관없다는 듯 바지핏이 넘 예쁘게 떨어지네요~ 보이핏 원하시는 분 꼭사세요 후회 없으실 듯합니다~~~ 

2. 크롤링 데이터 전처리

(1) 필요없는 문자 제거

1
2
3
4
5
import re
review_list = re.sub('[-=+.,#/(?!:$}]''', review_list)
review_list = re.sub('[0-9]''', review_list)
 
review_list
cs


(2) Tokenize

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from konlpy.tag import *
 
twitter = Twitter()  #twitter class 객체당!
komoran = Komoran()
kkma = Kkma()
 
def make_corpus_rm_stopwords(text):
    corpus = []
    for s in text.split('\n'):
        corpus.append(['/'.join(p) for p in twitter.pos(s) if (p[1!= "Josa"& (p[1!= "Determiner"& (p[1!= "KoreanParticle"& (p[1!= "Punctuation")]) #임베딩에 필요없는 조사 빼고! 
    return corpus
 
corpus = make_corpus_rm_stopwords(review_list)
 
corpus
cs

###/corpus/### #역시 일부만 첨부합니다!

[['상품/Noun',
  '정보/Noun',
  '살빠졌진/Adjective',
  '보이/Noun',
  '핏/Noun',
  '연/Modifier',
  '청/Noun',
  'L/Alpha'],
 ['사람/Noun',
  '정보/Noun',
  '키/Noun',
  '몸무게/Noun',
  '평소/Noun',
  '바지/Noun',
  '사이즈/Noun',
  'L/Alpha'],
 [],
 ['날씬한/Adjective',
  '언니/Noun',
  '들/Suffix',
  '후기/Noun',
  '들/Suffix',
  '많아서/Adjective',
  '구매/Noun',
  '할/Verb',
  '때/Noun',
  '고민/Noun',
  '엄청/Adverb',
  '했다/Verb'],
 [],
 ['탄탄한/Adjective',
  '원단/Noun',
  '아랫/Modifier',
  '배/Noun',
  '잘/Verb',
  '잡아줘서/Verb',
  '만족/Noun',
  '여름/Noun',
  '덥고/Adjective',
  '봄/Noun',
  '가을/Noun',
  '입기/Verb',
  '좋을/Adjective',
  '것/Noun',
  '같다/Adjective']

3. Embedding

1
2
3
from gensim.models import Word2Vec, fasttext
 
Skip_Gram_model = Word2Vec(corpus, size=25, window=5, min_count=5, workers=2, sg=1)
cs


4. Test&Result

1
2
words = Skip_Gram_model.wv.index2word #one-hot encoding알아서 해줌 
words
cs


['너무/Adverb',
 '바지/Noun',
 '진짜/Noun',
 '핏/Noun',
 '연/Modifier',
 '사이즈/Noun',
 '허리/Noun',
 '제/Noun',
 '청/Noun',
 '허벅지/Noun',
 '다리/Noun',
 '저/Noun',
 '구매/Noun',
 '같아요/Adjective',
 '딱/Adverb',
 '안/VerbPrefix',
 '들/Suffix',
 '고민/Noun',
 '잘/Verb',
 '정말/Noun',
 '좋아요/Adjective',
 '예뻐요/Adjective',
 '것/Noun', ....

1
2
vectors = Skip_Gram_model.wv.vectors
vectors

cs

array([[-0.00946812,  0.20265321,  0.28635332, ...,  0.28202927,
        -0.24851047, -0.15287688],
       [-0.02840229,  0.20405722,  0.2701155 , ...,  0.26997638,
        -0.25176477, -0.13814038],
       [-0.02414494,  0.20267196,  0.28887203, ...,  0.2676658 ,
        -0.21911621, -0.12918772],
       ...,
       [ 0.01376533,  0.12784578,  0.19192848, ...,  0.17304657,
        -0.15187787, -0.0991761 ],
       [-0.0175157 ,  0.1296291 ,  0.21147071, ...,  0.20749983,
        -0.16693573, -0.10763147],
       [-0.01318917,  0.11856428,  0.17788784, ...,  0.18917157,
        -0.17810103, -0.11191662]], dtype=float32)

1
2
3
len(vectors)  #263
 
Skip_Gram_model_result = dict(zip(words, vectors))
cs



1
Skip_Gram_model.most_similar('만족해요/Adjective', topn=5)
cs
[('생각/Noun', 0.9986996650695801),
 ('좋아요/Adjective', 0.9985920786857605),
 ('스판/Noun', 0.998421311378479),
 ('최고/Noun', 0.9984130859375),
 ('입고/Verb', 0.9983964562416077)]
1
Skip_Gram_model.most_similar('이뻐요/Adjective', topn=5
cs
[('살이/Noun', 0.99916011095047),
 ('보이핏/Noun', 0.9990991353988647),
 ('합니다/Verb', 0.9990346431732178),
 ('것/Noun', 0.999003529548645),
 ('입어도/Verb', 0.9989872574806213)]
1
Skip_Gram_model.most_similar('했는데/Verb', topn=5)
cs
[('좋아서/Adjective', 0.9993449449539185),
 ('키/Noun', 0.9993075728416443),
 ('너무/Adverb', 0.9992955923080444),
 ('들/Suffix', 0.999271035194397),
 ('이/Noun', 0.9991423487663269)]
1
Skip_Gram_model.most_similar('색감/Noun', topn=5)
cs
[('너무/Adverb', 0.9987787008285522),
 ('같아요/Adjective', 0.9987603425979614),
 ('들/Suffix', 0.9987325072288513),
 ('하비/Noun', 0.9987225532531738),
 ('허벅지/Noun', 0.998692512512207)]

5. Visualize

1
2
3
4
5
import matplotlib.font_manager as fm
 
font_location = 'C:/Windows/Fonts/서울남산 장체B.ttf'  # 한글아...한글아..
font_name = fm.FontProperties(fname = font_location).get_name()
plt.rc('font', family = font_name)
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def plot_with_labels(low_dim_embs, labels, filename='tsne.png'):
    assert low_dim_embs.shape[0>= len(labels), 'More labels than embeddings'
 
    plt.figure(figsize=(1818))        # in inches
 
    # 해당 좌표에 점을 표시하고, 오른쪽/하단 정렬로 단어를 표시한다.
    for i, label in enumerate(labels):
        x, y = low_dim_embs[i]
 
        plt.scatter(x, y)
        plt.annotate(label,
                     xy=(x, y),
                     xytext=(52),
                     textcoords='offset points',
                     ha='right',
                     va='bottom')
 
    plt.savefig(filename)
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt
 
# low_dim_embs 내부 갯수와 n_components가 같아야 한다!
# n_components : 차원
# perplexity : 가장 가까운 이웃 갯수
# n_iter : 최적화에 사용할 반복 횟수
# init : embedding 초기화 방법
tsne = TSNE(perplexity=30, n_components=2, init='pca', n_iter=5000)
 
# plot 갯수. 8000개의 embeddings로부터 앞쪽 일부만 사용.
# low_dim_embs에는 변환된 좌표 x, y가 들어있다.
plot_only = 500
low_dim_embs = tsne.fit_transform(vectors[:plot_only])     # (500, 2)
labels = words[:plot_only]                                  
 
plot_with_labels(low_dim_embs, labels)
cs

plot.png







List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 우수 코드 게시판 이용 관련 공지사항 DataMarket 2014.05.21 315300
304 투빅스 9&10기 5주차 NLP Basic - 10기 장유영 장유영 2018.08.22 377554
» 투빅스 10기&11기 7주차 NLP - 11기 김유민 file 2019.03.21 350106
302 투빅스 10기&11기 1주차 Algorithm - 11기 한재연 1 file 한재연 2019.01.31 192386
301 투빅스 10기&11기 2주차 SVM, Naive Bayes, KNN - 11기 김대웅 file 김대웅 2019.01.31 142135
300 투빅스 6&7기 2주차 과제 - 회귀분석 6기 장재석 2 재석 2017.02.04 129785
299 투빅스 10&11기 1주차 Logistic Regression - 11기 김대웅 file 김대웅 2019.01.23 114868
298 투빅스 11기&12기 4주차 Decision Tree - 12기 김탁영 file 2019.08.17 113385
297 투빅스 9&10기 4주차 PCA-mnist - 10기 강인구 file kaig 2018.08.16 103585
296 투빅스 7&8기 1주차 과제 알고리즘 - 8기 김강열 file 김강열 2017.07.27 100419
295 SNA(Social Network Analysis) 분석 file 바키똥 2015.04.03 90780
294 투빅스 9&10기 2주차 Naive Bayes - 10기 장유영 2 file 장유영 2018.08.01 87646
293 투빅스 7&8기 6주차 과제 TF-IDF 문서유사도 측정 - 8기 최서현 최서현 2017.08.31 83265
292 인공신경망(Artificial Neural Network) 분석 3 file 권도영 2015.04.13 75726
291 KNN (K-Nearest Neighbor) file 바키똥 2015.09.28 68202
290 능형 회귀 분석 file 자꾸생각나 2015.05.05 62223
289 지도 만들기 file 조호 2015.04.15 61004
288 크롤링 - 전국 이디야 매장정보를 중심으로 (5기 이승은) 2 file 켜져있는멀티탭 2016.03.26 59628
287 인공신경망(Aritificial Neuron Network) file 자꾸생각나 2015.09.16 56994
286 NBA data 회귀분석 / Adult data 로지스틱 회귀분석, 나이브베이즈, 의사결정나무 - 5기 정현재 2 file 정현재 2016.03.03 56674
Board Pagination ‹ Prev 1 2 3 4 5 6 7 8 9 10 ... 16 Next ›
/ 16

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소

Designed by sketchbooks.co.kr / sketchbook5 board skin

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5