2026. 4. 16. 11:14ㆍTIL
📢 오늘의 목표
🚩코드카타를 하면서 기본적인 코딩 역량을 키운다.
🚩통계분석에 대해 배우면서 기존에 배웠던 내용과 어떻게 접목 시킬지 고민한다.
🚩라이브 세션을 통해 통계 분석 역량을 키운다.
📅 TIL
❇️Code Kata
😊 문제 36
https://school.programmers.co.kr/learn/courses/30/lessons/12918
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.
def solution(s):
answer = ''
if (len(s)==4 or len(s)==6) and s.isdigit():
answer = True
else:
answer = False
return answer
⭐해설
답변이 string 형태이므로 answer = ' ' 형태로 두고, 조건 중에 길이가 4 or 6인지 판별하는 조건과 여기에 문자가 포함 되어 있는지 판별하는 것이었으므로 조건문에 모든 조건을 충족해야 True가 나오도록 if (len(s)==4 or len(s)==6) and s.isdigit(): 형태로 나타내었다.
⭐개선 가능성
isdigit()의 출력 형태가 True, False이므로 굳이 answer라는 변수를 지정 안해주고
def solution(s):
return (len(s)==4 or len(s)==6) and s.isdigit()
이렇게 표현하면 더 간단하게 나올 것 같다.
😊 문제 37
https://school.programmers.co.kr/learn/courses/30/lessons/12950
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.
def solution(arr1, arr2):
answer = []
for i in range(len(arr1)):
answer1 = []
for j in range(len(arr1[0])):
answer1.append(arr1[i][j]+arr2[i][j])
answer.append(answer1)
return answer
⭐해설
덧셈을 하기 위해서는 행렬의 형식을 다 풀어서 arr1[0][0]+ arr2[0][0],arr1[0][1]+ arr2[0][1],arr1[1][0]+ arr2[1][0],arr1[1][1]+ arr2[1][1]...형태로 만들어주고 다시 더한 값으로 행렬을 만들어서 answer를 [[arr1[0][0]+ arr2[0][0],arr1[0][1]+ arr2[0][1]],[arr1[1][0]+ arr2[1][0],arr1[1][1]+ arr2[1][1]]]의 형식으로 만들어줘야한다.
이를 위해서는 for i in range(len(arr1)) 으로 반복문에서 i의 값이 행렬의 갯수가 되도록 하고 다시 반복문을 해줘서 j가 행렬 안의 요소의 갯수가 되도록 해준 뒤 모든 요소를 각각 더해주고 append를 이용하여 answer1에 넣어서 리스트의 형식으로 만들어준다. 그리고 다시 append를 통해 행렬의 형식으로 만들어줬다.
⭐개선 가능성
def sumMatrix(A,B):
return [list(map(sum, zip(*x))) for x in zip(A, B)]
다른 사람의 풀이를 보면서 신기하다고 생각했던 풀이법을 참고해 보았다.
❇️라이브세션 오전



데이터 타입에 따라 다른 분석 방법!

입력값(수치, 범주)
출력값 (수치, 범주)
수X범 로지스틱 회귀모델
범X수 선형회귀모델
수X수 t-test, ANOVA(범주형 3개)
범X범 카이제곱검정(순서)

비 모수 대안은 이런게 있다는 거만 알면 좋음

모수 검정은 전제 조건이 있어서 만약 그것이 깨진다면 검정 결과를 신뢰할 수 없다!

쌍봉 분포가 나타나면 장비별 층화를 통해 두 개의 데이터로 분리해야함

정규성이 깨지는 경우
쌍봉 분포
수명 데이터 > 와이블 분포
불량률 데이터 > 이항분포, 대표본이면 정규근사


피어슨 상관은 스피어만 상관이랑 같이 쓸때도 있다!
<통계 코드>
from scipy import stats
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(42)
# ── 데이터 준비: 3개 라인 치수 ──
line_a = np.random.normal(10.00, 0.015, 50)
line_b = np.random.normal(10.02, 0.020, 50)
line_c = np.random.normal(9.98, 0.035, 50)
# ══════════════════════════════════════════
# 1. 정규성 검정
# ══════════════════════════════════════════
print("【정규성 검정 (Shapiro-Wilk)】")
for name, data in [('A', line_a), ('B', line_b), ('C', line_c)]:
stat, p = stats.shapiro(data)
result = "정규 ✓" if p > 0.05 else "비정규 ✗"
print(f" {name}라인: W={stat:.4f}, p={p:.4f} → {result}")
# QQ-Plot 시각화
fig, axes = plt.subplots(1, 3, figsize=(15, 4))
for ax, data, name in zip(axes, [line_a, line_b, line_c], ['A', 'B',
'C']):
stats.probplot(data, dist="norm", plot=ax)
ax.set_title(f'{name}라인 QQ-Plot')
plt.tight_layout()
plt.show()
# ══════════════════════════════════════════
# 2. 등분산성 검정
# ══════════════════════════════════════════
print("\n【등분산성 검정】")
# Levene's test (정규성 가정에 덜 민감)
stat, p = stats.levene(line_a, line_b, line_c)
print(f" Levene: F={stat:.4f}, p={p:.4f} → {'등분산 ✓' if p > 0.05 else '등
분산 위반 ✗'}")
# Bartlett's test (정규성 가정 필요)
stat, p = stats.bartlett(line_a, line_b, line_c)
print(f" Bartlett: χ²={stat:.4f}, p={p:.4f} → {'등분산 ✓' if p > 0.05 else
'등분산 위반 ✗'}")
# 라인별 분산 비교
for name, data in [('A', line_a), ('B', line_b), ('C', line_c)]:
print(f" {name}라인 SD: {np.std(data, ddof=1):.4f}")

독립표본 t-검정
서로 독립인 두 그룹의 평균 비교
등분산성, 정규성, 독립성 > 조건이 까다롭네...



분산분석 - ANOVA
일원분산분석 (One-way ANOVA)


SSB가 그룹 내
SSB가 그룹 간

H0이 귀무가설, H1이 대립 가설
p-value가 0.0001이라 대립 가설



카이제곱 검정

적합도 검정 (Goodness-of-fit Test)


❇️라이브세션 오후

회귀분석
종속변수(목표 변수)와 독립변수(설명 변수) 간의 관계를 모델링하고, 이를 통해 예측하거나 통찰을 얻는 통계적 기법
ex)화학 공정의 산출물 순도 예측
종속변수: 산출물의 순도 (ex: %로 표시된 화학적 순도).
독립변수:반응 시간,반응 온도,사용된 촉매의 종류
선형회귀 (Simple Linear Regression)
선형 회귀분석은 데이터를 기반으로 함수 형태의 관계를 도출하며, 일반적으로 다음과 같은 수식 형태를 가진다

온도 ⇒ x, 에어컨 키는 빈도수 ⇒ y
y: 예측하려는 종속변수
x1: 독립변수 (종속변수에 영향을 미치는 변수)
β0: 절편 (모델의 시작점)
β1: 기울기 (독립변수가 종속변수에 미치는 영향의 크기)
ϵ: 오차 (모델의 예측값과 실제값 간의 차이)

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
# 데이터 준비
X = [[1], [2], [3], [4], [5]]
y = [2, 4, 6, 8, 10]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X_train, y_train)
# 예측 및 평가
y_pred = model.predict(X_test)
print("MSE:", mean_squared_error(y_test, y_pred))
print("회귀 계수 (W):", model.coef_)
print("절편 (b):", model.intercept_)
# 그래프 그리기
plt.scatter(X, y, color='blue', label='Actual data') # 실제 데이터
plt.plot(X, model.predict(X), color='red', label='Regression line') # 회귀선
plt.scatter(X_test, y_test, color='orange', label='Test data') # 테스트 데이터
plt.title("Linear Regression Visualization")
plt.xlabel("X")
plt.ylabel("y")
plt.legend()
plt.show()

잘 피팅 되었다
'TIL' 카테고리의 다른 글
| 20260420 TIL (0) | 2026.04.20 |
|---|---|
| 20260417 TIL (1) | 2026.04.17 |
| 202060415 TIL (1) | 2026.04.15 |
| 20240414 TIL (2) | 2026.04.14 |
| 20260413 TIL(🎂) (0) | 2026.04.13 |