일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 머신러닝
- PostgreSQL
- seaborn
- airflow 설치
- Round
- 데이터시각화
- 다중 JOIN
- pandas
- MySQL
- solvesql
- 결측값
- SUM
- 전처리
- 프로그래머스
- TRUNCATE
- GROUPBY
- not in
- 그로스해킹
- Oracle
- join
- having
- 데이터리안 웨비나
- airflow.cfg
- Limit
- SQL
- 파이썬
- 데이터분석
- SQLite
- hackerrank
- matplotlib
- Today
- Total
Milky's note
카페 상권 분석 본문
공공데이터를 이용한 카페 상권분석(2020 Ver.)
공공 데이터 중 카페(라는 업종분류)들에 대해서 현황을 조사하려고 한다. 다음 사항을 할 예정이다.
- 전국 카페 데이터를 모두 수집
- 지역별 or 브랜드별 점포 현황을 확인
- 분석 결과를 시각화
[데이터] https://www.data.go.kr/data/15012005/fileData.do
이 데이터는 지금은 폐기되었지만 미리 받아둔 csv 파일로 열어서 분석을 진행하였다.
2019년 데이터라서 결과가 현재와는 다를 수 있다.
내가 생성할 데이터셋은 다음과 같다.
- 전국의 카페, 서울시 카페 비율
- 주요 브랜드 카페 별 전국, 서울시 비율
- 전국 카페 데이터 시각화
- 서울시 카페 데이터 시각화
- 서울시 주요 브랜드 카페 데이터 시각화
1. 전처리
카페 데이터를 확인한 결과 상호명 컬럼에 '스타벅스' 이런 형식이 아닌 '스타벅스낙성대점' 이런 식으로 들어간 데이터들이 있었다.
추후에 서울시 주요 브랜드 카페 데이터를 시각화하기 위해 상호명 컬럼의 데이터들을 모두 전처리 해주었다.
다음과 같은 방식으로 진행해주었고 주요 브랜드 카페들만 진행하였다.
cafe.at[cafe['상호명'].str.contains('스타벅스'), '상호명'] = '스타벅스'
cafe[cafe['상호명'].str.contains('스타벅스')]
2. 데이터 다루기
먼저 전국의 카페와 서울시의 카페 수를 구한다.
추후에 뒤에서 서울시의 카페 비율, 서울시의 브랜드 카페 비율 등을 구해주려고 하기 때문이다.
전국 커피 전문점
# 카페만 뽑아낸다.
df_coffee = data[data["상권업종중분류명"] == "커피점/카페"]
# df_coffee.reset_index(inplace=True) 이렇게 하면 index가 기존에 있던 index로 잡히고 컬럼이 하나 더 생김
# 그래서 index를 다시 잡아준다.
df_coffee.index = range(len(df_coffee))
print("전국 커피 전문점 점포 수 : ", len(df_coffee))
df_coffee.head()
서울내 커피 전문점
# 카페 중에 "서울"에 위치하고 있는 점포만 뽑아낸다.
df_seoul_coffee = df_coffee[df_coffee["시도명"] == "서울특별시"]
# 바로 위에서 카페만 뽑았던 df에서 추출해도 되고 원본데이터에서 2가지 조건을 모두 만족하는 데이터를 뽑아도 된다.
# df_seoul_coffee = data[(data["상권업종중분류명"] == "커피점/카페") & (data["시도명"] == "서울특별시")]
df_seoul_coffee.index = range(len(df_seoul_coffee))
print('서울시 내 커피 전문점 점포 수 :', len(df_seoul_coffee))
df_seoul_coffee.head()
전국 스타벅스
# 이번엔 전국에 있는 스타벅스를 뽑아낸다.
df_starbucks = df_coffee[df_coffee["상호명"].str.contains("스타벅스")]
df_starbucks.index = range(len(df_starbucks))
print('전국 스타벅스 점포 수 :', len(df_starbucks))
df_starbucks.head()
서울 스타벅스
# 이번엔 서울에 있는 스타벅스를 뽑아낸다.
df_seoul_starbucks = df_starbucks[df_starbucks["시도명"] == "서울특별시"]
df_seoul_starbucks.index = range(len(df_seoul_starbucks))
print('서울시 내 스타벅스 점포 수 :', len(df_seoul_starbucks))
df_seoul_starbucks.head()
브랜드는 스타벅스, 이디야, 커피빈, 메가커피, 투썸 5가지로 구해주었다.
이제 이러한 브랜드 커피 전문점들이 전국, 서울시내에 얼마나 차지하고 있는 지를 구해볼 것이다.
1) 전체 커피전문점 내 주요 커피브랜드 입점 비율
print("**** 전국 커피전문점중 주요 5대 커피브랜드 입점 비율 ****")
print(f'주요 5대 커피브랜드 전국 입점 비율 : {(len(df_starbucks)+ len(df_2some) + len(df_ediya) + len(df_mega)+ len(df_coffeebean)) / len(df_coffee) * 100:.3f}%')
print(f'1. 스타벅스 : {len(df_starbucks)/len(df_coffee) *100:.3f}%' )
print(f'2. 투썸플레이스 : {len(df_2some)/len(df_coffee) *100:.3f}%' )
print(f'3. 이디야 : {len(df_ediya)/len(df_coffee) *100:.3f}%' )
print(f'4. 메가커피 : {len(df_mega)/len(df_coffee) *100:.3f}%' )
print(f'5. 커피빈 : {len(df_coffeebean)/len(df_coffee) *100:.3f}%' )
주요 5대 커피브랜드 전국 입점 비율 : 5.098%
1. 스타벅스 : 1.419%
2. 투썸플레이스 : 1.003%
3. 이디야 : 1.968%
4. 메가커피 : 0.423%
5. 커피빈 : 0.285%
2) 서울 커피전문점 내 주요 커피브랜드 입점 비율
print(f'스타벅스 : {len(df_seoul_starbucks)/len(df_seoul_coffee) *100:.3f}%')
print(f'이디야 : {len(df_seoul_ediya)/len(df_seoul_coffee) *100:.3f}%')
print(f'커피빈 : {len(df_seoul_coffeebean)/len(df_seoul_coffee) *100:.3f}%')
print(f'투썸플레이스 : {len(df_seoul_2some)/len(df_seoul_coffee) *100:.3f}%')
print(f'빽다방 : {len(df_seoul_bbaek)/len(df_seoul_coffee) *100:.3f}%')
print(f'할리스 : {len(df_seoul_hollys)/len(df_seoul_coffee) *100:.3f}%')
print(f'메가커피 : {len(df_seoul_mega)/len(df_seoul_coffee) *100:.3f}%')
이디야 : 2.131%
커피빈 : 0.859%
투썸플레이스 : 1.286%
빽다방 : 0.580%
할리스 : 0.899%
메가커피 : 0.387%
3) 각 커피브랜드별 서울 입점 비율
print("**** 주요 5대 커피브랜드별 서울 입점 비율 ****")
print(f'스타벅스 : {len(df_seoul_starbucks)/len(df_starbucks) *100:.3f}%')
print(f'이디야 : {len(df_seoul_ediya)/len(df_ediya) *100:.3f}%')
print(f'커피빈 : {len(df_seoul_coffeebean)/len(df_coffeebean) *100:.3f}%')
print(f'투썸플레이스 : {len(df_seoul_2some)/len(df_2some) *100:.3f}%')
print(f'빽다방 : {len(df_seoul_bbaek)/len(df_bbaek) *100:.3f}%')
print(f'할리스 : {len(df_seoul_hollys)/len(df_hollys) *100:.3f}%')
print(f'메가커피 : {len(df_seoul_mega)/len(df_mega) *100:.3f}%')
스타벅스 : 31.556%
이디야 : 21.180%
커피빈 : 58.951%
투썸플레이스 : 25.066%
빽다방 : 22.751%
할리스 : 28.289%
메가커피 : 17.879%
# 각 구별로 스타벅스가 얼마나 있는지 확인
starbucks_gu = df_seoul_starbucks.groupby(by=['시군구명'])['상호명'].count()
starbucks_gu = starbucks_gu.reset_index()
starbucks_gu = starbucks_gu.set_index('시군구명').sort_values(by="상호명", ascending=False)
starbucks_gu
# 각 구, 동 별로 스타벅스가 얼마나 있는지 확인
starbucks_gd = df_seoul_starbucks.groupby(by=['시군구명', '행정동명'])['상호명'].count()
starbucks_gd = starbucks_gd.reset_index()
starbucks_gd = starbucks_gd.set_index('시군구명', '행정동명').sort_values(by="상호명", ascending=False)
starbucks_gd
3. 시각화
위에서 구한 데이터셋을 이용하여 데이터를 시각화해준다.
# 주요 5대 커피브랜드 서울 입점 비율을 시각화
starbucks_rate = (len(df_seoul_starbucks)/len(df_starbucks) *100)
twosome_rate = (len(df_seoul_2some)/len(df_2some) *100)
ediya_rate= (len(df_seoul_ediya)/len(df_ediya) *100)
mega_rate = (len(df_seoul_mega)/len(df_mega) *100)
coffeebean_rate = (len(df_seoul_coffeebean)/len(df_coffeebean) *100)
x = ["Starbucks", "TwosomePlace", "EDIYA", "Mega Coffee", "Coffeebean"]
y = [starbucks_rate, twosome_rate, ediya_rate, mega_rate, coffeebean_rate]
plt.figure(figsize=(12,12))
plt.title("주요 5대 커피브랜드 서울 입점 비율", fontdict={"fontsize":20})
sns.barplot(x=x, y=y)
plt.show()
서울시에 입점해있는 비율은 커피빈이 가장 높은 비율을 가졌다. 스타벅스가 1위일 줄 알았는데 생각과는 다른 결과였다.
왜냐하면 스타벅스는 프리퀀시, 굿즈에 사람들이 많은 관심을 갖는다. 그래서 주변에 스타벅스가 어디있지? 하면서 찾지만
솔직히 다른 카페들은 굳이 찾지 않고 주변에 있으면 가게되는 카페들이다.
그래서 단지 스타벅스가 눈에 잘 들어왔던 것일뿐이지 현실적인 수치는 예상과 다른 결과를 도출해내었다.
지도위에 나타내기
지도 위에 세 가지 데이터를 나타낼 것이다.
- 전국의 카페 현황
- 전국 주요 카페 현황
- 서울시 주요카페 현황
먼저 전국 시도별로 나눈 카페 현황이다.
plt.figure(figsize=(10,8))
sns.scatterplot(data = cafe, x="경도", y="위도", hue="시도명")
다음은 전국의 브랜드 카페들만 표시해 놓은 차트이다.
plt.figure(figsize=(10,8))
sns.scatterplot(data = cafe_major, x="경도", y="위도", hue="상호명")
다음은 서울시의 구별로 브랜드 카페들만 표시해 놓은 차트이다.
plt.figure(figsize=(10,8))
sns.scatterplot(data = cafe_major[cafe_major['시도명']=='서울특별시'], x="경도", y="위도", hue="상호명")
시각화는 여기까지 진행하였고 스타벅스가 확실히 눈에 잘띄긴한다.
커피빈 색이 어두워서 그럴 수도 있다. 나중엔 색을 비슷하게 주어서 구분이 잘 가도록 설정을 해야겠다.
커피 데이터 분석도 재미있었당
자세한 소스는 깃허브에 올려두었다.
'데이터 분석 > 데이터분석 연습' 카테고리의 다른 글
가상 쇼핑몰 고객 주문데이터 3. 고객 이탈률 퍼널 분석 (1) | 2022.05.28 |
---|---|
가상 쇼핑몰 고객 주문데이터 2. 고객 Retention 코호트 분석 (0) | 2022.05.28 |
가상 쇼핑몰 고객 주문데이터 1. 데이터 전처리 (0) | 2022.05.28 |
전국 주차장 데이터 (0) | 2022.05.25 |
부동산 데이터 전처리 (0) | 2022.01.11 |