336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

- 첫 프로젝트 글 순서 -

1. 파이썬(python) EDA 데이터분석 주제 정하기 

2. 실패한 여기어때 후기 웹스크래핑(web scraping)

3. 데이터 수집 방법 & 데이터 추출, 정제

4. 판다스(pandas) 데이터 처리 / Matplotlib, Json 시각화

5. 정리

 


사진 클릭시 사이트로 이동합니다

 

 

캐글

Kaggle에서는 데이터 과학 작업에 필요한 모든 코드와 데이터를 찾을 수 있다. 50,000 개 이상의 공개 데이터 세트 와 400,000 개의 공개 노트북을 사용하여 분석이 가능하다고 나온다.

 

장점 : 고급 데이터가 많다.

단점 : 정의가 약간 불분명하다. 정확한 출처 비공개

 

 

 

 

 

서울 열린 데이터 광장 

 

열린데이터광장에서 서울시와 연계 기관이 공개한 공공데이터를 확인할 수 있다. 

SHEET (6326) / OpenAPI (5139) / CHART  (1320) / FILE (595) / LINK (164)

 

 

 

 

공공데이터 포털 

 

공공기관이 만들어내는 모든 자료나 정보, 국민 모두의 소통과 협력을 이끌어내는 공적인 정보를 모아놨다.

5만 6천여건의 자료를 확인할 수 있다.

 

API 자료, 웹 스크래핑 등 다양한 방법을 사용하려고 했으나 처음 프로젝트라서.. 간단하게 엑셀 파일을 사용했다.

 

 

 

 

제주도 데이터허브

 

제주도 관련 자료를 찾다가 유용한 자료들이 많아서 여기서 카드 매출 자료를 활용했다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
import numpy as np
import pandas as pd
from pandas import Series, DataFrame
import matplotlib.pyplot as plt
import seaborn as sns
 
 
df1= pd.read_csv("jeju_card.csv",engine='python', encoding = 'euc-kr', header=0,
                names=['date','city''city2''type''user''visitor''age''sex''cost''stores'])
 
df = pd.DataFrame(df1)
 
cs

만약 한글이 깨지면 encoding에 'utf-8' 또는 'euc-kr'으로 설정을 하면 깨지지 않고 잘 나온다. 함수 사용할때 편리하게 하기 위해서 열을 재정의 했다.

 

 

1
2
3
4
5
df.info()
df.head()
df.shape
df.index
df.columns
df['업종명'].unique()
cs

데이터 정제를 위해서 데이터가 어떻게 구성이 됐는지 확인해야 한다.  결측치(NaN값), 중복값 등을 조정해야 한다.

 

df.replace(to_replace = np.nan, value = ?)

df.fillna(0)

 

로 데이터를 수정하려고 했으나, 개인 / 단체 / 성별 / 연령이 복잡하게 엉켜있어서 따로 수정하지 않았다. (오차가 크지 않아서 뺌)

 

컬럼과 타입 확인

 

 

 

데이터 어떻게 보여지는지 확인

 

 

 

97만개의 데이터와 10개의 컬럼

 

 

 

컬럼이 어떤지 확인 

 

 

 

컬럼이 어떻게 구성이 됐는지 확인

 

택시 운송업/버스 운송업이 미분류로 되어 있고, 내항 여객 항공업/정기 항공 항공업 등이 오히려 운송업으로 되어 있어서 데이터를 수정해서 EDA 분석

 

 

 

 

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

- 첫 프로젝트 글 순서 -

1. 파이썬(python) EDA 데이터분석 주제 정하기 

2. 실패한 여기어때 후기 웹스크래핑(web scraping)

3. 데이터 수집 방법 & 데이터 추출, 정제

4. 판다스(pandas) 데이터 처리 / Matplotlib, Json 시각화

5. 정리




웹스크래핑 vs 웹크롤링 

 

웹스크래핑 : 분석을 위해서 특정 데이트를 추출해서 자신이 원하는 형태로 가공한다.

웹크롤링 : 웹사이트의 데이터를 수집하는 모든 작업, 일종의 로봇이라고 생각하면 된다.

 

 

 

 

출처 : 위키백과

파이썬 EDA 데이터분석 프로젝트 과정

 

목표 : 소비자가 원하는 서비스 파악하기

위치 : 제주도 제주시

업태 : 게스트하우스

수집항목 : 이름, 위치, 가격, 평점, 후기, 기본정보

웹스크레이핑 방법 : 3~5개 숙박 업체 제주도 검색 -> 인기순 -> 100개대략적 위치, 후기 내용 추출 -> 숙소의 위치를 표시하고, 숙박업 어떤 것이 서비스가 필요한지 키워드 10~50위 순위 보여주기 (제외할 키워드 생각)

 

 

 

 

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
32
33
34
35
36
37
import requests
from bs4 import BeautifulSoup 
import re
 
data = requests.get('https://www.goodchoice.kr/product/result?sort=ACCURACY&keyword=%EC%A0%9C%EC%A3%BC%EC%8B%9C&type=&sel_date=2021-04-08&sel_date2=2021-04-09&adcno%5B%5D=6&min_price=&max_price=')
name_list =[] #업소명
rate_list=[] #평점
price_list=[] #가격
 
html = data.text
soup = BeautifulSoup(html, 'html.parser')
n_list = soup.select('div.name  strong')
r_list = soup.select('p.score em')
p_list = soup.select('div.map_html b')
 
for i in n_list:
    name = i.string
    name_list.append((name).lstrip().replace("\t","").replace("\n","")) #탭이랑 줄바꿈 
    
for i in r_list:
    rate = i.string
    rate_list.append(rate)
    
for i in p_list:
    price = i.string
    price_list.append(price)
 
#print(rank_list)
#print(music_title)
#print(music_artist)
 
for i  in range(len(name_list)) :
    print('업소명:' , name_list[i])
    print('평점:' , rate_list[i])
    print('가격:' , price_list[i])
    print('-------------------------------')
 
cs

여기어때 사이트에 들어갔는데 데이터가 너무 방대해서, 제주시와 게스트하우스로 한정을 지었다. 우선 후기가 따로 들어가 있어서 일단 업소명, 평점, 가격을 추출하고 그 다음에 후기를 하나씩 추출하는 방식으로 진행을 하려고 했다.

 

 

BeautifulSoup : HTML과 XML 파일로부터 데이터를 가져오기 위한 라이브러리

find : html tag를 통한 크롤링

select : css를 통한 크롤링

find, select_one : 첫 번째 태그를 찾음

find_all, select : 모든 태그를 찾음

 

find보다 select가 '>'로 하위 태그로 접근이 쉬워서 여기어때 사이트에서 F12를 누르고 Ctrl + Shift + C 를 눌러서 element를 찾아서 업소명, 평점, 가격 별로 추출을 했다. 

 

 

 

 

제목 스크래핑하기 제목을 커서위에 대보니까, div class name > strong에 포함되어 있는 것을 확인할 수 있다. 하지만 출력을 해보면 줄바꿈과 탭으로 인해서 깔끔해보이지 않아서 replace()를 한 것이다. 중간중간 어떻게 출력이 되는지 print(n_list)를 각각 해보는 것을 추천한다.

 

 

 

 

 

결과를 확인해보니까 잘 출력되고 있다. 일정 부분까지 가고 스크롤이 내려가지 않아서 마지막에 에러가 뜨는 것으로 보인다. 

 

 

 

한계 1

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from time import sleep
from bs4 import BeautifulSoup as bs
from selenium import webdriver
from selenium.webdriver.common.keys import Keys #텍스트 외에 특수 키를 입력하기 위한 모듈
 
driver = webdriver.Chrome('chromedriver.exe')
url = "https://www.goodchoice.kr/"
driver.implicitly_wait(5)
driver.get(url)
 
search = driver.find_element_by_xpath('/html/body/div[1]/header/section/button[2]')
search.click()
#search.clear()
search = driver.find_element_by_xpath('//*[@id="keyword"]')
driver.implicitly_wait(5)
search.send_keys("제주시")
search.send_keys(Keys.ENTER)
#driver.implicitly_wait(5)
driver.set_window_size(1400,1000)
search = driver.find_element_by_xpath('//*[@id="content"]/div[1]/section[2]/ul/li[6]/label')
search.click()
search = driver.find_element_by_xpath('//*[@id="content"]/div[1]/div[2]/button[2]')
search.click()
cs

 

여기어때 싸이트에 들어감 -> 검색 창을 한 번 누르고, 한 번 더 눌러야함을 알 수 있음 -> 제주시를 입력하고, 엔터를 눌러서 검색 -> (gif에는 안 나오지만) 밑에 게스트하우스 클릭박스를 선택 후, 적용 클릭

 

우선 여기까지 구현을 하고 나서 게스트하우스를 하나씩 클릭하고 돌아오고는 할 수 있는데, 배운 선에서 웹 스크래핑으로 열린 창에 새로운 url 주소를 얻는 방법을 몰라서 벽에 부딪혔다 ㅠㅠㅠ

 

이건 나중에 개발자 친구한테 알아내서 추가하겠습니다.

 

 

 

한계 2

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
32
33
34
35
36
from wordcloud import WordCloud
from konlpy.tag import Twitter
from collections import Counter
 
# open으로 txt파일을 열고 read()를 이용하여 읽는다.
text = open('news.txt', encoding='utf-8').read() 
twitter = Twitter()
 
# twitter함수를 통해 읽어들인 내용의 형태소를 분석한다.
sentences_tag = []
sentences_tag = twitter.pos(text) 
noun_adj_list = []
 
# tag가 명사이거나 형용사인 단어들만 noun_adj_list에 넣어준다.
for word, tag in sentences_tag:
    if tag in ['Noun' , 'Adjective']: 
        noun_adj_list.append(word)
 
# 가장 많이 나온 단어부터 40개를 저장한다.
counts = Counter(noun_adj_list)
tags = counts.most_common(40
 
 
# WordCloud를 생성한다.
# 한글을 분석하기위해 font를 한글로 지정해주어야 된다. macOS는 .otf , window는 .ttf 파일의 위치를
# 지정해준다. (ex. '/Font/GodoM.otf')
wc = WordCloud(font_path='c:\Window\Fonts\malgun.ttf' ,background_color="white", max_font_size=60)
cloud = wc.generate_from_frequencies(dict(tags))
 
import matplotlib.pyplot as plt
plt.figure(figsize=(108))
plt.axis('off')
plt.imshow(cloud)
# plt.to_file('test.jpg') test.jpg 파일로 저장
plt.show()
cs

수업시간에 잠깐 배웠던 내용을 가지고 후기에 어떤 키워드가 많이 사용되는지 확인하려고 했다. wordcloud를 생성해서 후기를 모으고 상위 단어 top50 개를 추리려고 했다. 하지만 웹 스크래핑도 안 될뿐만 아니라, 예외 단어들을 어떻게 정할지 하나하나 생각해야 했다. 사람들이 쓰는 방법들이 다 달라서 좋다, 좋았어요, 좋구만, 좋아요 다 다르게 인식하면 어쩌나하고 강사님과 상의 후에 다른 방식으로 진행하기로 했다.

 

 

 

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

파이썬 EDA 데이터분석 팀 프로젝트, 마케팅 관점에서 생각하기 (제주도)

 

- 첫 프로젝트 글 순서 -

1. 파이썬(python) EDA 데이터분석 주제 정하기 

2. 실패한 여기어때 후기 웹스크래핑(web scraping)

3. 데이터 수집 방법 & 데이터 추출, 정제

4. 판다스(pandas) 데이터 처리 / Matplotlib, Json 시각화

5. 정리

 

 

3월 중순에 교육을 시작해서 단 몇 주만에 파이썬을 배웠다. 6개월 뒤에 이 글을 다시 보게 되면 참 답답하게 코딩을 했구나라고 생각을 했으면 좋겠다는 심정으로.. 열심히 코딩을 할 생각이다.

 

* 코딩 부분은 다음 편부터 나옵니다. 일련의 과정이니 참고만 해주세요


EDA 란?

 

데이터를 수집하고 수집된 데이터를 다양한 각도에서 관찰하고 이해하는 과정으로 보면 된다. 데이터를 분석하기 전에 그래프나 통계적인(matplotlip, seaborn) 방법으로 시각화해, 더욱 직관적으로 데이터를 처리해서 분석한다.

 

 

 

출처 : blog.naver.com/hrd04/221135900560

 

이렇게 복잡한 과정을 거쳐야할 수도 있지만... 간단하게 보면

데이터 수집 => 시각화 탐색 => 패턴 도출 => 인사이트 발견 순으로 보면 좀 할만하네?라고 생각이 든다. 

 

 

 

 

주제 선정

 

모르면 일단 친구한테 물어보는게 마음 편하다. 생각보다 간단한 주제를 해서 별거 아닐거라고 생각했는데 큰 오산...

 

 

 

 

[마케팅적인 관점으로 접근] 

1. 검색수, 관심, 날씨 등의 키워드 분석으로 6개월 후에 팔릴 제품 예상

- 날씨는 기상청 공공데이터, 검색 수는 구글 트렌드, 네이버 datalab으로 어느 정도 데이터를 뽑을 수 있지만, 개인의 관심과 개인이 구매했던 제품들을 보려면 개인 정보가 필요한데 데이터를 구하기 힘들 것으로 판단해서 포기

 

 

 

 

 

 

2. 드라마에 나오는 제품(협찬)이 실제 검색량과 구매에 얼마나 영향을 미치는지

- 커뮤니티에 홍보글들이 올라와서, 조회수 당 실질적으로 구매에 얼마나 많은 영향을 미칠까.. 인플루언서 마케팅의 효율이 얼마나 될지를 객관적인 데이터 자료로 생각을 하려고 했지만, 이것 또한 구매까지 파악이 안 돼서 pass 

 

3. 네이버 view 상위 검색 분석 

- 네이버에도 알고리즘이 있다고 하지만 어느정도 상관관계가 있을 수 있으니 for 구문으로 지역별 + 맛집 돌려서 상위 5~10개의 글에서 키워드, 그림 개수, 영상 길이, 블로그 전체 글 수 등을 웹 스크래핑으로 통계를 내서 진행하려고 했으나... 말로는 쉽지 실제 하기는 어려웠다.

 

 

 

[팀 회의]

- 지역별, 성별, 연령 등으로 정리 할 수 있는 코로나 감염자 현황

- 서울 지하철 역 별로 승/하차 인원 및 현재 열차의 위치

- 서귀포시 와 제주시로 나누어 토지 비교 / 상업용 비교

- 연도별 토지값 변동, 각 동별로 차이가 있는가

- 동일 생활권내 각동별로 같은가

 

 

 

[EDA 과정]

간단한 주제 밖에 나오지 않아서 '제주도 예비 창업자를 위한 업종 서비스 추천'이라는 EDA 팀 프로젝트 주제를 정했다 => 데이터를 찾아보니 너무 주제가 광범위해서, 숙박업으로 좁혔다(숙박업 서비스 개선을 위한 방안) => 그래도 데이터가 많은 것 같아서 에어비앤비, 야놀자, 여기어때 등의 숙박업체 중 탑 2 (야놀자, 여기어때 점유율이 1, 2위라는 걸 처음 알았음)에서도 제주시, 게스트하우스로 줄여나갔다.

 

* 머릿속 생각은 숙박업체 등에서 좋은 평점, 또는 많이 방문하는 업체들의 리스트를 뽑는다. 어떤 점에서 방문을 하는지 주위 상권 분석을 한다. 추가로 있으면 좋을 서비스나 경쟁력 갖추기 위한 것들을 제시한다. 제주도뿐만 아니라 타 여행도시랑 비교해본다. 

 

 

오만했다. 처음 프로젝트면 욕심을 버리자

 

 

다음 편은 후기를 웹 스크래핑으로 뽑아오기 

+ Recent posts