[TIL] 22.10.11

문종현·2022년 10월 11일
0

TIL

목록 보기
13/119
post-custom-banner

👉 오늘 한 일

  • 코로나 eda 실습 이어서
  • 서울 아파트 분양가 실습

코로나 eda 실습

koreanize_matplotlib : 한글폰트 이용

  • 기존에는 운영체제에 따라 다르게 폰트를 적용했어야 하는데, 이 라이브러리를 사용해 통합됨

str.replace()

  • 시리즈에만 사용 가능
  • 일부 일치하는 텍스트 대체
  • 정규표현식 사용 가능

replace()

  • 데이터프레임, 시리즈 모두 사용 가능
  • 전체 텍스트가 일치해야 대체
  • 정규표현식 사용 가능

정규표현식(regular expression) : 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어

Boolean Indexing 으로 특정 조건 값 찾기

df["조건식"], df.loc["조건식"]

  • df["조건식"] : 컬럼을 바로 인덱싱
  • df.loc["조건식"] : row와 column을 이용해 인덱싱
  • %timeit으로 비교했을 때 .loc로 가져오는 것이 속도가 빠름
  • str.contains 를 활용해서 특정 문자가 포함된 데이터를 찾는 조건식으로 만들 수 있음
    • df.loc[df["접촉력_대문자"].str.contains("PC방"), "접촉력"]
  • isin 으로 여러 값을 찾는 조건식으로 만들 수 있음
    • df.loc[df["거주구"].isin(["강남구", "서초구", "송파구"]), "접촉력"]
  • ~은 조건에 해당되지 않는 값들을 찾음
    • df.loc[~df["접촉력"].str.contains("해외유입"), "해외유입"] = "국내"

그룹화

pd.crosstab(normalize=True)는 전체를 1로 해서 각각의 비율을 구함

  • 연도별 혹은 자치구별 등 독립적인 비교를 위해서는 직접 나눠줘야 함

pd.pivot_table

  • pivot은 데이터의 형태만 바꾸지만 pivot_table은 연산 가능
  • aggfunc 중 len으로 count와 같은 연산을 할 수 있음
  • values 옵션에 칼럼명을 입력해도 되지만, 인덱싱해서 unstack()으로 마지막 인덱스를 칼럼으로 지정할 수도 있음
    • unstack()의 level 옵션을 지정해서 몇 번째 인덱스를 칼럼으로 올릴 것인지 지정 가능. 디폴트는 마지막 컬럼임(level=-1)
    • e.g.
    • pd.pivot_table(data=df, index=["거주구", "요일명"], aggfunc="count")["환자"].unstack()
    • pd.pivot_table(data=df, index="거주구", columns="요일명", values="환자", aggfunc="count")

df.groupby()

  • groupby는 데이터프레임의 메서드임
  • by에 인덱스 지정(멀티인덱스 지정 시 대괄호 사용)
  • 그룹화에서 연산 적용 가능

판다스 cheatsheet으로 내용 점검해보기
https://pandas.pydata.org/Pandas_Cheat_Sheet.pdf

df.컬럼명 이런 식의 서브셋은 컬럼명에 띄어쓰기가 있을 때 사용하지 못함

fancy indexing : 팬시 인덱싱은 정수나 불린(Boolean) 값을 가지는 다른 Numpy 배열로 배열을 인덱싱할 수 있는 기능을 의미

결측치의 수를 확인하며 결측치가 있는 열들은 어떻게 처리할지, 어떻게 해석할지 파악해보기

count()는 결측치를 포함해서 셈

nlargest(n) : 큰 순으로 정렬해서 n개를 뽑아옴

서울 아파트 분양가 분석

Tidy data

분석하기 좋은 깔끔한 데이터 => Tidy data

  • 일반적으로 통계청에서 제공하는 데이터는 깔끔한 데이터는 아님. 피봇테이블 형태로 이미 가공과 집계가 된 데이터.
    • 2021년부터 통계청에서도 tidy data를 제공하고 있음

Tidy data란
1. 각 변수가 칼럼에 위치
2. 각 관측치가 행에 위치
3. 테이블 형태를 이뤄야 함
출처 : http://vita.had.co.nz/papers/tidy-data.pdf

pandas에서는 Tidy data를 만들기 위해 melt 기능 제공

  • 칼럼에 있는 데이터를 행으로 녹임

long-form 형태의 데이터를 피봇하면 wide-form 형태로 만들 수 있음

  • long-form 형태가 tidy한 데이터임
  • long-form 형태로 만들어줘야 시각화하기 간편함

데이터셋

2013~2015 데이터셋과 2015~ 데이터셋의 형태가 다름. 전처리해서 합쳐야 함

수도코드
1) 2013~2015 연도와 월을 컬럼으로 만들어 최근 2015~ 데이터와 같은 형태로 만들어 줌(melt로 컬럼에 있는 데이터를 행으로 녹임)
2) 2015~ 제곱미터당 평균 분양가격 => 3.3 제곱미터당 가격으로 변경해 가격 측정 기준을 통일시킴
3) 1), 2) 데이터를 concat 으로 병합하고 하나로 만들어 2013~ 최근까지의 분양가를 분석

pd.to_numeric()

  • errors="coerce" : 에러(수치형으로 변경할 수 없는 부분)를 NAN 값으로 처리하고 강제로 변환
    • 그 외 'raise'(에러 표시), 'ignore'(에러 무시)
    • ignore 사용 시 에러가 발생하면 numeric으로 변환하지 않음(단지 에러메세지를 띄우지 않을 뿐)
  • astype()은 에러에 대한 처리 옵션을 raise, ignore밖에 제공하지 않음. 여기서는 에러를 전처리 해야 함

FutureWarning : 추후 버전에서 변경되는 값을 알리는 경고메세지

  • e.g.
df_last["규모구분"].str.replace("전용면적|제곱미터이하", "", regex=True)

> FutureWarning: The default value of regex will change from True to False in a future version.

df.drop()

  • labels로 컬럼명 지정 시 axis 옵션 체크
  • columns로 컬럼명 지정 시 그냥 사용

퀴즈 정리
숫자를 제외한 나머지 문자를 제거하는 정규표현식
df_last["분양가격"].str.replace("[^0-9]", "", regex=True)

profile
자라나라 새싹새싹🌱
post-custom-banner

0개의 댓글