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')
출력
'AI > 실습' 카테고리의 다른 글
121. [Python] [Pandas] 프로그래밍 실습 : 범죄현장 (1) | 2025.01.25 |
---|---|
120. [Python] [Pandas] 프로그래밍 실습 : 구글맵API 연동 (0) | 2025.01.24 |
119. [Python] [Pandas] 프로그래밍 실습 : (피어슨 상관 계수)CCTV (0) | 2025.01.24 |
117. [Python] [Pandas] 프로그래밍 실습 : 대중교통 (1) | 2025.01.24 |
116. [Python] [Pandas] 프로그래밍 실습 : 기온데이터 분석 (0) | 2025.01.24 |