이변량 분석에는 총 네가지가 있다
서로 다른 타입의 변수를 비교하는 것
수치형 -> 수치형
시각화 : 산점도
# pyplot을 이용
plt.scatter(x='', y='', data=, s=20, c='b') # s는 점의 크기, c 는 컬러
# seaborn을 이용
sns.scatterplot(x='', y='', data=, s=15, edgecolor=T/F) # edgecolor는 점 테두리선
# 추가적인 시각화
sns.pairplot() # dataframe 내 전체 변수에 대한 비교
sns.jointplot(x='', y='', data=, kind=, marginal_kws={ : })
# marginal_kws : dictionary 형태로 파라미터 값을 지정해줄 수 있음 ex. {'bins' : 15}
# kind=reg : 회귀선, kind=hex : 벌집모양?, kind=kde : kdeplot
수치화 : 상관계수
spicy 라이브러리의 stats 패키지 이용 or pandas corr 이용
mport spicy.stats as spst
result = spst.pearsonr(df['column1'], df['column2'])
# result 의 0번 인덱스 값이 상관계수
result[0]
# 1번 인덱스 값이 p-value임
result[1]
# pandas의 corr() 메서드
df.corr(numeric_only=True)
#.style.background_gradient(cmap=, vmin=, vmax=) 등을 이용하면 heatmap 처럼 색칠도 가능
# seaborn heatmap()
sns.heatmap(df.corr(numeric_only=True),
annot=T/F, fmt, cmap, vmin, vmax...)
heatmap도 출력이 가능하다!
수치형 -> 범주형
시각화 : 히스토그램 histplot, 확률밀도함수 kdeplot
# histogram
sns.histplot(x='범주형col', hue='수치형col', data=, bins=15)
# 확률밀도함수 그래프 kdeplot
sns.kdeplot(x='범주형col', hue='수치형col', data=) #common_norm=T/F 그래프 면적 합이 1 OR 각각의 합이 1
# multiple='fill' 해주면 비율로 비교 가능
수치화 : 맞는 가설검정 도구가 X, 로지스틱 회귀모델
model = sm.Logit(df['범주형'], df['수치형'])
result = model.fit()
result.pvalues # p value를 볼수 있다.
p value로 통계적 유의성 검증
범주형 -> 수치형
시각화 : Barplot, Boxplot
# barplot
sns.barplot(x='범주형', y='수치형', data=, palette='') # palette 옵션으로 예쁘게 색칠 가능
# boxplot
sns.boxplot(x='범주형', y='수치형', data=, palette='')
x 범주에 따라서 y의 평균이 차이가 나는지 확인~
수치화 : t-검정, ANOVA
# 결측치가 있다면 df['col'].notnull() 로 제거해주고 수치화
c1 = df.loc[df['범주형']=='c1', '수치형']
c2 = df.loc[df['범주형']=='c2', '수치형']
# t 검정
t_test = spst.ttest_ind(c1, c2)
# t_test[0] = t-통계량
# t_test[1] = p-value
# anova
c1 = df.loc[df['범주형']=='c1', '수치형']
c2 = df.loc[df['범주형']=='c2', '수치형']
c3 = df.loc[df['범주형']=='c3', '수치형']
anova = spst.f_oneway(c1, c2, c3)
# anova[0] == f 통계량
# anova[1] == p-value
집단이 2개 일 때는 t 검정 / 집단이 3개 이상일 때는 ANOVA
t 검정은 두 평균의 차이 // -2 > t-statistics or t-statistics > 2 일 때 차이가있음!
anova는 표본들의 평균과, 표본들의 평균의 평균간의 차이
집단 내 차이(각 집단 내 평균과 각 집단내 값 간의 차이) 와 집단 간 차이 (모평균과 집단 평균 간 차이)를 비교 함
강사님이 첨부해주신 이미지 보고 이해했습니다 ㅋㅋ쿠 여러분도 한 번 찾아보시길..
범주형 -> 범주형
시각화 : 100% stacked bar, 모자이크 플롯
# 먼저 crosstab을 만들어줘야
table = pd.crosstab(df['col1'], df['col2'], normalize='index') # normalize 파라미터 값에 따라 다른 비율로 설정 가능 각 행 값의 합이 1
# stacked bar
table.plot(kind='bar', stacked=True)
# plt.axhline 추가하면 평균선 표시
# mosaic plot
mosaic(dataframe, ['col1', col2']) # data.frame.sort_values(['col1', 'col2']) 으로 순서 정렬 가능
수치화 : 카이제곱통계량
카이제곱통계량은, 그 값을 가지고 차이의 정도를 비교할 수는 없음.
ex) 섭씨 30도가 섭씨 15도 보다 2배 덥다고 하지 않는 것과 동일
result = spst.chi2_contingency(table)
# result[0] == 카이제곱통계량
# result[1] == p-value
# result[2] == 자유도
# result[3] == 기대빈도
카이제곱 통계량에서 기대 빈도란?
col1 범주 3가지 (A/B/C), col2 범주 2가지(X/Y)라고 했을 때,
A 이면서 X일 확률은 1/3 (3가지 중에서 A일 확률) * 1/2 (2가지 중에서 X일 확률) 이다.
확률과 통계에서 배운 두 독립 사건이 동시에 일어날 확률
그런데 거기다가 전체 값의 개수를 곱해주면 기대 빈도가 된다.
기대 빈도 = (해당 행의 합계 * 해당 열의 합계) / 전체 개수 합계
여러 검색을 해본결과 이렇게 이해 됐음! 근데 AICE 에서는 그렇게까지는 안 묻는 것 같다.
=> 카이제곱통계량이 자유도의 2~3배 보다 크고, p value < 0.05 를 만족하면 범주간 유의미한 차이가 존재!
코딩테스트 입문
1. 문자열 my_string이 매개변수로 주어집니다. my_string을 거꾸로 뒤집은 문자열을 return하도록 solution 함수를 완성해주세요.
class Solution {
public String solution(String my_string) {
StringBuffer answer = new StringBuffer(my_string);
return answer.reverse().toString();
}
}
StringBuffer의 reverse() 메서드를 사용하면 쉽게 할 수 있더라구요 이후 toString() 메서드로 문자열 변환까지 완료
for 반복문으로 역순으로 문자열을 배열하는 경우도 있었습니다.
-StringBuilder 와 StringBuffer의 메서드
append(String str) |
문자열 덧붙이기 | sb.append(" world") → "hello world" |
insert(int offset, String str) | 특정 위치에 삽입 | sb.insert(1, "ey") → "heyello" |
delete(int start, int end) | 범위 내 문자 삭제 | sb.delete(1, 3) → "hllo" |
replace(int start, int end, String str) | 문자열 치환 | sb.replace(0, 2, "He") → "Hello" |
reverse() | 문자열 뒤집기 | sb.reverse() → "olleh" |
toString() | 문자열로 변환 | sb.toString() |
-기본형 / Wrapper 클래스 : 기본 자로형을 객체형으로 감싸주는 클래스
int | Integer |
char | Character |
double | Double |
boolean | Boolean |
long | Long |
float | Float |
byte | Byte |
short | Short |
메서드설명예시
parseInt(String s) | 문자열 → int | Integer.parseInt("123") → 123 |
valueOf(String s) | 문자열 → Integer 객체 | Integer.valueOf("123") |
intValue() | Integer → int | new Integer(5).intValue() |
compare(a, b) | a와 b 비교 | Integer.compare(3, 5) → -1 |
2. 문자열 my_string과 문자 letter이 매개변수로 주어집니다. my_string에서 letter를 제거한 문자열을 return하도록 solution 함수를 완성해주세요.
class Solution {
public String solution(String my_string, String letter) {
StringBuilder sb = new StringBuilder(my_string);
for (int i=0; i < my_string.length(); i++) {
String st = String.valueOf(my_string.charAt(i));
if ( st.equals(letter)) {
sb.delete(i, i+1);
return sb.toString();
} else { }
}
}
}
안된다.. 근데 검색해보니까 문자열 메서드를 활용하면 더 쉽게 할 수 있었다ㅠ
class Solution {
public String solution(String my_string, String letter) {
return my_string.replaceAll(letter, "");
}
}
replace() 와 replaceAll() 이라는 메서드를 활용하면 됩니다! 짝짝짝
3. 각에서 0도 초과 90도 미만은 예각, 90도는 직각, 90도 초과 180도 미만은 둔각 180도는 평각으로 분류합니다. 각 angle이 매개변수로 주어질 때 예각일 때 1, 직각일 때 2, 둔각일 때 3, 평각일 때 4를 return하도록 solution 함수를 완성해주세요.
class Solution {
public int solution(int angle) {
int answer = 0;
if (angle == 180) {
answer = 4;
} else if (angle < 180 && angle > 90) {
answer = 3;
} else if (angle == 90) {
answer = 2;
} else {
answer = 1;
} return answer;
}
}
변수를 if문 밖에서 선언해주면, return 문을 if 절마다 일일이 안 써줘도 되네요 오늘도 공부 완료.
'Bootcamp > KT aivle school' 카테고리의 다른 글
4.7 딥러닝 모델링 (0) | 2025.04.07 |
---|---|
4.3 kt 에이블 스쿨 7일차 - 머신러닝, 코딩테스트 풀이 (0) | 2025.04.03 |
04.01 kt 에이블스쿨 5일차 pandas, seaborn 응용 | Java 코딩테스트 입문 (0) | 2025.04.01 |
03/31 kt 에이블스쿨 4일차 데이터 시각화 (0) | 2025.04.01 |
KT 에이블 스쿨 3일차 교육 후기 - Pandas (0) | 2025.03.29 |