이번 강의는 소상공인시장진흥공단_상가(상권)정보_의료기관 데이터를 활용하여 분석한다. 최종 목표는 서울의 종합병원 분포를 확인하는 것이다.
결측치 해결
결측치가 많은 데이터, 특히 행은 데이터 분석에 방해만 될 뿐 아무 필요가 없다. 그래서 본 강의의 초반에는 이를 제거하는 방법을 주로 다룬다.
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
는 원 그래프이다.
댓글남기기