티스토리 뷰

그거거거거ㅏㅓ아ㅓ

Roadmap

다음 순서에 따라 단계적으로 분석을 하며, 쉬운 분석부터 조금씩 더 수준높은 분석을 하도록 하겠다.

  1. “19년 1월 서울시 치킨 판매업종 이용 통화량” 데이터 분석  a. 데이터 탐색 -> 초보적인 시각화 b. 데이터를 여러 방향으로 분석 해보기
  2. “19년 1월 서울시 중국음식 판매업종 이용 통화량” 데이터 분석
  3. “19년 1월 서울시 피자 판매업종 이용 통화량” 데이터 분석
  4. 1월의 서울시 먹거리(1~3 데이터를 합친 후) 분석
  5. 2018년 2월 ~ 2019년 1월 까지의 모든 데이터를 합친 후 분석
  6. 5번분석을 중심으로 인사이트 도출
  7. 지난 1년간의 먹거리 트렌드가 어떠했는지 알아보고, 앞으로 어떻게 변화 할지 분석
  8. Feedback

(SK Big Data Hub에서 다양한 종류의 데이터를 매달 얻을 수 있다.)



이번에는 1-a 단계를 해보도록 하겠다.
SK Data Hub에서 "19년 1월 서울시 치킨 판매업종 이용 통화량" 데이터를 받아오자.

In [90]:
import pandas as pd
import numpy as np

Call_chicken_01 = pd.read_csv("CALL_CHICKEN_01MONTH.csv")

이번 블로그는 아주 간단하게 파악하는 단계 이므로 데이터가 몇 개 인지 부터 파악해 보자.

In [91]:
df = pd.DataFrame(Call_chicken_01)
df.head()
Out[91]:
기준일 요일 성별 연령대 시도 시군구 읍면동 업종 통화건수
0 20190101 20대 서울특별시 강남구 도곡동 치킨 5
1 20190101 30대 서울특별시 강남구 삼성동 치킨 36
2 20190101 10대 서울특별시 강남구 대치동 치킨 5
3 20190101 40대 서울특별시 강남구 대치동 치킨 5
4 20190101 40대 서울특별시 강남구 일원동 치킨 5
In [92]:
df.shape
Out[92]:
(29850, 9)

총 29850개의 데이터가 있다.
이제 이 약 3만개의 데이터들이 어떻게 분포 되어있는지 간단히 요약하여 확인해보도록 하자.

In [131]:
df.describe()
Out[131]:
기준일 통화건수
count 2.985000e+04 29850.000000
mean 2.019012e+07 13.243987
std 8.873640e+00 17.464655
min 2.019010e+07 5.000000
25% 2.019011e+07 5.000000
50% 2.019012e+07 5.000000
75% 2.019012e+07 14.000000
max 2.019013e+07 242.000000
In [94]:
df.columns
Out[94]:
Index(['기준일', '요일', '성별', '연령대', '시도', '시군구', '읍면동', '업종', '통화건수'], dtype='object')
In [127]:
W = ['월','화','수','목','금','토','일']
In [128]:
week=[]

for i in W:
    
    k=np.sum(df['요일']==i)
    
    week.append(k)

week
Out[128]:
[3493, 4739, 4670, 4655, 4255, 4142, 3896]
In [129]:
np.transpose([list(W),week])
Out[129]:
array([['월', '3493'],
       ['화', '4739'],
       ['수', '4670'],
       ['목', '4655'],
       ['금', '4255'],
       ['토', '4142'],
       ['일', '3896']], dtype='<U4')
In [98]:
np.unique(df['성별'])
Out[98]:
array(['남', '여'], dtype=object)
In [99]:
[['남',np.sum(df['성별']=='남')],['여', np.sum(df['성별']=='여')]]
Out[99]:
[['남', 14498], ['여', 15352]]
In [100]:
A = np.unique(df['연령대'])
In [101]:
age=[]

for i in np.unique(df['연령대']):
    
    k=np.sum(df['연령대']==i)
    
    age.append(k)

age
Out[101]:
[3688, 5695, 6116, 6084, 4537, 3730]
In [102]:
Age=pd.DataFrame(np.transpose([list(A),age]))
Age
Out[102]:
0 1
0 10대 3688
1 20대 5695
2 30대 6116
3 40대 6084
4 50대 4537
5 60대이상 3730
In [103]:
Age.rename(columns={Age.columns[0]:'연령대', Age.columns[1]:'소계'}, inplace=True)
Age
Out[103]:
연령대 소계
0 10대 3688
1 20대 5695
2 30대 6116
3 40대 6084
4 50대 4537
5 60대이상 3730
In [104]:
np.unique(df['시도'])
Out[104]:
array(['서울특별시'], dtype=object)
In [105]:
len(df['시도'])
Out[105]:
29850
In [106]:
R = np.unique(df['시군구'])
In [107]:
region=[]

for i in np.unique(df['시군구']):
    
    k=np.sum(df['시군구']==i)
    
    region.append(k)
In [119]:
frame1 = pd.DataFrame({'구별' : list(R), '소계' : region})
frame1.head()
Out[119]:
구별 소계
0 강남구 2381
1 강동구 1295
2 강북구 868
3 강서구 1916
4 관악구 560
In [132]:
frame1.sort_values(by='소계', ascending=False).head(10)
Out[132]:
구별 소계
0 강남구 2381
3 강서구 1916
23 중구 1717
19 영등포구 1688
12 마포구 1552
13 서대문구 1476
14 서초구 1415
6 구로구 1396
16 성북구 1377
20 용산구 1352
In [44]:
R2 = np.unique(df['읍면동'])
In [45]:
region2=[]

for i in np.unique(df['읍면동']):
    
    k=np.sum(df['읍면동']==i)
    
    region2.append(k)
In [122]:
frame2 = pd.DataFrame({'동별' : list(R2), '소계' : region2})
frame2.head()
Out[122]:
동별 소계
0 가락동 368
1 가산동 362
2 가양동 372
3 갈월동 104
4 갈현동 198
In [126]:
frame2.sort_values(by='소계', ascending=False).head(40)
Out[126]:
동별 소계
110 성수동2가 372
12 공릉동 372
92 삼성동 372
23 길동 372
228 화곡동 372
30 내발산동 372
114 송파동 372
89 불광동 372
126 신대방동 372
79 방배동 372
94 상계동 372
77 미아동 372
67 면목동 372
5 개봉동 372
58 동선동2가 372
2 가양동 372
145 역삼동 371
227 홍제동 371
127 신도림동 371
73 문래동3가 371
125 신당동 371
98 상암동 371
144 여의도동 370
147 연희동 370
60 등촌동 370
222 한강로2가 369
101 상일동 369
0 가락동 368
83 번동 367
177 인의동 366
34 논현동 365
141 양재동 365
1 가산동 362
46 대현동 359
133 신정동 359
184 장안동 359
224 합정동 357
189 제기동 356
27 남대문로5가 353
155 옥수동 347




연령대를 보면 30대와 40대가 각각 6116, 6084건의 데이터로 가장 높은 데이터량을 나타내고 있다.
데이터에서 금요일날 통화를 한 30대 40대 데이터만 추출해 통화건수를 구해보자.

In [201]:
thirty = df[(df['요일']=='금')&(df['연령대']=='30대')]
thirty.head()
Out[201]:
기준일 요일 성별 연령대 시도 시군구 읍면동 업종 통화건수
2787 20190104 30대 서울특별시 강남구 논현동 치킨 24
2791 20190104 30대 서울특별시 강남구 역삼동 치킨 27
2792 20190104 30대 서울특별시 강남구 세곡동 치킨 5
2795 20190104 30대 서울특별시 강남구 삼성동 치킨 33
2797 20190104 30대 서울특별시 강남구 자곡동 치킨 5
In [202]:
fourty = df[(df['요일']=='금')&(df['연령대']=='40대')]
fourty.head()
Out[202]:
기준일 요일 성별 연령대 시도 시군구 읍면동 업종 통화건수
2789 20190104 40대 서울특별시 강남구 청담동 치킨 5
2790 20190104 40대 서울특별시 강남구 신사동 치킨 5
2801 20190104 40대 서울특별시 강남구 도곡동 치킨 5
2804 20190104 40대 서울특별시 강남구 삼성동 치킨 96
2807 20190104 40대 서울특별시 강남구 역삼동 치킨 69
In [203]:
np.sum(thirty['통화건수']), np.sum(fourty['통화건수'])
Out[203]:
(15479, 20609)

30대와 40대가 각각 6116, 6084건의 데이터가 나왔지만, 실제 통화건수는 40대가 30대보다 높은것을 알 수 있다.
데이터 개수와 통화건수는 별개임을 알 수 있다.

이렇게 판다스를 이용해 간단한 데이터 조작을 해보았다.
아직까지는 매우 간단한 수준이지만 조금씩 높은 수준의 분석을 해볼 예정이다.

출처 사이트에서 R을 통해 분석한 아이디어를 참고해 보았다.



공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함