9.29 자기주도학습 (9.26~28 학습 내용)

전재원·2022년 9월 29일
0

기술통계 및 EDA

  • 라이브러리 로드
import pandas as pd
import numpy as np
import seaborn as sns
import matplorlib.pyplot as plt
  • 버전 확인하기
print(pd.__version__)
print(sns.__version__)
  • 데이터셋 불러오기
df = sns.load_dataset("mpg")
df.shape
  • 요약하기
df.info()
  • 결측치 보기
df.isnull().sum()
df.isnull().mean() * 100
plt.figure(figsize=(12, 8))
sns.heatmap(df.isnull(), cmap="gray")
  • 기술통계 보기
df.describe()
  • 범주형 변수에 대한 기술통계 보기
df.describe(include = "object")
  • Unique
    unique()는 serise 타입만 가능하고
    nunique()는 series, dataframe 타입 모두 가능

  • countplot 으로 origin 빈도수 시각화 하기

sns.countplot(data=df, x="origin")
  • origin 의 빈도수 구하기
df["origin"].value_counts()
  • pd.crosstab 으로 시각화한 값 직접 구하기
pd.crosstab(index=df["origin"], columns=df["cylinders"])
  • barplot 으로 origin 별 origin 값 구하기
sns.barplot(data=df, x="origin", y="mpg")
  • groupby를 통해 origin 별로 그룹화 하고 mpg 의 평균 구하기
df.groupby("origin")["mpg"].mean()
  • pivot_table 로 같은 값 구하기
pd.pivot_table(data=df, index="origin")
  • barplot 으로 합계 값 구하기
sns.barplot(data=df, x="origin", y="mpg",estimator=np.sum, hue="cylinders")

estimator -> 수치 데이터를 어떻게 계산할 것인가?

  • groupby 를 통해 위 시각화에 대한 값을 구하기
df.groupby(by=["origin", "cylinders"])["mpg"].mean().unstack()
  • pivot_table 를 통해 위 시각화에 대한 값을 구하기
pd.pivot_table(data=df, index="origin", columns="cylinders", values="mpg")
  • 스택과 언스택
    pivot은 연산을 하지 않고 pivot_table은 연산을 한다
    groupby로 origin 값에 따른 mpg의 기술통계 구하기
    결과를 변수에 할당하여 재사용하기
df.groupby("origin")["mpg"].describe()
  • catplot 은 서브플롯을 제공
    (한 그림에 여러 그래프를 그리는 것)

그냥 박스플롯, 바이올린 플롯을 따로 그리는 것이 아니라, catplot 안에서 kind로 박스플롯과 바이올린 플롯의 형태를 지정해주는 이유
col_wrap=3 -> 한줄에 3개의 그래프를 그린다는 의미

시각화 전문가들은 3가지 이상의 색상을 사용하는 것을 권장하지 않음.

Finance Data

  • 금융 데이터 수집 라이브러리
!pip install -U finance-datareader
import FinanceDataReader as fdr
  • 한국 거래소 상장종목 전체 가져오기
fdr.StockListing("KRX")
  • read_html로 수집하기
table = pd.read_html(url)
df = table[0]
cols = df.columns
  • 반복문으로 데이터 모두 가져오기
temp_list = []
for news in table[:-1]:
    news.columns = cols
    temp_list.append(news)
    display(news)
  • 수집한 데이터 하나의 데이터프레임으로 합치기
df_news = pd.concat(temp_list)

axis=0 행을 기준으로 위아래로 같은 컬럼끼리 값을 이어 붙여 새로운 행을 만듦
axis=1 컬럼을 기준으로 인덱스가 같은 값을 옆으로 붙여 새로운 컬럼을 만듦

  • 결측치 제거
df_news = df_news.dropna()
  • 제목에 '연관기사'가 들어가는 데이터 제거
    .str.contains 를 사용하며 조건의 반대에는 앞에 ~ 표시로 표현할 수 있습니다.
df_news = df_news[~df_news["정보제공"].str.contains("연관기사")].copy()
  • 중복 제거
df_news.drop_duplicates()
  • 컬럼순서 변경하기
cols = ['종목코드', '종목명', '날짜', '종가', '전일비', '시가', '고가', '저가', '거래량']
df_day = df_day[cols]
  • requests를 통한 HTTP 요청
response = requests.get(url)
  • JSON 타입으로 데이터 받기
etf_json = response.json()
profile
농구를 좋아하는 데이터 분석가 지망생

0개의 댓글