장담컨대 인간의 적응력은 상상을 초월한다. 오늘은 어제와 비슷한 내용을 했다. 어제는 고개를 절레절레하며 대부분 포기했는데, 한숨 자고 일어났더니 갑자기 눈에 보이기 시작한다. 강사님이 중간마다 내주는 문제도 꽤 풀었다. 신기하다! 이게 복습의 힘인가! 매일 블로그를 작성하며 거의 5시간씩 복습한 덕분인 것 같다. 복습만 해도 시간이 부족해서 따로 문제는 못 풀지만 그럼에도 계속 성장하는 것 같다. 엑셀 다루는 라이브러리도 잠깐 했는데 거기까지 집중력이 따라주지 못했다. 확률과 통계 배우는데 죽는 줄 알았다. 시그마는 태어나서 처음 들어봄. 이 또한 시간이 해결해 주겠지. 부탁한다 내일의 나!!
여러 라이브러리를 동시에 하다 보니 뭐가 어느 라이브러리의 명령어인지 헷갈려서 어렵다. 이번 주말엔 하나씩 뜯어서 파악해 보는 시간을 가져야겠다.
학습시간 09:00~01:00(당일16H/누적86H)
뭐가 pandas고 뭐가 matplolib인지 잘 모르겠음 ㅠㅠ 일단 저장
''' 데이터 처리 '''
df = pd.read_csv('folder/file.csv') # 데이터 로드
df.describe(include='all') # 통계표(문자열 포함)
df.info() # 데이터 타입, 결측치 목록
df.set_index('name', inplace=True) # name 인덱스 설정
df.dtypes # 데이터 타입 확인
df['age'].unique() # 유니크한 값들을 보여줌
df['age'].value_counts() # 값의 개수를 보여줌
df['age'].value_counts(dropna=False) # 결측치도 포함
df['age'].value_counts(normalize=True) # 비율 확인
# income 열 생성, (salary열-tax열)값 적용
df['income'] = df['salary'] - df['tax']
확실하진 않으나 pandas인 것 같음
''' 막대 그래프 '''
f, ax = plt.subplots(1, 1, figsize=(15, 5)) # 플롯 생성 후 15, 8 사이즈 설정
df['name'].value_counts().plot.bar(ax=ax) # 열값 계산 후 막대 그래프 생성
''' 히스토그램 '''
# name열값이 KIM인 age열 출력, 히스토그램(15줄) 생성
df[df['name'] == 'KIM']['age'].plot(kind='hist', bins=15)
df['name'].plot(kind='hist', bins=100) # 히스토그램 100줄 생성
df['age'].var() # age열 분산값 출력
df['age'].std() # age열 표준편차값 출력
df['age_cumsum'] = df['age'].cumsum() # age_cumsum열 생성, age열 누적 합
df['age_cumprod'] = df['age'].cumprod() # age_cumprod열 생성, age열 누적 곱
df.plot(x='age', y='salary') # x축 age, y축 salary 그래프 생성
''' 박스플롯 '''
df['name'].plot(kind='box') # 그래프 생성
q1 = df['name'].quantile(0.25) # 1사분위수
q3 = df['name'].quantile(0.75) # 3사분위수
iqr = q3 - q1 # 사분위수 범위
q1 - 1.5 * iqr # 밑변 수치
q3 + 1.5 * iqr # 윗변 수치
어느 라이브러리를 사용하든 데이터 호출 명령어는 같은 것 같다. 아래 순서로 진행하면 상관관계까지 확인할 수 있다.
''' 데이터 로드 '''
import seaborn as sns
df = pd.read_csv('folder/file.csv')
그래프 크기, 스타일, 폰트 크기, 그래프 색상 등을 설정한다.
''' plot 테마 설정 '''
sns.set_theme(rc={'figure.figsize':(15, 8)}
, style='ticks') # 그래프 스타일
, font='Malgun Gothic') # 한국어 폰트 추가
, font_scale=2) # 폰트 크기
, palette='pastel') # 파스텔 톤
''' style 종류'''
ticks: 흰색 배경 / 축에 눈금
white: 흰색 배경 / 격자 O
whitegrid: 흰색 배경 / 격자 X
dark: 회색 배경 / 격자 O
darkgrid: 회색 배경 / 격자 O
플롯 종류를 설정하고 명령어를 입력하면 된다. 아래 Xplot에 원하는 플롯 종류를 넣으면 된다.
''' plot 종류 설정 '''
sns.Xplot(data=df, x='A', y='B')
histplot: 연속형 데이터의 빈도 시각화
boxplot: Q1, Q3, 중앙값, 이상치 표시
barplot: 범주형 데이터(y축 평균값)
countplot: 범주형 데이터(y축 개수값)
lineplot: 연속형 데이터 변화
scatterplot: 연속형 변수 간의 관계 산점도
regplot: 회귀선이 포함된 산점도
violinplot: 바이올린 모양
heatmap: 상관관계 시각화
swarmplot: 세로 점 그래프(정돈)
stripplot: 세로 점 그래프
kdeplot: 확률 밀도 함수(PDF) 시각화
명령어는 다양하게 있는데 상황에 따라 필요한 것만 이용하면 된다.
''' plot 명령어 설정 '''
sns.Xplot(data=df, x='A', y='V'
, hue='C') # C열 서브 그래프 추가
, errorbar=None) # 에러바 삭제
, bins=100) # 100개로 구분
, multiple='stack' # 데이터 스택
, order=['A', 'B', 'C'] # x축 순서 변경
, palette='Set2') # 색상 변경
, dodge=True) # 막대 그룹 분리
, log_scale=True) # 로그스케일 적용
, linewidth=2, alpha=0.7) # 선굵기, 투명도 조절
, aspect=2) # 가로세로 비율 조정
, bw_method=0.1) # 숫자 낮을수록 구불구불
''' 조건식 '''
# A열의 Q1값만 가져올 수 있다.
sns.Xplot(data=df[df['A'] == 'Q1']
아직 이부분은 어려워서 잘 모르겠다.
''' 1. 데이터 확인 '''
# corr() 함수는 -1 ~ 1 사이의 상관계수를 반환
df.corr(numeric_only=True)
''' 2. 목록으로 정렬'''
df.corr(numeric_only=True)['total'].sort_values(ascending=False)
''' 3. 히트맵 시각화 '''
# numeric_only=True 숫자형 데이터만 선택
sns.heatmap(df.corr(numeric_only=True), annot=True, cmap='coolwarm', fmt=".2f")