matplotlib, seaborn 은 매우 유명한 툴이라, 경험을 해보기도 했었고.. 3주차 미니 프로젝트를 하던 와중에 시각화가 정말 중요해서 정리의 필요성을 느꼈습니다ㅠ 동시에 정리하기 때문에 그대로 복사하시면 오류가 날 수도 있습니다.
어차피 파라미터나, 옵션들은 사실 검색하면 바로나오기 때문에 무엇이 있는지 파악하는 정도로만 정리를 하는 것이 좋아보입니다!.
혹시나 인공지능 국비지원 교육을 듣기 전까지 시간이 많이 남으셨다면, 컴활과 통계관련 공부를 해보시는 것을 추천드려요. 만약 1달 남짓 남았다면 파이썬 기본 문법은 완벽히 정리하시는 것을 추천드립니다.
라이브러리 불러오기
import matplotlib.pyplot as plt
import seaborn as sns
from statsmodels.graphics.mosaicplot import mosaic # 모자이크 플롯
from pandas.plotting import parallel_coordinates # 평행좌표
시각화 세팅
plt.rc('font', family='Malgun Gothic')
sns.set(font="Malgun Gothic",
rc={"axes.unicode_minus":False}, # 마이너스 부호 깨짐 현상 해결
style='darkgrid')
그래프 그리기 기본
plt.plot(data['컬럼명1'], data['컬럼명2'])
plt.plot(x = '컬럼명1', y = '컬럼명2', data = df) # 이 방식이 seaborn 과 같고 컬럼명이 적용됨
plt.plot(x, y, color, linestyle, marker)
df.plot(동일) # df에서 바로 plot 메소드 사용 가능
그래프 꾸미기
plt.figure(figsize=(행인치, 열인치))
fig, ax = plt.subplots(ncols=2, figsize=(15,5)) # figure, axes
plt.subplot(행, 열, 인덱스)
plt.title("그래프의 제목")
plt.legend() # 범례 추가
plt.xlabel('x축 범례') # seaborn 은 자동 생성
plt.ylabel('y축 범례') # seaborn 은 자동 생성
plt.grid() # 그래프에 격자 추가
sns.color_palette('hls', length) # color 파라미터에 넣을 인자
plt.tight_layout()
plt.show()
그래프 종류
# linestyle : -(solid), --(dashed), -.(dashdot), :(dotted)
# color : 색상축약어(red → r, green → g), 색상명(green), 0~1(grayscale), rgb(#524FA1)
# marker : .(점), o(원), v(삼각형), s(네모), *(별)
plt.plot(x, y, data, linetyle, marker, color)
plt.boxplot(data['컬럼명'], vert=False)
plt.bar()
plt.pie(series, labels, startangle, counterclock, autopct)
plt.axhline(y_value, color='b', linestyle='-')
plt.hist(data['컬럼명'], bins=50, alpha=0.6, ec='black')
sns.boxplot(x, y, data) # 주식 그래프처럼 생김 (IQR, 1Q, 3Q, border, 이상치)
sns.scatterplot(x, y, data) # 산점도
sns.histplot(series, bins, kde, ax) # 히스토그램
sns.kdeplot(x, y, data) # 커널밀도추정
sns.regplot(x, y, data) # scatterplot + 선형회귀선
sns.jointplot(x, y, data, hue) # scatterplot + histplot(densityplot)
sns.barplot(x, y, data) # 평균과 오차범위 표시
sns.countplot(x, y, data) # 집계 barplot
sns.pairplot(df, hue="범주형 컬럼명") # scatter + histplot (모든 변수들간의 산점도)
sns.heatmap(df.corr(), # df.corr() 대신 grouped_df.pivot('컬럼명1', '컬럼명2')도 가능
annot=False,
cmap='Blues',
cbar=False,
square=True,
fmt='.1f',
annot_kws={'size':6})
mosaic(df, [컬럼들], gap )
parallel_coordinates(df, '컬럼명, colormap, alpha)
단변량 분석을 위한 함수
def col_info(df, col):
display(df[[col]].info())
display(df[[col]].describe().T)
plt.figure(figsize=(16, 16))
plt.title(col)
plt.grid(axis='x')
plt.subplot(3,1,1)
sns.boxplot(x=col, data=df)
plt.subplot(3,1,2)
sns.histplot(x=col, data=df, kde=True)
plt.tight_layout()
plt.show()
# 왜도 > 0 : 왼쪽 치우침 / 왜도 < 0 : 오른쪽 치우침
# 첨도 = 0 : 정규분포 / 첨도 > 0 : 위로 뾰족 / 첨도 < 0 : 아래로 뾰족
print(f'왜도: {skew(df[col])} 첨도: {kurtosis(df[col])}')
print('-' * 80)
숫자형->숫자형 이변량 분석을 위한 함수
def numerical_analysis(df, x, y):
plt.title('숫자형 -> 숫자형 이변량 분석')
plt.grid(axis="x")
sns.regplot(x = x, y = y, data = df)
sns.jointplot(x = x, y = y, data = df)
plt.show()
result = pearsonr(x = df[x], y = df[y])
print(f'상관계수 : {result[0]}, p-value : {result[1]}')
print('-' * 50)
범주형->숫자형 이변량 분석을 위한 함수
def categorical_analysis(df, x, y):
plt.title('범주형 -> 숫자형 이변량 분석')
plt.grid(axis="x")
sns.barplot(x = x, y = y, data = df)
plt.axhline(df[y].mean(), color = 'r')
plt.show()
data_group = []
cnt = 0
for val in df[x].unique():
data_group.append(df.loc[df[x]==val, y])
cnt += 1
if cnt == 2:
result = ttest_ind(*data_group)
print(f't-value : {result[0]}, p-value : {result[1]}')
print('-' * 80)
else:
result = f_oneway(*data_group)
print(f'f-value : {result[0]}, p-value : {result[1]}')
print('-' * 80)
상관계수, t-value, f-value, p-value 출력하는 함수
def print_relation_xy(df, numerical_cols, categorical_cols, y):
for x in categorical_cols:
data_group = []
cnt = 0
for val in df[x].unique():
data_group.append(df.loc[df[x]==val, y])
cnt += 1
if x == y: # target y는 출력 제외
continue
if cnt == 2:
result = ttest_ind(*data_group)
print(f'{x} t-value : {result[0]}, p-value : {result[1]}')
else:
result = f_oneway(*data_group)
print(f'{x} f-value : {result[0]}, p-value : {result[1]}')
print('-' * 80)
for x in numerical_cols:
result = pearsonr(x = df[x], y = df[y])
print(f'{x} 상관계수 : {result[0]}, p-value : {result[1]}')
'Experience > - KT AIVLE School' 카테고리의 다른 글
KT AIVLE School 3주차 - 알고리즘 스터디 기록 (0) | 2023.02.19 |
---|---|
KT AIVLE School 3주차 정리 - 크롤링 (0) | 2023.02.16 |
KT AIVLE School 3주차 후기 - 미니 프로젝트 1차 (0) | 2023.02.15 |
KT AIVLE School 2주차 정리 - 데이터 분석 (0) | 2023.02.15 |
KT AIVLE School 1주차 정리 (0) | 2023.02.11 |
KT AIVLE School 0주차 정리 (합격 후 1개월) (0) | 2023.02.11 |
댓글