data.info로 데이터를 들여다 본다. 여기서 Dtype이 ocean_proximity의 경우, object인 걸 확인한다.
자세히 확인하기 위해, value_counts()로 들여다 본다. object형태로 바다에서 1시간 거리, 내륙, 바다 주변, 만 근처, 섬 총 다섯가지 종류로 이루어져 있는 걸 확인한다.
describe로 값들의 대략적인 값들을 들여다 본다. 평균값, 최댓값, 최솟값 등을 한 번에 보여주기 때문에, 결측값 채우기 등에서 굉장히 유용하다.
값들로 보면 가독성이 떨어지기 때문에 히스토그램으로 가시화해서 데이터를 살펴본다. 전반적으로 데이터 정보들이 좌측으로 편향된 정보들을 보여주기 때문에 그렇게 좋은 데이터 개형이라고 볼 수는 없다.
데이터를 훈련 데이터와 테스트 데이터로 분리한다. train_test_split함수를 이용. pd.cut함수를 이용해서 median_income(평균 수입)을 카테고리화 한다. 평균 수입을 가져다 쓰는 이유는, 아무래도 수입이 부동산 가격에 큰 영향을 줄 것이라고 판단했기 때문이다.(직관)
평균 수입을 비율로 나타내어 3번째 카테고리에 가장 많이 들어있는 걸 볼 수 있다.
x : 경도 y : 위도로 시각화해서 데이터 분포도를 살펴본다. 그런데 위의 경우에는 데이터가 뭉쳐있어서 어떤 것이 어떤 데이터인지 판가름하기가 힘들다. 따라서, 투명도를 주어 데이터들을 구분할 수 있게 해준다. 데이터 분포도 모양새가 캘리포니아 지도와 비슷해진 것을 확인할 수 있다.
집값을 기준으로도 분포도를 표시한다. 점의 크기가 인구수를 의미한다. 샌프란시스코(실리콘밸리 부근)와 LA부근의 고가의 가구들이 집중적으로 몰린 것을 볼 수 있다. 또한, 해안가 근처일 수록 높은 가격대를 보인다.
각 데이터들 끼리의 상관관계를 파악한다. 우리가 눈여겨 보아야 할 것은 부동산 가격이므로, 평균 가구 가격에 대한 상관관계만 따로 뽑아서 정렬해 본다. 여기서 평균 수입이 가장 큰 영향을 받고, 그 다음으로, 방의 수, 집이 얼마나 오래됐는지, 거주자 수가 영향을 받는다. 위도 경도 등은 큰 영향을 받지 않음을 볼 수 있다.
상관관계들을 가시화해서 보여준다. 이 중에서, 수입 중간값이 집값과 선형적인 데이터를 가지는 것을 볼 수 있다.
중간 집값과 다른 데이터들의 상관관계를 조사한다. per 값들 3개는 임의로 추가한 데이터들이다.
isnull.sum으로 결측값이 어떤 데이터에 몇개나 있는지 확인한다. 일반적으로는 평균값으로 집어넣지만, 이번에는 simpleImputer를 이용해 결측값을 채운다.
누락된 값들을 채워주고, 텍스트 값들을 숫자로 변경해 준다. 여기서는 Ordinal Encoder를 이용한다. One-hot의 경우에는 이진 값들로,
1, 0, 0, 0
1, 0, 0, 0
0, 0, 0, 4
0, 1, 0, 0
이런 식으로 채워줬을 것이다. 그러나, Ordinal Encode는 인덱스의 위치를 표현해 준다고 생각하면 된다. 만약의 데이터의 종류가 많을 경우, Ordinal Encode의 경우가 성능이 더 좋다.
파이프라이닝을 진행하고, 여러 모델들을 적용해본다.
결정트리의 경우, 항상 과대적합이 나올 수 밖에 없다. 무조건 하나의 경우에만 TF를 찾아가는 방법이기 때문이다. 그래서 오차율이 항상 0이다.
randomforest에서 성능이 가장 좋다고 판단되어 이걸로 결정한다. max_feature가 8, n_estimators가 30일 때를 최적으로 본다.
모델의 종류는 많지만 일반적으로 linear regression, random forest, lasso를 많이 사용한다.
3. 풀 : 다른 사람이 올려놓은 커밋을 내 컴퓨터로 받아온다. CLI -> git pull GUI -> 'Pull'버튼 클릭
4. 브랜치 : 한 저장소에서 다른 개발자와 같이 작업하고싶어요 여러 줄로 쌓던 커밋을 n줄로 쌓을 수 있게 만들어 줌! => 똑같은 코드를 고치는 충돌을 없애기 위해서. N줄로 쌓고나서 나중에 합친다. 만약 충돌이 나도 명시적으로 해결할 수 있다. CLI -> git branch brach-name GUI -> 브랜치 버튼 클릭
5. 병합 : 브랜치와 브랜치를 합친다. CLI -> git merge branch-name GUI -> 병합 버튼 클릭
1. 풀 리퀘스트 : 병합 요청 메세지. 다른 개발자들에게 병합하기 전, 리뷰 & 컨펌을 요청 리뷰는 코드 변경사항에 덧글을 달아서. 피드백을 받고 코드 수정해서 approve를 받으면, github에서 merge버튼을 눌렀을 때 자동으로 병합을 해준다.1. 커밋 : 변경 사항 덩어리 CLI -> git commit -m "메세지" GUI -> '커밋'버튼 클릭
3. 풀 : 다른 사람이 올려놓은 커밋을 내 컴퓨터로 받아온다. CLI -> git pull GUI -> 'Pull'버튼 클릭
4. 브랜치 : 한 저장소에서 다른 개발자와 같이 작업하고싶어요 여러 줄로 쌓던 커밋을 n줄로 쌓을 수 있게 만들어 줌! => 똑같은 코드를 고치는 충돌을 없애기 위해서. N줄로 쌓고나서 나중에 합친다. 만약 충돌이 나도 명시적으로 해결할 수 있다. CLI -> git branch brach-name GUI -> 브랜치 버튼 클릭
5. 병합 : 브랜치와 브랜치를 합친다. CLI -> git merge branch-name GUI -> 병합 버튼 클릭
1. 풀 리퀘스트 : 병합 요청 메세지. 다른 개발자들에게 병합하기 전, 리뷰 & 컨펌을 요청 리뷰는 코드 변경사항에 덧글을 달아서. 피드백을 받고 코드 수정해서 approve를 받으면, github에서 merge버튼을 눌렀을 때 자동으로 병합을 해준다.
2. 포크 : 푸시는 등록한 사람만 할 수 있다. 다른 사람의 저장소 전체를 포크로 내 계정에 복사한 다음, 내 계정의 저장소에 커밋 + 푸시 후 원본 저장소로 풀 리퀘스트를 보내서 다른 사람의 오픈소스에 기여할 수도 있다.
----------------------------------------------------------- 알아두면 편리한 명령 1. stash : 워킹 디렉토리에 unstaged 파일들을 백업하고, 워킹 디렉토리를 깨끗한 상태로 만든다. 커밋하기에는 애매하고, 그렇다고 코드를 날릴 수도 없고. 리비전은 돌아가야 되는 상황. 2. discard(변경사항 삭제) / remove(파일 삭제) 3. cherry pick : 다른 브랜치에 있는 커밋을 선택적으로 내 브랜치에 적용시킴. 4. amend last commit : 이전에 커밋한 내용을 수정 5. rebase : 풀 리퀘스트를 했지만, 원본 저장소 내용이 수정됐을 때, 내가 제출한 PR은 disabled가 된다. -> 내가 추가한 코드를 포함한 로컬 베이스와 원본 저장소의 베이스가 달라졌기 때문. fetch로 원본저장소에 변경된 걸 가져오고, 내 로컬의 .git에 보관하고 rebase명령어로 베이스를 처음으로 되돌린 후 변경사항을 다시 쌓고 다시 rebase로 내걸 얹어준다.