ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (13) 데이터분석_떡볶이집의 입점전략
    데이터분석 2023. 6. 18. 21:19
    728x90

    떡볶이집의 입점전략 데이터분석

    # 시장 데이터를 불러온다.
    import pandas as pd
    df = pd.read_csv('/content/drive/MyDrive/study/데이터분석/소상공인시장진흥공단_상가(상권)정보_서울_202303.csv')

    shop = ['엽기떡볶이', '신전떡볶이','죠스떡볶이','국대떡볶이', '감탄떡볶이']
    # 파리바게트 데이터 필터링하기
    # df_paris
    # '상가업소번호', '경도', '위도'
    # contains(): 특정 문자열 포함여부를 True False로 반환

    cont1 = df['상호명'].str.contains(r'파리바게뜨|파리바게트')
    df_paris = df.loc[cont1, ['상가업소번호', '상호명','경도', '위도']].copy()
    df_paris

    df_paris = df_paris.set_axis(['업소번호','업소상호명','업소경도','업소위도'], axis = 1).reset_index(drop=True)
    df_paris

    # 떡볶이 프랜차이즈 데이터 필터링
    # extract(): 특정 문자열을 포함하고 있다면 그 문자열을 반환하고, 포함하고 있지 않다면 NaN을 반환
    df_shop = df.copy()
    df_shop['상호명'] = df_shop['상호명'].str.extract(r'({})'.format('|'.join(shop)))[0]
    df_shop = df_shop.dropna(subset=['상호명']).iloc[:, [0, 1, 14, 37, 38]].reset_index(drop=True)
    df_shop

    # 곱집합
    df1 = pd.DataFrame(['A','B'])
    df2 = pd.DataFrame(['가','나','다'])
    df1.merge(df2, how = 'cross')

    df_cross = df_shop.merge(df_paris, how='cross')
    df_cross

    #두 지점의 위도와 경도를 입력하면 거리를 구해주는 라이브러리
    !pip install haversine

    # 개별 떡볶이 매장과 파리바게트와의 거리
    df_dis = df_cross.groupby(['상가업소번호','상호명'])['거리'].min().reset_index()
    df_dis

    # 각 프렌차이즈 별 파리바게트와의 평균 거리
    df_dis.groupby('상호명')['거리'].mean()

    # agg(): 다중집계작업을 간결하게 해주는 함수
    df_dis.groupby('상호명')['거리'].agg(['mean','count'])

    # 프랜차이즈 별 파리바게트와 50m 이하인 매장의 평균거리와 매장개수
    dis = df_dis['거리'] <= 50
    df_dis[dis].groupby('상호명')['거리'].agg(['mean','count'])

    # 거리를 입력하면 프랜차이즈 별 파리바게트와의 평균거리와 매장개수를 출력하는 함수
    # distance(x)

    def distance(x):
      dis = df_dis['거리'] <= x
      return df_dis[dis].groupby('상호명')['거리'].agg(['mean','count'])

    distance(100)

    !pip install pandasecharts
    df_50 = distance(50).reset_index()

    from pandasecharts import echart
    import IPython
     

    df_50.echart.pie(x='상호명',y='count',figsize = (600,400), radius=['20%','60%'], label_opts = {'position' : 'outer'}
                    ,title = '떡볶이집의 입점전략은 과연 파리바케트 옆인가?',
                    legend_opts = {'pos_right' : '0%', 'orient' : 'vertical'},
                    subtitle = '50m 이내 매장수').render()

    IPython.display.HTML(filename='render.html')

    from pyecharts.charts import Timeline, Grid
     
    tl = Timeline({'width':'600px','height':'400px'})

    pie1 = df_50.echart.pie(x='상호명',y='count',figsize = (600,400), radius=['20%','60%'], label_opts = {'position' : 'outer'}
                    ,title = '떡볶이집의 입점전략은 과연 파리바케트 옆인가?',
                    legend_opts = {'pos_right' : '0%', 'orient' : 'vertical'},
                    subtitle = '50m 이내 매장수')
    tl.add(pie1,'50m').render()
    IPython.display.HTML(filename='render.html')

    tl = Timeline({'width':'600px', 'height':'400px'})
    for i in [1000, 100, 50, 30]:
        df_d = distance(i).reset_index()
        pie1 = df_d.echart.pie(x='상호명', y='count', figsize=(600, 400),
                        radius=['20%', '60%'], label_opts={'position':'outer'},
                        title='떡볶이집의 입점전략은 과연 파리바케트 옆인가?',
                        legend_opts={'pos_right':'0%', 'orient':'vertical'},
                        subtitle='{}m 이내 매장수'.format(i))
        tl.add(pie1, '{}m'.format(i)).render()
    IPython.display.HTML(filename='render.html')

    댓글

Designed by Tistory.