우리 학과 내에서 하는 대회가 있는데 

나름 열심히 준비하고 룸메랑 밤새가면서 해서 좋은 결과를 기대했다.

 

열심히 했으니 절대로 떨어지지 않을거라고 룸메랑 얘기하면서 

2차 때 어떻게 준비할지 의논하고 1차 심사 끝나고 바로 준비 들어가자고 했다,

 

그런데 결과는 불합격..

몇 팀이 참가했는지는 모르겠지만 일단 순위권 내에 있지 않다는 것이 조금 충격적이었다.

 

처음에는 결과를 못 받아들이고

한동안 멍하니 벙쪄있었던거 같은데 다시 ppt보고 영상을 보니 

많이 미흡하다는 생각이 들었다. 교수님들의 눈을 잠시나마 의심했던 내가 부끄러웠다고나 할까나..

 

다시 심기일전하고 내년이나 올해 다른 데이터 공모전에 참가해서 유의미한 결과를 얻고 싶다.

그래서 현재 공부한 내용을 정리해서 블로그에 글도 쓰고 착실하게 사는중인데! 

 

글쎄 요즘 힘이 부친다.

룸메가 나보고 많이 피곤해보인다고도 한다. 

 

흠...

이번년도 가족보다도 더 오래 같이 산 룸메가 그렇게 말할 정도면.. 쉬어야하나?

 

어림없는 소리!

지치는건 체력이 부족하다는 소리이기 때문에 

그냥 운동 더 열심히 해서 체력 키우면 된다!

 

 

핑계다 핑계

그냥 하면 된다. (like 김연아)

 

 

 

 

물론 스트레스 많이 받고 도저히 못 버티겠다 싶으면

이 3가지를 하면 된다. 

1. 잔다.

2. 좋은 사람이랑 같이 있는다.

3. 게임(농구, 롤)한다.(역효과 날수도 있지만)

 

 

파란색 옷이 접니다

 

 

 

어쨌든 

파이팅하자 하핫

 

 

 

 

 

+

이제부터 종종 일상 얘기도 올리겠습니다~

그럼 좋은 하루 되세요!

 

 

 

 

'일상 > 일기' 카테고리의 다른 글

24.08.21 (수) - 계곡여행 + 앞으로의 다짐(?)  (2) 2024.08.21
오랜만에 일기  (0) 2024.04.02
24년도 새해목표  (0) 2024.01.26
24.01.26  (0) 2024.01.26
우매함의 봉우리  (2) 2023.12.05

Review - 반복문 복습 

n = 21
for(i in 1:100){
    cat("collatz : NOW =", n, "\n")
    if (n %% 2 == 0){
        n = n / 2 
    } else {
        n = n*3 + 1 
    }
    if(n == 1){
        cat("collatz : END =", n, "\n")
        break
    }
}

 

 

사용자 정의 함수 

function(<para1>, <para2>, ....){<expression>}

para1, 2 는 매개변수,

expression은 매개변수를 활용한 함수식 

 

 

 

예시1 

Ex0 = function(x) {7*x+5}
Ex0(3)

Ex1 = function(x){
    y = 7*x + 5 
    # 별도로 객체를 정의하여 값을 저장하면
    # 함수를 실행시키더라도 함수값을 출력해주지 않음. 
} 
Ex1(4) 
y 

# 함수 안에서 만들어진 변수는 함수가 종료되면 없어짐.

 

 

예시2 

Ex2 = function(x){
    x^2 + 3*x - 6
}
Ex2(10)

 

 

 

반환하고 싶을 때는 return(<object>)를 사용하여야 함. 

Ex1 = function(x){
    y = 7*x + 5
    return(y)
}

Ex1(4)

 

return을 쓰면 함수를 호출했을 때

함수 내에서 저장한 변수를 return(y)로 반환해줄 수 있음.  

 

return 예시 1 

Ex3 = function(x){
    a = x^2 + 3*x - 6
    b = 2*x^2 - exp(2)
    return(a+b)
}
Ex3(10)

 

return 예시 2 

Ex4 = function(x){
    return(x[2] + x[3])
}
Ex4(c(1:5))

 

매개변수는 단순한 숫자 뿐만 아니라 벡터도 들어갈 수 있음. 

 

 

 

다수의 매개변수와 기본값을 설정한 함수 

Ex5 = function(threshold = 0, vec){
    return(sum(vec > threshold))
}
Ex5(3, -3:10)
Ex5(vec = -3:10)

 

Ex5(3, -3:10) 코드는 순서대로 매개변수의 속성에 맞게 넣었기 때문에 오류가 없이 출력이 된다. 

그러나 Ex5(vec = -3:10) 은 현재 threshold의 값을 따로 설정해주지 않았기 때문에 매개변수의 순서에 맞게 넣는게 아니다.

따라서 -3:10이 어떤 매개변수에 해당하는지 적어줘야한다. 

 

 

다수의 매개변수, 기본값 예시 

Ex6 = function(n, mu, sig, value = 0){
    set.seed(100)
    tmp = rnorm(n, mu, sig)
    
    if(min(tmp) > value){
        result = max(tmp) - min(tmp)
    } else {
        result = value - min(tmp)
    }
    
    return(result)
}
Ex6(4, 6, 3)
Ex6(4, 6, 3, 6)

 

 

 

연습하기 

 

최솟값 찾기

# Find minimum by function ---- 
my.min = function(x){
    mini = x[1]
    for (i in 1:length(x)){
        if (mini > x[i]){
            mini = x[i] 
        } else {
            mini = mini
        }
    }
    return(mini)
}

set.seed(100)
x = runif(100, 0, 30)
my.min(x)

 

코드 설명 

1. 첫 번째 값을 초기값으로 지정

2. 다음 값과 비교 후 더 작으면 그대로 유지

3. 만약 다음 값이 더 작을 경우 그 값으로 대체

4. 반복문을 이용하여 가장 작은 값 찾기 

 

unif >>> 균등분포

 

 

팩토리얼 

# Find Factorial 
my.fac = function(n) {
    if (n == 0) {
        n = 1
    } else{
        n = n * my.fac(n - 1)
    }
    return(n)
}

my.fac(8) == factorial(8)

 

사용자 정의 함수는 함수 안에서 사용자 정의 함수를  사용할 수 있다. 

ex) 

ft1 = function(x){n = n*ft1(n-1)} 

파이썬의 재귀함수를 생각하면 쉽게 이해할 수 있다. 

 

 

연습문제 

 

Q1 > f(x,y) = x^2 + y^2 

Q2 > x값이 주어졌을 때 x값이 양수이면 x를 출력하고 양수가 아니면 x의 절댓값을 출력하는 함수 

Q3 > n값이 주어졌을 때 N(5,2)에서 n개의 값을 뽑은 벡터의 최솟값과 최댓값의 합을 산출하는 함수 

 

# practice subject ----
# 1 ----
Q1 = function(x, y){
    return(x^2 + y^2)
}

# 2 ----
Q2 = function(x){
    if(x > 0){
        print(x)
    } else {
        print(abs(x))
    }
}

# 3 ----
Q3 = function(n){
    return(max(rnorm(n, 5, 2)) + min(rnorm(n, 5, 2)))
}

 

27866

S = input()
i = int(input())

print(S[i-1])

 

 

2743

x = input()

print(len(x))

 

 

9086

문제

문자열을 입력으로 주면 문자열의 첫 글자와 마지막 글자를 출력하는 프로그램을 작성하시오.

입력

입력의 첫 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 10)가 주어진다. 각 테스트 케이스는 한 줄에 하나의 문자열이 주어진다. 문자열은 알파벳 A~Z 대문자로 이루어지며 알파벳 사이에 공백은 없으며 문자열의 길이는 1000보다 작다.

출력

각 테스트 케이스에 대해서 주어진 문자열의 첫 글자와 마지막 글자를 연속하여 출력한다.

T_num = int(input())

for i in range(T_num):
    munja = input()
    print(f"{munja[0]}{munja[-1]}") # -1은 가장 끝 첫번째를 나타냄.

 

 

11654

print(ord(input()))

 

 

11720

문제

N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.

출력

입력으로 주어진 숫자 N개의 합을 출력한다.

n1 = input() 
n2 = input()

hap = 0

for i in range(int(n1)):
    hap = hap + int(n2[i])
    
print(hap)

 

 

이 문제 처음 봤을 때는 input으로 받아와서 (input으로 받으면 문자열 처리된다.) split 해서 하나하나씩 더해주면 되겠다고 생각했는데 띄어쓰기와 같은 구분자가 없어서 당황했다. 그런데 그냥 문자열을 인덱싱해서 하나하나씩 int 처리해주면 전체 합을 구할 수 있겠다고 생각했었고 실제로 돌려보니 정답이었다. 

'알고리즘' 카테고리의 다른 글

반복문을 사용한 정육면체 만들기  (1) 2024.01.15
RGB to HEX  (1) 2024.01.15
백준 파이썬 - 배열 2  (2) 2023.10.03
백준 파이썬 - 배열  (0) 2023.09.16
백준 파이썬 - 2525  (0) 2023.07.06

출처 : 데이콘 

train.csv : 모델을 학습하기 위해 사용하는 데이터

test.csv : 모델을 통해 정답을 예측하기 위해 사용하는 데이터

sample_submission.csv : 예측한 정답 값을 기록하여 제출하기 위한 샘플 정답 파일 

 

 

순서 (출처: 데이콘, 영화 관객 수 예측 프로젝트)

1. 데이터 불러오기

2. 데이터 확인

3. 데이터 이해

4. 결측치 이해

5. 결측치 처리 

6. 모델 구조의 이해 

7. 모델링 

 

 

 

반복문

- 문장을 반복 실행하는 경우에 사용 

 

FOR문

# for 문 (for loop/statement) 형식
for (<var> in <interval>) { <repeated_work> }

# 설정한 변수 <var>가 지정된 구간 <interval>에서 변하면서 
# 문장 <repeated_work>을 반복실행

 

 

# 반복문; for loop ----
for (i in 1:3) {
    print(i)
}

for (i in c("a", "b", "c")){
    print(i)
}

for(i in 5:3){
    print(i)
}

# 반복문 : 1~1000합 구하기 ----
sss = 0 
for(i in 1:100){
    sss = sss + i
}


## exercise ----
x = 3
for(i in 1:5){
    x = x*2
}

sss = 0
for(i in 100:200){
    sss = sss + i
}

kk = 1
for(i in 1:10){
    kk = kk*i
}
kk == factorial(10)

# 반복문: 정규분포 ----
vec = rnorm(100,7,3)

sum1 = 0 
for(i in 1:length(vec)){
    sum1 = sum1 + vec[i]
}
m = sum1/length(vec)


## exercise ----
vec2 = rnorm(100, 5, 2)

sum2 = 0
for(i in 1:length(vec2)){
    sum2 = sum2 + vec2[i]
}
m2 = sum2/length(vec2)

sum3 = 0
for(i in 1:length(vec2)){
    sum3 = sum3 + vec2[i]^2                    
}
var1 = (sum3 - length(vec2)*m2^2)/(length(vec2)-1)
var1

 

R에서의 반복문은 파이썬에서의 반복문과 조금 다를 뿐 원리는 비슷함. 

 

 

WHILE문

# while문(while loop/statement) 
while(<condition>) { <repeated_work> }

# 반복할 조건 <condition>의 참 거짓을 판별하여
# 참인 경우 문장 <repeated_work>을 반복 실행
# 주어진 조건을 만족하는 동안 무한 반복하기 때문에 예상과 달리 루프에 갇히게 되면 break해야함.
# 반복문: while문 ----
x = 3
while(x<1000){
    x = x*2
}
print(x)

# 결과가 다르다는 걸 느끼기 
# 1
i = 0 
sss = 0
while(i <= 100){
    i = i + 1
    sss = sss + i
}
sss  # 5151

# 2 
i = 0; sss = 0
while(i <= 99){
    i = i + 1
    sss = sss + i
}
sss # 5050

# 3
i = 0; sss = 0
while(i <= 100){
    sss = sss + i
    i = i + 1
}
sss  # 5050

# 100~200합 구하기
i = 100
sss = 0
while(i <= 200){
    sss = sss + i
    i = i + 1
}
sss


# 1부터 10까지의 곱과 factorial 비교
i = 1
sss = 1
while(i <= 10){
    sss = sss*i
    i = i + 1
}
sss == factorial(10)


# example
# 처음으로 합이 100을 넘기는 n값 찾기
n = 0 ; n.sum = 0
while(n.sum <= 100){
    n = n + 1
    n.sum = n.sum + n
}

## practice ----
n = 0
while(n.sum <= 100000){
    n = n + 1
    n.sum = n.sum + n
}

n = 0
n.fac = 1
while(n.fac <= 1000000){
    n = n + 1
    n.fac = n.fac * n
}

 

repeat문

# repeat문 
repeat{<repeated_work>}

# 작업 <repeated_work>을 무한 반복하다가 break 조건을 만족하면 stop
# 반복문: repeat ----
n = 0
sss = 0
repeat{
    n = n + 1
    sss = sss + n
    if (n >= 100) break
}

이산확률분포 

# 이산확률분포 - random number 활용
x = 0:n
y = dbinom(x, n, p)
plot(x,y,
     type = "h", xlim = c(0,n), lwd = 3, col = "tomato")

 

# 추출하는 난수의 개수 조정 
n = 25
p = 0.2
random.x10 = rbinom(10, n, p)

plot(table(random.x10), xlim = c(0,n),
     lwd = 3, col = "red")

mean(random.x10) ; var(random.x10)


random.x100 = rbinom(100, n, p)
plot(table(random.x100), xlim = c(0,n),
     lwd = 3, col = "red")
mean(random.x100) ; var(random.x100)

random.x1000 = rbinom(1000, n, p)
plot(table(random.x1000), xlim = c(0,n),
     lwd = 3, col = "red")
mean(random.x1000) ; var(random.x1000)

result = data.frame(n = c(10, 100, 1000),
                    mean = c(NA),
                    var = c(NA))

result[1,2:3] = c(mean(random.x10), var(random.x10))  
result[2,2:3] = c(mean(random.x100), var(random.x100))  
result[3,2:3] = c(mean(random.x1000), var(random.x1000))  

result

 

 

추출하는 개수가 높아질수록 이론적인 평균값에 가까워진다는 것을 확인할 수 있음.

 

 

 

연속확률분포

## 연속확률분포 ----
### 정규분포 ----
rnorm(10, mean = 0, sd = 1)
random.x = rnorm(100)
mean(random.x) ; var(random.x)

# random number로 hist/curve 그리기 
?hist
hist(random.x, probability = T, main = "Normal(0,1)")

 

# random number로 hist/curve 그리기 
hist(random.x, probability = T, main = "Normal(0,1)")
# probability = T에 대한 의미 ----
# probability = T >> 상대도수
# probability = F >> 빈도수

curve(dnorm(x), add = T, col ="tomato", lwd = 3)

 

 

t-분포

### t-분포 ----
set.seed(123)

random.x = rt(100, 2.5)
hist(random.x, probability = T, main = "t-dist")

result = data.frame(
    n = c(30, 50, 100, 2000),
    mean = c(NA),
    variance = c(NA)
)

x30 = rt(result[1,1], 2.5)
x50 = rt(result[2,1], 2.5)
x100 = rt(result[3,1], 2.5)
x2000 = rt(result[4,1], 2.5)

result

set.seed(123)

result[1,2:3] = c(mean(x30), var(x30))
result[2,2:3] = c(mean(x50), var(x50))
result[3,2:3] = c(mean(x100), var(x100))
result[4,2:3] = c(mean(x2000), var(x2000))

result = rbind(c(NA, 0, 2.5/(2.5-2)), result)

result

 

 

 

R에서 제공하는 분포 관련 함수

density function of dist.

- d### (x,  ...<parameters>...)

 

distribution function of dist. 

- p###(q, ...<parameters>...)   # = P(X <= q)

- q###(p, ...<parameters>...)   # p = P(X <= x) >>> {P(X <= x)}^(-1)

 

 

 

이산확률분포 

 

이항분포

## 이항분포 - pmf 활용 ----
n = 15
p = 0.2
x = 0:10

y1 = dbinom(x, n, p) ; y1
plot(x, y1, type = "h", lwd = 3, col = "blue4")

## 이항분포 - cdf 활용 ----
y2 = pbinom(x, n, p) ; y2
plot(x, y2, type = "h", lwd = 3, col = "tomato")
plot(x, y2, type = "s", lwd = 3, col = "tomato")

## 이항분포 - check qbinom value ----
x; y2
qbinom(y2[2], n, p) == x[2]

 

 

포아송분포

## 포아송 분포 - pmf 활용 ----
lam = 2.5
x = 0:10
y1 = dpois(x, lam)

plot(x, y1, type = "h", lwd = 3, col = "blue4")


## 포아송 분포 - cdf 활용 ----
y2 = ppois(x, lam)
plot(x, y2, type = "h", lwd = 3, col = "tomato")
plot(x, y2, type = "s", lwd = 3, col = "tomato")

## 포아송 분포 - 값 찾기 ----
qpois(0.3456, lam)

 

 

 

연속확률분포

 

정규분포

## 정규분포 - pdf 활용 ----
mu = 0
sig = 1
x = seq(-5, 5, length = 20)

y2 = dnorm(x, mu, sig)
plot(x, y2, type = "h", lwd = 3, col = "blue4")

## 정규분포 - cdf 활용 ----
y3 = pnorm(x, mu, sig)
plot(x, y3, type = "s", lwd = 3, col = "tomato")

## 정규분포 - 값 찾기 ----
qnorm(y3, mu, sig) < qnorm(0.7, mu, sig)

 

 

t-분포

## t-분포 - pdf 활용 ----
df1 = 5
x = seq(-5, 5, length = 20)

y1 = dt(x, df1)
plot(x, y1, type = "h", lwd = 3, col = "blue4")

## t-분포 - cdf 활용 ----
y2 = pt(x, df1)
plot(x, y3, type = 's', lwd = 3, col = "tomato")

## t=분포 - 값 찾기 ----
qt(0.2, df1)

 

 

카이제곱분포

## 카이제곱분포 - pdf 활용 ----
df2 = 7
x = seq(0,30, length = 20)

y1 = dchisq(x, df2)
plot(x, y1, type = "h", lwd = 3, col = "blue4")

## 카이제곱분포 - cdf 활용 ----
y2 = pchisq(x, df2)
plot(x, y2, type = "s", lwd = 3, col = "tomato")


## 카이제곱분포 - 값 찾기 ----
qchisq(0.65, df1) + qchisq(0.65, df2)

이산확률분포

 

이산균등분포

> n개의 불연속적인 값을 가지는 확률변수 X가 아래와 같은 pmf를 가질 때 이산균등분포를 따른다고 하고, 

> X~U(a,b) 혹은 X~unif(a,b)로 표기함.

 

p(x) = 1/n , x = a, a+1, .... ,b 

## 이산균등분포 (Discrete uniform distribution) ----
n = 10
p = 1/n
x = 1:n
p.x = rep(p, n)
plot(x, p.x, xlim = c(1,n), ylim = c(0,1))

 

 

 

베르누이 시행

> 결과가 오직 두 가지 결과만을 가지고 성공할 확률이 일정한 실험

 

이항분포 

> 이항실험에 대해서 n번 시행 중 꼭 x번의 성공할 확률

> 베르누이 시행을 n회 시행했을 때 나오는 총 성공 횟수를 확률변수 X라고 하면, x는 이항분포를 따르며,

> X~B(n,p) 혹은 X~bin(n,p)로 표기함. 

## 이항분포 (Binomial distribution) ----
n = 10
p = 1/5
x = 1:n
p.x = choose(n,x)*p^x*(1-p)^(n-x)  # nCx
plot(x, p.x,
     xlim = c(1,n),
     ylim = c(0,1),
     main = "Binomial Dist.",
     col = "red")

 

 

포아송분포

> 일정한 구간에서 특정 사건이 일어나는 건수에 대한 분포 

> 조건

1. 주어진 구간에서 사건의 평균 발생횟수는 구간의 시작점과 관계가 없고 구간의 길이에만 영향을 받음.

2. 랜덤 발생: 한 순간에 2회 이상의 사건이 발생할 확률은 거의 0에 가까움.

3. 독립적으로 발생: 한 구간에서 사건의 횟수는 겹치지 않는 다른 구간에서 발생하는 사건의 횟수에 영향을 받지 않음. 

> 예) 일주일 동안(구간) 어느 고속도로에서 발생하는 교통사고 건수(특정 사건이 일어나는 건수) 

 

## 포아송 분포 (Poisson distribution) ----
n = 100
mu = 15
x = 0:n 
p.x = (exp(1)^(-mu)*mu^x)/factorial(x)
plot(x, p.x, xlim = c(1,n), ylim = c(0,1),
     main = "Poisson dist.", col = "blue",
     pch = 20)

 

기하분포

1.

> 특정 사건이 발생할 확률이 p로 일정할 때 해당 사건이 발생할 때까지 시행한 횟수를 확률변수 X라고 하자.

> 이때 x번째에 사건이 발생할 확률은 

> p(x) = (1-p)^(x-1) * p     x = 0, 1, .....

 

2. 

> 특정 사건이 발생할 확률이 p로 일정할 때 해당 사건이 발생할 때까지 실패한 횟수를 확률변수 X라고 하자.

> 이때 x번 실패 후 사건이 발생할 확률은 

> p(x) = (1-p)^x*p        x = 0, 1, .........

 

## 기하분포 (Geometric distribution)
n = 100
p = 1/3
x = 0:n
p.x = (1-p)^(x-1)*p
plot(x, p.x, xlim = c(0,n), ylim = c(0,1),
     main = "Geometric Dist.", col = "grey", pch = 20)

 

 

 

연속확률분포

 

연속균등분포 

> 구간 (a,b)에 있는 값을 가지는 확률변수 X가 아래와 같은 pdf(probability density function)를 가질 때 연속 균등 분포를 따른다고 하고, X~U(a,b) 혹은 X~unif(a,b)로 표기함.

p(x) = 1/(b-a) # x는 a,b 구간에 속해있다.

 

+ 연속형 분포의 그래프 그리기 

이산형과 달리 연속형은 'continuous'한 직선 혹은 곡선으로 표현 

 - 이산형 분포 그리기에서는 정의역 값을 vector로 묶어 지정하는 식으로 구현 가능

 - 이산형과 달리 연속형의 변수 값은 '구간' 형태

 

정의역 x의 구간과 x가 포함된 함수/표현식(expression)을 설정해주면 직/곡선을 그려주는 함수 활용

 - curve(expr, from = Null, to = Null, ...)

 -- expr에 x가 포함된 함수의 표현식을 설정 

 -- from,to에 각각 구간의 시작점과 끝점을 설정

 -- 기타 plot, hist에서 쓰는 옵션 지정 가능 

 

# X ~ U (0, 10)

n = 10
curve(1/n, from = 0, to = n, col = 2, lwd = 3)

 

그런데 이런 식으로 하면은 안됨. 위에서 curve의 expr에서 x가 포함된 함수의 표현식을 설정해서 나타내라고 했는데 그렇게 되지 않음. 이렇게 실행하면 다음과 같은 에러가 나옴.

 

 

따라서 이런 식으로 코드를 짜야함. 

curve(x/x/n, from = 0, to = n, col = 2, lwd = 3)

 

# X ~ U(2.3, 7.6)
n = 100
a = 2.3 
b = 7.6

curve(x/x/(b-a), a, b, col = 4, lwd = 3)

 

 

정규분포

> 대표적인 연속확률분포로 평균을 중심으로 좌우대칭이며 bell-shape을 가진 분포

## 정규분포 (normal distribution) ----
mu = 0 
var = 1^2

expr = (1/sqrt(2*pi*var))*exp(-(x-mu)^2/(2*var))
curve((1/sqrt(2*pi*var))*exp(-(x-mu)^2/(2*var)), -50, 50, col = 4, lwd = 3)

 

 

t - 분포 (Student's t - distribution)

> 평균 0 중심으로 좌우대칭인 bell-shape이며, 자유도 v에 의해 결정됨.

> 자유도가 커질수록 정규분포에 가까워지는 특징을 가짐. 

## t-분포 (Student's t - distribution) ----
nu = 3
curve((gamma((nu+1)/2))/sqrt(nu*pi)*gamma(nu/2)*(1+x^2/nu)^(-(nu+1)/2), -10, 10, col = 4, lwd = 3)

 

카이제곱분포 (Chi-square distribution)

> k개의 서로 독립인 (표준)정규확률변수를 제곱하여 합하여 얻은 변수의 분포

> 분포곡선은 수직축의 오른쪽에 위치하며, 모양은 자유도가 작은 경우에는 비대칭이고, 자유도가 증가함에 따라 대칭 모양에 가까워짐. 

## 카이제곱분포 (Chi-square distribution) ----
curve(1/(2^(nu/2)*gamma(nu/2))*x^((mu/2)-1)*exp(-(x/2)), 0, 10, col = 4, lwd = 3)

데이터를 시각화 하기 전에 파일 불러오기

setwd("C:\\Users\\user\\OneDrive - 경북대학교\\통계학과\\1-2\\R프로그래밍 및 실험")

#1
dat1 = read.csv("w7_2 csv.csv") # 띄어쓰기를 .으로 구분함
#2
dat1 = readr::read_csv("w7_2 csv.csv") # 띄어쓰기 있는 곳은 ``으로 묶어서 표기

1번
2번

 

시각화를 통해 데이터 분포 확인

 

히스토그램

hist(dat1$나이)

 

 

기호에 따라서 히스토그램을 더 보기 좋게 만들 수 있음.

hist(dat1$나이, main = "예제데이터의 나이(1)",
     xlab = "age", ylab = "빈도") 
     
# x축의 이름: xlab
# y축의 이름: ylab

 

 

hist(dat1$나이, main = "예제데이터의 나이(2)",
     xlab = "age", ylab = "빈도", breaks = 10)
     
# break를 통해 그래프를 더 나누어줄 수 있음.

 

 

 

 

산점도

plot(x = dat1$나이, y = dat1$`성취도 점수`) # 기본적인 형태
plot(x = dat1$나이, y = dat1$`성취도 점수`,
     main = "나이에 대한 성취도", xlab = "나이",
     ylab = "성취도") # 알아보기 쉽게 만듦.

plot (formula = `성취도 점수`~`나이`, data = dat1,
      main = "나이에 대한 성취도", xlab = "나이",
      ylab = "성취도") # 2번째와 똑같은 그래프인데, 형태가 다름.

 

 

plot(formula = `우울 점수`~`나이`, data = dat1,
     main = "나이에 대한 우울 점수", xlab = "나이",
     ylab = "우울 점수",
     col = c("red", "blue")[factor(성별)], cex = 1.5,
     pch = c(20, 18)[factor(성별)])
     
# col 색 변경 / pch 점 모양 / cex 점 크기

 

직선 추가하기

# y = a+bx
abline(a = -20, b = 1,
       col = "dark green", lty = "dotted", lwd = 2.0) 

# y = h
abline(h = 40, 
       col = "dark red", lty = "dotted", lwd = 2.0) 

# x = v
abline(v = 50,
       col = "dark blue", lty = "dotted", lwd = 2.0)

# 평활 직선
lines(stats::lowess(x = dat1$나이, y = dat1$`우울 점수`),
      col = "dark red")
      
h = horizontal line
v = vertical line

 

참고

 

지수평활법

가장 최근 데이터 가장 큰 가중치가 주어지고 시간이 지남에 따라(과거로 갈수록) 가중치가 기하학적으로 감소되는 가중치 이동 평균 예측 기법의 하나. 데이터들이 시간의 지수 함수에 따라 가중치를 가지므로 지수 평활법이라고 한다. 이 기법은 가장 최근의 예측 데이터와 주요 판매 데이터 간의 차이에 적합한 평활 상수를 사용함으로써 과거의 데이터를 유지할 필요성을 갖지 않는다. 이러한 접근 방법은 어떤 추세를 갖지 않거나 계절적인 패턴을 나타내는 데이터 또는 추세와 계절성을 모두 갖는 데이터에 사용될 수 있다.

[네이버 지식백과] 지수 평활법 [exponential smoothing, 指數平滑法] (IT용어사전, 한국정보통신기술협회)

1. 데이터 읽어오기

# as 명령어로 pd 별칭 지정하기
import pandas as pd

# train.csv, test.csv, sample_submission.csv 파일을 읽어옵니다.
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')
submission = pd.read_csv('sample_submission.csv')

 

2. 데이터 확인하기

# 데이터의 개수, 열 이름, 결측값의 수, 데이터 타입 등을 확인할 수 있습니다. 
train.info()

 

3. Column 열 확인

train.columns()

 

4. 데이터 기술 통계량 확인

train.describe()

 

5. 무작위 샘플데이터 확인하기 

train.sample(10)

 

6. 원하는 열의 평균값 얻기 

mean_target = train['열 이름'].mean()
mean_target

 

7. 데이터 프레임 csv 파일로 저장 후 확인

# to_csv를 통해 폴더에 저장
submission.to_csv('submission.csv', index = False)

'프로그래밍 > 프로젝트' 카테고리의 다른 글

ARIMA 모델  (0) 2024.05.21
데이콘 - 고객 대출 등급 분류 프로젝트  (1) 2024.02.09
고객 유지를 위한 필요한 행동 예측  (1) 2024.01.14
원본 데이터 보존  (0) 2023.11.28
머신러닝 기초 및 순서  (0) 2023.11.21

+ Recent posts