초봉5센티미터

TIL 8. EDA (2) 본문

교육/멋쟁이사자처럼 AI School 7기

TIL 8. EDA (2)

삶은돼지고기 2022. 9. 27. 18:30
728x90

seaborn 에서는 서브플롯을 제공 하는 그래프를 따로 제공한다.

 

숫자 데이터라도 숫자가 코드로 되어있으면 범주형데이터이다.

 

남자 1 여자 2 이런건 숫자지만 범주형데이터이다.

범주형데이터임에도 bool, int, float 다 가능하다. df.nunique()

 

# 유니크 값 갯수 구하기 boxplot 은 대표값만 표현하기 때문에 데이터 분포를 알 수가 없다. 상자와 수염은 4분위수를 표현하고 밴드는 2분위수(중간값)이다.

 

그리는 방법 - 데이터에서 각 사분위수를 계산한다.

- 데이터값들을 줄을 세워서 생각하자.

- 1사분위와 3사분위를 밑변으로 하는 직사각형을 그리고 2사분위에 해당하는 위치에 선분을 그린다.

violin plot 같은 경우에는 FacetGrid 를 제공하지 않는다. col 이나 col_wrap 같은 기능이 violin plot 에는 없다.

 그래서 서브플롯을 사용하기 위해 catplot 을 사용한다. seaborn은 알아서 통계값을 그려준다. 수치형변수를 시각화 할때, 범주형 변수를 시각화 할 때 쓰는게 다르다. seaborn 에 있는 example 을 다 따라해 보는걸 추천한다.

 

-----------------------------------------

웹 크롤링이라 말하지만 사실 거의 웹 스크래핑이다.

FinanceDataReader는금융데이터를 수집하는 라이브러리이다.

FinanceDataReader는 여러 사이트의 주가 정보를 수집해 온다. 다른 사이트가 수정되면 그 사이트에 맞게 고쳐줘야 수집을 계속 할 수 있다.

https://github.com/financedata-org/FinanceDataReader 현재 거래 가능한 종목들을 받아올 수 있다.

[데이터수집시 유의사항] 수집해도 되는 페이지인지 아닌지 확인 할 필요가 있다.

- 로봇 배제 표준
-
저작권
-
무리한 네트워크 요청

 

우리가 특정 request 에 요청을 보내는 것은 서버에 부담을 주는 거라서, 서버가 다운을 줄 수 있다. (ex 디도스공격) 서버가 다운 되면 영업침해 행위라서 민사소송 가능.. 서비스 제공자가 만들어 놓은 Api 를 통해서가 아닌 방식으로 수집을 하면 데이터베이스권에 대한 침해 행위일 수 있다.

 

공공데이터들에는 자유롭게 사용해도 되는지 표기가 되어있다.

 

로봇배제표준이 있으면 데이터 크롤링시 법적 제제를 받을 수 있다.

 

Disallow: / :이 의미는 이 절대 경로 위의 경로에서는 데이터 수집하면 안된다.
/
는 절대 경로이다.

html 에서 table 이 있으면 pandas 에서 불러와서 쓸 수 있다.

 

범주형 데이터
- 데이터셋 불러오기 : sns.load_dataset()
- 데이터셋 일부만 가져오기(1) df.head() (2) df.tail()
- 요약하기 : df.info()
- 결측치 보기 
 (1) 결측치 합계 : df.isnull().sum()
 (2) 결측치 비율 : df.isnull().mean()
 (3) 결측치 시각화 : sns.heatmap(df.isnull(), cmap=’gray’)
- 기술통계
 (1) df.describe(include="object") : 범주형 데이터 통계
 (2) df.describe(include=“all“) : 모든 데이터 통계
 (3) df.describe() : default 값은 수치형 데이터 통계

 범주형 변수
- 유일값의 빈도수 : df.nunique() 
- countplot으로 origin 빈도수 시각화 : sns.countplot(data=df, x="origin")
- origin의 빈도수 : df.value_counts(“origin”)
- 2개 이상의 변수에 대한 빈도수 
   : sns.countplot(data=df, x="origin",hue="cylinders")

 pd.crosstab(index, columns) : 시각화한 값 직접 구하기

 groupby
- origin 별로 그룹화 하고 mpg 의 평균 구하기  
  (1) mpg를 series로 가져오기 : df.groupby("origin")["mpg"].mean()
  (2) mpg를 dataframe으로 가져오기 : df.groupby("origin")[["mpg"]].mean()
- unstack() :Multi index에서 마지막 인덱스를 column으로 끌어 올림 

 pivot table : groupby를 추상화한 기능
- 기본 aggFun = mean(평균)

 boxplot 요소 직접 출력해보기
tmp = df.groupby("origin")["mpg"].describe()
eu = tmp.loc["europe"]              europe의 통계값만 가져오기
Q3 = eu["75%"]
Q1 = eu["25%"]
IQR = Q3-Q1
OUT_MAX = (1.5*IQR) + Q3
OUT_MAX = Q1 - (1.5*IQR)

 europe 에 해당되는 값에 대해 
- boxplot 그리기 : sns.boxplot(data = df[df["origin"] == "europe"],x=df["mpg"])
- boxenplot 그리기 : sns.boxenplot(data = df[df["origin"] == "europe"],x=df["mpg"])
- violineplot 그리기 : sns.violinplot(data = df[df["origin"] == "europe"],x=df["mpg"])

 산점도를 통한 범주형 데이터 표현
- scatterplot() : 점이 겹쳐 제대로 빈도수를 알기 어려움
- stripplot() : 점이 퍼져있어 빈도수를 볼 수 있으나, 여전히 점이 겹쳐있음
- swarmplot : 접이 겹쳐지지 않아 빈도수 볼 수 있음

 catplot
- 기본값 : stripplot()
- 사용이유 : subplot을 그려볼 수 있기 때문
- sns.catplot(data=df, x= "origin", y="mpg",kind="box",col="cylinders",col_wrap=3)

 FinanceDataReader이란?
- 한국 주식 가격, 미국 주식 가격, 지수, 환율, 암호화폐 가격, 종목 리스팅 등 금융 데이터 수집 라이브러리
- 여러 사이트에서 데이터를 수집함
- 사이트에서 무언가를 바꾸면 해당 라이브러리는 기능 유지를 위해 코드를 수정해야 함
- 데이터 불러오기 : df = fdr.StockListing(market="KRX")

 Pandas-datareader : 외국에서 제공하는 기능

 데이터 수집 시 유의 사항
- 수집해도 되는 페이지인지 확인
 (1) 로봇 배제 표즌 robots.txt (2) 저작권 (3) 무리한 네트워크 요청

 웹 스크랩핑 분쟁 사례
- 잡 코리아 vs 사람인 HR
- 여기 어때 vs 야놀자

 로봇 배제 표준 (robots.txt)
- 사이트 뒤에 robots.txt를 추가하면 페이지 읽어가도 되는 지 알 수 있음

 API 
- API의 경우 서비스 요청이 서버에 무리가 되지 않도록 한 번에 전송하는 양이나 하루에 요청할 수 있는 횟수에 제한을 두고 있음

 HTML 구조 이해
<html> 
        <head><title> </title> </head> 
        <body> </body> 
</html>
- 웹페이지에서 [오른쪽 버튼] -> [검사] 누르면 코드 볼 수 있음
- <table>로 감싸져 있다면, pandas로 불러올 수 있음

 CSS : 스타일 지정할 때 사용

 검색 값 설정하기
- 웹사이트에서 검색한 URL 안에 검색어가 들어가 있음
- 쿼리스트링  : 검색어를 URL에 붙여서 넘기는 문구

 pd.concat(dataframe 리스트) : 여러 dataframe 합치기
 dropna() : 결측치 제거 
 reset_index() : 인덱스 번호 초기화 
 (series에서) ~ : 반대 값 반환 
 copy() : 깊은 복사 – 원본에 바꾸지 않음
 = : 얕은 복사 – 원본을 바꿈
 drop_duplicates() : 중복 데이터 삭제

'교육 > 멋쟁이사자처럼 AI School 7기' 카테고리의 다른 글

TIL 10. 데이터수집 (1)  (0) 2022.10.05
TIL 9. EDA (3)  (0) 2022.09.28
TIL 7. EDA (1)  (0) 2022.09.27
TIL 6. Pandas 기초와 Seaborn  (0) 2022.09.22
TIL 5. Python (2)  (1) 2022.09.20
Comments