일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- pandas
- adaptive life cycle
- webcrawling
- AWS
- Method
- python
- DANAWA
- data
- 다나와
- instance
- ECS
- keras
- javascript
- Scrum
- analyzing
- tensorflow
- TypeScript
- angular
- 애자일
- matplotlib
- Agile
- Project
- 자바스크립트
- 크롤링
- 프로젝트
- data analyze
- opencv
- algorithm
- Crawling
- visualizing
Archives
- Today
- Total
LiJell's 성장기
__15.data.analyzing_Danawa_preprocessing(다나와 2편) 본문
Bigdata/Web Crawling
__15.data.analyzing_Danawa_preprocessing(다나와 2편)
All_is_LiJell 2022. 1. 21. 18:39반응형
- 다나와 1편 크롤링: https://lime-jelly.tistory.com/54
- 다나와 3편 시각화: https://lime-jelly.tistory.com/56
- 다나와 4편 연습: https://lime-jelly.tistory.com/entry/17dataanalyzingDanawaFindMonitor-%EB%8B%A4%EB%82%98%EC%99%80-4%ED%8E%B8
15. 다나와 크롤링 데이터 전처리 (preprocessing)
15.1. 데이터 가져오기
import pandas as pd
import numpy as np
data = pd.read_excel('./files/danawa_crawling_result_class.xlsx')
data.info()
data.head()
'''
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 440 entries, 0 to 439
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 상품명 410 non-null object
1 스펙 목록 410 non-null object
2 가격 440 non-null int64
dtypes: int64(1), object(2)
memory usage: 10.4+ KB
'''
'''
상품명 스펙 목록 가격
0 LG전자 오브제컬렉션 코드제로 ThinQ A9S AO9571 핸디/스틱청소기 / 핸디+스틱형 / 무선형 / 흡입+걸레겸용 / 소비전력: 590W... 1057840
1 삼성전자 비스포크 제트 VS20A956A3 핸디/스틱청소기 / 핸디+스틱형 / 무선형 / 흡입+걸레겸용 / [성능] 흡입력: ... 564850
2 LG전자 코드제로 ThinQ A9S AS9370IKT 핸디/스틱청소기 / 핸디+스틱형 / 무선형 / 흡입+걸레겸용 / 소비전력: 590W... 793780
3 샤오미 CLEANFLY 차량용 무선 청소기 4세대 H2 (해외구매) 차량용청소기 / 무선 / 흡입력: 16,800Pa / 최대출력: 120W / 헤파필... 60090
4 G00FvMK3Am G00FvMK3Am879586 879586
'''
15.2. 회사명, 모델명 정리
company_list = data['상품명'][0].split(' ', 1)[0]
product_list =data['상품명'][0].split(' ', 1)[1]
print(company_list)
print(product_list)
'''
LG전자
오브제컬렉션 코드제로 ThinQ A9S AO9571
'''
# data.head()
company_list = []
product_list = []
for title in data['상품명']:
try:
title_info = title.split(" ", 1)
company_name = title_info[0]
product_name = title_info[1]
company_list.append(company_name)
product_list.append(product_name)
except:
# pass
company_list.append(None)
product_list.append(None)
# print(company_list[:5])
# print(product_list[:5])
len(company_list)
len(product_list)
'''
440
'''
15.3. 스펙 목록 데이터 살펴보기
spec_list = data['스펙 목록'][0].split(' / ')
category = spec_list[0].strip()
for spec in spec_list:
if '사용시간' in spec:
use_time_spec = spec
elif '흡입력' in spec:
suction_spec = spec
print(use_time_spec)
print(suction_spec)
use_time_value = use_time_spec.split(': ')[1].strip()
suction_value = suction_spec.split(': ')[1].strip()
print(use_time_value)
print(suction_value)
'''
사용시간(개당): 1시간
[성능] 흡입력: 210W
1시간
210W
'''
category_list = []
use_time_list = []
suction_list = []
for spec_data in data['스펙 목록']:
spec_list = spec_data.split(' / ')
category = spec_list[0].strip()
category_list.append(category)
for spec in spec_list:
if '사용시간' in spec :
use_time_spec = spec
elif '흡입력' in spec:
suction_spec = spec
use_time_value = use_time_spec.split(': ')[1].strip()
suction_value = suction_spec.split(': ')[1].strip()
use_time_list.append(use_time_value)
suction_list.append(suction_value)
print(category_list[:5])
print(use_time_list[:5])
print(suction_list[:5])
'''
['핸디/스틱청소기', '15HbyqXjpg492473', '핸디/스틱청소기', '핸디/스틱청소기', '차량용청소기']
['1시간', '1시간', '1시간', '1시간', '30분']
['210W', '210W', '210W', '210W', '16,800Pa']
'''
15.4. 단위 맞추기
15.4.1. 시간
mytime = '1시간30분'
mytime.split('시간')[0]
# mytime.split('시간')[-1].replace('분', "")
mytime.split('시간')[-1].split('분')[0]
'''
'30'
'''
def convert_time_minute(time):
try:
if '시간' in time:
hour = time.split('시간')[0]
if '분' in time:
minute = time.split('시간')[-1].split('분')[0]
else:
minute = 0
else:
hour = 0
minute = time.split('분')[0]
return int(hour)*60 + int(minute)
except:
return None
time = '1시간40분'
result = convert_time_minute(time)
result
'''
100
'''
new_use_time_list = []
for time in use_time_list:
value = convert_time_minute(time)
new_use_time_list.append(value)
new_use_time_list[:10]
'''
[60, 60, 60, 60, 30, 60, 60, 45, 60, 60]
'''
15.4.2. 흡입력
suction_list[:20]
'''
['210W',
'210W',
'210W',
'210W',
'16,800Pa',
'210W',
'20000Pa',
'15,000Pa',
'22000Pa',
'210W',
'210W',
'210W',
'151AW',
'140W',
'210W',
'210W',
'13,000Pa',
'8,000Pa',
'22000Pa',
'200W']
'''
def get_suction(value):
try:
value = value.upper()
if "AW" in value or "W" in value:
result = value.replace("A", "").replace("W", "").replace(",", "")
result = int(result)
elif "PA" in value:
result = value.replace("PA", "").replace(",", "")
result = int(result)/100 # 얼추 AW = W = 100Pa 라고 한다.
else:
result = None
return result
except:
return None
new_suction_list = []
for power in suction_list:
value = get_suction(power)
new_suction_list.append(value)
new_suction_list[:10]
'''
[210, 210, 210, 210, 168.0, 210, 200.0, 150.0, 220.0, 210]
'''
15.5. 파일저장
15.5.1. 저장할 파일 카테고리 추가
pd_data = pd.DataFrame()
pd_data['카테고리'] = category_list
pd_data['회사명'] = company_list
pd_data['제품'] = product_list
pd_data['가격'] = data['가격'].astype(np.int32)
pd_data['사용시간'] = new_use_time_list
pd_data['흡입력'] = new_suction_list
pd_data.head()
'''
카테고리 회사명 제품 가격 사용시간 흡입력
0 핸디/스틱청소기 LG전자 오브제컬렉션 코드제로 ThinQ A9S AO9571 1055260.0 60.0 210.0
1 15HbyqXjpg492473 None None 492473.0 60.0 210.0
2 핸디/스틱청소기 삼성전자 비스포크 제트 VS20A956A3 564850.0 60.0 210.0
3 핸디/스틱청소기 LG전자 코드제로 ThinQ A9S AS9370IKT 784550.0 60.0 210.0
4 차량용청소기 샤오미 CLEANFLY 차량용 무선 청소기 4세대 H2 (해외구매) 59840.0 30.0 168.0
'''
print(len(category_list))
print(len(company_list))
print(len(product_list))
print(len(new_use_time_list))
print(len(new_suction_list))
'''
410
410
410
410
410
'''
15.5.2. 저장
condition = pd_data['카테고리'] == '핸디/스틱청소기'
pd_data_final = pd_data[condition]
len(pd_data_final)
# pd_data_final.to_excel('./files/2_danawa_data_final_class.xlsx',
# index = False)
pd_data_final.dropna(inplace = True)
pd_data_final.info()
pd_data_final.to_excel('./files/2_danawa_data_final_class.xlsx',
index = False)
'''
<class 'pandas.core.frame.DataFrame'>
Int64Index: 260 entries, 0 to 409
Data columns (total 6 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 카테고리 260 non-null object
1 회사명 260 non-null object
2 제품 260 non-null object
3 가격 260 non-null float64
4 사용시간 260 non-null float64
5 흡입력 260 non-null float64
dtypes: float64(3), object(3)
memory usage: 14.2+ KB
'''
# pd_data_final.to_excel('./files/2_danawa_data_final_class.xlsx',
# index = False)
pd_data_final.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 260 entries, 0 to 409
Data columns (total 6 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 카테고리 260 non-null object
1 회사명 260 non-null object
2 제품 260 non-null object
3 가격 260 non-null float64
4 사용시간 260 non-null float64
5 흡입력 260 non-null float64
dtypes: float64(3), object(3)
memory usage: 14.2+ KB
반응형
'Bigdata > Web Crawling' 카테고리의 다른 글
__17.data.analyzing_Danawa_Find_Monitor (다나와 4편) (0) | 2022.01.23 |
---|---|
__16.data.analyzing_Danawa_Visualizing (다나와 3편) (0) | 2022.01.21 |
__14.data.analyzing_Danawa_Crawling (다나와 1편) (0) | 2022.01.21 |
__13.data.analyzing_Starbucks_data_visualizing (스타벅스 3편) (0) | 2022.01.20 |
__12.data.analyzing_Starbucks_data_preprocessing (스타벅스 2편) (0) | 2022.01.20 |
Comments