멋쟁이 사자처럼 AI 스쿨 TIL - 6

김영민·2022년 9월 27일
0

###범주형 변수

  • 범주형 데이터 유일값의 빈도수 -> df.nunique()
    범주형이냐 수치형이냐 알 수 있는 방법 -> df.nunique()와 df.hist(bins=50)로 개수파악
    unique()는 serise 타입만 가능하고 nunique()는 dataframe 타입만 가능

  • 1개 변수의 빈도수 구하는 방법
    -> df["origin"].value_counts()

시각화한 값 직접 구하기 ->pd.crosstab(index=df["origin"],columns=df["cylinders"])

-2개 변수의 빈도수 구하는 방법
groupby 와 같은 기능 = pd.pivot_table을 이용하는 이유 = 직관적인 사용법, 기본값이 평균
-> pd.pivot_table(data=df, index="origin",values="mpg")

estimator -> 수치데이터의 계산 방식을 지정

.stack() -> 컬럼을 인덱스값으로 끌어내리는 것
.unstack() -> 마지막 인덱스값을 컬럼으로 끌어올리는 것
--> 둘의 기본값은 마지막 값이다.

pivot과 pivot_table의 차이? -> 연산을 하는지 여부, pivot은 연산을 안하고 pivot_table은 연산을 한다.

scatterplot() 은 두 수치형 변수간의 관계를 표현하기에 적합합니다

histplot() 은 수치형 변수에 대한 도수 분포를 시각화한 것입니다.

crosstab은 pivot_table을 사용하기 쉽게 만든 기능이다.

막대그래프의 단점 ? -> 데이터의 분포를 볼 수 없습니다.
scatterplot의 단점 ? -> 점이 겹칠 수 있다, 빈도수를 확인하기 어렵다.
plt.figure(figsize=(10,2)) -> 10,2 만큼 그래프 범위 넓히기

swarmplot -> 중복된 점들을 옆으로 보여주게되어 빈도수를 확인하기 쉽다.

catplot을 통한 범주형 데이터의 서브플롯 시각화
-> catplot 으로 boxplot그리기
= sns.catplot(data=df, x="origin",y="mpg",kind="box",col="cylinders", col_wrap=3)

catplot이 다른 박스, 바이올린, 스왐플롯과의 차이점?
-> catplot 은 서브플롯을 제공

col_wrap=3 -> 한줄에 3개의 그래프를 그린다

countplot은 x축과 y축중 한 개만 입력

변수가 3개 이상일 경우 hue값에 넣지 않음.

데이터수집 -> 웹 스크래핑

FinanceDataReader는 ?
-> 금융 데이터 수집 라이브러리
설치 -> !pip install –U finance-datareader
결측치가 많은 이유 ? -> 채권이나 다른 종목들이 있기 때문에, 금융상품이라서

수집해도 되는 페이지인지 확인하기
-> 주의할 점 :로봇 배제 표준 robots.txt, 저작권, 무리한 네트워크 요청

###HTML
id = #
class = .
table 태그면 pandas로 갖고 올 수 있음.

Pandas로 데이터 수집하기
웹에서 오른쪽버튼 후 검사하기 -> 네트워크 클릭 -> 그 후 아무 정보 클릭

반복문으로 데이터 모두 가져오기
-> temp_list = []
for news in table[:-1]:
news.columns = cols
temp_list.append(news)
display(news)

수집한 데이터 하나의 데이터프레임으로 합치기
-> df_news = pd.concat(temp_list)
df_news

수집한 데이터 결측치 제거
-> df_news = df_news.dropna()

인덱스 번호 새로 적용
-> df_news = df_news.reset_index(drop=True)

수집한 기사에서 “제목”에 “연관기사”가 들어가는 데이터를 제거
-> df_news = df_news[~df_news["정보제공"].str.contains("연관기사")].copy()
df_news

.str.contains 를 사용하며 조건의 반대에는 앞에 ~ 표시

확실하게 데이터를 저장할 때는 깊은 복사 -> .copy()
얕은 복사 시 원본 데이터 변경
깊은 복사 시 원본 데이터 유지

중복된 데이터가 있다면 제거
df_news = df_news.drop_duplicates()
df_news

profile
배운걸 다 흡수하는 제로민

0개의 댓글