AI/실습

118. [Python] [Pandas] 프로그래밍 실습 : CCTV

천재단미 2025. 1. 24. 16:13
728x90
반응형

반응형

 

 

 

 

  TIP💡 주피터 노트북 한글타이핑 

# 한글 찍기
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sb

%matplotlib inline

import platform

from matplotlib import font_manager, rc
plt.rcParams['axes.unicode_minus'] = False

if platform.system() == 'Darwin':
    rc('font', family='AppleGothic')
elif platform.system() == 'Windows':
    path = "c:/Windows/Fonts/malgun.ttf"
    font_name = font_manager.FontProperties(fname=path).get_name()
    rc('font', family=font_name)
else:
    print('Unknown system... sorry~~~~')

 

1. 데이터 로드 및 탐색

CCTV_in_Seoul.csv 파일을 pandas 로 읽어오세요.

 

사용 데이터: CCTV 설치 현황 데이터

import pandas as pd

# 데이터 로드
CCTV_Seoul = pd.read_csv('CCTV_result.csv', encoding='utf-8')

# 데이터 확인
print(CCTV_Seoul.head())
print(CCTV_Seoul.info())

 

코드분석

 

  • 구별: 서울시 구 이름
  • 소계: CCTV 설치 대수
  • 인구수: 각 구의 총 인구수
  • CCTV 비율: 인구수 대비 CCTV 비율(자동 계산)

 

  TIP💡 

  • pd.read_csv()로 데이터를 읽고 .head()를 사용해 데이터 일부를 확인가능합니다.
  • .head() 경우 5열까지 자동 생성됩니다. 

 

출력

 

 

 

 

 


 

 

 

 

 

 

2. 실습 

 

문제 1. 컬럼명변경

컬럼 중 "기관명" 컬럼명을 "구별" 로 이름을 바꾸세요.

 

 

풀이 1.  

CCTV_Seoul.rename(columns={"기관명": "구별"}, inplace=True)
CCTV_Seoul.head()

 

 

코드분석

 

  • .rename(      , inplace = True) :  이름 변경 

 

 

출력

: CCTV_Seoul.head()

 

 

 

 


 

 

 

 

문제 2. 상위 5개출력

인구수 대비 CCTV 비율 상위 5개 구를 출력하시오.

 

 

풀이  2. 

# 인구수 대비 CCTV 비율 상위 5개 구
top_ratio = df.sort_values(by='CCTV 비율', ascending=False).head(5)
print(top_ratio)

 

코드분석

 

  • CCTV 비율 컬럼을 기준으로 내림차순 정렬하여 CCTV 설치 효율이 높은 구를 확인합니다.

 

  TIP💡 주피터 노트북 에서 프로그램 설치 방법 

 

!conda install -y xlrd

  • ! : !  주피터 노트북 안에서 아나콘다(conda) 설티를 바로 할수 있습니다. 
  • -y :  설치를 동의 합니다. 

 

출력

:  CCTV_Seoul

 

 

 

 

 

 


 

 

 

 

 

 

문제 3. 컬럼명 모두출력

pop_Seoul 의 컬럼명을 모두 출력하세요.

 

 

풀이 3. 

 pop_Seoul.columns

 

 

출력

Index(['자치구', '계', '계.1', '계.2', '65세이상고령자'], dtype='object')

 

 

 


 

 

 

 

 

 

문제 4. 컬럼명 변경

컬럼명을 다음처럼 바꿉니다.

0번째는 '구별' , 1번째는 '인구수', 2번쨰는 '한국인', 3번째는 '외국인', 4번째는 '고령자' 로 rename

 

 

풀이 4.  

 pop_Seoul.head(2)
 
  pop_Seoul.columns = [ '구별','인구수', '한국인','외국인', '고령자' ]

 

 

코드분석

 

 pop_Seoul.head(2) :  2번째 열까지만 보여줘 

 

 

출력

:   pop_Seoul

 

 

 

 


 

 

 

 

문제 5. 

CCTV 갯수가 가장 많은 순부터 적은 순으로 정렬한 후, 상위 20개만 화면에 보여주세요.

 

 

풀이 5. 

CCTV_Seoul.sort_values('소계', ascending=False).head(20)

 

출력

 

 

 


 

 

 

문제 6. 컬럼추가

최근 3년간 CCTV 증가율을 계산하여, dataframe 에 '최근증가율' 컬럼을 추가하세요.

증가율 계산 : (2016 + 2015 + 2014) / 2013이전 * 100

 

 

 

풀이 6.  

CCTV_Seoul['최근증가율'] = 
(CCTV_Seoul['2014년'] + CCTV_Seoul['2015년'] + CCTV_Seoul['2016년'] )/ CCTV_Seoul['2013년도 이전'] *100

CCTV_Seoul

 

출력

:  CCTV_Seoul

 

 

 

 


 

 

 

 

문제 7. 높은순 찾기

최근 3년간 CCTV 증가율이 가장 높은 순으로 5개의 구를 찾으세요.

 

 

풀이  7. 

CCTV_Seoul.sort_values('최근증가율', ascending = False).head()

 

출력

 

 

 

 


 

 

 

문제 8. 행삭제

서울시의 인구 데이터 중, 가장 첫번째 행은 필요 없으니, 삭제하세요.

 

 

풀이 8.  

 

3가지 방법 

# 방법 1. 삭제 하는 방법 
pop_Seoul.drop( 0  , axis = 0).head()


# 방법 2. 0을 제외하고 가져오는 방법 
pop_Seoul.loc[1 : , ].head()


# 방법 3. 0을 제외하고 가져오는 방법 
pop_Seoul.iloc[1 : , ].head()

pop_Seoul = pop_Seoul.drop( 0  , axis = 0)
pop_Seoul

 

출력

:  pop_Seoul

 

 

 

 

 


 

 

 

 

 

 

 

문제 9. NaN 확인 및 삭제 

서울시의 인구 데이터 중, NaN이 있는지 확인하고, NaN이 있으면 해당 row를 삭제하세요.

 

 

풀이 9.  

 

pop_Seoul.isna().sum()

# 자치구         1
계           1
계.1         1
계.2         1
65세이상고령자    1
dtype: int64


pop_Seoul = pop_Seoul.drop(26)


pop_Seoul

코드분석

 

.isna().sum() : NaN의 합계 구하기 

 

출력

:  pop_Seoul

 

 

 

 

 


 

 

 

 

문제 10. 컬럼추가 

'외국인비율' 과 '고령자비율' 두개의 컬럼을 추가하세요.

외국인비율 = 외국인 수 / 인구수 * 100

고령자비율 = 고령자 수 / 인구수 * 100

 

 

풀이  10. 

pop_Seoul['외국인']/pop_Seoul['인구수']*100

# 컬럼저장 
pop_Seoul['외국인비율'] = pop_Seoul['외국인']/pop_Seoul['인구수']*100

pop_Seoul['고령자']/pop_Seoul['인구수']*100

# 컬럼저장 
pop_Seoul['고령자비율'] = pop_Seoul['고령자']/pop_Seoul['인구수']*100


pop_Seoul

 

출력

: pop_Seoul

 

 

 

 

 


 

 

 

문제 11. 정보찾기(외국인)

외국인 대상으로 장사를 하려 합니다. 외국인이 가장 많은 구와, 외국인비율이 가장 높은 구를 각각 5개씩 찾으세요.

 

 

풀이 11. 

#외국인 많은 구 

pop_Seoul.sort_values('외국인',ascending = False).head()


#외국인 비율 높은 구 

pop_Seoul.sort_values('외국인비율',ascending = False).head()

 

 

출력

 

 

 


 

 

 

 

 

문제  12. 정보찾기(고령자)

고령자 대상 마케팅을 구상 중입니다. 고령자가 가장 많은 구와, 고령자비율이 가장 높은 구를 각각 5개씩 찾으세요.

 

 

풀이   12. 

# 고령자 많은 구 

pop_Seoul.sort_values('고령자',ascending = False).head()


# 고령자 비율 높은 구 

pop_Seoul.sort_values('고령자비율',ascending = False).head()

 

 

출력

 

 

 

 

 


 

 

 

문제 13. 테이터 합성 및 분석 

CCTV 데이터와 인구 데이터 합치고 분석하기

data_result 라는 변수로 저장합니다.

 

 

풀이  13. 

# 컬럼만 보면되기 때문에 

CCTV_Seoul.head(1)

pop_Seoul.head(1)

data_result = pd.merge( CCTV_Seoul,pop_Seoul, on = '구별' )

data_result.head(3)

 

 

출력

:  data_result.head(3)

 

 

 

 


 

 

 

문제 14.  

data_result 에서, 다음 4개의 컬럼을 모두 버려 버립니다.

'2013년도 이전', 2014년', '2015년', '2016년'

 

 

풀이 14.  

# axis = 0  열  axis = 1  행   
data_result = data_result.drop(['2013년도 이전', '2014년', '2015년', '2016년'], axis = 1 )

 

 

출력

:  data_result

 

 

 

 

 


 

 

 

 

 

문제 15. 인텍스 변경및 파일 저장 

15-1 . 인덱스 변경 

dara_result 의 인덱스를, '구별' 로 바꿔 줍니다.

15-2 . 파일저장 

데이터프레임을 csv 파일로 저장합니다.

  파일명은, CCTV_result.csv 입니다.

 

 

풀이 15. 

15-1 .  풀이 

data_result = data_result.set_index('구별')
data_result.loc['강남구','인구수']

 

출력

570500.0

 

15-2 .  풀이 

data_result.to_csv('CCTV_result.csv')

 

 

출력

 

 

728x90
반응형
home top bottom
}