AI SCHOOL/TIL

[WIL] 7주차

moru_xz 2023. 2. 9. 16:44

0206

- Tidy-data: 깔끔한 데이터(= 각 변수가 열이고, 관측치가 행이 되도록 배열된 데이터)

- 데이터분석 위해서 데이터를 깔끔한 형태로 만들어주는 것이 중요

- 정리가 잘 된 데이터 ≠ 깔끔한 데이터 -> 국가통계데이터포털에서 제공하는 데이터(과거)

-> pd.melt 사용

- 열에 있던 데이터를 행으로 녹인다

- wide from: pandas plot()으로 막대의 색상을 다르게 지정하거나 서브플롯을 그리거나 시각화 하기에 좋음

- long form: 변수(ex 연도, 월별)에 따라 x, y, hue(color), column 등을 지정해서 사용하기 좋음 

- to_numeric errors에 대해

errors{‘ignore’, ‘raise’, ‘coerce’}, default ‘raise’

If ‘raise’, then invalid parsing will raise an exception.

If ‘coerce’, then invalid parsing will be set as NaN.

If ‘ignore’, then invalid parsing will return the input.

 

DB: 실시간성으로 조회해야 하는 데이터, 회원가입데이터, 캐릭터 정보, 인벤토리 정보

파일: 여러 개 물건을 클릭해 본 이력, 여러 메뉴를 이동해 본 이력, 보통 사용자 행동 정보는 따로 관리해 주는 툴이 있기도 함 => 예시 amplitude, 기록이 필요한 로그 

 

결측치

- isnull 혹은 isna 를 통해 데이터가 비어있는지를 확인할 수 있음

- 결측치는 True로 표시되는데, True == 1 이기 때문에 이 값을 다 더해주면 결측치의 수가 됨

 

object -> int

- df_last['분양가격'].replace('  ', np.nan).astype(int) 이런 방법도 있고,

- df_last['분양가격'] = pd.to_numeric(df_last['분양가격'],errors = 'coerce')

 

regex(regular expression 정규표현식)

- box=> 4분위수를 표기

- violin => 분포를 표기

- swarm =>  관측값을 그대로 표기

 

heatmap

sns.heatmap(df_pivot.T, cmap = 'Blues', annot = True, fmt = ',.0f')

- Blues_r ->  색 스케일 반대로 작은 값을 더 진하게!

-  annot = True -> 숫자 보이게

- fmt = ',.0f' -> 소수점 x, 천단위 ,

 

207

 

  • df.style.background_gradient() => 성질이 다른 각 변수를 각각 비교하고자 할 때 적합
  • 예) 변수에 체중, 키, BMI지수, 콜레스테롤수치 처럼 스케일값이 다르고 성질이 다른 값의 스케일을 비교하고자 할 때 적합
  • pandas의 melt를 사용하면 데이터의 형태를 변경할 수 있음 데이터를 병합하기 위해 melt를 사용해 열에 있는 데이터를 행으로 녹임
  • [ ] : 일치시킬 문자 세트의 패턴
  • [가나다] : 가 or 나 or 다 중에 하나를 포함하고 있는지
  • [가-힣] : 한글 가부터 힣까의 문자 중 하나를 포함하고 있는지
  • [0-9] : 0~9까지의 숫자 중 하나를 포함하고 있는지
  • [^0-9] : 숫자를 포함하고 있지 않음 -> ^ 부정을 의미
  • [^가-힣] : 한글이 포함되어 있지 않음
  • [가-힣+] : 한글이 하나 이상 포함되는지
  • 파생변수 만드는 이유
  • 연, 월 파생변수 만든 이유: 범주값들을 조금 더 디테일하게 분석 가능
  • ex) 월별 수입수출액, 연도별 수입수출액, 국가권역별 수입수출액을 월별로 비교하기 연도별로 비교하기 연도별 합계, 평균 등을 구할 수 있음
  • inplace 를 사용할 수도 있지만, 권장하지 않아요=> 앞으로 없어질 계획입니다. 메서드체이닝을 했을 때도 제대로 동작하지 않음
  • seaborn => 막대그래프에 대한 연산을 barPlot으로 그려볼 수 있음
  • histogram => 수치, 범주형 모두 표현할 수 있음
  • seaborn, pandas에서 histogram 은 수치데이터만 제공
  • 범주형 일 때는 기본값이 =>count
  • 수치형 일 때는 기본값이=>sum
  • px.histogram 정렬하고 싶다면 .update_yaxes(categoryorder='total ascending')
  • facet => pandas, seaborn, plotly, 다 마찬가지로 정렬이 안 되는 문제가 있습니다. 이럴 때는 직접 서브플롯을 시각화 하는 것을 추천
  • histfunc => 단점은 계산 시간이 오래 걸립니다. 그래서 계산을 판다스로 하고 px.bar() 로 시각화 하는 것을 추천

 

 

 

 

0208

- 결측치 수 구해봤는데 heatmap()으로 시각화 하는 것 추천하지 않음 why? 시간이 너무 오래 걸려서 
- 필요없는 데이터를 없애므로 사이즈를 줄임 -> 실제에서는 언젠가 필요하겠지 하고 수집하는 정보가 있음
- 요즘에는 일단 모든 데이터를 다 수집하기는 함 -> 자기 컴퓨터 보다는 클라우드 서비스 사용 
- import 정도만 손을 봐도 트래픽비용이 줄어들 수고 있고, 캐시를 어떻게 사용하느냐,  파일 I/O 관리, 데이터베이스 관리 등에 따라 비용이 달라짐 -> 트래픽 분석 관리해주는 도구도 있음
- 인프라에서 나오는 로그 데이터를 따로 분석하기도 함 
- heatmap() / style.background_gradient()
- 어떤 걸 사용하는 게 좋을까? heatmap(): 전체 스케일 비교에 적절, style.background_gradient() 각 변수별 비교에 적절 -> 전달하고자 하는 메시지가 무엇인가에 따라서 
- pd.concat() 할 때 axis 확인 잘 하기
- pivot_table 은 index = ['시도명','시군구명'] 이렇게 crosstab은 index = [df_b['시도명'], df_b['시군구명']] 이렇게
- inf 처리 방법
:  롯데리아가 0개일 때는 inf로 나오는데, 실제로 분석 때 이런 계산 불가한 수치가 나오면 삭제처리를 해하나 아니면 따로 수치를 입력해야 하는 것인가? 목적에 따라 다르다. 0으로 처리해도 되는 데이터면 0으로 아니면 np.nan으로 변경 -> 나이, 심박수, 체중, 키 => 현실세계에서 0이 될 수 없는 데이터 
만약에 나이에 결측치가 많은데 나이 변수를 사용하고 싶다 ? -> 구간화(Binning) : 어린이, 성인, 고령자 등으로 범주화 하는 것이 구간화의 일종
- 상관 분석(相關 分析, Correlation analysis) 또는 '상관관계' 또는 '상관'은 확률론과 통계학에서 두 변수간에 어떤 선형적 또는 비선형적 관계를 갖고 있는지를 분석하는 방법
- 상관관계의 정도를 파악하는 상관 계수(相關係數, Correlation coefficient)는 두 변수간의 연관된 정도를 나타낼 뿐 인과관계를 설명하는 것은 아니다.
- 두 변수간에 원인과 결과의 인과관계가 있는지에 대한 것은 회귀분석을 통해 인과관계의 방향, 정도와 수학적 모델을 확인해 볼 수 있다.
- 심슨의 역설 : 각 부분에 대한 평균이 크다고 해서 전체에 대한 평균까지 크지는 않다는 의미