Day06
- github
- issues 제기된 이슈 확인 가능
- pull requests 레포지토리에 있는 브랜치에 푸시한 내역, 변경 사항 등을 다른 사람들에게 알리는 것
- https://github.com/pandas-dev/pandas/pulls
- Pandas 기초(이어서)
- 데이터 가져오기
- df["약품명"] #컬럼명으로 데이터 가져오기
- df[["약품명","가격"]] #2개 이상의 컬럼명 가져오기
- df.loc[0] #행을 기준으로 데이터 가져오기
- df.loc[[0,1,2]] #위에서 3개 행 데이터 가져오기
- 약품명을 인덱스로 설정하고 가져오기
- df.set_index("약품명") #설정
- df.set_index("약품명").loc["소화제"] #가져오기
- 설정한 인덱스 삭제하기
- df = df.reset_index()
- df = df.drop(["level_0","index"],axis=1)
- 행과 열을 함께 가져오기
- df.loc[0,"약품명"] #1행 1열 값
- df.loc[[0,1,2],"약품명"]
- df.loc[[0,1,2],['약품명','가격']]
- df[df["약품명"].str.contains( "vita")] #특정 약품만 가져오기
- df["약품명"].str.lower() #약품명을 모두 소문자로
- df["약품명_소문자"] = df["약품명"].str.lower() #파생변수 만들기
- .str. = accessor
- df[df["약품명_소문자"].str.contains("vita|비타")]
- cf) 약품명_소문자 컬럼에서 vita|비타값이 들어가는 문자행 찾기 | == or / & == and
- -
- 정렬
- df.sort_values(by="가격",ascending=False) #오름차순 기본
- df.sort_values(by=["가격","약품명"], ascending=[False, True]) #가격->약품명 순으로 정렬되며 가격과 약품명 정렬 각각에 정렬순서 부여
- 파일로 저장하기
- df.to_csv("drug.csv",index=False, encoding='cp949') #index=False 자동으로 부여되는 인덱스는 저장하지 않겠다 #encoding='cp949' 한글 윈도우 엑셀에서 사용하는 인코딩 방식
- pd.read_csv("drug.csv",encoding='cp949') #저장된 파일 읽어오기
- 데이터 가져오기
- Seaborn
- 일부 데이터 가져오기
- df.head() == df.iloc[:5]
- df.loc[:2] #iloc와 다르게 인덱스 컬럼도 가져옴
- df.loc[:2, "x":"y"] #특정 열(x,y)만 가져올수도
- df.iloc[:5, :2] #이 방법도 가능
- df.sample(3) #샘플 몇 개 랜덤으로 가져오기
- df.sample(frac=0.05, random_state=42) #frac = 0.05 전체의 0.05%만 추출하겠다. 디폴트값 = 1
- 기본 정보 보기
- df.info()
- df.describe() #기술통계
- df.describe(include="object") #범주형 데이터의 기술통계
- dataset
- df["dataset"] #전체 데이터 시리즈 형태로 확인
- df["dataset"].unique() #고유값 보기
- df_1 = df[df["dataset"] == "I"] #서브셋 만들기
- 각 subset의 기술통계
- df_1.corr() #상관계수 = -1 ~1 사이의 값. 1에 가까운 값은 우상향 그래프, 0은 선형 상관관계가 없음
- 시리즈 형태로 빈도수 보기
- df["dataset"].value_counts()
- df["dataset"].value_counts(normalize=True) #빈도수 비율로 나타내기
- groupby로 dataset별 기술통계
- desc = df.groupby("dataset")[["x", "y"]].describe() #x,y에 대한 기술통계값을 내고 기본 정보를 보겠다
- df.groupby("dataset").describe() #같은 결과
- 시각화
- countplot
- 빈도 시각화에 주로 사용
- sns.countplot(data=df, x='dataset') #x를 dataset축으로 지정
- sns.countplot(data=df, y="dataset") #y를 dataset축으로 지정
- barplot
- 범주형 변수의 그래프를 시각화할 때 주로 사용
- estimator에 mean이 저장되어 있어 기본값으로 평균을 구한다
- 단: 대표값만 표현하기 때문에 값의 분포를 알기 어렵다
- sns.barplot(data=df, x='dataset', y='x', ci=None) #ci = 신뢰도. 기본적으로 95%의 신뢰도를 가지며 ci=None으로 빼고 보는 것을 권장
- sns.barplot(data=df, x='dataset',y='y', ci=None, estimator=np.sum) #estimator=np.sum 으로 합계를 구해 시각화할 수 있다
- boxplot
- 이상치 값 확인할 때 주로 사용
- 이상치, 최소값, 중앙값, 최대값 확인 가능
- 값의 분포를 보기 쉽다
- 단: 데이터의 변화를 반영하지 않는다
- sns.boxplot(data=df, x='dataset',y='y')
- violinplot
- 히스토그램(수치 분포의 분포)의 밀도를 추정해서 시각화할 때 사용
- 값이 변화하면 분포가 달라진다는 특징
- sns.violinplot(data=df, x='dataset',y='y')
- scatterplot
- 수치변수 간 분포를 시각화할 때 주로 사용
- sns.scatterplot(data=df, x='x', y='y', hue='dataset')
- regplot
- 회귀선을 구할 수 있다
- hue 지원X
- sns.regplot(data=df, x='x', y='y')
- lmplot
- hue 지원
- dataset별로 subplot을 그릴 수 있다
- 평균, 표준편차, 상관관계 값이 비슷하더라도 그래프의 모양은 매우 다를 수 있다
- sns.lmplot(data=df, x='x', y='y', hue='dataset', col='dataset', col_wrap=2) #col = 서브플롯 #col_wrap 한 줄에 2개씩 플롯을 그려준다
- countplot
- 일부 데이터 가져오기
- 퀴즈
#요약 수치
1사분위 수=하위 25%
2사분위 수=중앙값
3사분위 수=상위 25%
#편차=관측값-평균(또는 중앙값)
#도수분포표
양적 데이터를 질적 데이터로 변환할 때 쓰임
도수분포에 사용할 수 있는 그래프: 히스토그램, 선그래프, 막대그래프, 원그래프 등
나이의 구간을 정해 연령대로 나누어 도수분포로 만들 수 있음
#히스토그램
가로축=계급, 세로축=도수인데 반대로 그리기도 함
계급은 변수의 구간이고 서로 겹칠 수 없음
표로 되어있는 도수분포를 그래프로 나타낸 것
막대그래프는 계급(가로)를 생각하지 않고 세로의 높이로만 나타내지만
히스토그램은 가로와 세로를 함께 생각해야
#상관관계
피어슨 상관계수 = 두 변수의 공분산을 표준 편차의 곱으로 나눈 값
0은 선형 상관관계가 없음
상관관계 != 인과관계
출처) 멋쟁이 사자처럼 AI스쿨 7기 박조은 강사님 강의자료