23.02.06 - 23.02.08, AIS8 8주차 WIL
mini project2를 끝낸 시점인 2월 9일 오늘.
대망의 mid project 조 구성이 발표 되었다.
EDA 수업이 끝난 이번주.
WIL 시작.
이번주의 학습 테마를 6가지로 정리하면
- 공공데이터를 활용해 전혀 다른 두 개의 데이터를 가져와서 전처리 하고 병합하기
- 수치형 데이터와 범주형 데이터를 바라보는 시각을 기르기
- 데이터의 형식에 따른 다양한 시각화 방법 이해하기
- glob 를 사용해서 여러 파일을 로드해서 하나로 합치는 방법(약 700mb)
- 상관 계수의 종류, 시각화 하는 방법, 삼각행렬을 만들어서 마스크 처리 방법, 컬러 선택 방법
- 지도 시각화 방법
EDA 처리 과정 요약.
▶ 서로 다른 형태(row, columns)를 갖는 데이터의 전처리 및 병합.
제목에 한글이 있는경우 문제 발생 가능하여 glob로 로드를 시작
from glob import glob
file_names = glob("data/apt*.csv*")
file_names = sorted(file_names)
file_names
인코딩을 추가하여 판다스로 파일을 불러오면 전처리 준비 끝.
df = pd.read_csv(file_names[1], encoding="cp949")
EDA를 위해 먼저
df.info()로 데이터를 요약하여 구성을 파악하고,
결측치 확인
df.isnull().sum()
데이터 타입 변경(데이터가 'object'(문자) 타입 -> 문자열 타입을 계산할 수 없기 때문에 수치 데이터로 변경)
df["분양가격"] = pd.to_numeric(df_last["분양가격"], errors='coerce')
# errors='coerce' 는 오류 발생시에도 강제 변경
파생변수 생성
df_last["전용면적"] = df_last["규모구분"].str.replace("전용면적|제곱미터| |이하", "", regex=True)
df_last["전용면적"] = df_last["전용면적"].str.replace("초과", "~")
# replace => 데이터프레임에만 사용가능(regex=True 를 지정하지 않으면 완전히 일치하는 데이터에 대해서 변경)
# str.replace => 시리즈에만 사용가능, 일부만 일치해도 변경.
# regex(regular expression 정규표현식)
미사용 데이터 드랍
df_last = df_last.drop(columns=["규모구분", "분양가격"])
↔ df_last = df_last.drop(["규모구분", "분양가격"], axis=1)
# drop 사용시 axis에 유의. axis 0:행, 1:열
melt로 Tidy data 만들기
pandas의 melt를 사용 -> 데이터의 형태 변경.
데이터 병합을 위한 melt 사용 열 → 행으로 녹이기.
df_first_melt = pd.melt(df_first, id_vars="지역")
컬럼명 변경
df_first_melt.columns = ["지역명", "기간", "평당분양가격"]
데이터 분리(연도-열)
1) 데이터 분리 함수 생성
def parse_month(date):
month = int(date.split("년")[1].replace("월", ""))
return int(month)
2) apply를 통한 변수 입력
df_first_melt["연도"] = df_first_melt["기간"].apply(parse_year)
데이터 병합을 위한 정리
df_last_prepare = df_last.loc[df_last["전용면적"] == "모든면적", cols].copy()
# 조건 필터로 필요 데이터만 변수에 할당
인덱스 초기화 및 데이터 병합
df_first_prepare = df_first_prepare.reset_index(drop=True)
df_last_prepare = df_last_prepare.reset_index(drop=True)
df_data = pd.concat([df_first_prepare, df_last_prepare], axis=0)
데이터 집계 방법 3가지
crosstab, pivot_table, groupby
df_c = pd.crosstab(index=df_b["시도명"], columns=df_b["브랜드"])
df_p = df_b.pivot_table(index="시도명", columns="브랜드",
values="상호명", aggfunc="count", fill_value=0)
df_g = df_b.groupby(["시도명", "브랜드"])["브랜드"].count().unstack().fillna(0).astype(int)
시각화를 위한 항목 분류
df_world = df[df["국가권역"].isin(world)].copy()
df_country = df[~df["국가권역"].isin(world)].copy()
# isin을 사용
시각화
pandas
matplotlib
plotly
heatmap() & style.background_gradient()
- 전달하고자하는 메세지가 무엇인가?
▶ heatmap() - 전체 스케일 비교에 적절
▶ style.background_gradient() - 각 변수별 비교에 적절
상관분석(Correlation analysis) & 상관계수(Correlation coefficient)
(확률론과 통계학) 두 변수간에 어떤 선형적 또는 비선형적 관계를 갖고 있는지를 분석하는 방법.
▶ 두 변수는 서로 독립적인 관계이거나 상관된 관계일 수 있으며, 이때 두 변수간의 관계의 강도를 상관관계(Correlation, Correlation coefficient)라 한다.
▶ 상관관계의 정도를 파악하는 상관 계수는 두 변수간의 연관된 정도를 나타낼 뿐 인과관계를 설명하는 것은 아니다.
cf) 두 변수간에 원인과 결과의 인과관계가 있는지에 대한 것은 회귀분석을 사용
* 피어슨 상관계수
- r 값은 X 와 Y 가 완전히 동일하면 +1, 전혀 다르면 0, 반대방향으로 완전히 동일 하면 –1 을 가진다.
- 결정계수(coefficient of determination)는 r^2 로 계산하며 이것은 X 로부터 Y 를 예측할 수 있는 정도를 의미한다.
np.tril & np.triu
'멋쟁이사자처럼 AI School 8기(fin) > WIL(Week I Learn' 카테고리의 다른 글
[멋쟁이사자처럼 AI스쿨] week12 - WIL (0) | 2023.03.09 |
---|---|
[멋쟁이사자처럼 AI스쿨] 3월 1주 WIL (0) | 2023.03.02 |
[멋쟁이사자처럼 AI스쿨] Week7 - WIL (0) | 2023.02.02 |
[멋쟁이사자처럼 AI스쿨 8기] Day18. Week5 - WIL (0) | 2023.01.19 |
[멋쟁이사자처럼 AI스쿨 8기] Day13. week4 - WIL (0) | 2023.01.12 |