이번 강의는 소상공인시장진흥공단_상가(상권)정보_의료기관 데이터를 활용하여 분석한다. 최종 목표는 서울의 종합병원 분포를 확인하는 것이다.

결측치 해결

결측치가 많은 데이터, 특히 행은 데이터 분석에 방해만 될 뿐 아무 필요가 없다. 그래서 본 강의의 초반에는 이를 제거하는 방법을 주로 다룬다.

print(df.isnull())              # 결측치
print(df.isnull().sum())        # 결측치가 몇 개 있는지 세어준다

결측치를 세고, 몇 개가 존재하는지를 먼저 파악한다.

결측치 개수를 이용해서 새로운 데이터프레임을 만들 수도 있다.

# 결측치 개수로 새로운 데이터프레임 생성
df_null_count = null_count.reset_index()
df_null_count.head()
df_null_count.columns = ["컬럼명", "결측치수"]      # 컬럼명 변경
df_null_count_top = df_null_count.sort_values(by = "결측치수", ascending=False).head(10)

여기서 제작한 df_null_count_top은 결측치가 많은 컬럼 순으로 정보를 가지고 있다. 이를 이용하면 결측치가 많은 컬럼을 제거할 수 있다.

# 결측치가 많은 컬럼은 제거하자
drop_columns = df_null_count_top["컬럼명"].tolist()     # 결측치가 많은 컬럼 선별
df = df.drop(drop_columns, axis=1)                      # axis=1로 컬럼 기준의 drop

이제 결측치가 많은 쓸데 없는 컬럼이 제거되고 분석에 필요한 컬럼만이 남았다.

기초 통계량 파악하기

컬럼에 대한 기초 통계량을 파악한다면 추후에 유용하게 활용할 수 있을 것이다.

# 기초 통계 수치
print(df["위도"].mean())                               # 평균
print(df["위도"].median())                             # 중앙값
print(df["위도"].max())                                # 최댓값
print(df["위도"].mix())                                # 최솟값
print(df["위도"].count())                              # 개수
print(df["위도"].describe())                           # 통계 수치 요약
print(df[["위도", "경도"]].describe())                  # 두 개 컬럼 통계 수치 요약
print(df.describe(include="object"))                  # 문자열 데이터 타입 요약
print(df["상권업종대분류명"].unique())                  # 중복 제거한 값 보기
print(df["상권업종대분류명"].nunique())                 # 중복 제거한 값 개수 세기
print(df["상권업종중분류명"].unique())                  # 중복 제거한 값 보기
print(df["상권업종중분류명"].nunique())                 # 중복 제거한 값 개수 세기
print(df["상권업종소분류명"].unique())                  # 중복 제거한 값 보기
print(df["상권업종소분류명"].nunique())                 # 중복 제거한 값 개수 세기
print(df["시도명"].value_counts(normalize=True))        # 전체에서의 비율 계산

대충 이름만 봐도 무슨 역할을 하는지 알 수 있다. nunique는 좀 새로운데, unique가 중복을 제거하고 어떤 요소가 있는지를 나타낸다면, nunique는 이 요소가 몇 개인지 센다고 보면 된다.

value_counts(normalize=True)를 사용하면 전체에서 각 요소가 차지하는 비율도 알 수 있다.


시각화

pandas은 기본적으로 시각화를 제공한다. .plot()을 사용하면 된다. plot뒤에 추가로 코드를 작성하여 다양한 형태의 그래프로 나타낼 수도 있다.

city = df["시도명"].value_counts()
city_normalize = df["시도명"].value_counts(normalize=True)

city.plot.barh()
city_normalize.pie(figsize=(7, 7))

위 코드에서는 ‘시도명’ 컬럼을 기준으로 요소의 개수를 세고, 이를 그래프로 나타내었다. barh는 가로막대 그래프, pie는 원 그래프이다.


관련 코드 보러가기

댓글남기기