1. 전국 도시공원 데이터
- import
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
- 파일을 인코딩하면서 가져오기
park=pd.read_csv('/content/drive/MyDrive/1. KDT/5. 데이터 분석/데이터/전국도시공원표준데이터.csv' encoding='ms949')
park.head()
- 'park' 데이터프레임 : 행과 열 갯수 확인
park.shape
- 한글 폰트 넣기
!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
plt.rc('font',family='NanumBarunDothic')
런타임 다시 실행 |
- 표 확인하기
park.info()
- 표 확인 후, 불필요한 컬럼 삭제하기
park.columns
park.drop(columns=['공원보유시설(운동시설)','공원보유시설(유희시설)', '공원보유시설(편익시설)', '공원보유시설(교양시설)', '공원보유시설(기타시설)', '지정고시일', '관리기관명','Unnamed: 19'], inplace=True)
park
|
- 지도보기
park.plot.scatter(x='경도',y='위도',figsize=(8,10),grid=True)
2. boxplot
- 데이터의 분포를 시각화하는데 유용
- 주로 데이터의 중앙값(중위수, median)
사분위수(Q1[25%], Q2[50%], Q3[75%], Q4[100%]), 이상치 등을 표현하는데 활용
- bpxplot으로 이상치 데이터 확인
sns.boxplot(y=park['위도'])
sns.boxplot(y=park['경도'])
* 이상치 데이터가 있음 위도: 30 이상 데이터 = 이상치 / 경도: 132 이상 데이터 = 이상치 |
- boxplot의 특징
|
- 위도와 경도의 이상치로 판별되는 데이터를 확인
# 위도와 경도의 이상치로 판별되는 데이터를 확인
park.loc[(park['위도']<29)|(park['경도']>132)]
# 에러 데이터로 담아주기
park_loc_error = park.loc[(park['위도']<32)|(park['경도']>132)]
park_loc_error
- '소재지도로명주소'와 '소재지지번주소'가 모두 입력되지 않은 데이터를 확인
# '소재지도로명주소'와 '소재지지번주소'가 모두 입력되지 않은 데이터를 확인
park.loc[park['소재지도로명주소'].isnull() & park['소재지지번주소'].isnull()]
- '소재지도로명주소'가 입력되지 않은 데이터에 '소재지지번주소'를 대신 채움
# '소재지도로명주소'가 입력되지 않은 데이터는 '소재지지번주소'로 대신 채움
park['소재지도로명주소'].fillna(park['소재지지번주소'], inplace=True)
- '소재지도로명주소'에는 null이고 '소재지지번주소'는 있는 데이터 확인
park.loc[park['소재지도로명주소'].isnull() & park['소재지지번주소'].notnull()]
- 주소 쪼개기
# park['소재지도로명주소'].str.split(' ')
# 예) [부산광역시,강서구, 구랑동, 1199-7]
# park['소재지도로명주소'].str.split(' ',expand=True)
# 데이터프레임으로 데이터가 분리되고 인덱싱과 슬라이싱이 가능
park['소재지도로명주소'].str.split(' ',expand=True)
- '소재지도로명주소'에서 '시도'만 추출하여 '시도' 파생변수를 생성
# '소재지도로명주소'에서 '시도'만 추출하여 '시도' 파생변수를 생성
park['시도'] = park['소재지도로명주소'].str.split(' ',expand=True)[0]
park.head()
- '시도' 열에서 '강원도'가 '강원'으로 표시된 오류 데이터 확인
park['시도'].value_counts()
- '강원'인 데이터 '강원도'로 변경
# '시도'에 '강원'을 '강원도'로 변경
park['시도'][park['시도']=='강원']='강원도' # 강사님 코드
park['시도'].value_counts() # ai 코드
- 지도 만들기
plt.figure(figsize=(8,10))
sns.scatterplot(data=park, x='경도',y='위도',hue='시도')
- '시도' 열 확인 '강원
park_sido = pd.DataFrame(park['시도'].value_counts())
park_sido
'강원' 데이터가 '강원도'로 변경된 것을 확인할 수 있음 |
- 전체 합계에 대한 비율 계산
# value_counts(normalize=True) : 전체 합계에 대한 비율 계산
park_sido_nomalize = pd.DataFrame(park['시도'].value_counts(normalize=True))
park_sido_nomalize
- 내림차순으로 정렬
# value_counts(ascending=False) : 내림차순으로 정렬
park_sido_ascending = pd.DataFrame(park['시도'].value_counts(ascending=False))
park_sido_ascending
- 시도별 합계 데이터(park_sido)와 비율 데이터(park_sido_normalize)를 병합
# 시도별 합계 데이터(park_sido)와 비율 데이터(park_sido_normalize)를 병합
pd.concat([park_sido, park_sido_normalize], axis=1)
- 새로운 데이터 프레임 생성
park_sido = park_sido.merge(park_sido_normalize, left_index = True, right_index=True).reset_index()
park_sido
- 열 이름 바꾸기
park_sido.columns = ['시도','합계','평균']
park_sido
- 막대그래프 만들기
plt.figure(figsize=(12, 8))
plt.xticks(rotation=45)
sns.barplot(data=park_sido, x='시도', y='합계')
- 그래프 돌리기
plt.figure(figsize=(12, 8))
sns.barplot(data=park_sido, x='합계', y='시도')
'데이터분석 > 실습' 카테고리의 다른 글
06. 데이터분석5 : 떡볶이 프렌차이즈의 입점전략 (0) | 2024.06.03 |
---|---|
05. 데이터분석4 : 서울시 따릉이 API 데이터 활용 (0) | 2024.06.03 |
03. 데이터분석2 : 상권별 업종 밀집 통계 데이터 (0) | 2024.05.28 |
02. 데이터분석1 : 가상 온라인 쇼핑몰 데이터 활용 (0) | 2024.05.27 |
01. Matplotlib (0) | 2024.05.27 |