Machine Learning

url dataset 분석 작업

yssy431 2020. 11. 1. 10:43

url 및 category가 있는 데이터셋을 구하게 되어 데이터 분석을 먼저 진행하게 되었다. 대략 25000건의 csv파일을 구하게됨

 

url의 형태이기에 먼저 domain을 추출하는 작업 진행

import pandas as pd
from urllib.parse import urlparse


def urltodomain(url):
    o = urlparse(url)
    domain = f'{o.scheme}://{o.netloc}'
    return domain

data = pd.read_csv('./url_db.csv',encoding = 'cp949')
pd_urls = data['url'].tolist()
domain_list = list(map(urltodomain,pd_urls))

domain 추출하고 category도 약간의 정규식을 통한 처리가 필요 

'숫자(카테고리이름)' 이런 식으로 저장되어 있기에 카테고리 이름만 추출하는 작업 진행

import re


def regx(string):
    return re.findall('\(([^)]+)', string)[0]
    
pd_category = data['category']
category = list(map(regx,pd_category))

두개의 list로 dataframe 생성 후 domain 중복 제거 작업, groupby로 카테고리별 데이터의 갯수확인

25000 dataset중 607개의 카테고리만 존재, Maching learning을 각카테고리의 domain 갯 수의 평균치가 비슷한 데이터를 원했지만 편향된 데이터임을 확인. 이때부터 느낌이 좋지않았다..

origin_df = pd.DataFrame({'domain' : domain_list,'category' :category_extract})
origin_df.drop_duplicates('domain',inplace= True)
count_df = origin_df.groupby('category').count()
graph_df = count_df.sort_values(by = 'domain',ascending = False)

 

시각화 하여 보기 위해 matplotlib을 이용하여 barchart로 확인 작업 예상했던데로 충분하지 않은 데이터임을 확인

25000 url을 domain 중복 제거 후 확인을 해보니 대략 3000천개 domain.

 

import matplotlib.pyplot as plt
%matplotlib inline

x = graph_df.index
y = graph_df.domain

plt.rc('font', family='Malgun Gothic')
plt.figure(figsize=(12,13))
plt.barh(x[:20],y[:20])

for i, v in enumerate(count[:20]):
    plt.text(v+3,i,v,fontsize = 12)
    
plt.title('카테고리 별 domain Top 20',fontsize = 20)
plt.xlabel('count',fontsize = 15)
plt.ylabel('category',fontsize = 15)
plt.show()

 

 domain 갯수보다 카테고리별 데이터가 편향적인게 고민이됨, 새로운 dataset을 구하느냐 아니면 category의 갯수를 줄이는 방안이 나을지 생각해봐야 할 것 같다. 계획했던 것 자체가 막혔지만 일단 크롤링을 먼저 구현해야 할 것 같다.