- 10살 단위로 인구를 정리한다.
- 70대 이상은 하나로 합친다.
- 3개의 기간동안 인구가 증가하는 곳을 찾는다.
- 남성이 여성보다 많이 거주하는 곳 가운데 인구가 3만 이상인 곳을 찾는다. (없으면 없다)
In [85]:
import pandas as pd
import numpy as np
2018.06.30.기준 대구광역시 주민등록인구 현황¶
In [86]:
population_01 = pd.read_csv('data/2018.06.30.기준 대구광역시 주민등록인구 현황_UTF8.csv')
population_01
Out[86]:
In [87]:
df =population_01.copy()
In [88]:
drop_list = []
check_list = ['총계', '구분', ' 남', ' 여'] # 남구 삭제 방지를 위해 '남' 앞에 공백 추가
for chk in check_list:
for item in df.columns :
if chk in item:
drop_list.append(item)
drop_list = list(set(drop_list)) # 중복 제거를 위해 set을 사용
In [89]:
df1 = df.drop(drop_list,axis=1)
df1
Out[89]:
In [90]:
df1['인구0'] = (pd.DataFrame(range(0,101))/10).astype(int)*10
df1
Out[90]:
In [91]:
df1['인구0'] = (pd.DataFrame(range(0,101))/10).astype(int)*10
df1 = df1.groupby('인구0')
df1 = df1.sum()
df1
Out[91]:
In [92]:
df1['인구'] = df1.index
df1['인구'] = np.where(df1['인구'] >= 70, 70, df1.인구)
df1 = df1.groupby('인구')
df1 = df1.sum()
df1
Out[92]:
In [93]:
#df1['인구'] = (pd.DataFrame(range(0,101))/10).astype(int)*10
#df1['인구'] = np.where(df1['인구'] >= 70, 70, df1.인구)
#df1 = df1.groupby('인구')
#df1 = df1.sum()
#df1
2018.12.31.기준 대구광역시 주민등록인구 현황¶
In [94]:
population_02 = pd.read_csv('data/2018.12.31.기준 대구광역시 주민등록인구 현황_UTF8.csv')
population_02.head()
Out[94]:
In [95]:
df2 =population_02.copy()
In [96]:
drop_list = []
check_list = ['총계', '구분', ' 남', ' 여'] # 남구 삭제 방지를 위해 '남' 앞에 공백 추가
for chk in check_list:
for item in df2.columns :
if chk in item:
drop_list.append(item)
drop_list = list(set(drop_list)) # 중복 제거를 위해 set을 사용
df2_1 = df2.drop(drop_list,axis=1)
df2_1['인구'] = (pd.DataFrame(range(0,101))/10).astype(int)*10
df2_1['인구'] = np.where(df2_1['인구'] >= 70, 70, df2_1.인구)
df2_1 = df2_1.groupby('인구')
df2_1 = df2_1.sum()
df2_1
Out[96]:
2019.06.30.기준 대구광역시 주민등록인구 현황¶
In [97]:
population_03 = pd.read_csv('data/2019.06.30.기준 대구광역시 주민등록인구 현황_UTF8.csv',thousands=',')
population_03.head()
Out[97]:
In [98]:
df3 =population_03.copy()
In [99]:
drop_list = []
check_list = ['총계', '행정구역', ' 남', ' 여'] # 남구 삭제 방지를 위해 '남' 앞에 공백 추가
for chk in check_list:
for item in df3.columns :
if chk in item:
drop_list.append(item)
drop_list = list(set(drop_list)) # 중복 제거를 위해 set을 사용
df3_1 = df3.drop(drop_list,axis=1)
df3_1['인구'] = (pd.DataFrame(range(0,101))/10).astype(int)*10
df3_1['인구'] = np.where(df3_1['인구'] >= 70, 70, df3_1.인구)
df3_1 = df3_1.groupby('인구')
df3_1 = df3_1.sum()
df3_1
Out[99]:
3개의 기간동안 인구가 증가하는 곳을 찾는다¶
In [100]:
df1 = df1.T
df1['총합'] = df1.sum(axis=1).astype(int)
df1
Out[100]:
In [101]:
df2_1 = df2_1.T
df2_1['총합'] = df2_1.sum(axis=1).astype(int)
df2_1
Out[101]:
In [102]:
df3_1 = df3_1.T
df3_1['총합'] = df3_1.sum(axis=1).astype(int)
df3_1
Out[102]:
In [103]:
pop1 = (df2_1['총합'] - df1['총합']) > 0
pop2 = (df3_1['총합'] - df2_1['총합']) > 0
df3_1['인구증가'] = pop1 & pop2
df3_1
Out[103]:
In [104]:
df3_1[df3_1.인구증가 == True]
Out[104]:
4. 다음조건 찾기¶
- 남성인구 > 여성인구
- 인구수 > 20만
In [105]:
df = population_01.copy()
In [106]:
#공통제거
drop_list = []
check_list = ['총계', '구분',]
for chk in check_list:
for item in df.columns :
if chk in item:
drop_list.append(item)
drop_list = list(set(drop_list)) # 중복 제거를 위해 set을 사용
In [107]:
df = df.drop(drop_list, axis=1)
In [108]:
df['인구'] = (pd.DataFrame(range(0,101))/10).astype(int)*10
df['인구'] = np.where(df['인구'] >= 70, 70, df.인구)
df = df.groupby('인구')
df = df.sum()
df = df.T
df['총합'] = df.sum(axis='columns').astype(int)
df = df.T
df
Out[108]:
In [109]:
#남자만 뽑기
drop_list = []
check_list = [' 계', ' 여']
for chk in check_list:
for item in df.columns :
if chk in item:
drop_list.append(item)
drop_list = list(set(drop_list)) # 중복 제거를 위해 set을 사용
#drop_list
In [110]:
ex4_df1_M = df.drop(drop_list, axis=1)
ex4_df1_M = ex4_df1_M.T
ex4_df1_M
Out[110]:
In [111]:
#여자만 뽑기
drop_list = []
check_list = [' 계', ' 남']
for chk in check_list:
for item in df.columns :
if chk in item:
drop_list.append(item)
drop_list = list(set(drop_list)) # 중복 제거를 위해 set을 사용
#drop_list
In [112]:
ex4_df1_F = df.drop(drop_list, axis=1)
ex4_df1_F = ex4_df1_F.T
ex4_df1_F
Out[112]:
In [113]:
#합계만 뽑기
drop_list = []
check_list = [' 남', ' 여']
for chk in check_list:
for item in df.columns :
if chk in item:
drop_list.append(item)
drop_list = list(set(drop_list)) # 중복 제거를 위해 set을 사용
#drop_list
In [114]:
ex4_df1_T = df.drop(drop_list, axis=1)
ex4_df1_T = ex4_df1_T.T
ex4_df1_T
Out[114]:
In [115]:
ex4_df1_T['남초여부'] = (ex4_df1_M['총합'].values > ex4_df1_F['총합'].values)
# result = (ex4_df1_M['총합'].values > ex4_df1_F['총합'].values) > 0
# index = ex4_df1_T.index
# obj = pd.Series(result, index=index)
# ex4_df1_T['남초여부'] = obj
ex4_df1_T
Out[115]:
In [116]:
case1 = ex4_df1_T['남초여부'] == True
case2 = ex4_df1_T['총합']> 200000
case = case1 & case2
ex4_df1_T['결과'] = case
ex4_df1_T
Out[116]:
In [117]:
ex4_df1_T[ex4_df1_T['결과'] == True]
Out[117]:
In [118]:
ex4_df1_T = ex4_df1_T.T
ex4_df1_T
Out[118]:
컬럼 이름 변경¶
- 새로운 리스트로 덮어씀
In [119]:
ex4_df1_T.columns = ['중구','동구','서구','남구','북구','수성구','달서구','달성군']
ex4_df1_T
Out[119]:
- replace를 사용하여 이름 명 변경(대체)
In [120]:
ex4_df1_T.columns = ex4_df1_T.columns.str.replace("구","구 계")
ex4_df1_T
Out[120]:
- 각각 이름 변경시 rename을 사용
In [121]:
ex4_df1_T = ex4_df1_T.rename({'중구 계':'대구중구'}, axis='columns')
ex4_df1_T
Out[121]:
5. 대구광역시의 각 구별 인구수를 정리하여 표시하고 인구가 가장 많은 지역과 가장 적은 지역을 구하여 출력 하라(3개 파일에서 각각 구하라)¶
In [232]:
#합계만 뽑기
drop_list = []
check_list = [' 남', ' 여']
for chk in check_list:
for item in df.columns :
if chk in item:
drop_list.append(item)
drop_list = list(set(drop_list)) # 중복 제거를 위해 set을 사용
#drop_list
In [233]:
df1_T = df.drop(drop_list, axis=1)
df1_T = df1_T.T
df1_T
Out[233]:
In [234]:
df1_T1 =df1_T.copy()
In [240]:
max_1 = df1_T1['총합'].idxmax()
df1_T1[df1_T1.index == max_1 ]
Out[240]:
In [241]:
min_1 = df1_T1['총합'].idxmin()
df1_T1[df1_T1.index == min_1 ]
Out[241]:
In [201]:
max_1 = df1_T['총합'].idxmax() == df1_T1.index
min_1 = df1_T['총합'].idxmin() == df1_T1.index
df1_T1['최대인구 구'] = max_1
df1_T1['최소인구 구'] = min_1
df1_T1
Out[201]:
In [202]:
df2 =population_02.copy()
In [203]:
#공통제거
drop_list = []
check_list = ['총계', '구분',]
for chk in check_list:
for item in df2.columns :
if chk in item:
drop_list.append(item)
drop_list = list(set(drop_list)) # 중복 제거를 위해 set을 사용
In [204]:
df2 = df2.drop(drop_list, axis=1)
In [205]:
df2['인구'] = (pd.DataFrame(range(0,101))/10).astype(int)*10
df2['인구'] = np.where(df2['인구'] >= 70, 70, df2.인구)
df2 = df2.groupby('인구')
df2 = df2.sum()
df2 = df2.T
df2['총합'] = df2.sum(axis='columns').astype(int)
df2 = df2.T
df2
Out[205]:
In [244]:
#합계만 뽑기
drop_list = []
check_list = [' 남', ' 여']
for chk in check_list:
for item in df2.columns :
if chk in item:
drop_list.append(item)
drop_list = list(set(drop_list)) # 중복 제거를 위해 set을 사용
#drop_list
In [269]:
df2_T = df2.drop(drop_list, axis=1)
df2_T = df2_T.T
df2_T
Out[269]:
In [246]:
df2_T2 =df2_T.copy()
In [247]:
max_2 = df2_T2['총합'].idxmax()
df2_T2[df2_T2.index == max_2 ]
Out[247]:
In [248]:
min_2 = df2_T2['총합'].idxmin()
df2_T2[df2_T2.index == min_2 ]
Out[248]:
In [208]:
max_2 = df2_T['총합'].idxmax() == df2_T2.index
min_2 = df2_T['총합'].idxmin() == df2_T2.index
df2_T2['최대인구 구'] = max_2
df2_T2['최소인구 구'] = min_2
df2_T2
Out[208]:
In [250]:
df3 = population_03.copy()
In [251]:
#공통제거
drop_list = []
check_list = ['총계', '구분',]
for chk in check_list:
for item in df3.columns :
if chk in item:
drop_list.append(item)
drop_list = list(set(drop_list)) # 중복 제거를 위해 set을 사용
In [252]:
df3 = df3.drop(drop_list, axis=1)
In [253]:
df3['인구'] = (pd.DataFrame(range(0,101))/10).astype(int)*10
df3['인구'] = np.where(df3['인구'] >= 70, 70, df3.인구)
df3 = df3.groupby('인구')
df3 = df3.sum()
df3 = df3.T
df3['총합'] = df3.sum(axis='columns').astype(int)
df3 = df3.T
df3
Out[253]:
In [254]:
drop_list = []
check_list = [' 남', ' 여']
for chk in check_list:
for item in df3.columns :
if chk in item:
drop_list.append(item)
drop_list = list(set(drop_list)) # 중복 제거를 위해 set을 사용
#drop_list
In [274]:
df3_T = df3.drop(drop_list, axis=1)
df3_T = df3_T.T
df3_T
Out[274]:
In [258]:
df3_T3 =df3_T.copy()
In [259]:
max_3 = df3_T['총합'].idxmax()
df3_T3[df3_T3.index == max_3 ]
Out[259]:
In [260]:
min_3 = df3_T3['총합'].idxmin()
df3_T3[df3_T3.index == min_1 ]
Out[260]:
In [215]:
max_3 = df3_T['총합'].idxmax() == df3_T.index
min_3 = df3_T['총합'].idxmin() == df3_T.index
df3_T['최대인구 구'] = max_3
df3_T['최소인구 구'] = min_3
df3_T
Out[215]:
6. 대구광역시의 각 구별 20대 대비 60세 이상의 인구 비율을 구하여 출력하고 이 비율이 가장 높은 지역을 구하여 출력하라¶
In [265]:
df1_T
Out[265]:
In [266]:
df1_T['60대이상'] = (df1_T[60] + df1_T[70]).astype(int)
df1_T
Out[266]:
In [267]:
df1_T['rate'] = round((df1_T['60대이상']/df1_T[20])*100,1)
df1_T
Out[267]:
In [268]:
max_6_1 = df1_T['rate'].idxmax()
df1_T[df1_T.index == max_6_1 ]
Out[268]:
In [270]:
df2_T
Out[270]:
In [271]:
df2_T['60대이상'] = (df2_T[60] + df2_T[70]).astype(int)
df2_T
Out[271]:
In [272]:
df2_T['rate'] = round((df2_T['60대이상']/df2_T[20])*100,1)
df2_T
Out[272]:
In [273]:
max_6_2 = df2_T['rate'].idxmax()
df2_T[df2_T.index == max_6_2 ]
Out[273]:
In [275]:
df3_T
Out[275]:
In [276]:
df3_T['60대이상'] = (df3_T[60] + df3_T[70]).astype(int)
df3_T
Out[276]:
In [277]:
df3_T['rate'] = round((df3_T['60대이상']/df3_T[20])*100,1)
df3_T
Out[277]:
In [278]:
max_6_3 = df3_T['rate'].idxmax()
df3_T[df3_T.index == max_6_3 ]
Out[278]:
'Python' 카테고리의 다른 글
Python_데이터분석2 (0) | 2020.09.15 |
---|---|
Python_판다스_데이터분석 (0) | 2020.09.14 |
python_pandas(판다스): 계층적 색인 지정, 누락된 데이터처리, 결측치채우기, 데이터 변형하기, onehot인코딩 (0) | 2020.09.11 |
Python_pandas 문제 (0) | 2020.09.09 |
Python_pandas(판다스):시리즈,데이터프레임,색인,인덱싱,sorting (0) | 2020.09.09 |