안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.
<데이터 분석 관련 글>
2021.04.12 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 1편. 데이터는 금이다 (feat.데이터 관련 직업 소개)
2021.04.13 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 2편. 데이터 분석을 위한 준비 (Jupyter Notebook 설치 및 사용법)
2021.04.14 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 3편. 데이터 분석 필수 패키지, 판다스! (feat. 10 minutes to pandas)
2021.04.15 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 4편. 데이터 분석을 위한 데이터 다운로드 받기 (feat.공공데이터포털)
2021.04.17 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 6편. 데이터 분석에서 결측치란? (feat. 주피터 노트북 Pandas 관련 함수)
2021.04.18 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 7편. 원하는 이름의 열 & 특정 문자열을 포함한 데이터 인덱싱하기
이번 시간에는 원하는 데이터만 고르기 위한 능력을 길러보겠습니다. 데이터 프레임에서 원하는 데이터들을 찾기 위해서는 열(column)과 행(row)를 적절히 인덱싱(Indexing)해주면 됩니다. 차근차근 함께 알아가보시죠.
우선 지난 시간에 이어서 다룰 데이터는 아래와 같습니다.
컬럼명은 아래와 같으며, 우리가 이번 시간에 사용할 컬럼명들은 붉은색 밑줄로 표시해보았습니다.
인덱싱 기초 함수
DataFrame["컬럼명"]
: 데이터 프레임에서 원하는 컬럼만 가지는 Series 생성
DataFrame["원하는 컬럼명"]을 입력하면 해당 컬럼명만 가지는 Series가 만들어집니다. 앞으로 데이터 분석 시 아주 많이 사용되는 함수이니 기억해두면 좋을 것 같습니다.
DataFrame[ Series(True/False)]
: 데이터 프레임의 특정 열(column) 안에서, 원하는 데이터를 포함한 행(row)만 출력
여기서 Series(True/False)란 아래 코드의 결과 시리즈를 뜻합니다.
df["상권업종대분류명"] 에서 데이터가 "의료"인지 아닌지에 따라 True/False로 되돌려주는 코드입니다.
이 코드를 다시 df[ ] 안에 입력할 시에, True인 것들만 가지는 데이터 프레임을 얻으실 수 있습니다.
df[df["상권업종대분류명"] == "의료"] 이런 식으로 말이죠.
여기서 추가적으로 알려드리고 싶은 것은 &(and)와 |(or)를 이용해서 여러 조건을 동시에 만족하는 데이터들을 가져올 수도 있습니다.
DataFrame.loc[행, 열] , 여기서 행과 열은 리스트나 Series 형태로 입력 가능
ex) DataFrame.loc[ Series(True/False), "컬럼명" ]
: DataFrame[Series(True/False)]를 통해 얻은 데이터 프래임 중, "컬럼명"만 가지는 Series를 리턴
현재 medical 변수에는 True/False 정보를 갖고 있는 Series 자료가 들어가 있습니다. 우리는 이 것을 loc[] 함수의 첫번째 인자로 사용해서 하고 "상권업종중분류명"이란 컬럼명을 가진 정보만 Series로 가져와보겠습니다.
Series.value_counts( )
: Series 내의 데이터들을 숫자를 카운트해서 Series 형태로 리턴
앞서 말씀드렸듯이 df["상호명"]은 상호명의 정보만 가지는 1차원 데이터 자료인 Series입니다. 이 Series가 무슨 자료들을 가지는지 value_counts( ) 함수로 한 눈에 파악 가능합니다.
Series.str.contains("문자열")
: Series 내에서 "문자열"을 포함하고 있는 문자 데이터(object)들을 True로, 그 외의 것들을 False로 리턴
아래의 코드는 "상호명" 중에서 "종합병원"이 들어간 데이터들을 True로 가지는 Series를 돌려주는 코드입니다.
만약에 종합병원이 들어가지 않은 것을 True로 받고 싶으시다면 아래의 코드 앞에 ~(Not 연산자)를 하나 붙여주시면 됩니다!
Series.str.endswith("문자열")
: Series 내에서 "문자열"로 끝나는 문자 데이터(object)들을 True로, 그 외의 것들을 False로 리턴
위에서 배웠던 value_counts( ) 함수를 이용해서 "상호명"이 "의원"으로 끝나는 곳은 39174개라는 것을 알 수 있습니다.
인덱싱을 이용한 데이터 전처리
위에서 배운 함수들을 이용해서 '서울특별시'에 위치한 '종합병원'으로 분류되는 상호명을 살펴보겠습니다.
여기서 주목할 부분은 &(and) 연산자로 여러 조건을 함께 만족하는 df를 얻은 것과 .copy( )를 사용함으로써 기존 df에 영향이 가지 않도록 했다는 것입니다.
아래의 코드는 위에서 배운 함수들을 제대로 숙지했다면 충분히 이해할 수 있으니 스스로 해석해봅시다. 참고로 .unique( )는 중복되는 데이터를 제외하고 돌려주는 함수입니다.
위의 데이터들을 보시면 종합병원으로 분류되었음에도 '알콜중독및정신질환상담소', '서울성모병원장례식장꽃배달', '우울증센터' 등과 같이 종합병원이 아닌 데이터들이 보입니다. 이런 것들을 제거해주는 것이 데이터 전처리입니다. 우리는 위의 데이터들을 보고 제외해야 할 자료들을 drop( ) 함수로 df에서 제거해주도록 하겠습니다.
.index는 우리가 찾은 데이터들의 행 index 번호를 리턴해주는 함수입니다. 아래의 코드는 '꽃배달', '의료기', '장례식장', '상담소', '어린이집'이 포함된 데이터와 '의원'으로 끝나는 데이터를 각각 drop_row1과 drop_row2에 리스트 형식으로 저장하는 코드입니다.
최종적으로 위에서 구한 drop_row를 모두 더해서 drop( )함수에 넣주었습니다. 이로써 최종적으로 서울에 위치한 종합병원은 58개라고 판단할 수 있겠습니다.
비전공자로서 공부하며 글을 쓰다보니, 이 글에 다 담지 못한 내용들이 많음을 느낍니다. 추후 부족한 내용은 보완하도록 하겠습니다.
'파이썬 패키지 > 데이터분석' 카테고리의 다른 글
[Python/Numpy] 데이터 분석 수치연산 패키지_ numpy 2편. 인덱싱과 슬라이싱 (0) | 2021.06.18 |
---|---|
[Python/Numpy] 데이터 분석 수치연산 패키지_numpy 1편. ndarray, shape, axis의 개념 (2) | 2021.06.16 |
[파이썬 데이터 분석] 6편. 데이터 분석에서 결측치란? (feat. 주피터 노트북 Pandas 관련 함수) (0) | 2021.04.17 |
[파이썬 데이터 분석] 5편. Jupyter Notebook으로 데이터 파일 불러오기 (꿀팁. Tap과 Tap+Shift 사용법은 꼭 알아두세요!!) (1) | 2021.04.16 |
[파이썬 데이터 분석] 4편. 데이터 분석을 위한 데이터 다운로드 받기 (feat.공공데이터포털) (0) | 2021.04.15 |