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

- 첫 프로젝트 글 순서 -
1. 파이썬(python) EDA 데이터분석 주제 정하기
2. 실패한 여기어때 후기 웹스크래핑(web scraping)
3. 데이터 수집 방법 & 데이터 추출, 정제
4. 판다스(pandas) 데이터 처리 / Matplotlib, Json 시각화
5. 정리

지난 번에 글을 올린지 딱 2달이 지났다. 이후에 프로젝트를 벌써 3개를 더했는데... 틈만 나면 해야지 해야지 하는데 시간이 많이 나지를 않았다. 머신러닝, 인공지능 등 개념학습 따라가기도 너무 벅찼고, 모델은 아직까지 이해도 안 되는 수준이긴 하지만 더 늦어지면 안 될 것 같아서 미리미리 간단하게 쓰기로 했다.

솔직히 EDA 데이터 분석 팀프로젝트 5번째 항목 정리를 왜 했지라는 생각이 든다. 그래서 간단하게 어떻게 진행을 했고 어떤 것을 사용했는지, 결론은 어떻게 도출했는지만 간단하게 쓰려고 한다. 부지런하게 남은 프로젝트들도 업로드하면서 github도 사용해봐야 하는데 쉽지 않다. 개인적으로 마케팅 분석하고 sns까지 하다보니 시간이 남지 않는다. 해커톤까지 ???

나중에 알게 된건데 필수로 써야하는 부분이 몇개 있다.

1. 언어(파이썬, 자바, C 등..), 패키지(matplolib, pandas 등), 툴(주피터노트북, 코랩, 파이참 등..)
2. 일정표
3. 과정, 순서 등





이번에 주로 사용했던 것은 pandas, matplolib, json을 사용하였다. sns도 사용하려고 했는데 당시에는 생각보다 쉽지 않아서 matplotlib으로 데이터 시각화를 대부분 담당했다. 나중에도 시각화하는데 많이 사용하기 때문에 알아두는 것이 좋다.


과정, 순서 등은 어떤 부분에서 얼만큼의 시간을 썼는지 쓰면 좋을 것이다.


프로젝트를 할 때 주제가 많이 제한적이게 된 이유는 데이터를 구하기 너무 어렵다. 예전에 데이터가 곧 권력이고 힘이라고 했던 부분, 그리고 스프링쿨러? 온도, 습도 등의 데이터를 모아놨던 회사가 구글에 데이터를 고가에 팔았다는 것, 머신러닝을 하면서 더 느끼게 됐다.


데이터를 토대로 결론 도출을 해봤다
- 창업시 고려해야할 위치와 업종을 데이터를 통해 파악하기 쉽다.
- 업종에서는 소매업이 가장 많고, 그 다음이 음식점, 그리고 도민의 소매업이 평상시에도 많다.
- 성수기 때 슈퍼마켓, 체인화 편의점 이용률이 많이 늘어났다. 숙박업을 할 경우 미리 물품 구매를 하면 더 좋을 것이다.

=> 하고 싶은 업종을 입력했을 때, 위치, 경쟁, 타겟층을 보여주는 프로그램을 보여줘도 나쁘지 않을 것 같다.

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

- 첫 프로젝트 글 순서 -

 

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

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

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

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

5. 정리


데이터를 어떤 식으로 그룹핑을 할지 고민을 하다가 cost(비용)으로 하기로 했다. 

 

-큰 틀에서 묶기-

 

제주시/서귀포시 매출 비교

업종별 매출

성별/연령별 소비

개별/단체 소비

성수기/비수기

 

 

 

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
38
39
40
41
42
# 월별 / 남성 / 나이/ 종류 별 금액
sum_stores =  df.groupby(['date','sex','age','stores'])['cost'].sum()
print(sum_stores.plot(kind='bar', rot=90) )
 
#성수기 비수기
sum_sb = df.groupby('date')['cost'].sum()
 
 
#업종별 매출 
sum_stores = df.groupby('stores')['cost'].sum()
 
 
#성별, 연령별 소비 순위
sum_sa = df.groupby(['sex','age'])['cost'].sum()
sum_sa
 
#성별 업종 이용현황, 연령별 업종 이용현황, 성별&연령별 업종 이용현황
sum_st = df.groupby(['sex','stores'])['cost'].sum()
sum_at = df.groupby(['age','stores'])['cost'].sum()
sum_sat = df.groupby(['sex','age','stores'])['cost'].sum()
 
#제주시 서귀포시 소비 비교 / 읍면동별 소비 비교
sum_city = df.groupby(['city'])['cost'].sum()
sum_city2 = df.groupby(['city2'])['cost'].sum()
 
#제주시 서귀포시 업종별 소비 비교 / 읍면동 업종별 소비 비교
sum_ct = df.groupby(['city','stores'])['cost'].sum()
sum_ct2 = df.groupby(['city2','stores'])['cost'].sum()
 
#지역 각 성별 업종 이용률
sum_cst2 = df.groupby(['city2','sex','stores'])['cost'].sum()
 
#개별과 단체 총금액 비교
sum_visitor = df.groupby(['visitor'])['cost'].sum()
 
#개별 단체 성별 총금액 비교 / 개별 단체 업종별 총금액 비교 / 단체 or 개별에서 이용자별 금액비교
sum_vs = df.groupby(['visitor, sex'])['cost'].sum()
sum_vt = df.groupby(['visitor, stores'])['cost'].sum()
sum_vu = df.groupby(['visitor, user'])['cost'].sum()
 
#개별(내국인, 법인, 외국인) / 단체에서 이용하는 업종
sum_vut = df.groupby(['visitor, user, stores'])['cost'].sum()
cs

우선 데이터가 어떻게 보여지는지 기본적인 시각화를 진행했다. 만약 세부정보가 필요하면, 세분화해서 EDA데이터 분석하는데 유용하게 활용했다.

 

 

1
2
3
4
5
6
#특정 업종, 날짜
sum_sdt = df[(df.stores == '소매업')  & (df.date == 'Feb-17')].groupby('type')['cost'].sum()
 
#특정 연령, 
sum_ast = df[df.age==10].groupby(['sex','type'])['cost'].sum().sort_values().tail(20)
 
cs

열에서 특정 연령, 성별, 업종만 뽑아내서 더하고 싶으면, df[df.열 == '열 속성'].groupby를 이용해주면 된다. 특정 열에서 속성을 추출해서 더하는 코드가 나오지 않아서 참고하면 좋을 것 같다.

 

 

 

1
2
3
4
5
plt.rc('font',family='Malgun Gothic')
plt.figure(figsize=[20,10])
plt.style.use('ggplot')
sum_sa = df.groupby(['sex','age'])['cost'].sum()
sum_sa.plot(kind='bar'
cs

matplotlib 함수를 활용하여 가장 기본적인 시각화를 했다. 

 

 


 

얘네를 모아서 EDA 데이터 분석에 필요한 자료만 모으고, title, x축, y축, 그래프 색, 그래프 종류(box, bar, barh, violinplot, pie) 등으로 다시 시각화 과정을 진행했다.

 

 

 

1
2
3
4
5
6
7
8
9
10
plt.figure(figsize=[10,5])
title_font = {'fontsize'16'fontweight''bold'}
plt.title('도민 소매업 매출 순위', fontdict = title_font, loc = 'center', pad =20)
sum = df[(df.stores=='소매업'& (df.visitor=='도민')].groupby('type')['cost'].sum()
ax = plt.subplot()
ax.set_xticklabels(['0','500억''1000억''1500억''2000억''2500억''800억'])
sum.plot(kind = 'barh', color = '#f39189')
plt.xlabel('Total Amount')
plt.ylabel('Type of Business')
sum_sa
cs

barh 막대 그래프

 

 

 

1
2
3
4
5
6
explode = [ 0.10.1,0.10.1,0.1,0,0 ]
title_font = {'fontsize'16'fontweight''bold'}
plt.title('업종별 매출', fontdict=title_font, loc='center', pad= 20)
sum_sa = df.groupby('stores')['cost'].sum().sort_values()
sum_sa.plot(kind='pie',y='sum', autopct = '%1.1f%%',explode=explode, startangle=0)
 
cs

 

pie 그래프

 

 

 

 

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import pandas as pd
from pandas import Series, DataFrame
import matplotlib.pyplot as plt
import folium
from folium import plugins
from folium.plugins import MarkerCluster
import json
 
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'])
         # 카드 이용금액 csv
df2 = pd.read_csv("jeju_lalo.csv",engine='python', encoding = 'euc-kr')
#df2 = 제주도의 행정구역을 위도 및 경도로 나눈 csv
df3 = pd.read_csv("jeju_cost.csv",engine='python', encoding = 'euc-kr')
#df3 = 구역별 소비를 나타낸 csv
df = pd.DataFrame(df1)
 
lat = df2['위도'].mean()
long = df2['경도'].mean()
= folium.Map([lat,long], zoom_start=9)
# lay, long의 평균값으로 지도의 첫 화면 지정 / 줌lv = 9
= df.groupby(['city2'],  as_index = False)['cost'].sum()
# city2 컬럼을 그룹바이하고 그 중의 cost컬럼을 모두 sum.
# as_index = False : 그룹 바이 한 데이터 프레임에 index 번호를 추가해준다.
 
#---------------------------제이슨 표시---------------------------
#제주도의 행정구역을 시각화로 나눠주는 geojson road
with open("Jeju_json3.geojson", mode='rt',encoding='utf-8'as f:
    jeju_json = json.loads(f.read())
    f.close()
folium.GeoJson(jeju_json, name='jeju_haejoeng').add_to(m)
#------------------------------------------------------------------
 
#---------------------------제이슨 조건---------------------------
folium.Choropleth(geo_data = jeju_json,         # geo_data load
                  data = df3,                 # 위치를 표현해줄 데이터 load
                  columns = ('읍면동''이용금액'),     # ('지도에 표현할 컬럼', '비교할 컬럼')
                  key_on = 'feature.properties.adm_nm',     # geo_data load 후 데이터를 어디서 받을지
                  fill_color = 'YlGn',             # 비교해서 나타낼 색 / 노란색/초록색
                  fill_opacity = 0.8,             #
                  line_opacity = 0.5,             #
                  legend_name = '지역별 매출액'         # 우측 상단에 나오는 bar 이름
                  ).add_to(m)
#------------------------------------------------------------------
 
marker_cluster = MarkerCluster().add_to(m)         # 마커 클러스터 추가 (현재 코드엔 사용 안함.)
for i in range(len(a.index)):
    b = df2[df2['읍면동'== a.iloc[i,0]]         # df2 읍면동 컬럼에서 a의 [i,0] 값과 같은것을 추출
    sub_lat = b.iloc[0,4]                 
    sub_long = b.iloc[0,5]                 # 위, 경도 설정
    title = b.iloc[0,2]                 # title 설정
 
    folium.Marker([sub_lat,sub_long],tooltip = title).add_to(m) 
    # 마커 설정 마커클러스터를 실행시키려면 add_to(marker_cluster)
 
#folium.LayerControl(collapsed=False).add_to(m)     # 그룹화된 기능들을 사용하기위해 컨트롤러 설정
m.save('jeju.folium.html')
 
 
cs

제주도 marker

 

 

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import pandas as pd
from pandas import Series, DataFrame
import matplotlib.pyplot as plt
import folium
from folium import plugins
from folium.plugins import MarkerCluster
import json
 
# json 도시별 행정구역 구분 sggnm
df1= pd.read_csv(r"C:\Users\rhdud\Desktop\py_team\read_file\123123.csv",engine='python', encoding = 'euc-kr', header=0,
                names=['date','city''city2''type''user''visitor''age''sex''cost''stores'])
df2 = pd.read_csv(r"C:\Users\rhdud\Desktop\py_team\read_file\jeju_lalo.csv",engine='python', encoding = 'euc-kr')
#df2 = 제주도 행정구역 위도 및 경도로 나눈 csv
df3 = pd.read_csv(r"C:\Users\rhdud\Desktop\py_team\read_file\jeju_cost.csv",engine='python', encoding = 'euc-kr')
df = pd.DataFrame(df1)
 
 
lat = df2['위도'].mean()
long = df2['경도'].mean()
= folium.Map([lat,long],zoom_start=9)
# lay, long의 평균값으로 지도의 첫 화면 지정 / 줌lv = 9
= df.groupby(['city2','sex','stores'],  as_index = False)['cost'].sum()
'''
#---------------------------폴리움 그룹화---------------------------
fg = folium.FeatureGroup(name = '도시별 표현')
m.add_child(fg)
g1 = plugins.FeatureGroupSubGroup(fg, '제주시')
m.add_child(g1)
g2 = plugins.FeatureGroupSubGroup(fg, '서귀포시')
m.add_child(g2)
g3 = plugins.FeatureGroupSubGroup(fg, 'Json으로 표현')
m.add_child(g3)
#------------------------------------------------------------------
'''
#---------------------------제이슨 표시---------------------------
with open(r"C:\Users\rhdud\Desktop\py_team\read_file\Jeju_json.geojson", mode='rt',encoding='utf-8'as f:
    jeju_json = json.loads(f.read())
    f.close()
folium.GeoJson(jeju_json, name='jeju_haejoeng').add_to(m)
#------------------------------------------------------------------
 
#---------------------------제이슨 조건---------------------------
key_by = 'feature.properties.adm_nm'
folium.Choropleth(geo_data = jeju_json,
                  data = df3,
                  columns = ['읍면동''이용금액'],
                  key_on = key_by[key_by.rfind(' ')+1 :],
                  fill_color='YlGn',
                  fill_opacity=0.8
                  ).add_to(m)
#------------------------------------------------------------------
 
m.save('jeju_data1.html')
cs

제주도 choropleth

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