In [1]:
import pandas as pd
In [15]:
# sep = "\t" : tab 을 기준으로 데이터를 가지고 옴
df = pd.read_csv("../data_set/3.시각화/report.txt", sep="\t")
df.head()
Out[15]:
기간 대분류 분류 운동을 할 충분한 시간이 없어서 함께 운동을 할 사람이 없어서 운동을 할 만한 장소가 없어서 운동을 싫어해서 운동을 할 충분한 비용이 없어서 기타
0 2019 서울시 서울시 46.8 5.0 4.3 37.3 5.2 1.4
1 2019 성별 남자 52.4 4.4 4.9 32.4 4.9 1.1
2 2019 성별 여자 42.5 5.6 3.9 41.0 5.4 1.7
3 2019 연령별 10대 55.3 4.8 3.9 32.6 3.5 -
4 2019 연령별 20대 46.0 4.2 4.5 38.8 6.4 0.1
In [6]:
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 52 entries, 0 to 51
Data columns (total 9 columns):
 #   Column             Non-Null Count  Dtype  
---  ------             --------------  -----  
 0   기간                 52 non-null     int64  
 1   대분류                52 non-null     object 
 2   분류                 52 non-null     object 
 3   운동을 할 충분한 시간이 없어서  52 non-null     float64
 4   함께 운동을 할 사람이 없어서   52 non-null     float64
 5   운동을 할 만한 장소가 없어서   52 non-null     float64
 6   운동을 싫어해서           52 non-null     float64
 7   운동을 할 충분한 비용이 없어서  52 non-null     float64
 8   기타                 52 non-null     object 
dtypes: float64(5), int64(1), object(3)
memory usage: 3.8+ KB
In [7]:
# 각 컬럼의 결측치 값의 갯수 확인
df.isnull().sum()
Out[7]:
기간                   0
대분류                  0
분류                   0
운동을 할 충분한 시간이 없어서    0
함께 운동을 할 사람이 없어서     0
운동을 할 만한 장소가 없어서     0
운동을 싫어해서             0
운동을 할 충분한 비용이 없어서    0
기타                   0
dtype: int64
In [10]:
df.describe()
Out[10]:
기간 운동을 할 충분한 시간이 없어서 함께 운동을 할 사람이 없어서 운동을 할 만한 장소가 없어서 운동을 싫어해서 운동을 할 충분한 비용이 없어서
count 52.0 52.000000 52.000000 52.000000 52.000000 52.000000
mean 2019.0 46.267308 5.103846 4.655769 37.153846 5.163462
std 0.0 10.723709 2.211109 1.868145 8.666217 2.020001
min 2019.0 10.700000 0.400000 1.200000 17.900000 0.900000
25% 2019.0 42.775000 4.125000 3.300000 32.550000 4.075000
50% 2019.0 46.900000 4.850000 4.400000 35.850000 5.250000
75% 2019.0 52.100000 6.050000 5.700000 39.775000 6.250000
max 2019.0 69.800000 13.900000 9.900000 68.100000 10.900000
In [13]:
# 컬럼 확인
# 운동을 할 충분한 시간이 없어서, 함께 운동을 할 사람이 없어서 컬럼 등은
# 내가 운동시설을 만든다고 가정할 때 중요한 컬럼이 아니기 때문에 제거할 것임
df.columns
Out[13]:
Index(['기간', '대분류', '분류', '운동을 할 충분한 시간이 없어서', '함께 운동을 할 사람이 없어서',
       '운동을 할 만한 장소가 없어서', '운동을 싫어해서', '운동을 할 충분한 비용이 없어서', '기타'],
      dtype='object')
In [16]:
# 사용하지 않을 컬럼을 label 에 저장
label = ['기간', '분류', '운동을 할 충분한 시간이 없어서', '함께 운동을 할 사람이 없어서',
       '운동을 싫어해서', '기타']

# axis=1 로 label 에 들어있는 값을 가진 열을 삭제
df.drop(labels=label, axis=1, inplace=True)
df.columns
Out[16]:
Index(['대분류', '운동을 할 만한 장소가 없어서', '운동을 할 충분한 비용이 없어서'], dtype='object')
In [17]:
df['대분류']
Out[17]:
0       서울시
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      강동구
Name: 대분류, dtype: object
In [20]:
# 대분류의 값이 "구" 로 끝나는 문자가 아닌 값을 가져와라
# ~ 를 앞에 사용하여 "구"로 끝나는 문자가 아닌 것들을 가져옴
del_index = df[ ~df['대분류'].str.endswith("구")].index
del_index
Out[20]:
Index([ 0,  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],
      dtype='int64')
In [23]:
df.loc[ del_index ]
Out[23]:
대분류 운동을 할 만한 장소가 없어서 운동을 할 충분한 비용이 없어서
0 서울시 4.3 5.2
1 성별 4.9 4.9
2 성별 3.9 5.4
3 연령별 3.9 3.5
4 연령별 4.5 6.4
5 연령별 2.9 4.5
6 연령별 2.9 3.3
7 연령별 4.5 5.6
8 연령별 6.6 6.6
9 학력별 4.8 7.3
10 학력별 5.6 5.5
11 학력별 3.3 4.6
12 학력별 5.6 0.9
13 소득별 9.9 9.4
14 소득별 6.0 7.4
15 소득별 3.9 5.1
16 소득별 4.2 4.8
17 소득별 3.3 5.3
18 소득별 4.0 4.5
19 혼인상태별 4.1 4.6
20 혼인상태별 4.0 5.6
21 혼인상태별 5.7 6.4
22 지역대분류 7.2 4.0
23 지역대분류 4.1 5.5
24 지역대분류 5.1 5.3
25 지역대분류 4.7 4.8
26 지역대분류 3.1 5.4
In [24]:
# 대분류 컬럼의 "구" 로 끝나지 않는 행을 모두 삭제
df.drop( del_index, inplace=True )
df
Out[24]:
대분류 운동을 할 만한 장소가 없어서 운동을 할 충분한 비용이 없어서
27 종로구 9.4 2.1
28 중구 7.7 7.6
29 용산구 4.9 2.7
30 성동구 5.7 8.7
31 광진구 3.0 5.8
32 동대문구 2.7 6.2
33 중랑구 6.8 10.9
34 성북구 2.6 2.0
35 강북구 3.4 1.9
36 도봉구 6.2 7.6
37 노원구 2.7 1.9
38 은평구 7.3 6.4
39 서대문구 1.2 5.3
40 마포구 4.7 3.2
41 양천구 5.9 4.1
42 강서구 1.9 4.3
43 구로구 5.8 2.9
44 금천구 2.3 2.3
45 영등포구 3.8 5.4
46 동작구 8.4 7.6
47 관악구 5.5 6.1
48 서초구 4.1 3.3
49 강남구 2.0 5.2
50 송파구 2.3 4.8
51 강동구 4.8 8.4
In [26]:
# 대분류에 중복된 데이터의 합을 구해옴
# 결과가 0 이므로 대분류 컬럼엔 중복된 데이터가 없음
df["대분류"].duplicated().sum()
Out[26]:
0
In [28]:
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings("ignore")

plt.rc("font", family="Malgun Gothic")
In [53]:
fig, ax = plt.subplots(2,1, figsize=(10,7))
g = sns.barplot( x="대분류", y="운동을 할 만한 장소가 없어서", data=df, ax=ax[0], hue="대분류")
g.set_xticklabels(g.get_xticklabels(), rotation = 30)

g1 = sns.barplot( x="대분류", y="운동을 할 충분한 비용이 없어서", data=df, ax=ax[1], palette="rainbow")
g1.set_xticklabels(g.get_xticklabels(), rotation = 30)

plt.show()
No description has been provided for this image
In [56]:
# 운동을 할 만한 장소가 없어서의 데이터를 내림차순 하여 넣어주겠ek
df_sort = df.sort_values(by=["운동을 할 만한 장소가 없어서"], axis=0, ascending=False)
df_sort
Out[56]:
대분류 운동을 할 만한 장소가 없어서 운동을 할 충분한 비용이 없어서
27 종로구 9.4 2.1
46 동작구 8.4 7.6
28 중구 7.7 7.6
38 은평구 7.3 6.4
33 중랑구 6.8 10.9
36 도봉구 6.2 7.6
41 양천구 5.9 4.1
43 구로구 5.8 2.9
30 성동구 5.7 8.7
47 관악구 5.5 6.1
29 용산구 4.9 2.7
51 강동구 4.8 8.4
40 마포구 4.7 3.2
48 서초구 4.1 3.3
45 영등포구 3.8 5.4
35 강북구 3.4 1.9
31 광진구 3.0 5.8
37 노원구 2.7 1.9
32 동대문구 2.7 6.2
34 성북구 2.6 2.0
44 금천구 2.3 2.3
50 송파구 2.3 4.8
49 강남구 2.0 5.2
42 강서구 1.9 4.3
39 서대문구 1.2 5.3
In [58]:
df_sort.rename(columns={
    df_sort.columns[0] : "분류",
    df_sort.columns[1] : "장소부족",
    df_sort.columns[2] : "비용부족"}, inplace=True )
df_sort
Out[58]:
분류 장소부족 비용부족
27 종로구 9.4 2.1
46 동작구 8.4 7.6
28 중구 7.7 7.6
38 은평구 7.3 6.4
33 중랑구 6.8 10.9
36 도봉구 6.2 7.6
41 양천구 5.9 4.1
43 구로구 5.8 2.9
30 성동구 5.7 8.7
47 관악구 5.5 6.1
29 용산구 4.9 2.7
51 강동구 4.8 8.4
40 마포구 4.7 3.2
48 서초구 4.1 3.3
45 영등포구 3.8 5.4
35 강북구 3.4 1.9
31 광진구 3.0 5.8
37 노원구 2.7 1.9
32 동대문구 2.7 6.2
34 성북구 2.6 2.0
44 금천구 2.3 2.3
50 송파구 2.3 4.8
49 강남구 2.0 5.2
42 강서구 1.9 4.3
39 서대문구 1.2 5.3
In [ ]:
 
In [ ]:
 

MinMaxScaler(표준화)¶

  • 모든 특성이 정확하게 0과 1사이에 위치하도록 데이터를 변경한다
  • 가장 작은값을 0, 가장 큰값을 1로 두고 결과를 뽑아
  • 영화평점을 매긴다고 할 때 naver 는 1-5점, daum 은 1-10 점을 부여할 수 있다고 가정하면
  • 해당 범위를 표준화시켜서 계산해야 한다준다
In [59]:
df_sort.describe()
Out[59]:
장소부족 비용부족
count 25.000000 25.000000
mean 4.604000 5.068000
std 2.230187 2.473648
min 1.200000 1.900000
25% 2.700000 2.900000
50% 4.700000 5.200000
75% 5.900000 6.400000
max 9.400000 10.900000
In [60]:
from sklearn.preprocessing import MinMaxScaler
In [68]:
movie = {"daum" : [2, 4, 6, 8, 10], "naver" : [1, 3, 3, 2, 5]}
mv = pd.DataFrame(movie)
mv
Out[68]:
daum naver
0 2 1
1 4 3
2 6 3
3 8 2
4 10 5
In [69]:
# 스케일을 표준화
min_max_scaler = MinMaxScaler()
mv_sc = min_max_scaler.fit_transform(mv)
mv_sc
Out[69]:
array([[0.  , 0.  ],
       [0.25, 0.5 ],
       [0.5 , 0.5 ],
       [0.75, 0.25],
       [1.  , 1.  ]])
In [71]:
# 표준화된 데이터 출력
pd.DataFrame(mv_sc, columns=["daum", "naver"])
Out[71]:
daum naver
0 0.00 0.00
1 0.25 0.50
2 0.50 0.50
3 0.75 0.25
4 1.00 1.00
In [73]:
# 데이터 표준화
min_max_s = MinMaxScaler()
min_max_df = min_max_s.fit_transform(df_sort[["장소부족", "비용부족"]])
min_max_df
Out[73]:
array([[1.        , 0.02222222],
       [0.87804878, 0.63333333],
       [0.79268293, 0.63333333],
       [0.74390244, 0.5       ],
       [0.68292683, 1.        ],
       [0.6097561 , 0.63333333],
       [0.57317073, 0.24444444],
       [0.56097561, 0.11111111],
       [0.54878049, 0.75555556],
       [0.52439024, 0.46666667],
       [0.45121951, 0.08888889],
       [0.43902439, 0.72222222],
       [0.42682927, 0.14444444],
       [0.35365854, 0.15555556],
       [0.31707317, 0.38888889],
       [0.26829268, 0.        ],
       [0.2195122 , 0.43333333],
       [0.18292683, 0.        ],
       [0.18292683, 0.47777778],
       [0.17073171, 0.01111111],
       [0.13414634, 0.04444444],
       [0.13414634, 0.32222222],
       [0.09756098, 0.36666667],
       [0.08536585, 0.26666667],
       [0.        , 0.37777778]])
In [74]:
df_replace = pd.DataFrame(min_max_df, columns=["장소부족", "비용부족"])
df_replace
Out[74]:
장소부족 비용부족
0 1.000000 0.022222
1 0.878049 0.633333
2 0.792683 0.633333
3 0.743902 0.500000
4 0.682927 1.000000
5 0.609756 0.633333
6 0.573171 0.244444
7 0.560976 0.111111
8 0.548780 0.755556
9 0.524390 0.466667
10 0.451220 0.088889
11 0.439024 0.722222
12 0.426829 0.144444
13 0.353659 0.155556
14 0.317073 0.388889
15 0.268293 0.000000
16 0.219512 0.433333
17 0.182927 0.000000
18 0.182927 0.477778
19 0.170732 0.011111
20 0.134146 0.044444
21 0.134146 0.322222
22 0.097561 0.366667
23 0.085366 0.266667
24 0.000000 0.377778
In [76]:
# min(최솟값), max(최댓값) 표준화 된 것 확인
# 둘 다 0, 1 로 변경
df_replace.describe()
Out[76]:
장소부족 비용부족
count 25.000000 25.000000
mean 0.415122 0.352000
std 0.271974 0.274850
min 0.000000 0.000000
25% 0.182927 0.111111
50% 0.426829 0.366667
75% 0.573171 0.500000
max 1.000000 1.000000
In [79]:
# 분류 값을 추가
df_replace = pd.DataFrame(min_max_df, columns=["장소부족", "비용부족"])
df_replace["분류"] = df_sort["분류"].values
df_replace
Out[79]:
장소부족 비용부족 분류
0 1.000000 0.022222 종로구
1 0.878049 0.633333 동작구
2 0.792683 0.633333 중구
3 0.743902 0.500000 은평구
4 0.682927 1.000000 중랑구
5 0.609756 0.633333 도봉구
6 0.573171 0.244444 양천구
7 0.560976 0.111111 구로구
8 0.548780 0.755556 성동구
9 0.524390 0.466667 관악구
10 0.451220 0.088889 용산구
11 0.439024 0.722222 강동구
12 0.426829 0.144444 마포구
13 0.353659 0.155556 서초구
14 0.317073 0.388889 영등포구
15 0.268293 0.000000 강북구
16 0.219512 0.433333 광진구
17 0.182927 0.000000 노원구
18 0.182927 0.477778 동대문구
19 0.170732 0.011111 성북구
20 0.134146 0.044444 금천구
21 0.134146 0.322222 송파구
22 0.097561 0.366667 강남구
23 0.085366 0.266667 강서구
24 0.000000 0.377778 서대문구
In [82]:
# 컬럼의 순서를 변경하여 df_sort 에 저장
df_sort = df_replace[["분류", "장소부족", "비용부족"]]
df_sort
Out[82]:
분류 장소부족 비용부족
0 종로구 1.000000 0.022222
1 동작구 0.878049 0.633333
2 중구 0.792683 0.633333
3 은평구 0.743902 0.500000
4 중랑구 0.682927 1.000000
5 도봉구 0.609756 0.633333
6 양천구 0.573171 0.244444
7 구로구 0.560976 0.111111
8 성동구 0.548780 0.755556
9 관악구 0.524390 0.466667
10 용산구 0.451220 0.088889
11 강동구 0.439024 0.722222
12 마포구 0.426829 0.144444
13 서초구 0.353659 0.155556
14 영등포구 0.317073 0.388889
15 강북구 0.268293 0.000000
16 광진구 0.219512 0.433333
17 노원구 0.182927 0.000000
18 동대문구 0.182927 0.477778
19 성북구 0.170732 0.011111
20 금천구 0.134146 0.044444
21 송파구 0.134146 0.322222
22 강남구 0.097561 0.366667
23 강서구 0.085366 0.266667
24 서대문구 0.000000 0.377778
In [85]:
# 장소부족을 60% 가중치, 비용부족을 40% 가중치를 부여하여
# 종합점수라는 컬럼을 생성하여 저장
df_sort["종합점수"] = df_sort["장소부족"] * 0.6 + df_sort["비용부족"] * 0.4

# 종합점수의 내림차순을 기준으로 정렬
df_sort.sort_values(by="종합점수", ascending=False)
Out[85]:
분류 장소부족 비용부족 종합점수
4 중랑구 0.682927 1.000000 0.809756
1 동작구 0.878049 0.633333 0.780163
2 중구 0.792683 0.633333 0.728943
3 은평구 0.743902 0.500000 0.646341
8 성동구 0.548780 0.755556 0.631491
5 도봉구 0.609756 0.633333 0.619187
0 종로구 1.000000 0.022222 0.608889
11 강동구 0.439024 0.722222 0.552304
9 관악구 0.524390 0.466667 0.501301
6 양천구 0.573171 0.244444 0.441680
7 구로구 0.560976 0.111111 0.381030
14 영등포구 0.317073 0.388889 0.345799
12 마포구 0.426829 0.144444 0.313875
10 용산구 0.451220 0.088889 0.306287
16 광진구 0.219512 0.433333 0.305041
18 동대문구 0.182927 0.477778 0.300867
13 서초구 0.353659 0.155556 0.274417
21 송파구 0.134146 0.322222 0.209377
22 강남구 0.097561 0.366667 0.205203
15 강북구 0.268293 0.000000 0.160976
23 강서구 0.085366 0.266667 0.157886
24 서대문구 0.000000 0.377778 0.151111
17 노원구 0.182927 0.000000 0.109756
19 성북구 0.170732 0.011111 0.106883
20 금천구 0.134146 0.044444 0.098266
In [88]:
# 종합 점수를 기준으로 상위 5항목만 df_top5 에 저잠
df_top5 = df_sort.sort_values(by="종합점수", ascending=False).head()
df_top5
Out[88]:
분류 장소부족 비용부족 종합점수
4 중랑구 0.682927 1.000000 0.809756
1 동작구 0.878049 0.633333 0.780163
2 중구 0.792683 0.633333 0.728943
3 은평구 0.743902 0.500000 0.646341
8 성동구 0.548780 0.755556 0.631491
In [92]:
# 분류를 그룹을 기준으로 시각화
g = sns.barplot(x="분류", y="종합점수", data=df_top5, hue="분류")
No description has been provided for this image
In [96]:
# dataset 다시 들고와서 저장
# 성별을 가져와서 파악해볼 것임
df = pd.read_csv("../data_set/3.시각화/report.txt", sep="\t")
df
Out[96]:
기간 대분류 분류 운동을 할 충분한 시간이 없어서 함께 운동을 할 사람이 없어서 운동을 할 만한 장소가 없어서 운동을 싫어해서 운동을 할 충분한 비용이 없어서 기타
0 2019 서울시 서울시 46.8 5.0 4.3 37.3 5.2 1.4
1 2019 성별 남자 52.4 4.4 4.9 32.4 4.9 1.1
2 2019 성별 여자 42.5 5.6 3.9 41.0 5.4 1.7
3 2019 연령별 10대 55.3 4.8 3.9 32.6 3.5 -
4 2019 연령별 20대 46.0 4.2 4.5 38.8 6.4 0.1
5 2019 연령별 30대 59.9 5.2 2.9 27.3 4.5 0.2
6 2019 연령별 40대 54.1 3.9 2.9 35.5 3.3 0.4
7 2019 연령별 50대 46.1 6.2 4.5 36.8 5.6 0.8
8 2019 연령별 60대 이상 26.6 6.0 6.6 48.7 6.6 5.6
9 2019 학력별 중졸 이하 24.7 6.2 4.8 48.6 7.3 8.5
10 2019 학력별 고졸 이하 44.3 5.3 5.6 38.6 5.5 0.7
11 2019 학력별 대졸 이하 53.1 4.7 3.3 34.0 4.6 0.3
12 2019 학력별 대학원 이상 61.2 3.0 5.6 29.0 0.9 0.3
13 2019 소득별 100만원 미만 10.7 8.4 9.9 50.7 9.4 10.9
14 2019 소득별 100-200만원 미만 29.6 5.6 6.0 49.1 7.4 2.3
15 2019 소득별 200-300만원 미만 42.8 7.3 3.9 39.5 5.1 1.4
16 2019 소득별 300-400만원 미만 50.6 4.3 4.2 35.5 4.8 0.7
17 2019 소득별 400-500만원 미만 48.0 4.6 3.3 38.7 5.3 0.2
18 2019 소득별 500만원 이상 52.8 4.3 4.0 33.4 4.5 1
19 2019 혼인상태별 기혼 48.7 4.5 4.1 37.3 4.6 0.7
20 2019 혼인상태별 미혼 50.2 4.9 4.0 35.1 5.6 0.2
21 2019 혼인상태별 이혼/사별/기타 31.5 7.2 5.7 42.4 6.4 6.9
22 2019 지역대분류 도심권 53.8 3.8 7.2 28.3 4.0 2.9
23 2019 지역대분류 동북권 44.5 3.5 4.1 40.6 5.5 1.8
24 2019 지역대분류 서북권 50.7 6.6 5.1 31.4 5.3 0.9
25 2019 지역대분류 서남권 47.1 6.7 4.7 35.9 4.8 0.8
26 2019 지역대분류 동남권 46.3 4.7 3.1 38.9 5.4 1.5
27 2019 종로구 종로구 62.2 0.4 9.4 25.9 2.1 -
28 2019 중구 중구 50.3 3.0 7.7 25.7 7.6 5.7
29 2019 용산구 용산구 48.9 7.5 4.9 32.6 2.7 3.4
30 2019 성동구 성동구 46.5 4.3 5.7 34.2 8.7 0.6
31 2019 광진구 광진구 42.0 5.7 3.0 43.5 5.8 -
32 2019 동대문구 동대문구 44.5 4.5 2.7 41.9 6.2 0.1
33 2019 중랑구 중랑구 46.7 2.2 6.8 32.8 10.9 0.5
34 2019 성북구 성북구 33.3 3.4 2.6 58.0 2.0 0.7
35 2019 강북구 강북구 21.3 5.3 3.4 68.1 1.9 -
36 2019 도봉구 도봉구 52.0 3.2 6.2 30.8 7.6 0.3
37 2019 노원구 노원구 56.3 1.6 2.7 30.1 1.9 7.4
38 2019 은평구 은평구 42.7 8.8 7.3 34.3 6.4 0.5
39 2019 서대문구 서대문구 69.8 0.8 1.2 21.9 5.3 1
40 2019 마포구 마포구 46.6 8.1 4.7 35.8 3.2 1.5
41 2019 양천구 양천구 66.2 5.7 5.9 17.9 4.1 0.1
42 2019 강서구 강서구 38.5 3.8 1.9 50.5 4.3 1
43 2019 구로구 구로구 45.3 5.7 5.8 39.0 2.9 1.3
44 2019 금천구 금천구 53.6 2.4 2.3 37.6 2.3 1.7
45 2019 영등포구 영등포구 50.2 6.7 3.8 33.9 5.4 -
46 2019 동작구 동작구 39.1 13.9 8.4 31.1 7.6 -
47 2019 관악구 관악구 44.4 8.8 5.5 34.2 6.1 1
48 2019 서초구 서초구 49.9 4.3 4.1 36.6 3.3 1.8
49 2019 강남구 강남구 40.7 4.2 2.0 46.4 5.2 1.6
50 2019 송파구 송파구 47.6 5.0 2.3 39.4 4.8 1
51 2019 강동구 강동구 47.0 5.2 4.8 32.4 8.4 2.3
In [99]:
# 대분류의 성별 의 행만 가져옴
df_gender = df[df['대분류'].isin(["성별"])]
df_gender
Out[99]:
기간 대분류 분류 운동을 할 충분한 시간이 없어서 함께 운동을 할 사람이 없어서 운동을 할 만한 장소가 없어서 운동을 싫어해서 운동을 할 충분한 비용이 없어서 기타
1 2019 성별 남자 52.4 4.4 4.9 32.4 4.9 1.1
2 2019 성별 여자 42.5 5.6 3.9 41.0 5.4 1.7
In [100]:
features = [
    '운동을 할 충분한 시간이 없어서',
    '함께 운동을 할 사람이 없어서'
]
In [102]:
pg = sns.PairGrid( df_gender, y_vars="분류", x_vars=features, height=5, hue="분류")
pg.map(sns.barplot)
Out[102]:
<seaborn.axisgrid.PairGrid at 0x20b60ef5990>
No description has been provided for this image
In [103]:
df_age = df[df["대분류"].isin(["연령별"]) ]
df_age
Out[103]:
기간 대분류 분류 운동을 할 충분한 시간이 없어서 함께 운동을 할 사람이 없어서 운동을 할 만한 장소가 없어서 운동을 싫어해서 운동을 할 충분한 비용이 없어서 기타
3 2019 연령별 10대 55.3 4.8 3.9 32.6 3.5 -
4 2019 연령별 20대 46.0 4.2 4.5 38.8 6.4 0.1
5 2019 연령별 30대 59.9 5.2 2.9 27.3 4.5 0.2
6 2019 연령별 40대 54.1 3.9 2.9 35.5 3.3 0.4
7 2019 연령별 50대 46.1 6.2 4.5 36.8 5.6 0.8
8 2019 연령별 60대 이상 26.6 6.0 6.6 48.7 6.6 5.6
In [104]:
pg = sns.PairGrid( df_age, y_vars="분류", x_vars=features, height=5, hue="분류")
pg.map(sns.barplot)
Out[104]:
<seaborn.axisgrid.PairGrid at 0x20b611fb2d0>
No description has been provided for this image
In [107]:
df_age["운동할 수 있음"] = df_age["운동을 할 충분한 시간이 없어서"].apply(lambda x: 100 - x)
df_age["함께 운동할 수 있음"] = df_age["함께 운동을 할 사람이 없어서"]
f = ["운동할 수 있음", "함께 운동할 수 있음"]

pg = sns.PairGrid( df_age, y_vars="분류", x_vars=features, height=5, hue="분류")
pg.map(sns.barplot)
Out[107]:
<seaborn.axisgrid.PairGrid at 0x20b5cb14790>
No description has been provided for this image
In [110]:
df_age["종합점수"] = df_age["운동할 수 있음"] + df_age["함께 운동할 수 있음"]
f = ["운동할 수 있음", "함께 운동할 수 있음", "종합점수"]

pg = sns.PairGrid( df_age, y_vars="분류", x_vars=f, height=5, hue="분류")
pg.map(sns.barplot)
df_age[["분류", "종합점수"]]
Out[110]:
분류 종합점수
3 10대 49.5
4 20대 58.2
5 30대 45.3
6 40대 49.8
7 50대 60.1
8 60대 이상 79.4
No description has been provided for this image