인사말

안녕하세요~!

오늘이 역대급으로 추운 날이래요! 다들 감기 조심하세요!

운전 조심하시구요!

오늘도 파이팅입니다~!

 

오늘의 일정
오전(09:00 ~ 13:00) 09:00~10:00 코드카타 및 팀 오전 회의
10:00~10:30 개인 과제 발제
11:30~13:00 베이직반 수업
오후(14:00 ~ 18:00) 14:00~16:10 Git 특강
16:10~17:00 Git(브랜치, merge) 다시 해보기
17:00~18:00 TIL 작성
저녁(19:30 ~ 21:00) 19:00~21:00 프로그래머스 4문제

 


요약

  1. 코드 카타 3문제(09:00~10:00)
    1. 문자열 안에 문자열
    2. 특정 문자 제거하기
    3. 아이스 아메리카노
  2. 개인 과제 발제(10:00~10:30)
  3. 베이지반 수업(11:30~13:00)
    1. 조건문 쓸 때 주의할 점
    2. 조건 표현식 (Conditional Exprossion) == 삼항 연산자(Ternary Operator)
    3. enumerate() 함수
    4. pass
  4. Git 특강 (14:00~16:10)
    1. 명령어 복습
    2. 브랜치
    3. Merge
  5. 프로그래머스 4문제 풀이(19:00~21:00)
    1. 개미 군단
    2. 가위 바위 보
    3. 숨어있는 숫자의 덧셈(1)
    4. 대문자와 소문자

오전(09:00 ~ 13:00)

1. 코트 카타

1.1. 문자열 안에 문자열

def solution(str1, str2):
    if str2 in str1:
        answer = 1
    else:
        answer = 2
    return answer

 

🤔 문제 풀이

  • if str2 in str1: answer = 1
    • 만약에 str1 안에 str2가 있다면 1로 출력해 주세요
  • else: answer = 2
    • 그게 아니라면 2를 출력할게요

 

1.2. 특정 문자 제거하기

def solution(my_string, letter):
    answer = ''
    
    for i in my_string:
        answer = my_string.replace(letter, '') 
        
    return answer

 

🤔 문제 풀이방법

  • my_string에서 letter를 지울 거예요
  • for i in my_string: answer = my_string.replace(letter, '')
    • my_string을 순차적으로 순회할게요
    • .replace() 함수를 써서 letter를 공백으로 바꿔줬어요

다른 사람 풀이 

 

def solution(my_string, letter):
    str_l = list(my_string)
    
    while letter in str_l :
        str_l.remove(letter)
        
    answer = ''.join(str_l)
    
    return answer

 

🤔 문제 풀이방법

  • my_string을 list로 변환하여 str_l로 저장
  • str_l에 letter가 있는 동안 반복해서 실행
    • remover() 함수를 사용하여 str_l에서 letter을 지워준다.
  • join() 함수를 사용하여 srt_l을 다 붙여주기!

 

💬

join이라는 함수가 보이더라구요 신기했어요

저게 어떤 식으로 출력되는 건지 궁금해서 VSCode로 돌려봤어요

def solution(my_string, letter):
    str_l = list(my_string)
    while letter in str_l :
        str_l.remove(letter)

    answer = ''.join(str_l)
    return answer

a = solution("abcdef","f")
print(a)

 

와,, 진짜 신기해요 ㅋㅋㅋㅋㅋㅋ

표현법이 다양한 세계라 그런지 신기하네요

하나 더 배워갔어요 ㅎㅎ

 

1.3. 아이스 아메리카노

def solution(money):
    answer = []
    coffee = money % 5500
    
    if coffee == 0:
        answer = [money // 5500, 0]
    else:
        answer = [money // 5500, money % 5500]

    return answer

 

🤔 문제 풀이방법

  • answer = []
    • 최대로 마실 수 있는 커피 잔 수와, 거스름돈을 담을 리스트를 만들어줄게요
  • coffee = money % 5500
    • 커피의 잔 수는 money%5500입니다
  • if coffee == 0: answer = [money // 5500, 0]
    • 만약에 coffee가 나머지가 없는 경우, money//5500을 해줄게요. 그리고 거스름돈은 0원입니다
  • else: answer = [money // 5500, money % 5500]
    • 다른 경우는 coffee가 나머지가 있는 경우겠죠
    • 커피의 잔은 몫으로 구해주고, 잔 돈은 나머지로 구해주면 끝입니다

다른 사람 풀이 

def solution(money) :
    return [money//5500, money%5500]

 

이렇게 간단하게 표현할 수 있다는 거,, 배워갑니다 핳ㅎ

 

(10:00~10:30)

2. 개인 과제 발제

개인과제가 머신러닝 관련해서 발제되었어요 😞

 

머신러닝의 지도학습과 비지도학습에 대한 과제를 받았어요

12월 31일까지 마감이네요

잡생각 가지지 말고 그냥 해보려구요

 

(11:30~12:30)

3. 베이직반 수업

3.1. 조건문 쓸 때 주의할 점

  • 문자열은 ""일 때 false값을 출력함 (공백은 비어있다고 판별하지 않음)
  • 정수형 0이 false값
  • 빈 리스트일 때 false
  • 리스트, 딕셔너리, 튜플 == 컨테이너 타입

 

3.2. 조건 표현식 (Conditional Exprossion) == 삼항 연산자(Ternary Operator)

  • 개념 : if문을 줄 바꿈을 쓰지 않고 한 줄로 쓰는 것
age = 22
display_str = ""

if age >= 19:
	display_str = "어른이군요"
else:
	display_str = "어린이군요"
display_str = "어른이군요" if age >= 19 else "어린이군요"
print(display_str)

 

 

 

3.3. enumerate() 함수

for number, name in enumerate(name_list):
	print(f"{number}번 {name}님")

 

 

3.4. pass

  • 개념 : 추후, 코드를 다시 쓸 때를 표시함
  • 특징
    • 오류 뜨지 않도록 하려고 씀
    • 구성 맞춰놓는 공기 같은 존재

 

if문을 아직 완성시키지 않은 상태잖아요

그럼 당연히!! 오류가 나죠

 

하지만, pass를 적어준다면 오류가 발생하지 않습니다

나중에 다시 찾아와서 조건문을 완성시켜 주면 되겠죠? 🤭


오후(14:00 ~ 18:00)

베이직반 수업이 끝나니까 점심시간이 되었더라구요!

다들 식사 맛있게 하셨나용?

오후에는 Git 특강이 있어서 들은 후에 다시 직접 해보면서 시간을 보냈어요!

 

(14:00~16:10)

4. Git 특강

4.1. 명령어 복습

local 명령어 설명 remote 명령어 설명
git init 현재 폴더를 깃으로 관리하겠다 git remote add origin {url} 원격 저장소에 repo 추가하기
git status 깃 상태 확인 git push {origin master/main} git hub에 넣기
git add 깃을 SA에 추가
(staging area)
git clone {repo_url} repo를 local에 연결하기
git commit -m "" 커맨드 메시지 남기기 git pull origin master/main repo에서 local로 파일 받아오기
git log 깃 전적 검색    
명령어 설명
.gitignore 깃 허브에 올릴 시, 표시하지 않고 싶을 때 씀
(폴더, 파일 모두 가능)

 

4.2. 브랜치

명령어 설명
git switch -c {branch_name} 브랜치 생성 또는 이동
git switch {branch_name} 해당 브랜치로 이동

 

4.3. Merge

명령어 설명
git merge {branch_name} 브랜치를 합치는 명령어

 

 

강의가 끝난 후 직접 git hub에서 해보았어요

 

너~무 어렵고 너~무 재밌어요

물론 튜터님과 함께 해서 했지만요,, ㅋㅋㅋㅋㅋㅋㅋㅋ

그래도!

"~~ 하세요!"라고 하시면 제가 명령어를 적긴 적었어요!!

 

저번주 주말에 git 명령어 복습을 해보길 잘한 거 같네요 ㅎㅎ


저녁(19:00 ~ 21:00)

5. 프로그래머스 4문제

5.1. 개미 군단

def solution(hp):
    general_ant_count = hp//5
    soldier_ant_count = (hp - (5*general_ant_count))//3
    worker_ant_count = (hp - (5*general_ant_count) - (3*soldier_ant_count))//1
    
    answer = general_ant_count + soldier_ant_count + worker_ant_count
    
    return answer

 

🤔 문제 풀이

  • hp가 주어지고, 최소한의 개미 수를 통해서 사냥을 갈 겁니다!
  • 장군개미는 5의 공격력, 병정개미는 3의 공격력, 일개미는 1의 공격력이에요

🧐 코드 풀이

  • general_ant_count = hp//5
    • 먼저 장군개미만 출격하는 경우를 몫으로 구해줬어요
  • soldier_ant_count = (hp - (5*general_ant_count))//3
    • soldier_ant_count =
      • 두 번째로는 병정개미만 출격하는 경우는
    • (hp - (5*general_ant_count))
      • hp에서 (장군개미가 출격한 몫에 곱하기 5의 공격력을 해준 값에 뺀 후의 값에
    • //3
      • 병정개미의 공격력을 몫으로 나눠줬어요. 그럼 병정개미의 수가 나오겠죠!?
  • worker_ant_count = (hp - (5*general_ant_count) - (3*soldier_ant_count))//1
    • 병정개미의 수를 구할 때와 비슷한 구조로 흘러갑니다!
    • 대신 이번에는 hp에 장군개미 수와 병정개미 수를 빼주어야겠죠!
  • answer = general_ant_count + soldier_ant_count + worker_ant_count
    • 그 뒤 총 출격하는 개미의 수를 더해주면 문제는 풀립니다!

 

5.2. 세균 증식

def solution(n, t):
    
    return n*(2**t)
어떤 세균은 1시간에 두 배로 증식한다고 합니다.

 

🤔 문제 풀이

  • 처음 주어진 세균 수가 n이죠 여기에 시간(t)이 지날수록 2배로 늘어난다 했으니까 제곱근!으로 해준 뒤 처음 세균 수에 곱해줍니다
  • 그러면 문제가 해결된답니다 🥳

 

5.3. 가위 바위 보

def solution(rsp):
    answer = ''
    
    for i in rsp:
        if i == '2':
            answer += '0'
        elif i == '0':
            answer += '5'
        else:
            answer += '2'
    return answer
가위 == 2
바위 == 0
보 == 5

 

🤔 문제 풀이

  • 문제를 보자마자 for문으로 돌려줬어요
  • 문자열로 나타내라 했으니까 for문 안에는 모두 ''을 달아줄게요
  • for i in rsp:
            if i == '2':
                answer += '0'
    • rsp 속 문자열을 하나하나 i에 받았어요
    • 만약 i가 '2'라면 '가위'죠?
    • answer은 '보'인 '0'이 나오면 이기겠죠! 그걸 answer에 바로 넣어줄게요(+=)
  • elif i == '0':
                answer += '5'
    • 다음으로 i가 '바위'인 '0'이라면
    • answer은 '보'인 '5'가 나오게끔 설정하고 answer에 바로 넣어줄게요(+=)
  • else:
                answer += '2'
    • 남은 경우는 i가 '보'인 경우밖에 없어요
    • 그렇기에 answer에는 '가위'인 '2'만 추가해 주면 문제 해결!

 

5.4. 숨어있는 숫자의 덧셈(1)

def solution(my_string):
    answer = 0
    number = ['0','1','2','3','4','5','6','7','8','9']
    
    for i in range(len(my_string)):
        if my_string[i] in number:
            answer +=int(my_string[i])
            
    return answer

 

🤔 문제 풀이

  • number = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
    • 주어지는 my_string에서 숫자만 뽑아내기 위해서 숫자 리스트를 만들어주었어요
  • for i in range(len(my_string)):
            if my_string[i] in number:
                answer +=int(my_string[i])
    • for문으로 range() 함수를 돌려줄 거예요. 얼마큼요? my_string의 len(길이) 만큼요!
      • range() 함수는 변숫값만큼 범위를 주는 함수죠!
    • 만약 my_string[i] 값 중에서 number 리스트에 있는 숫자라면
    • answer은 int(my_string[i]) 한 걸 바로 더하면서 출력해 줄게요(+=)
    • 그러면 문제 해결! 🥰

마무리

 

TIL을 꾸준히 쓰고 열심히 했더니 우수자로 뽑혔어요!

너무 뿌듯하고 자랑스러웠어요

 

오늘 강의들도 다 너무 재미있었고, 머리에 새로운 지식들이 들어와서 그런지 기분 좋은 하루였어요 😋

게다가 프로그래머스도 문제가 잘 풀려가지고 빠른 시간에 해결했답니다! 😋 

 

이제 개인 과제인 머신러닝만 잘하면 될 거 같아요!

파이팅!!

 

모두들 오늘 하루도 수고 많으셨습니다

감기 조심하시고, 푹 쉬세요! 🥳 

인사말

안녕하세요~!

비염과 함께 화려한 콧물 등장입니다 🤣

아침부터 물 같은 콧물 때문에 힘드네요 키키키

 

화요일이에요!

저희, 오늘도 파이팅 해봅시다 🔥💘

 

오늘의 일정
오전(09:00 ~ 13:00) 09:00 ~ 10:00 코드 카타 3문제, 팀 오전 회의
10:00 ~ 13:00 백준 (오븐 시계)
오후(14:00 ~ 18:00) 13:30 ~ 15:30 외출
15:30 ~ 18:00 백준 (주사위 세 개)
저녁(19:00 ~ 21:00) 19:00 ~ 21:00 머신러닝 특강_2

요약

  1. 코드 카타
    1. 문자열 뒤집기
    2. 편지
    3. 점의 위치 구하기
  2. 백준 (조건문)
    1. 오븐 시계
    2. 주사위 세 개 
  3. 머신러닝 특강_2
    1. 다항식
    2. 다항 선형회귀 사례
    3. 이중 분류

오전(09:00 ~ 13:00)

1. 코드 카타

1.1. 문자열 뒤집기

def solution(my_string):
    return my_string[::-1]

 

🤔 문제 풀이

  • my_string[::-1]
    • 문자열의 슬라이싱이라고 하죠? 그걸 음수형으로 하면 역순으로 간다고 해요 
    • 문자열[시작 번호:끝 번호] <- 문자열 슬라이싱

 

1.2. 편지

def solution(message):
    return len(message) *2

 

🤔 문제 풀이

<제한 사항>
공백도 하나의 문자로 취급합니다.
편지지의 여백은 생각하지 않습니다.
message는 영문 알파벳 대소문자, "!", "~" 또는 공백으로만 이루어져 있습니다.
할머니가 보시기 편하도록 글자 한 자 한 자를 가로 2cm 크기로 적는다

 

문제를 풀기 위해 문제를 자세히 봐야 해요!

저는 이게 안 돼서 많이 혼났지만요 ㅋㅋㅋㅋ,,

문제를 보니까 힌트가 나왔죠?

message는 영문 알파벳 대소문자, "!", "~" 또는 공백으로만 이루어져 있습니다.
할머니가 보시기 편하도록 글자 한 자 한 자를 가로 2cm 크기로 적는다
여백은 생각하지 않는다

 

이걸 써먹어 봅시다.

 

  • return len(message) *2
    • 글자 한 자 한 자가 2칸을 차지한다고 생각했어요
    • message의 길이를 구하고, 각 글자마다 2칸씩 차지를 할 거니까 *2를 해주어서 길이를 쟀어요

짜잔~ 정답입니다~!

 

1.3. 점의 위치 구하기

def solution(dot):
    answer = 0
    
    if dot[0] > 0 and dot[1] > 0:
        answer = 1
    elif dot[0] < 0 and dot[1] > 0:
        answer = 2
    elif dot[0] < 0 and dot[1] < 0:
        answer = 3
    else:
        answer = 4
    return answer

 

이거 백준으로도 풀었던 문제예요!

익숙하다 했는데, 프로그래머스에도 나오는 문제였네요 🤭

 

문제 보자마자 "어!! 이거 백준에서 풀었던 건데!!"라는 반응이 나와서

스스로에게 뿌듯했달까요 🤭

이번에도 잘 풀어주었답니다 히히

 

(10 : 00 ~ 13 : 00)

2. 백준

2.1. 오븐 시계

h, m =map(int,input().split())
cooktime = int(input())
h += cooktime //60
m += cooktime %60

if m >= 60:
    h += 1
    m -= 60

if h >= 24:
    h -= 24

print(h,m)

 

4타 만에 푼 문제였어요,, 하하하하ㅏㅎ 🤪

문제 해석하는 데에만 1시간 쓴 거 같아요

코드도 어떻게 짜야할지 모르겠구요,, 하

그래도 해낸 게 어딥니까!!

답안지 찾아서 그냥 풀어버리고 싶었는데, 그러면 공부를 한 보람이 없잖아요

그래서 튜터님께 가서 힌트 받고 그랬어요 스스로 풀고 싶어서요 😣

 

🤔 문제 풀이

  • h, m =map(int,input().split())
    • 백준에서 입력해 주는 값을 int로 변환하고, 공백을 기준으로 매칭시켜 줄 겁니다.
  • cooktime = int(input())
    • 조리 시간을 int형으로 받아줄게요
  • h += cooktime //60
    • 시간은 조리 시간에다가 60을 몫을 구하고, 몫이 있을 시, 더해줄게요
  • m += cooktime %60
    • 분은 조리 시간에다가 60을 나눈 나머지를 더해줄게요
    • 예) 61%60은 1이 나머지니까 m에 더해줄게요
  • if m >= 60:
        h += 1
        m -= 60
    • 분이 60이거나 60을 넘어서면 h에 1시간을 더해줄게요
    • 그러고 m에는 60을 빼준 값을 반환할게요
  • if h >= 24:
        h -= 24
    • h가 24보다 크거나 같을 때는 h에 -24를 해줄게요
    • 0시가 필요하니까요

오후(14:00 ~ 18:00)

2.2 주사위 세 개

dice1, dice2, dice3 = map(int,input().split())

if dice1==dice2==dice3:
    print(10000 +dice1 *1000)
elif dice1==dice2 or dice1 == dice3 or dice2 == dice3:
    same_number = dice1 if dice1 == dice2 or dice1 == dice3 else dice2
    prize = 1000 + same_number * 100
    print(prize)

else:
    print(max(dice1, dice2, dice3)*100)
같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다.
같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다.
모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×100원의 상금을 받게 된다.

 

🤔 문제 풀이

  • dice1, dice2, dice3 = map(int,input().split())
    • 주사위 세 개를 받아낼 겁니다
  • if dice1==dice2==dice3:
        print(10000 +dice1 *1000)
    • 주사위 세 개가 모두 같은 숫자를 띄울 때를 시작으로 조건문을 시작했습니다
  • elif dice1==dice2 or dice1 == dice3 or dice2 == dice3:
        same_number = dice1 if dice1 == dice2 or dice1 == dice3 else dice2
        prize = 1000 + same_number * 100
        print(prize)
    • 주사위 두 개가 같을 때의 조건문입니다
    • dice1&dice2 , dice1&dice3 , dice2&dice3이 주사위 두 개가 같을 때죠
    • same_number = dice1 if dice1 == dice2 or dice1 == dice3
      • dice1이 다른 dice2,3과 같을 때 dice1을 주어로 내세우겠다는 거예요
    • else dice2
      • 그 외에는 dice2를 주어로 하겠다는 거죠
  • else:
        print(max(dice1, dice2, dice3)*100)
    • 나머지는 주사위 세 개 모두 다를 때 max()함수를 써서 최댓값으로 곱해주었습니다.
#1트 
dice1, dice2, dice3 = map(int,input().split())
dice = [dice1, dice2, dice3]

prize_same3 = 10000 +dice *1000     # 뭐가 같은 숫자인지 어케 판별하냐 이거
prize_same2 = 1000 +dice *100
nothing_same_prize = max(dice)*100

if dice1==dice2==dice3:     # 주사위 모두 같은 숫자일 때
    print(prize_same3)
elif :
     print(prize_same2)

 

제 첫 번째 전적이에요

그래도 정답 코드와 처음부터 유사하게 다가온 거 같아요! (나름,,)

 

#2트 (TypeError)
dice1, dice2, dice3 = map(int,input().split())
dice = [dice1, dice2, dice3]

prize_same3 = 10000 +dice *1000
prize_same2 = 1000 +dice *100
nothing_same_prize = max(dice)*100

if dice1==dice2==dice3:
    print(prize_same3)
elif dice1==dice2 or dice1 == dice3 or dice2 == dice3:
    print(prize_same2)
else:
    print(nothing_same_prize)
#3트 "틀렸습니다"
dice1, dice2, dice3 = map(int,input().split())

if dice1==dice2==dice3:
    print(10000 +dice1 *1000)
elif dice1==dice2 or dice1 == dice3 or dice2 == dice3: # 여기서 같은 숫자 어케 판별함?
    print(1000 +dice1 *100)
else:
    print(max(dice1, dice2, dice3)*100)
#4트 "맞췄습니다"
dice1, dice2, dice3 = map(int,input().split())

if dice1==dice2==dice3:
    print(10000 +dice1 *1000)
    
elif dice1==dice2 or dice1 == dice3 or dice2 == dice3:
    same_number = dice1 if dice1 == dice2 or dice1 == dice3 else dice2 # 이렇게군
    prize = 1000 + same_number * 100
    print(prize)

else:
    print(max(dice1, dice2, dice3)*100)

 

다른 동기님 덕분에 문제를 해결할 수 있었습니다 🥰

감사합니다 히히

 

 

이렇게 해서 백준(입출력과 사칙연산, 조건문)의 두 가지 제목이 끝났어요!

내일부터는 백준_for문 문제를 풀어볼 겁니다!


저녁(19:00 ~ 21:00)

3. 머신러닝 특강_2

3.1. 다항식

 

3.2. 다항 선형회귀 사례

 

 

3.3 이중 분류

 

🔥 추가 정보

  • 0은 False을 의미하는 값입니다
  • 1은 True를 의미하는 값입니다
  • 기준은 0.5를 기준으로 합니다

마무리

오늘은 두 문제만 풀었네요

음,,

그래도 한 문제 한 문제 접근방식을 스스로 깨달으면서 꾸준히 한다는 게, 그게 정말 어려운 거라 생각해요

 

솔직히 인터넷에 문제 이름 검색하면 답을 바로 알 수 있잖아요

오늘 진짜,,, 그러고 싶었거든요

그래도 참고 스스로 끝까지 머리 굴리며 해봤어요 ㅎㅎㅎ

아구~ 잘했어요 민경이~

 

아! 그리고

알고리즘 문제를 풀다보면서 느낀 거지만

식별자 명칭을 명확히 표시해야겠더라구요

 

저는 문제를 장시간 오래 봐서 뭐가 뭔지 알잖아요?

 

근데

힌트를 얻으러 갈 때나, 다른 분께 의견을 물어보면서 제 코드를 보여드릴 때

가독성이 떨어진다고 해야 할까요? 바로 식별하기 어렵겠더라구요

 

그래서

식별자 명칭에 신경 쓰면서 코드를 짜려고 해요

좋은 습관을 하나 찾은 걸지두요 🤭 

 

어쨌든

오늘도 모두들, 수고 많으셨어요!

좋은 밤 보내세요 🤭 

인사말

안녕하세요~!

금주의 시작을 알리는 월요일입니다!

다들 파이팅 해보자구요! 😚

 

저는 월요일을 좋아해요

많은 사람들이 움직이고 활동하고 일하기 시작하는 날이잖아요!

그리고, 주말 동안 보지 못 했던 사람들도 만나는 날이라서 좋아해요 🥰

오늘은 특강과 수업이 있기 때문에 개인 공부를 할 시간이 부족해서 오버해서라도 공부했답니다

 

바쁘다 바빠요~!

 

오늘의 일정
오전(09:00 ~ 13:00) 09:00 ~ 10:00 코드 카타 3문제 및 팀 오전 회의
10:00 ~ 13:00 프로그래머스 8일차 문제 풀기(4문제)
오후(14:00 ~ 18:00) 14:00 ~ 16:00 통계학 특강3
16:00 ~ 17:00 프로그래머스(순서쌍의 개수)
17:00 ~ 18:00 베이직반 수업 (AI 논문 요약 후기 및 설명)
저녁(19:30 ~ 21:00) 19:00 ~ 21:00 머신러닝 특강

요약

  1. 코드 카타
    1. 배열 뒤집기
    2. 중복된 숫자 개수
    3. 배열 자르기
  2. 프로그래머스 8일 차 문제(배열, 구현, 수학)
    1. 배열 자르기
    2. 외계행성의 나이
    3. 진료순서 정하기
    4. 순서쌍의 개수
  3. 통계학 특강
  4. 베이직반 수업
  5. 머신러닝 특강

오전(09:00 ~ 13:00)

1. 코드 카타

1.1 배열 뒤집기

def solution(num_list):
    return list(reversed(num_list))
reversed() 내림차순으로 정렬 리스트화를 해주어야 하는 특징이 있음

 

🤔 함수 설명

오름차순으로 정렬하는 함수는 sort()에요!

내림차순은 reversed()랍니다! 타입이 변환되어 출력이 돼요 그래서 형변환이 필요한 아이랍니다!

 

 

1.2 중복된 숫자 개수

def solution(array, n):
    answer = 0
    count_n = array.count(n)
    return count_n

 

🤔 문제 풀이

.count() 범위 내에서 ()의 개수를 세는 함수

 

저는 문제를 보자마자 .count() 함수가 생각이 나더라구요

그래서 .count()를 어떻게 활용하는지 찾아보고 시도해 보았습니다

 

1트만에 맞춰서 조금 당황했어요,, 👀

열심히 공부를 한 보람을 자주 느끼는 요즘이네요 🤭

 

ps. answer=0은 사용되지 않으니 삭제해도 되는 코드였대요!

 

 

1.3 배열 자르기

1트

 

🤔 문제 풀이

식별자[시작 위치 : 끝 위치] 식별자의 시작 위치에서 끝 위치 만큼 자름

 

"num1번째 인덱스부터 num2번째 인덱스까지 자른"이라는 문장을 보자마자

슬라이싱을 해야겠다고 떠올랐어요

 

근데, 틀렸죠? 🤣

실행 결과를 보니까 num2 그대로 적으니까 포함이 안 되더라구요

얘도 range()와 똑같은 원리인 거 같아서

def solution(numbers, num1, num2):
    return numbers[num1:num2+1]

 

num2에서 +1을 해주었더니 풀렸습니다!

 

한 번 틀리고 바로 다음 차례에 해결해 버리다니 ㅠㅠㅠ

감격스러워서 감동했어요 (ू˃̣̣̣̣̣̣︿˂̣̣̣̣̣̣ ू) 

 

 

이렇게 코드 카타를 해결하고!

저는 프로그래머스 8일 차 문제를 풀었습니다~! ㅎㅎ

 

(10 : 00 ~ )

2. 프로그래머스 8일 차 문제(배열, 구현, 수학)

2.1. 배열 자르기

코드 카타에 있던 문제라서 설명 패스합니다!

 

2.2. 외계행성의 나이

for문 특징 in 뒤에는 리스트, 튜플 등으로 문자열로만 올 수 있어요!
정수형으로는 반복이 불가능하기 때문에 형변환(str)을 해주어야 해요!
def solution(age):
	alphabet = ["a","b","c","d","e","f","g","h","i","j"]
    answer = ''
    
    for i in age:
    	answer += alphabet[int(i)]
    return answer

 

#1 문제 어떻게 풀 건지 구상하기
def solution(age):
alphabet = [a,b,c,d,e,f,g,h,i,j]
    answer = ''
    
    for i in alphabet:
    	answer += age
    return answer

 

일단 알파벳이라는 리스트를 만들어주었어요

알파벳 하나하나가 숫자를 가지게 될 거니까요!

 

#1트
def solution(age):
	alphabet = [a,b,c,d,e,f,g,h,i,j]
    answer = ''
    
    for i in alphabet:
    age =map(str, i.split())
    	answer += age
    return answer

 

단순히 생각해서 map() 함수로 해보려 했는데 오류가 뜨더라구요

NameError: name 'a' is not defined

 

대체 뭐가 문제인지 몰랐어요

제가,, 여기서,, 저의 허점을 깨달았습니다,, 예,,

리스트 안에 문자열로 넣어야 하는데,

alphabet = [a,b,c,d,e,f,g,h,i,j]

 

이렇게 입력했잖아요,, 🙄

 

#2트
def solution(age):
	alphabet = ["a","b","c","d","e","f","g","h","i","j"]
    answer = ''
    
    for i in age:
    	answer += alphabet[i]
    return answer

 

그래서 리스트에 있는 것들은 다 문자형으로 바꿔주고

for문을 수정하였어요,,

근데 또!! 오류가 뜨네요?

TypeError: 'int' object is not iterable

 

int형이라서 안 된대요,, 하하하

age가 생각해 보니까 나이로 돼 있어서 두 자릿수잖아요

alphabet 리스트에는 a~j까지만 있어서 택도 안 돼요,,

 

#3트
def solution(age):
	alphabet = ["a","b","c","d","e","f","g","h","i","j"]
    answer = ''
    
    for i in str(age):
    	answer += alphabet[i]
    return answer

 

그래서 age를 형변환 해주었습니다 그랬더니 alphabet[i] 부분이 오류가 나서

 

#4트
def solution(age):
	alphabet = ["a","b","c","d","e","f","g","h","i","j"]
    answer = ''
    
    for i in age:
    	answer += alphabet[int(i)]
    return answer

 

alphabet[int(i)]로 수정해 주었어요

 

 

와,, 진짜 열받더라구요,, 와,,

형변환을 몇 번이나 한 거야,, 😫

어쨌든 풀어서 다행입니다,,

주말에 조건문 문제만 푼다고, for문은 못 풀었더니

아니나 다를까, 헤매고 있네요 하하하핳

 

다른 사람들 풀이 

 

처음 보는 함수가 나왔어요

translate()이랑 .maketrans()를 처음 보았어요

공부해야 할 게 정말 많네요,, 쩝

 

 

2.3. 진료순서 정하기

def solution(emergency):
    answer1 = []
    answer2 = []
    answer2 = sorted(emergency, reverse=True)
    
    for i in emergency:
        answer1.append((answer2.index(i)+1))

    return answer1

🤔 문제 풀이

  • answer1 = []
    • emergency의 값을 넣어줄 비어있는 리스트입니다
  • answer2 = sorted(emergency, reverse=True) :
    • answer1에 주어진 emergency 숫자 리스트를 정렬해 주고, 내림차순으로 정리한 게 answer2가 될 거예요
  • for i in emergency:
    • 이제 emergency에 있는 숫자들을 순차적으로 순회할 겁니다
  • answer1.append((answer2.index(i)))
    • for문을 어떻게 돌릴 거냐면요. answer2.index(i)를 answer1에 추가해 줄 겁니다
    • answer2.index(i)는 emergency에 있는 숫자의 위치를 answer2에서 찾는 코드예요
      • 그래야 가장 큰 값 순서대로 번호를 매길 수 있거든요
    • 그 찾은 위치를 answer1(리스트)에 추가해줄 겁니다
  • return answer1
    • 결괏값을 answer1에 넣었기 때문에 answer1을 출력해 주면 문제 해결입니다.
list.index(element, start, end) element: 찾고자 하는 값
start (옵션): 검색을 시작할 인덱스 (기본값은 0)
end (옵션): 검색을 끝낼 인덱스 (기본값은 리스트 끝)

 

 

진~~~~짜 힘들었어요

와,, 접근 자체를 못하겠더라구요,,

그래도 해내서 보람찼습니다,,

 

#1 어떻게 풀지 구상하기
def solution(emergency):
    answer = []

    for i in emergency:

    answer +=
    return answer

 

처음에는 이렇게 풀어내고 싶었어요 

근데 안 되겠더라구요

도저히 완성해 낼 자신이 없었어요,,

 

그래서 튜터님께 가서 힌트를 받았지용

rank()라는 pandas에 있는 함수예요

 

 

근데 안 되더라구요 🙄

그래서 그냥 파이썬 함수로 해결해 보려 노력했어요,,

 

#1트
def solution(emergency):
	answer1 = []
	answer2 = []

	answer2 = sorted(emergency, reverse=True)

	for i in emergency:
		answer1.append((answer2.index(i)))
        return answer1

 

해당하는 리스트 안에서 찾고자 하는 값이

리스트에 몇 번째 위치에 존재하는지 찾는 함수예요

되게 많이 쓰이는 함수로 보이네요 🤔

 

 

어쨌든, 결괏값을 불러보았는데 0부터 출력이 되더라구요

 

#2트
def solution(emergency):
	answer1 = []
	answer2 = []

	answer2 = sorted(emergency, reverse=True)

	for i in emergency:
		answer1.append((answer2.index(i)+1))
        return answer1

 

그래서 

answer1.append((answer2.index(i)+1))

index(i) 값에 +1을 해줘서 마무리하였습니다 :)

 

 

2.4. 순서쌍의 개수

def solution(n):
    answer = 0

    for i in range(1,n+1):
        if n % i ==0:
            answer +=1
    return answer

 

하,, 저 이런 유형에 약한 거 같아요

매번 공배수, 공약수, 약수, 배수 이런 거 볼 때마다 못 해요 🙄

이번 문제도 약수 문제였죠?

이번에도 접근하지 못해서 튜터님께 힌트를 얻었어요,,

 

🤔 문제 풀이

  • for i in range(1, n+1):
    • 1부터 n+1 한 범위까지 for문 돌려줄게요
    • range()에서 끝 숫자는 포함하지 않으니까 +1을 해줬어요
  • if n % i ==0:
    • if문입니다 주어진 자연수(n)를 1~n까지에 있는 값들로 나눴을 때 나머지가 0이 된다면 그건 n의 약수겠죠
  • answer +=1
    • 앞전에 만들어주었던 answer에 if 조건문에 해당되는 애들을 +1 한 값을 얻어낼 겁니다
  •  return answer
    • return 한 값이 곧, 이 문제의 답이 되는 것이죠

 

한 것도 없는데 오전, 점심시간 다 지나갔네요 ㅠㅠㅠ

하아ㅏ아ㅏ아아아아아아 속상해요 ㅠㅠㅠㅠㅠ


오후(14:00 ~ 18:00)

3. 통계학 특강

14시부터 16시까지는 통계학 특강을 들었어요

 

와,, 머신러닝이 데이터 처리 할 때 이 과정을 거친다는 거죠?

와,, 데이터가 많으면 많을수록 좋다는 게 이거 때문인가 봐요

그래야 걸러야 할 거 거르고 남는 값들이 많아질 테니까요

 

전체적으로 데이터와 그래프, 평균, 분산과 표준편차, 범위와 사분위수 등을 배웠어요

아직 노션을 읽어보진 않아서 이해를 못 한 상태예요

주말에 다시 공부해 봐야겠어요

 

(16 : 00 ~ 17 : 00 )  프로그래머스 순서쌍의 개수 마저 풀기

 

(17 : 00 ~ 18 : 00)

4. 베이직반 수업

논문을 읽어보면서 발표를 듣는 수업이었어요

생각보다 AI가 작업해 주는 건 없고 데이터가 많을수록 더 정교한 값과 그래프가 그려진다는 걸 배웠어요

신기하더라구요 🧐

튜터님께서 CoT는 꼭 읽어보라고 해서 내일 읽을 거랍니다 히히

 


저녁(19:00 ~ 21:00)

5. 머신러닝 특강

 

머신러닝이 저한텐 너무 멀고, 친해질 수 없는 개념이라 생각했는데

오늘 머신러닝 특강을 듣고 나서는 좀,, 친해질 수 있지 않을까라고 생각해 봤어요

강의 들을 때는 이해하기가 너무 힘들었는데 특강을 들으니까 와닿더라구요

 

그래프가 U 모양으로 생긴 경사하강법입니다

이게 0에 가까운 값을 나타낼수록 오차가 없다는 뜻이 되더라구요

그래서 0에 가까워지도록 데이터를 수집하고 분석하고, 모델도 바꿔보고 하는 거 같아요

오류값이 적을수록 그 데이터들은 신뢰도가 높은 자료라는 뜻이잖아요!

 

특강 해주셔서 너무 감사했습니다 ㅠ 구세주세요 튜터님 ㅠㅠ


마무리

오늘도 눈 깜빡하니까 시간이 다 흘러가버렸어요,, 할 게 너무 많네요

그렇지만

열심히 따라가 보겠습니다,,

기본이 되는 게 파이썬이라 생각해서 다른 건 손도 안 대고 있는데, 시간이 많이 부족한 거 같아요 쫄립니다 😞

 

부정적인 생각은 끝도 없이 늘어가면서 하나의 호수를 만들어버린다죠

부정적인 생각을 할 바에 아무 생각도 하지 않으려구요

파이팅입니다 모두들,, 🔥

인사말

안녕하세요! 벌써 금요일입니다

이번주가 오늘이면 벌써 끝나네요 🥲

이번주의 제가 저번주의 저보다 더 열심히 했는지, 꾸준히 했는지가 걱정이에요

그래도!

성급하게 타오를 바에, 은은하고 길게 타오르는 촛불이 되고 싶어요

이왕이면 LED 촛불이 되고 싶네요 😋

오늘은 오후에 일정이 있어서 오전에만 있었습니다!

오늘도 파이팅입니다! 😙

 

오늘의 일정
오전(09:00 ~ 13:00) 09:00 ~ 10:00 코드 카타 3문제
10:00 ~ 12:00 Git 특강

요약

  1. 코드 카타 3문제
    1. 배열의 평균값
    2. 머쓱이보다 키 큰 사람 (for문, .append())
    3. 배열 원소의 길이 ()
  2. Git 특강
    1. Local에서 Remote 연결하기
      1. git remote add origin {remote_repo} # origin : remote name
      2. git push -u origin master(main) # master(main) : local branch
    2. Remote에서 Local 연결하기

오전(09:00 ~ 13:00)

오늘도 어김없이 코드 카타 문제 3개를 풀어주었습니다!

 

1. 코드 카타 3문제

1.1 배열의 평균값

def solution(numbers):
    answer = sum(numbers) / len(numbers)
    return answer

 

 

1.2 머쓱이보다 키 큰 사람

def solution(array, height):
    answer = []
    
    for arrs in array:
        if height < arrs:
            answer.append(arrs)
            
    return len(answer)

🤔 문제 풀이방법

  • array 라는 키 범위 속에 머쓱이의 키를 넣어줄 겁니다
  • 대신!! 조건이 머쓱이 보다 키 큰 애들을 알고 싶기 때문에
  • for문으로 조건을 추가해줍니다!
  • if height < arrs: [머쓱이 키 보다 큰 경우만]
  • answer.append(arrs) [answer의 리스트에 추가해줘요!]
  • len(answer)로 출력해주면 머쓱이보다 키 큰 개수가 나옵니다!

 

def solution(array, height):
    count = 0
    for n in array:
        if n > height:
            count += 1
    return count

🤔 문제 풀이방법

  • count를 써서 계속 더해주는 식으로 푼 것도 있더라구요
  • count += 1가 의미하는 것은 머쓱이 키 보다 큰 사람의 수를 의미합니다

 

def solution(array, height):
    return len([i for i in array if i > height])

🤔 문제 풀이방법

  • 리스트 컨프리헨션는 공부를 해봐야겠어요 처음 봅니다,,
  • i : 이 속에다가 밑의 조건에 해당되는 값을 넣어줄게요
  • for i in array : array를 i에서 순차적으로 순회할 거예요
  • if i > height : 단, i가 height(머쓱이 키)보다 큰 값들만요.
  • print(i)을 하면 머쓱이보다 큰 키의 값이 들어있을 거예요

 

 

1.3 배열 원소의 길이

# strlist 값에 바로 접근하여 풀기
def solution(strlist):
    total_answer = []

    for len_answer in strlist:
        total_answer.append(len(len_answer))
    
    return total_answer

🤔 문제 풀이방법

  • 첫 번째는 strlist에 있는 값을 직접적으로 활용하여 풀었어요
    • for문에서 strlist를 len_answer로 치환해준 후, total_answerㅠ리스트에 append 함수를 써서 len_answer의 len값을 추가해주었답니다
    • 이때 len(len_answer) 은 strlist 속 단어의 길이를 의미합니다!
    • strlist 의 값에다가 바로 접근했으니까요!
# for문의 범위값을 설정하여 풀기
def solution(strlist):
    total_answer = []

    for i in range(len(strlist)):
        len_answer = len(strlist[i])
        total_answer.append(len_answer)
        
    return total_answer

🤔 문제 풀이방법

  • 두 번째는 for문의 범위값을 설정해서 풀어주었어요
    • range() 함수를 활용하여 범위값을 설정해주었고 그 범위값은 len(strlist)를 해서 구해주었습니다
    • len(strlist)는 전체 들어간 단어의 개수를 의미해요
    • 이제 len(strlist[i])를 해줘서 i 개수 길이만큼 len을 해주구요
    • 미리 만들어두었던 리스트인 total_answer에다가 .append()를 써서 추가해주면 끝!
# 리스트 컨프리헨션
def solution(strlist):
    answer = [len(i) for i in strlist]
    return answer

 

🤔 문제 풀이방법

  • for i in strlist : strlist를 i에서 순차적으로 순회할 거예요
  • 그 순회한 값을 len(i)에 넣을 거구요
  • 그 값들을 answer로 return 해줄 거예요

 

(10:00 ~ 12:00)

2. Git 특강

2.1 Local에서 Remote 연결하기

순서 코드
1. 깃 홈페이지에 들어가서 레파지토리를 만든다  
2. Terminal에서 git remote add url 해주기 git remote add {url} 
3. VSCode와 git 연결해주기 git push -u origin main
4. Git에서 새로고침 후 확인하기  

 

2.1.1 git에서 repository 만들기

 

2.1.2 Terminal에서 git remote add를 해준다

 

 

2.1.3 VSCode와 git 연결해주기

 

git push -u origin main 이걸 입력해주면 이런 창이 뜰겁니다 연결해주시면 돼요

대신! 깃허브 비번을 알고 있으셔야 해요

 

2.1.4 Git으로 돌아가서 새로고침 하기

연결된 걸 확인하실 수 있습니다

 

 

2.2 Remote에서 Local 연결하기

순서 코드
1. git에 가서 레파지토리 생성하기  
2. Terminal 키기  
3. 원하는 경로로 이동 cd desktop
4.  git repository 링크 입력하기 git clone {url}
5. VSCode 파일을 해당 폴더에 넣어주기 git add .
6. 수정한 내용 입력하기 git commit -m ""
7. push 해주면 연동 끝 git push

 

 

2.2.4 git repository 링크 입력하기

잘 생성되었는지 ls -al 로 확인해주세요

 

 

그리고 VSCode에 command + shift + p를 해서

> shell 을 입력하시면

Shell Command: install 'code' command in PATH 가 뜹니다. 이거 설치해주세요

 

그 후에

Terminal에서 code . 를 입력하시면

이렇게 창이 떠요

a.py 파일을 생성해줄게요

 

 

2.2.5. VSCode 파일을 해당 폴더에 넣어주기 (git add .)

2.2.6 수정한 내용 입력하기 (git commit -m "add a.py"

 

 

2.2.7 push 해주면 연동 끝 (git push)

새로고침 해주시면 들어간 게 보일 겁니다!

 

Remote에서 Local 연결하기 방법이 제일 쉬운 거 같아요

 


마무리

네,, 처음 써보는 git을 특강으로 빠르게 사용해보니까 어지러웠어요

특강 들으면서 부지런히 메모했더니 끝나고 나서도 해볼 수 있었던 거 같아요!

주말을 통해서 git 설정을 해봐야겠습니다 ㅎㅎ

저는 오늘 가족 여행이 있어서 이만 가볼게요!

주말에 문제 풀어서 업로드 하도록 하겠습니다 😉

 

감사합니다!

 

인사말

안녕하세요 여러분

지독한 비염인 줄 알았는데 감기였나봐요

아침에 일어나니까 몸이 돌처럼 무거웠습니다,,

그래도 해야겠지요

몸 관리 제대로 못한 저한테 조금은 화가 나네요 쩝,,

어쨌든 오늘도 파이팅입니다!

감기 조심하세요!!

오늘의 일정
오전(09:00 ~ 13:00) 09:00 ~ 10:00 코드 카타 및 팀 오전 회의
11:00 ~ 11:30 프로젝트 관련 피드백 받기
11:30 ~ 13:00 프로그래머스 7일차 문제 풀기
오후(14:00 ~ 18:00) 14:00 ~ 16:15 백준 사칙연산 7문제 풀기 완료
16:20 ~ 18:00 감기약 이슈로 tistory 정리
저녁(19:30 ~ 21:00) 프로젝트 브레인 스토밍

요약

  1. 코드 카타
    1. 두 수의 나눗셈
    2. 각도기
    3. 짝수의 합
  2. 베이직 반 수업
    1. 가상환경 만들기
    2. 식별자
    3. 변수형
    4. 형 변환
  3. 프로그래머스 7일차 문제 (문자열, 조건문, 수학, 반복문)
    1. 특정 문자 제거하기
    2. 각도기
    3. 양꼬치
    4. 짝수의 합
  4. 백준 사칙연산 7문제 풀기
    1. ??!
    2. 1988년 생인 내가 태국에서는 2541년 생?!
    3. 나머지
    4. 곱셈
    5. 꼬마 정민
    6. 고양이

오전(09:00 ~ 13:00)

코드 카타 3문제를 풀어볼까용~?

1. 코드 카타 3문제

1.1 두 수의 나눗셈

def solution(num1, num2):
    answer = (num1 / num2) * 1000
    return int(answer)

 

1.2 각도기

def solution(angle):
    answer = 0
    
    if angle < 90:
        answer = 1
        
    elif angle == 90:
        answer = 2
        
    elif 90 < angle < 180:
        answer = 3
        
    else:
        answer = 4
        
    return answer

손이 가는대로 혼자서 풀어본 문제였어요

1트만에 혼자서 풀어냈다는 사~~ 실! 😘

아이 뿌듯해앵 🥰

 

1.3 짝수의 합

def solution(n):
    answer = 0
    
    for i in range(0,n+1,2):
        answer += i
        
    return answer
  • for문과 단짝 함수인 range() 함수를 써서 짝수를 골라내어 줬어요
  • range(0,n+1,2) 이렇게 두 칸씩 뽑아내면 짝수이고, n 에 +1 을 해준 이유는 n 은 포함되지 않기 때문이에요
  • answer += i 는 answer 에다가 바로 바로 i 값을 기입해주는 += 기호를 써서 완성했답니다 😇

 

(10:00 ~ 11:00)

2. 베이직 반 수업 첫 날

1.1 가상 환경 만들기

-> TERMINAL에서 하세요

코드 설명
python -m venv 짓고 싶은 가상 환경 이름(영어로) 가상 환경 생성
source 가상환경 이름/bin/activate 가상 환경 활성화
pip install pandas pandas 설치
pip list 가상 환경 속 설치된 것들 list 확인
deactivate 가상 환경 종료
sudo rm -rf 가상 환경 이름 가상 환경 삭제

 

2.2 식별자

: 식별하도록 구분되는 이름

예) a = 10일 때, a가 식별자

 

2.3 변수형

: 정수형, 실수형, 문자형, 불리안

변외) list는 타입의 영향을 받지 않고 모두 기입 가능하다.

list = [10, "글자", True, 3.14159265]

 

2.4 형 변환

: 데이터 타이블 바꾸는 행위

형 변환 연산자 정수화 int(), 문자화 str(), 리스트화 list()
형 변환 하는 이유 다른 형 끼리는 연산이 불가능해서 타입을 일치화 시켜야 함

형 변환이 쓰이는 경우

  1. 데이터 분석
  2. 집계할 시

* 파싱한다 : 데이터를 읽어온다는 뜻

 

(11:00 ~ 11:30)

제가 혼자서 하고 있는 프로젝트에 대해서 자문을 구하고, 피드백을 받았습니다!

노트에 점점 글이 채워지는 게 보여서 너무 행복해요 🥰

피드백 해주시고 감 잡도록 도와주신

동기 교육생님과 튜터님께 압도적 감사를 드립니다 👍🏻

 

(11:40 ~ 13:00)

이제 프로그래머스 문제를 풀어보아요

 

3. 프로그래머스 7일차 문제

3.1 특정 문자 제거하기

def solution(my_string, letter):
    answer = ''
    
    for i in my_string:
        answer = my_string.replace(letter, '') 
        
    return answer

# .replace() : 교환
# .replace(바꾸려는 문자, 어떻게 바꿀 것인지)
함수 설명
.replace() 교환을 의미
.replace(바꾸려는 문자, 어떻게 바꿀 것인지)

 

3.2 각도기

오늘 코드 카타 때 풀었어요~!!!

def solution(angle):
    answer = 0
    
    if angle < 90:
        answer = 1
        
    elif angle == 90:
        answer = 2
        
    elif 90 < angle < 180:
        answer = 3
        
    else:
        answer = 4
        
    return answer

 

3.3 양꼬치

 

3.4 짝수의 합

짝수의 합도 오늘 코드 카타 때 풀었어요~!~!~!~!

def solution(n):
    answer = 0
    
    for i in range(0,n+1,2):
        answer += i
        
    return answer

캬,, 어제 += 이걸 직접 써보면서 익히니까

코드가 간결해지고 가독성도 좋아져서

기분 되게 좋았어요!

앞으로도 for문과 range(), += 연산자를 써서 풀어보는 문제가 많아졌으면 좋겠어요!!


오후(14:00 ~ 18:00)

이제 백준 사칙연산 7문제를 풀어봅시다 😜

 

4. 백준 사칙연산 7문제 풀기

4.1 ??!

# 1트
input(userID : ) + "??!"

왜 틀렸는지 모르겠더라구요

설마! userID : 에다가 "" 를 안 붙여서 그랬나!?

# 2트
input(userID : "") + "??!"

이것도 아니래요

설마!! 🧐

# 3트
userID = input() + "??!"
print(userID)

식별자를 안 해줬어요 ㅋㅋㅋㅋㅋㅋㅋㅋ

백준에서는 print()도 해줘야 하는 것도 빼먹었구요 ㅋㅋㅋㅋ

어쨌든~! 정답입니당~!~!~! 박수 👏🏻

 

4.2 1988 생인 내가 태국에서는 2541 ?!

문제가 이해가 안 돼서 한참을 바라보았어요,,

일단 2541년이 주어졌는데 출력으로 1998년이 나왔으니까

2541 - 1998를 해서 543 값을 얻어냈습니다.

age = int(input())
print(age - 543)

백준에서 년도를 입력해준다 했으니까

그 값을 age로 받고, 거기에 543을 빼서 해결했습니다!

 

4.3 나머지

# 1트
A, B, C = map(int, input().split())
print((A+B)%C)
print(((A%C) + (B%C))%C)
print((A*B)%C)
print(((A%C) * (B%C))%C)

???

이게 되네 ????

 

4.4 곱셈

풀고 싶어도 문제가 안 보이는데요..?

넘어갈게욧~! (미미미누 말투)

 

4.5 꼬마 정민

공백을 사이에 두고 주어진다고요?

.split()가 공백을 기준으로 나눈다는 걸로 알고 있어서

A, B, C = map(int, input().split())
print(A + B + C)

그냥 전처럼 map 함수를 써서 출력해주었어요

머야!! 저 이제 잘하네요!!

역시, 튜터님을 갈아만든 배,, 민경 히히 😝

 

4.6 고양이

이건 뭐예요?

진짜 뜬금없네요 🤨

그래서 """ 삼중 따옴표를 써서 적어주었는데 틀렸어요

그래서 튜터님께 달려갔는데

"파이썬 이스케이프 시퀀스"를 알려주시더라구요

백슬래시를 문자처럼 취급하고 싶으면 \\이렇게 입력해야 한대요

그래서 VSCode로 들어가서 확인해본 후

제출을 했습니다!

정답이라고 하네요~! ㅋㅋㅋㅋㅋㅋ

 

4.7 개

이번에도 백슬래시를 문자열로 취급해주기 위해서 \\형태로 해주었습니다

헷갈리기 때문에 주의깊게 하나씩 하셔야 해요

52번째 줄 때문에 안 되더라구요

생각해보니까 """ 이게 52번줄에 또 있어서

저기서 멈춘 게 되버리더라구요 🤨

그래서 파이썬 이스케이프 시퀀스를 찾아보았습니다

역할 형태 예시
문자열에서 줄바꿈을 나타냄 \n print("Hello\nWorld")

Hello
World
탭 공백을 나타냄 \t print("Hello\tWorld")

Hello   World
실제 백슬래시를 출력 \\ print("C:\\Users\\Username")

C:\Users\Username
작은따옴표 출력 \' print('It\'s a book')

It's a book
큰따옴표 출력 \" print("He said, \"Hello!\"")

He said, "Hello!"
문자열의 시작으로 되돌림 \r print("Hello\rWorld")

World
마지막 문자를 삭제 \b print("Hello\bWorld")

HellWorld

쌍따옴표 앞에 \" 이렇게 입력해주어서 넣어줬더니

강아지가 띠용! 하고 나왔네요 ㅋㅋㅋㅋ

결괏값이 귀여운 문제 덕분에 웃을 수 있었던 공부였습니다 ㅋㅋㅋㅋㅋㅋㅋ

 

(16: 20 ~ 18 : 00)

감기약 이슈로 잠이 너무 쏟아져서

머리가 안 굴러가더라구요 몸도 무겁구요

그래서

제가 풀었던 문제들 하나하나씩 카테고리별로 정리해줬습니다

제한이 있는 줄은 몰랐네요,, 허허


저녁(19:30 ~ 21:00)

저녁에는 제가 진행하고 있는 프로젝트의 기능에 대해서 브레인 스토밍 해줬어요

그러고 figma로 다시 돌아가서 구상을 짜주었습니당


마무리

점점 스스로 풀 수 있는 문제들이 늘어나고,

문제를 푸는 시간이 줄어드니까 여유 시간이 생기네요!

갈수록 더 잘해지는 제가 되었으면 좋겠습니다

개구리 올챙이 시절 모르는 제가 되지 않기 위해

꾸준히 노력하고 배우는 자세로 임할게요!

감사합니다!

인사말

안녕하세요~! 오늘은 수요일입니다

평일의 중간날이네요!

이번주도 반이나 달려왔다는 뜻이죠!

조금만 더 힘내봅시다 😚

아!

TMI지만,

오늘은 비염 때문에 하루종일 힘드네요 ㅠㅠ

어제 운동하러 나갔다가 꽃가루 때문에 비염이 더 심해진 거 같아요ㅠㅠ

이렇든 저렇든, 오늘도 파이팅입니다!

오늘의 일정
오전(09:00 ~13:00) 09:00 ~ 10:00 코드카타 3문제, 팀 오전 회의
10:00 ~ 10:10 머신러닝 전처리 방법 이론 정독
11:00 ~ 12:55 Git 특강 시청
오후(14:00~18:00) 14:00 ~ 15:00 머신러닝 전처리 방법 개념 습득
15:00 ~ 16:30 프로그래머스 6일차 문제 풀기
16:30 ~ 17:30 분반 OT
17:30 ~ 18:00 진로 상담
저녁(19.30~21:00) 19:00 ~ 21:00 Figma로 앱 시작 화면 만들기 및 브레인 스토밍
21:00 ~ 21:30 프로그래머스 6일차 문제 풀기

요약

  1. 코드 카타
    1. 몫 구하기
    2. 나이 출력
    3. 두 수의 합
  2. Git 특강
    1. commit
    2. git의 세 가지 영역
    3. 간단한 과제
      1. edu_git_commit 폴더를 생성해 주세요. (mkdir)
      2. a.txt 파일을 생성하시고 커밋 메세지를 남겨주세요. (touch , git commit -m)
      3. a.txt 파일을 수정하시고 "update a.txt"를 남겨주세요. (git add .)
  3. 머신러닝 전처리 방법
    1. 데이터 타입 변환
    2. 인코딩
    3. 샘플링
  4. 프로그래머스 6일 차 문제 풀이
    1. 문자열 뒤집기
    2. 직각삼각형 출력하기
    3. 짝수 홀수 개수
    4. 문자 반복 출력하기
  5. 프로젝트
    1. 앱 시작 화면 만들기 (Figma)

오전(09 : 00 ~ 13 : 00)

오늘도 돌아온 코드카타!!

아직 초반이기도 해서 문제가 재밌더라구요

그래서 오늘부터 3문제씩 풀기로 했습니다!

 

<코드 카타>

1.1 몫 구하기

def solution(num1, num2):
    answer = num1 // num2
    return answer

 

1.2 나이 출력

def solution(age):
    return 2023 - age

이렇게 제출하였지만, 문제가 뭐였는지 잘 모를 거 같아서

def solution(age):
    return 2022 - age + 1

이렇게 제출해도 될 거 같아요!

 

1.3 두 수의 합

def solution(num1, num2):
    answer = num1 + num2
    return answer

끝!

 

(11:00 ~12:55 )

2. Git 강의

 

<간단한 git 과제>

1. edu_git_commit 폴더를 생성해 주세요.
2. a.txt 파일을 생성하시고 커밋 메시지를 남겨주세요.
3. b.txt 파일을 생성하시고 커밋 메세지를 남겨주세요.
4. a.txt 파일을 수정하시고 "update a.txt"를 남겨주세요.

저는 터미널을 통해서 작업해 보았습니다!

무수히 많은 시도 끝에 해냈어요

일단 터미널을 켜줍니다!

켜서 ls를 해줬어요 그냥 해보고 싶었어요 🤪

cd desktop을 해주고 파일 경로가 desktop에 있도록 설정해 주었습니다

과제_폴더 및 파일 생성하기

기능 명령어
폴더 생성하기 mkdir "폴더명"
mkdir folder name
현재 위치 이동하기 cd folder name
파일 생성하기 touch file name
현재 위치의 파일 보기 ls

폴더와 파일을 생성 완료 해줬으니까

커밋 메시지를 남겨볼까요~?

2. a.txt 파일을 생성하시고 커밋 메세지를 남겨주세요.

기능 명령어
커밋 메세지 남기기 git commit -m "text"

명령어는 잘 넣어주었지만 ㅋㅋ,,

git init을 안 해줘서 커밋 메시지가 적용이 안 되더라구요

그래서 init 해주고 다시 커밋 메시지를 넣어주었습니다

아,, 🙄

repository에다가 파일을 안 넣어줬어요

아,, 🙄

기능 명령어
파일 한 번에 넣어주기 git add .
깃 상태 확인하기 git status

파일 넣어준 거 잘 들어갔는지 확인해주고

초록색으로 색칠됐길래

드디어!! 커밋 메시지를 넣을 수 있었습니다

휴,, 편안

4. a.txt 파일을 수정하시고 "update a.txt"를 남겨주세요.

a.txt 파일에 들어가서 내용 수정 후, 저장해 주고요

다시 터미널로 돌아와서

git add . 해주고 커밋 메시지를 남겨주었습니다

기능 명령어
파일 히스토리 보기 git log

마지막으로 제가 입력한 파일이 최신으로 됐는지 확인해 주면!

과제 끝끝~!

완전 재밌었어요!! 😆

마우스 없이 키보드로만 폴더 생성하고, 파일 생성하니까 너무 재밌었어요!

아! 그리고

튜터님께서 수정하려는 파일을 열려하실 때 

code .

로 여시더라구요

저도 그게 하고 싶어서

다 해봤는데 안 되더라구요 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

그래서 튜터님께 가서 여쭈었더니

*맥북 기준입니다. 윈도우는 명령어 몰라요*

command + Shift + P 눌러주시면

VSCode에 저렇게 입력하는 창이 뜰 겁니다 (>)

거기에 shell을 검색해 주시면

Shell Command: install 'code' command in PATH

이게 뜰 텐데, 이걸 설치해 주시면

터미널에서 code . 이렇게 입력해서 VSCode를 바로 실행할 수 있을 거예요!

 

<파일 삭제>

c.py가 삭제된 상태죠?

삭제되었을 때도 똑같이 

이 절차를 해주시면 됩니다!

파일 수정 후 업데이트 하는 것처럼

파일 삭제 후 업데이트를 똑같이 해주시면 돼요

이상-! 


오후(14:00 ~ 18:00)

자! 머신러닝 이상치 처리 중에 나머지들 해볼까용?

3. 머신러닝 전처리 방법

3.1 데이터 타입 변환

기능 함수
데이터 타입 변경 .astype()
int, str, float
# 특정 열의 데이터 타입을 정수형으로 변환
df['column_name'] = df['column_name'].astype(int)

# 특정 열의 데이터 타입을 문자열로 변환
df['column_name'] = df['column_name'].astype(str)

# 특정 열의 데이터 타입을 부동 소수점으로 변환
df['column_name'] = df['column_name'].astype(float)

 

3.2 인코딩

: 범주형 데이터를 수치형 데이터로 변환하는 과정을 의미

: 머신러닝 모델은 수치형 데이터를 입력으로 받기 때문에, 범주형 데이터를 수치형으로 변환하는 것이 필요

기능 함수
범주형 데이터를 더미 변수로 변환 get_dummies(데이터명, cloumns=[''])

 

3.3 샘플링

: 데이터셋의 크기를 즐이거나 늘리는 과정을 의미

: 데이터셋의 대표성을 유지하면서 데이터의 크기를 조절하는 데 사용

함수
.sample() .sample(frac=0.5)
50% 샘플 추출 
.sample(n=100)
100개의 샘플 추출

 

(15:00 ~ )

4. 프로그래머스 6일 차 문제 풀이

4.1 문자열 뒤집기

"배열"이라는 말에 어제 썼던

.reverse() 함수를 써서 해보았어요

근데 str 형태로는 reverse가 적용되지 않는다고 하네요 😵‍💫

 

def solution(my_string):
    return my_string[::-1]

"문자열"로 들어오기 때문에 문자열의 슬라이싱을 써봤어요

이게 강의 초반에 배웠던 함수인데,

완전히 까먹고 있는 상태였어요 😞

게다가 저번주 토요일에 이렇게 정리까지 했으면서

전혀 머리에 들어오지 않은 상태였더라구요 🙄

그래도 뭐

이제라도 다시 상기시켰으니 됐죠 뭐,,

 

4.2 직각삼각형 그리기

ㅋ 될 리가 없죠

진짜 단순하게 생각하고 해 보았는데

될리가요 ㅋㅎ

n = int(input())

for star in range(n):
    print((star+1) * '*')

문자열을 여러 개 프린트할 때 쓰는 코드 있잖아요

print('hi' * 3)

#결괏값
hihihi

이런식으로요

그걸 이번에

print((star+1) * '*')

이렇게 표현했어요

그래서 문제가 잘 해결됐답니다!

도와주신 우리 동기분들, 팀원분들 감사해요 ㅎㅎㅎ 🖤

 

4.3 짝수 홀수 개수

def solution(num_list):
    answer = [0,0]
    
    for num in num_list:
        if num % 2 == 0:
            answer[0] += 1
            
        if num % 2 != 0:
            answer[1] += 1
            
    return answer

풀기는 풀었지만 친구가 없었더라면 완성해내진 못 했다고 생각해요

제가

def solution(num_list):

    
    for num in num_list:
        if num % 2 == 0:

            
        if num % 2 != 0:

            
    return answer

이렇게만 완성했지, 끝까진 코드를 완성해내진 못했거든요 ㅎㅎ,,

answer = [0,0]
answer[0] += 1

이 코드가 의미하는 것이

answer 리스트의 첫 번째 자리에 +1을 계속 해주며 결괏값을 낸다는 뜻이래요

알아가야 할 개념이 넘 많네요,, 🙄

친구가 이렇게도 풀 수 있다고 보여줬어요 😎

내 친구는 멋쟁이 😎

친구한테 많이 배워가고 있는 접니다

친구를 갈아만든 배,, 민경 ✌🏻

 

4.4 문자 반복 출력하기

def solution(my_string, n):
    answer = ''
    
    for text in my_string:
        answer += text * n
        
    return answer

이번에도 비슷한 원리로 풀어주었어요

+=를 쓸 때는 위에 변수를 초기화 해줄 걸 만들어줘야 한대요

answer = ''

이런 애요

문자열이 될수도 있고, 리스트형이 될수도 있고 인트형이 될수도 있대요

# 리스트(list)
answer = []

# 인트 (int)
answer = 0

 

(16:30 ~ 17: 30)

오늘부터 분반으로 교육이 진행되기 때문에

16시 30분부터 베이직반 OT를 들었어요~!

저는 파이썬 기초가 자리 잡혀 있지 않기 때문에

베이직반을 신청하였답니다!

2주 동안은 파이썬 문법과 개념 위주로 수업하신다 하셔서

너무너무 좋았어요 😻

 

그리고

현실적인 얘기도 말씀해 주셔서,,

오늘부터 저의 프로젝트를 하나 해보려 합니다!

안 그래도 튜터님 갈아서 만드는 배,,민경인데 말이죠

꾸준히 피드백받고 보충해 나가려고요

아이디어는 4개 정도 생각해 놓은 게 있어서

실현 가능한 걸 선정해서 해볼 겁니다!

 

(17:30 ~ 18:00) 

OT 끝나자마자 상담했어요

저는 게임 쪽으로 가고 싶어 했거든요

그런데 현실을 마주하고 나서는 다른 길도 한 번 고려해 봐야겠어요

그래서 제 취미 중 하나인, 다이어리 앱을 만들어보려 합니다

그래서 피드백 주거니 받거니 했어요


저녁(18:30 ~ 21:00)

5. 프로젝트

5.1 앱 시작 화면 만들기 (Figma)

튜터님께서 알려주신 "Figma"라는 사이트에 들어가서

앱 화면들?을 구성해 보았습니다

https://www.figma.com/

앱 시작할 때의 화면 변천사입니다

너무 귀여워요,,,ㅠㅠ

아직 내용을 어떻게 꾸려갈지는

브레인스토밍 중이라서 오늘은 앱 시작 화면만 완성했습니다!

프로세스 구성하고 앱 화면도 차차 완성해 나갈 거예요

파이팅!


마무리

제가 좋아하는 프로게이머의 멘트 중 하나가 떠오르네요

"가장 예쁜 꽃은 우여곡절 끝에 피는 꽃"

지금 이 모든 과정들이 꽃을 피우기 위한 과정이라고 생각하려구요

물론 현실의 장벽에 세게 부딪혀서 멘탈이 나갔었지만,

여태껏 살아오면서 장벽을 몇 개나 넘었겠어요

그냥 장벽 하나 더 생겼구나~ 하고 뛰어넘어갈 준비를 하면 되는 거죠!

저는 저를 믿습니다 😋

오늘도 수고 많으셨어요!

감사합니다 :)

인사말

안녕하세요! 오늘은 화요일입니다!

솔직히 평일이 천천히 갔으면 좋겠어요

공부해야 할 것도 많고,

풀어야 할 문제도 많기 때문에

곁에서 물어볼 사람이 항상 있는, 평일이 좋아요

천천히 흘러갔으면 좋겠습니다 😢

일단은 오늘도 파이팅입니다!

오늘의 일정
오전(09:00 ~ 13:00) 09:00 ~ 11:20 코드카타 2문제, 팀 회의, 프로그래머스 1문제, 다른 분들과 피자 나누기(2) 코드 리뷰
11:20 ~ 13:00 머신러닝 이상치 값 처리 실습
오후(14:00 ~ 18:00) 14:00 ~ 15:45 통계학 실시간 특강 시청
15:45 ~ 17:10 프로그래머스 5일차 3문제 풀기
17:20 ~ 17:35 저녁 순회 맞이
17:40 ~ 18:00 TIL 정리
저녁(19:30 ~ 21:00) 19:30 ~ 21:00 백준 문제 풀기

요약

  1. 코드카타
    1. 숫자 비교하기
    2. 나머지 구하기
    3. 프로그래머스_옷가게 할인받기
  2. 머신러닝 이상치 값 처리
    1. IQR 방법
    2. 이상치 제거
    3. 중복값 제거
  3. 통계학 특강 시청
    1. 벡터의 내적
    2. 유사성 확인하기 (유클리드, 코사인)
    3. 고유값 고유벡터
    4. 최적값 알고리즘
    5. 텐서
  4. 프로그래머스 5일 차 3문제
    1. 아이스 아메리카노
    2. 나이 출력
    3. 배열 뒤집기
  5. 백준 3문제 
    1. AxB
    2. A/B
    3. 사칙연산

오전(09 : 00 ~ 13 : 00)

오늘의 코드 카타는 숫자 비교하기와 나머지 구하기였습니다!

수학 연산자와 if문을 다시 확인할 수 있었던 문제였습니다

 

<숫자 비교하기>

def solution(num1, num2):
    if num1 == num2:
        answer = 1
    elif num1 != num2:
        answer = -1
    return answer

문제를 천천히 따라 적으면

이렇게 코드가 완성됩니다

!=와 ==이 자주 사용되는 거 같은 요즘이네요!

 

<나머지 구하기>

def solution(num1, num2):
    answer = num1 % num2
    return answer

나머지가 나오는 함수인 %를 써서 해결했습니다

연산자 역할
% 나머지
/ 나누기
//

이젠 안 까먹을 거 같네요!

코드 카타를 푼 후에 시간이 많이 남아서

오늘 저녁에 풀 예정이었던

프로그래머스 5일 차 4문제 중

한 문제를 풀어보았습니다 😁

 

<옷가게 할인받기>

import math

def solution(price):
    if price >= 500000:
        answer = price - price * 0.2
        
    elif price >= 300000:
        answer = price - price * 0.1
        
    elif price >= 100000:
        answer = price - price * 0.05 
    
    else:
        answer = price
        
    return int(math.trunc(answer))

 

def solution(price):
    if price >= 500000:
        answer = price - price * 0.2
        
    elif price >= 300000:
        answer = price - price * 0.1
        
    elif price >= 100000:
        answer = price - price * 0.05 
    
    else:
        answer = price

조건에 10만 원, 30만 원, 50만 원 이상 구매 시 각각 할인해 주잖아요!

그래서 할인된 가격으로 if문과 elif문을 완성해주었습니다

else에는 10만 원, 30만 원, 50만 원 이상을 구입하지 않은 경우를 넣었구요!

 

처음에는

def solution(price):

    if price >= 100000:
        answer = price - price * 0.05 

    elif price >= 300000:
        answer = price - price * 0.1
        
    elif price >= 500000:
        answer = price - price * 0.2
    
    else:
        answer = price

이 순서로 기입했는데요!

튜터님께서 순서를 바꿔야 할 거 같다고 하셔서

잠시 생각을 해보았습니다

단계별로 조건을 확인하기 때문에

시작값이 작으면 중복 할인이 된다고 생각을 했어요

그래서 50만 원을 시작 조건으로 두었습니다 :)

    import math
    
    return int(math.trunc(answer))

그리고 소수점 밑으로는 모두 버려야 해서

import math로 .trunc() 함수를 불러왔어요

소수점 이하 숫자는 모두 버리는 함수라고 하더라구요

튜터님께서 알려주셔서 알게 된 함수입니다!

이렇게 문제 3개를 풀고 워밍업을 해주었습니다 😋

재밌네요!

이건 다른 동기분의 풀이예요!

저처럼 가격을 계산하는 게 아니라

discount_rate으로 계산하셨더라구요

이런 방법도 있다는 걸 배웠습니다

코드 공유해 주셔서 감사해요 😽

그리고 함수 공유해주셔서 감사해요!

함수 설명
import math
math.gcd(a,b)
최대공배수
import math
math.lcm(a,b)
최대공약수

 

(11:20 ~ 13:00)

2. 이상치 값 처리

# 특정 열의 이상치 확인 (IQR 방법)
Q1 = df['C'].quantile(0.25)
Q3 = df['C'].quantile(0.75)
IQR = Q3 - Q1
print(IQR)

IQR 방법으로 해볼 거기 때문에

print(IQR)을 해서 값을 확인했습니다

197.0으로 나왔네요!

# 이상치 범위 설정
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR

## 이상치 범위 확인
print(lower_bound)
print(upper_bound)

그리고 이상치 범위를 확인해 보았습니다

lower가 -292.5고 upper가 495.5네요??

 

이제 이 범위를 넘어서는 이상치 값을 찾으면 됩니다!

# 이상치 확인
outliers = df[(df['C'] < lower_bound) | (df['C'] > upper_bound)]
print(outliers)

칼럼들 중에서 C를 기준으로 해보았기 때문에

C칼럼 중에서 이상치 값은 14줄에 있던

C 500이라는 결괏값이 나왔어요!

이상치는 이렇게 확인할 수 있다는 걸 알게 되었습니다 😋

 

2.2 이상치 제거

이제 이상치도 찾았으니까 이상치를 제거해봐야죠😎

# 이상치 제거
df_no_outliers = df[(df['C'] >= lower_bound) & (df['C'] <= upper_bound)]
print(df_no_outliers)

아까 이상치가 있었던 행이 14번째 줄이었잖아요?

말끔히 지워졌습니다 😋

제거를 해주려면 lower와 upper 값 사이에 속하는 값만 출력해 주면 되네요!

 

2.3 중복값 제거

함수 설명
.duplicated() 중복된 행 확인
.drop_duplicates() 중복된 행 제거
 # 중복된 행 확인
print(df.duplicated().sum())

이렇게 중복된 행을 확인해 보니까 불리언 형태로 확인되네요!

확인되었으니까 제거해줍시다 😋

8번째 줄이 사라지면 돼요!

# 중복된 행 제거
df_no_duplicates = df.drop_duplicates()
print(df_no_duplicates)

8번째 줄이 사라졌습니다! 두둥!

완전 신기해요 🤩

오전 시간이 이렇게만 했을 뿐인데

벌써 다 흘러가버려서 기분이 이상해요

시간 너무 빨라요 ㅠㅠ

아직 해야 할 것도 많은데,, 천천히 갔으면 좋겠어요 😔


오후(14 : 00 ~ 18 : 00)

오늘도 14시부터 16시까지 통계학 특강을 들었습니다!

3.1 벡터의 내적

: 두 개의 벡터를 곱하고 더해서 하나의 벡터로 표현하는 것

행렬이었던 것을 열행의 순으로 해주는 걸 의미합니다

 

3.2 유사성 알아보기(유클리드, 코사인)

공간상에서 거리를 통해 유사성을 비교하는 방식입니다

코사인이 0도라는 것은 완전 유사한 값이라는 것을 나타냅니다

코사인이 90도라는 것은 유사하지 않은 값이라는 것을 나타냅니다

 

3.3 고유값, 고유벡터

고유벡터

: 방향은 변하지 않고 크기만 변하게 해주는 값 (상수배)

ex) 용량을 줄일 때, 기존 틀은 유지해 주고 필요 없는 값만 버릴 때 사용함. 틀은 바뀌지 않아서 고유벡터를 씀

 

3. 4 최적화 알고리즘

 

3.5 텐서

 

(15:45 ~ 18:00) 프로그래머스 문제 풀기

 

4.1 아이스 아메리카노

처음으로 혼자서 푼 문제였어요

저는 커피를 마시지 않지만,

스스로 혼자 푼 문제 이름이 아이스 아메리카노여서

오래 기억에 남을 거 같아요 ㅠㅠㅠ

잔돈은 나머지로 구하고

커피 개수는 몫으로 구하면 되겠다고 생각했어요

물론 이것도 3트만에 해결한 거랍니다 ㅋㅋㅋ,,,

정답이라고 떴을 때의 그 허탈감은 이루 말할 수 없어요

되겠냐 ㅋ 하고 돌렸는데

됐,, 네?가 됐거든요

얼떨떨해서 기분이 묘했어요 ㅇㅅㅇ,,?

if문으로 문제를 풀고 있지만

다른 분들의 풀이를 한 번씩 보거든요

단순하게 이렇게 했으면 됐던 거였어요,, ㅋㅋㅋㅋ 헤헤

다음에 풀게 될 때!

이 방식을 생각해 내면 되죠 뭐!

어쨌든 혼자 문제를 풀었다는 거에 의의를 두렵니다 🤭

 

4.2 나이 출력

 

4.3 배열 뒤집기

생각보다 오래 걸린 문제였어요,,

일단 정렬하는 함수를 .sort()로 알고 있는 상태였지만

거꾸러 하는 방법도 reverse()로 알고는 있었지만

문제 풀 때는 생각이 안 나더라구요 ㅋㅋㅋㅋㅋ

 

1트는 이렇게 해보았는데 틀렸어요

데헷 - ✨

마지막 너!! 왜 안 되는 건데!!

 

그래서 팀원 분께 한 번 봐달라고 했습니다

reverse()가 아니라 reversed()로 써야 하고

reversed() 함수를 쓰고나면 다시 list화 해줘야 한대요

그래서 완성한 

def solution(num_list):
    
    return list(reversed(num_list))

코드였습니다 ㅎㅎ 😜


저녁(19 : 30 ~ 21 : 00)

19:30 ~ 19:50에는 팀 저녁 회의를 진행 해주었어요

 

5. 백준 문제 풀기

5.1 AxB

a , b = input().split()
a = int(a)
b = int(b)
print(a*b)

map함수도 쓸 수 있다 하셨는데,,

저는 아직 .split()가 더 편하더라구요

그래서 이렇게 풀어주었습니다

코드를 편식하면 안 되는 건데, 그쵸? 🤔

이것저것 해봐야겠어요 🤔

 

5.2 A/B

a, b = map(int, input().split())
print(a / b)

그래서

이번에는 map을 바로 적용하였습니다

이렇게 쓰는 거군요! 너무 재밌어요!

 

5.3 사칙연산

a, b = map(int, input().split())
print(a+b)
print(a-b)
print(a*b)
print(a//b)
print(a%b)

단순하게 하나하나 다 입력했습니다

솔직히 while문이나 for문으로 해볼랬다가

다른 분들한테 자문을 구했는데

그냥 프린트로 나열해도 된다 하셔서 해봤어요

너무 쉽게 잘 풀었어요 덕분에!!


마무리

오늘 혼자서 프로그래머스 문제를 풀어봐서 너무 행복했어요!

이제 자력으로도 풀 수 있다는 게 얼마나 감격스러웠는지요 😍

내일도 기대가 되네요!

문제 잘 푸는 제가 되고 싶어요 😘

오늘도 수고 많으셨습니다!

내일도 파이팅!

감사합니다 ☺️

인사말

안녕하세요~!

월요일이 다시 찾아왔습니다 😂

이번 주부터는 확연한 겨울 같은 날씨가 되었네요

감기 조심하세요!

비염도 조심하시구요 ㅠㅠ

저는 아침부터 비염 때문에 목도 따갑고 코도 간지러워서

마스크 끼고 활동했답니다 😢

오늘의 일정
오전(09:00 ~ 13:00) 09:00 ~ 09:50 코드카타 2문제 풀기
10:00 ~ 10:15 팀 회의 및 코드카타 리뷰
10:15 ~13:00 머신러닝 강의 듣기 및 실습
오후(14:00 ~ 18:00) 14:00 ~ 16:00 통계학 Zoom 실시간 강의 듣기
16:00 ~ 18:00 머신러닝 강의 듣기 및 실습
저녁(19:30 ~ 21:00) 19:30 ~ 20:00 팀 저녁 회의
20:00 ~ 20:50 프로그래머스 4일차 문제 풀기
20:50 ~ 21:00 TIL 제출

요약

  1. 코드 카타 문제 풀이
    1. 두 수의 차
    2. 두 수의 곱
  2. 머신러닝 결측값 처리
    1. 제거
    2. 대체
  3. 프로그래머스 4문제 풀이

 


오전 (09:00 ~ 13:00)

오늘부터 시작되는 코드 카타!

문제를 두 개 풀어주고 팀원분들과 대화 및 회의를 진행 해주었어요

<두 수의 차>

def solution(num1, num2):
    answer = num1 - num2
    return answer

두 수의 차를 구해야 하니까 

연산 함수인 - 를 써서 해결해주었답니다 😋

 

<두 수의 곱>

def solution(num1, num2):
    answer = num1 * num2
    return answer

이번에는 곱을 구하는 거기 때문에

곱하기의 연산 기호인 *를 써서 풀어주었습니다 😋

하루를 문제로 시작하니까 재밌고 좋네요 ㅎㅎ

 

(10:15 ~ 13:00) 머신러닝 강의 듣기 및 실습

결측값 처리하는 실습을 해보았어요

이제 시작점인 건데, 결괏값이 잘 나와가지고

기분이 좋았던 거 있죠? 😋

사람은, 단순해야 행복함을 잘 느낄 수 있게 되는 거 같아요

 

<결측값 처리 방법 3가지>

종류 설명 함수 함수 설명
제거
결측값이 포함된 행 또는 열을 제거 df.dropped_rows
= df.dropna()
결측값이 포함된 제거
df_dropped_cols
= df.dropna(axis=1)
결측값이 포함된 제거
대체
결측값을 특정 값으로 대체 df_filled
= df.fillna(0)
결측값을 0으로 대체
df_filled_mean
= df.fillna(df.mean())
결측값을 각 열의 평균값으로 대체
df_filled_median
= df.fillna(df.median())
결측값을 각 열의 중간값으로 대체
df_filled_mode
= df.fillna(df.mode().iloc[0])
결측값을 각 열의 최빈값으로 대체
예측
머신러닝 모델을 사용하여 결측값을 예측 from sklearn.linear_model
import LinearRegression
 
df_with_na
= df[df['column_with_na'].isnull()]
df_without_na
= df[df['column_with_na'].notnull()]
결측값이 있는 열과 없는 열 분리
model = LinearRegression()
model.fit(df_without_na[['feature1', 'feature2']],
df_without_na['column_with_na'])
회귀 모델 학습
predicted_values
= model.predict(df_with_na[['feature1', 'feature2']])
결측값 예측
df.loc[df['column_with_na'].isnull(), 'column_with_na']
= predicted_values
예측된 값으로 결측값 대체

 

세 가지 다 해보았어요

<결측값 제거>

data = {
    'A': [1, 2, np.nan, 4, 5, 100, 1, 2, 2, 4, '1', '2', '3', '4', '5', 10, 20, 30, 40, 50],
    'B': [5, np.nan, np.nan, 8, 10, 60, 10, 20, 20, 40, '10', '20', '30', '40', '50', 5, 4, 3, 2, 1],
    'C': [1, 2, 3, 4, 5, 5, 100, 200, 200, 400, 100, 200, 300, 400, 500, 1, 2, 3, 4, 5],
    'D': [np.nan, np.nan, 3, 3, 3, 5, 5, 5, 5, 5, np.nan, np.nan, np.nan, np.nan, np.nan, 2, 3, 4, 5, 6],
    'category_column': [np.nan]*10 + ['A', 'B', 'A', 'C', 'B'] + [np.nan]*5,
    'value_column': [np.nan]*10 + [1, 2, 3, 4, 5] + [np.nan]*5,
    'target': [np.nan]*15 + [1, 0, 1, 0, 1]
    }

일단 데이터 값이 되어줄 정보를 넣어주고요

# Nan이 있는 행 삭제하기
df_dropped_rows = df.dropna()
print(df_dropped_rows)
Columns: [A, B, C, D, category_column, value_column, target]
Index: []

결괏값이 이렇게 나왔어요

행을 하나하나 다시 봤는데

NaN가 없는 행이 없더라구요,,?

강의 내용과는 다른 결괏값이 나와서 동공지진 일어났어요

 

이어서 열도 삭제 해보았습니다

# Nan이 있는 열 삭제하기
df_dropped_cols = df.dropna(axis=1)
print(df_dropped_cols)

여기서 열은 .dropna(axis=1)만 추가해주면 되더라구요

결괏값도 잘 나온 걸 확인할 수 있었습니다 ㅎㅎ

 

제거 방법을 쓰면 데이터가 많이 날아가기 때문에

제거를 쓰기 보다는 대체랑 예측을 많이 쓴다고 합니다!

확실히 제거를 해버리니까

그 많던 자료가 싹- 사라졌네요 ㄷㄷ

 

<결측값 대체>

# 결측값을 0으로 대체
df_filled = df.fillna(0)

# 결측값을 각 열의 평균값으로 대체
df_filled_mean = df.fillna(df.mean())

# 결측값을 각 열의 중간값으로 대체
df_filled_median = df.fillna(df.median())

# 결측값을 각 열의 최빈값으로 대체
df_filled_mode = df.fillna(df.mode().iloc[0])

대체를 하는 경우는 데이터 타입을 봐야 된대요

평균값으로 대체할 거라고 해도

문자열로 돼 있으면 오류가 발생한다고 하더라구요

데이터 파일의 타입을 확인한 후에

적절한 코드로 대체 해주시면 되겠습니다!

이번 자료에는 0으로 채워주었습니다 히히

 

<결측값 예측>

from sklearn.linear_model import LinearRegression

# 결측값이 있는 열과 없는 열 분리
df_with_na = df[df['column_with_na'].isnull()]
df_without_na = df[df['column_with_na'].notnull()]

# 회귀 모델 학습
model = LinearRegression()
model.fit(df_without_na[['feature1', 'feature2']], df_without_na['column_with_na'])

# 결측값 예측
predicted_values = model.predict(df_with_na[['feature1', 'feature2']])

# 예측된 값으로 결측값 대체
df.loc[df['column_with_na'].isnull(), 'column_with_na'] = predicted_values

예측은 머신러닝으로 하는 거래서

실습으론 해보지 않았습니다

강사님도 하시는 걸 안 보여주셔서

저도 못해봤어요,, 😢


오후 ( 14 : 00 ~ 18 : 00 )

 

(14:00 ~ 16:00)

14시부터 16시까지는 통계학 Zoom 수업을 들었어요!

오랜만에 벡터랑 함수를 들으니까 반가웠어요

저의 나이 때는 행렬이 교육과정이 변경되면서

없어진 내용이었나 봐요,, 🤔

행렬이 나오면서 신기한 느낌이었어요

그래도 듣다보니까 이해가 가긴 하더라구요!

2x3 이랑 3x3의 구조를 곱할 때는

조금 버거워지기 시작했지만

다시 집중해서 보니까 이해가 가더라구요!

아직까진 머신러닝과 무슨 연관이 있는지는 깨닫지 못했어요

내일도 통계학 특강이 있을 예정이니,

꼼꼼히 집중해서 들어보려구요!

 

(16:00 ~ 17:00)

내일 해볼 이상치 처리 방법을 미리 보고 있었어요

음,, 강의를 보면서 따라 해보는 건 좋지만

말 그대로 따라해본다는 느낌이고,

머리로는 들어오지 않아서 걱정이에요

그래서 미리 강의 자료를 정독해서 이해하려 하는데

머신러닝에 대해서 개념이 자리 잡혀있진 않나봐요

연관이 있으니까 배운다는 건 알겠는데

음,, 딱 거기까지밖에 생각이 미치네요

머신러닝 다시 봐야겠어요

 

(17:00 ~ 18:00)

다른 교육생분들과 잠시 얘기를 나눈 후

저녁 먹으러 갔습니당 😋


저녁( 19 : 30 ~ 21 : 00)

팀 저녁 회의를 해준 후에 TIL 수정을 마친 후

프로그래머스 4일차 문제를 풀어보았어용

 

<피자 나눠먹기 (1)>

def solution(n):
    if n % 7 == 0:
        answer = n/7
    elif n % 7 != 0:
        answer = n/7 +1
    return int(answer)

주어진 피자 한 판에 7조각이 있으니까

딱맞아 떨어지면 피자 한 판이 더 필요할 일이 없죠

근데 7조각으로 나눴을 때 나머지가 생긴다면

피자 한 조각이 더 필요할 테니까

한 판 더 시켜야겠죠~?

이렇게 끝내고 나면 쉬운 거를

문제 풀 땐 왜 이리 생각 안 나고 막막한 건지!!!

너무 열받아요!!!!! 😫

 

<피자 나누기 (2)>

def solution(n):
    pizza_piece = 6
    
    while True:
        if pizza_piece % n != 0:
            pizza_piece = pizza_piece +6

        elif pizza_piece % n == 0:
            answer = pizza_piece/6
            break
    return int(answer)

이제는 피자가 6조각이구요 사람 수만 바껴요

그럼 6조각을 고정으로 사람 수에 알맞게

늘려줘야겠죠?

def solution(n):
    pizza_piece = 6

그래서 피자 조각은 6개로 할당 해주구요

    while True:
        if pizza_piece % n != 0:
            pizza_piece = pizza_piece +6

만약

피자 조각을 사람 수로 나누었을 때

딱맞아 떨어지지 않으면!?!?!?

기존에 있던 6조각에다가 한 판을 더 추가해줘야죠

피자 조각을 기준으로 삼았기 때문에 +6을 해줍니다 😎

        elif pizza_piece % n == 0:
            answer = pizza_piece/6
            break
    return int(answer)

자 이제 다른 조건도 봐야죠

이전에는 6조각으로 나누어지지 않으면이었으니까

이번엔 딱맞아 떨어지는 조건으로 주고

break를 넣어주었습니다

왜냐!?

n은 100까지라는 범위가 주어졌구요

6으로 나누었을 때 딱맞아 떨어지는 것도

100 안에서 한계가 있잖아요

게다가 while문이라서 멈추어줄 함수가 필요하답니당 😋

 

<피자 나누기 (3)>

def solution(slice, n):
    1 < slice < 11
    
    if n % slice != 0:
        answer = 1
    else:
        answer = 0
    
    return answer + n // slice

이번에는 피자를 2조각 ~ 10조각으로만 잘라준대요

그 잘리는 조각을 slice로 이름 지어줬구요

마찬가지로 사람 수는 n으로 할당되었습니다

    if n % slice != 0:
        answer = 1
    else:
        answer = 0

앞서 slice의 값은 계속 변하죠?

원하는 조각 수로 잘라준다고 했으니까요

그렇기 때문에 사람 수에다가 조각 수를 나누어줍니다

이 나눈 값에 나머지가 생긴다면

피자 수가 부족하다는 말이니까 한 판 더 추가시켜야 합니다

여기서 answer은 피자 한 판을 의미합니다

else로는 나누었을 때 0이 되는 애들은

한 판을 추가할 필요가 없으니까 answer = 0으로 둘게요

    return answer + n // slice

그리고 최종적으로

n // slice 사람 수에다가 조각만큼 나누었을 때의 몫을 구해줘요

왜냐구요?

그래야 몇 판 먹었는지 알 수 있거든요 😄

거기에다가 answer 값을 더해주면

원하는 결괏값이 나온답니당

 

return n // slice + (1 if n % slice != 0 else 0)

구석에서 TIL 작성하면서 다시 재검토 중이었는데

다른 동기분들이 오셔서 알려주고 가셨어요 🤣

삼항 연산자로는 이렇게 코드를 완성한다고 하네요

 

<배열의 평균값>

def solution(numbers):
    
    answer = sum(numbers) / len(numbers)
    return answer

파이썬에는 평균을 구하는 함수가 없어서

이렇게 구해주시면 됩니다 :)

끝끝!!

캬~~~


마무리

오늘 늦게까지 했어요!! (현재시각 23:23)

오늘 해야 할 거를 내일로 미루지 않아서 기분이 좋아요 히히

한 번 미루기 시작하면 계속 밀리기 때문에!!

오늘 내로 끝내서 기분 좋습니다 아주 만족스러워요 🤑

문제 풀 수 있도록 도와주신 주변분들,,

감삼다,, (넙죽넙죽) 덕분에 살아가네요 히히

오늘 할 일 끝!!

감사합니다~ 😁

인사말

안녕하세요!

오늘도 머신러닝에 대해서 공부를 해볼 겁니다

처음 접하는 생소한 내용이라서 너무 막막하네요

오늘은 오전에 Zoom으로 하는 Git 수업이 있어서

오전 시간 동안은 Zoom 수업을 들어주었습니다

오후부터 본격적으로 머신러닝을 공부하였어요!

오늘의 일정
오전 (09 : 00 ~ 13 : 00) 10:00 ~ 12:15 Zoom 수업_Git
오후 (14 : 00 ~ 18 : 00) 14:00 ~ 15:30 전처리 공부
16:00 ~ 16:30 튜터님과 면담
16:30 ~ 16:40 매니저님의 순회 방문
16:40 ~ 17:40 전처리 공부한 내용을 TIL 작성
저녁 (19 : 30 ~ 21 : 00) 19:30 ~ 20:00 팀 회의
20:00 ~ 20:55 백준 문제 풀이
새로 알게 된 코드
a, b = map(int,input().split()) input()을 문자열로 받게 되었을 때 하나하나씩 매핑해주고, 공백을 기준으로 나눔

 

오전( 09 : 00 ~ 13 : 00 )

깃허브 설치됐는지 확인하기

처음에는 Markdown에 대해서 배웠어요

재밌더라구요 히히

Markdown.md
0.00MB

# 오늘 배운 markup
## 1. 두 번째 제목
## 2. 종류
2.1 제목
2.1.1 #

2.2 리스트
2.2.1 그냥 숫자 입력하면 들여쓰기가 돼요

2.3 코드블럭
2.3.1
```python
def hi():
    print(Hello)
```
2.3.2 인라인 코드 블럭
문장 적어주시고 `print()`를 백틱으로 감싸주시면 돼요

2.4 링크
2.4.1 [str],(url) <- 콤마는 빼주세요
2.4.2 예시
[네이버](http:/www.naver.com)
이렇게 적으면 뜨죠?

2.5 이미지 넣기
2.5.1 ![str](이미지 파일 이름)
![고양이](imgs/고양이.jpeg)

2.6 텍스트 강조
2.6.1 볼드체
2.6.1.1 **로 글자를 감싸주세요

2.6.2 기울림체
2.6.2.1 *로 글자를 감싸주세요

2.6.3 취소선
2.6.3.1 ~~로 글자를 감싸주세요

2.7 인용문
2.7.1 다음 줄에 >로 시작해주세요
> 그렇게 하시면 이렇게 됩니다

진짜 진짜 재밌었어요

문서 작성하고 편집하고 만드는 거 좋아하거든요

이번에 Markdown으로 배울 수 있어서 좋았습니다 😋


오후 ( 14 : 00 ~ 18 : 00 )

데이터 전처리에 대해서 이론 공부를 진행시켰어요!


요약

  1. 데이터 전처리란?
    1. 데이터 전처리 개념
    2. 특징
    3. 전처리 방법
    4. 전처리의 효과
    5. 주요 기법

1. 데이터 전처리란?

  1. 개념 : 데이터 분석 및 머신러닝 모델링을 위해 데이터를 준비하는 과정
  2. 특징
    1. 원시 데이터(raw data)는 종종 불완전하거나, 노이즈가 많거나, 형식이 일관되지 않아 직접 모델링에 사용하기 어려움
    2. 데이터 전처리는 데이터의 품질을 높이고, 분석 결과의 신뢰성을 확보하기 위한 필수적인 과정임
  3. 전처리 방법
결측값 처리 데이터셋에서 누락된 값을 처리하는 작업
이상값 처리 데이터셋에서 비정상적으로 큰 값이나 작은 값을 처리하는 작업
중복 데이터 제거 동일한 데이터가 여러 번 나타나는 경우, 이를 제거
데이터 타입 전환 데이터의 타입을 적절하게 변환하는 작업
데이터 정규화 데이터이 범위를 일정하게 맞추는 작업
인코딩 범주형 데이터를 수치형 데이터로 변환
샘플링 데이터셋의 크기를 줄이거나 늘리는 작업
특징 선택 및 추출 모델 성능을 높이기 위해 중요한 특징을 선택하거나 새로운 특징을 추출

 

4. 데이터 전처리의 효과

데이터 품질 향상 결측치, 이상치, 중복 데이터를 처리하여 데이터의 품질을 높임
모델 성능 향상 적절한 스케일링, 정규화를 통해 모델의 학습 속도와 성능을 개선함
데이터 일관성 확보 서로 다른 출처에서 수집된 데이터를 일관된 형식으로 변환함
특성 공학
(Feature Engineering)
유용한 특성(Feature)을 생성하거나 변환하여 모델의 예측 능력을 향상시킴

 

5. 데이터 전처리의 주요 기법

  1. 결측치 처리(Handling Missing Data) : 데이터셋에 누락된 값을 처리함
    • 삭제: 결측치가 있는 행이나 열을 삭제.
      • 결측치가 적을 때 유용하지만, 데이터 손실이 발생할 수 있음
    • 대체: 평균, 중앙값, 최빈값 등으로 결측치를 대체
    • 예측: 다른 특성을 사용하여 결측치를 예측하고 채움
  2. 이상치 처리(Handling Outliers) : 데이터에서 비정상적으로 크거나 작은 값을 처리
    • 제거: 이상치를 데이터셋에서 제거
    • 변환: 이상치를 다른 값으로 변환
      • 예: 상한선이나 하한선으로 대체
    • IQR 방법: IQR(Interquartile Range)을 사용하여 이상치를 탐지하고 처리
  3. 데이터 정규화 (Normalization) : 정규화는 데이터를 일정한 범위로 스케일링하는 과정
    • 일반적으로 [0, 1] 범위로 변환함
      • Min-Max 정규화: 최소값을 0, 최댓값을 1로 변환
  4. 데이터 표준화 (Standardization) : 표준화는 데이터를 평균 0, 분산 1로 변환하는 과정
  5. 특성 공학 (Feature Engineering) : 데이터로부터 새로운 유용한 특성을 생성하는 과정
    • 특성 생성: 기존 데이터를 기반으로 새로운 특성을 생성함
      • 예: 날짜 데이터를 사용하여 요일 특성 생성
    • 특성 선택: 모델 성능에 중요한 특성을 선택하고, 중요하지 않은 특성을 제거함
  6. 데이터 인코딩 (Data Encoding) :  비정형 데이터를 모델이 이해할 수 있는 형태로 변환함
    1. 레이블 인코딩 (Label Encoding): 범주형 데이터를 숫자로 변환
    2. 원-핫 인코딩 (One-Hot Encoding): 범주형 데이터를 이진 벡터로 변환
  7. 데이터 분할 (Data Splitting) : 데이터를 학습용(train), 검증용(validation), 테스트용(test)으로 분할. 이를 통해 모델의 일반화 성능을 평가할 수 있음
    1. 학습 데이터 (Training Data): 모델 학습에 사용되는 데이터
    2. 검증 데이터 (Validation Data): 모델 튜닝 및 성능 검증에 사용되는 데이터
    3. 테스트 데이터 (Test Data): 최종 모델 평가에 사용되는 데이터

저녁 ( 19 : 30 ~ 21 : 00 )

히히 오후 회의를 끝내고 20시부터 백준코딩 해봤어요

프로그래머스로만 풀어보다가 백준코딩으로 풀어보니까

구조가 달라서 애먹었어요 😂

문제 푸니까 바로 깃허브로 잘 들어와서 다행이에요 히히

문제 1. Hello World! 를 출력하시오.

print("Hello World!")

문제 푸니까 너무 재밌어요 ㅋㅋㅋㅋ

차라리 문제를 풀어야 공부에 집중을 하게 되네요

히히

 

문제 2. A+B

# 1트
a, b = int(input())
print(a+b)

처음에는 이렇게 입력하였어요

안 되더라구요

# 2트
a, b = int(input().split())
print(a+b)

이렇게 하니까 TypeError가 나네요,, 🤦🏻‍♀️ 

# 3트
a, b = input().split()
a = int(a)
b = int(b)
print(a+b)

TypeError가 났다고 하길래

input으로는 잘 받았다는 거니까

형변환을 밑에서 따로 해줬어요 🤔

끼야아아아아아ㅏㅇㄱ

꺄아아아아아아악

맞췄어요 ㅠㅠㅠㅠㅠㅠㅠ 흐엉

순간적으로 스트레스받았어요 허엉ㅇ

백지에다가 창의력을 발휘하려 하니까

뇌정지 쩔게 오네요,, 하하하하,,

 

a, b = map(int,input().split())
print(a+b)

언니한테 물어봤을 때

이렇게 쉽게 푸시더라구요,, 🙄

제가 map함수를 이해 못 한 거 같아요

split()도 들었던 거 같은데 제 머리엔 없던 함수였어요

하하하

오늘도 배워갑니다.. 👍🏻

 

문제 3. A-B

# 1트
a, b = input().split()
a = int(a)
b = int(b)
print(a-b)

앞선 문제와 비슷한 구조이기 때문에

똑같은 방식으로 코드를 짜주었습니다 😊

히히 넘 뿌듯하네요 🤭 


마무리

하하,,

머신러닝과 친해질 수 있을지 잘 모르겠어요

확실히 주말에 더 공부해야겠습니다

다른 추가 자료들 찾아보며 공부해야겠습니다

한 주 동안 수고 많으셨어요!

편안함 밤 되시길 바랍니다

주말에 푹 쉬시고 다음 주도 달려봅시다!

파이팅!! 🔥

감사합니다

인사말

안녕하세요~!

오늘부터 팀이 바뀌어서 5조에서 10조로 가게 되었어요!

새로운 분들과 대화를 나누고, 팀 노션도 같이 짜고

공부 내용도 새롭게 하나 더 추가 되었어요!

새로운 규칙들과 새로운분들과 함께 하니 낯설지만

환경을 주기적으로 바꿔주는 것도 좋은 거 같아요!

잘해봅시당! >_<

오늘의 일정
오전 11:00 ~ 17:00 -> 머신러닝 강의 2개 듣기
오후 17:00 ~ 18:00 과제1 해설 Zoom 수업 듣기
저녁 19 : 30 ~ 21 : 30 캐글 설치 및 설정하기

요약

  1. 머신러닝이란?
    1. 전통적 프로그래밍 vs 머신러닝 
    2. 머신러닝 구성 요소들(데이터셋, feature, 레이블, 훈련, 테스트)
    3. 머신러닝의 학습
      1. 학습 과정
      2. 학습 방법
  2. 과적합이란?
    1. 과적합 방지
  3. 머신러닝 실습

 


오전 ~ 오후( 11 : 00 ~ 17 : 00)

Zoom 수업이 있기 전까진 새로 받은 머신러닝에 대해 공부하려 합니다!

아직 SQL, 파이썬, 파이썬 라이브러리에 대해 제대로 습득을 하지 못 했는데

또 새로운 걸 머리에 집어 넣으려 하니까

스트레스가 폭발을 하려 하네요 🤯

 

음,, 어떻게 해야 할까요 🤔

뭐 어쩌겠어요 일단 해야죠

안 하면 안 할수록 미룬 일만 많아지니까,,

할 일을 미룬다는 게 더 싫어요 저는,,

 

1. 머신러닝이란?

  1. 개념
    1. 컴퓨터가 명시적으로 프로그래밍 되지 않아도 데이터를 통해 학습하고, 예측할 수 있도록 하는 기능
    2. 대량의 데이터를 알고리즘에 입력하여 학습과정을 통해 모델을 생성하고 예측을 수행함

1.1 전통 프로그래밍 vs 머신러닝

전통적인 프로그래밍 머신러닝
규칙과 논리를 프로그래머가 직접 정의 데이터를 이용해 패턴과 규칙을 스스로 학습
명시적 명령과 조건문을 통해 문제 해결 예측 모델을 통해 새로운 데이터에 대한 결과 도출
  프로그램이 아닌 모델이 중심

 

1.2 머신러닝의 구성 요소

  1. 데이터셋
    1. 개념 : 모델을 학습시키기 위한 데이터 모음
    2. 구성
      • 입력 데이터 : 모델이 학습할 수 있느 정보
      • 출력 데이터 : 모델이 예측해야 하는 목표값
  2. 특징(Feature)
    1. 개념 : 데이터셋에서 모델이 학습할 수 있는 개별 속성
    2. 예시 : 주택가격 예측할 시, 주택의 크기, 위치 , 방의 개수 등이 feature에 해당됨.
  3. 레이블(Label) = 정답
    1. 개념 : 예측하고자 하는 목표 변수
    2. 특징
      • 지도학습 모델에서는 레이블이 있는 데이터셋을 이용하여 모델을 학습시킴
      • 어떤 주제냐에 따라 레이블(정답)이 달라짐
  4. 모델
    1. 개념
      • 데이터의 특징으로부터 레이블(정답)을 예측할 수 있는 지식을 학습할 수 있는 프로그램/함수
    2. 특징 
      • 입력 데이터와 출력 데이터 간의 관계를 학습하여 새로운 데이터에 대한 예측 수행
  5. 학습
    1. 개념
      • 모델이 데이터를 통해서 패턴을 인식하고 이를 기반으로 예측을 수행할 수 있도록 함수 내의 가중치를 조정하는 과정
    2. test : 학습이 끝난 후 새로운 data, 실제 data로 모델의 성능을 검사함

 

1.3 머신러닝의 학습

<학습 과정>

 

  1. 데이터 수집 : 모델을 학습시키기 위한 필요 데이터 수집 단계
    • 예) 과일 가게에 가서 과일 사진 찍어오기
  2. 데이터 전처리 : 결측값 처리, 이상치 제거, 정규화 등등의 작업 단계
    • 예) 사과랑 오렌지만 비교할 건데, 바나나 사진이 있는 경우 이를 삭제
  3. Feature 선택 : 중요 feature을 선택하고 불필요한 피쳐를 제거하여 학습 효율을 높이는 단계
    • 예) 과일 모양, 가격, 무게, 구매한 갯수 중 불필요한 "구매한 갯수"는 제거
  4. 모델 선택 : 문제에 적합한 머신러닝 알고리즘을 선택
    • 예) 사과와 오렌지의 비교에 가장 적절한 머신러닝(모델)을 선출
  5. 모델 훈련 : 트레이닝 데이터셋을 사용하여 모델을 학습시킴
    • 예) 사과는 빨간색이야, 오렌지는 주황색이야 / 사과가 오렌지보다 크기가 더 작아
  6. 모델 평가 : 테스트 데이터셋을 사용하여 모델 성능을 평가
    • 예) 사과와 오렌지를 한 공간에 잔뜩 놓고 비교하는지 확인하기
  7. 모델 배포 : 학습된 모델을 실제 환경에 배포하여 예측 수행

 

<학습 방법>

  1. 지도학습(Supervised Learning)
    1. 개념 : 레이블(정답)이 있는 데이터셋을 이용하여 모델을 학습시키는 방법
      1. 회귀(Regression) : 연속적인 값을 예측하는 문제
        1. 예) 주택 가격 예측, 주식 가격 예측
      2. 분류(Classification) : 이산적인 값을 예측하는 문제
        1. 예) 이메일 스팸 필터링, 이미지 분류
  2. 비지도 학습(Unsupervised Learning)
    1. 개념 : 레이블(정답)이 없는 데이터셋을 이용하여 모델을 학습시키는 방법
      1. 군집화(Clustering) : 데이터를 유사한 그룹으로 묶는 문제
        1. 예) 고객 세분화, 이미지 세그멘테이션
      2. 차원 축소(Dimensionaliy Reduction) : 고차원 데이터를 저차원으로 변환
        1. 예) PCA, t-SNE
  3. 앙상블 학습(Ensemble Learning)
    1. 개념 : 여러 개의 머신러닝 모델을 결합하여 더 나은 성능을 얻는 방법
      1. 배깅(Bagging) : 여러 모델을 독립적으로 학습시키고, 예측을 평균내거나 다수결 투표로 최종 예측
        1. 예) 랜덤 포레스트
      2. 부스팅(Boosting) : 여러 모델을 순차적으로 학습시키고, 이전 모델의 오차를 보완하여 최종 예측을 수행
        1. 예) 그래디언트 부스팅, XGboost
      3. 스태킹(Stacking)
        1. 개념 : 여러 모델을 학습시키고 예측 결과를 새로운 데이터로 사용하여 메타 모델을 학습

2. 과적합이란?

과적합(Overfitting)

  1. 개념
    1. 모델이 훈련 데이터에 지나치게 적응하여 새로운 데이터에 대한 일반화 기능이 떨어지는 현상
    2. 모델이 너무 복잡하여 훈련 데이터의 노이즈까지 학습해버리는 경우에 발생함

 

2.1 과적합 방지

  1. 더 많은 데이터를 수집
  2. 교차 검증(Cross-validation) 사용
  3. 정규화(Regularization) 기법 적용
  4. 간단한 모델 사용

🔥머신러닝에서는 "절대로 좋다"라는 개념은 없음! 상황에 따라, 주제에 따라, 성능에 따라 다 다름🔥


저녁 ( 20 : 00 ~ 21 : 00)

19시 30분부터 20시까지 팀별 회의를 마치고 실습을 진행해보았습니다

1주차 강의를 2번 돌려봤더니 생각보다 시간이 많이 걸리네요 😭

처음 접하는 개념이라서 한 바퀴는 그냥 들어보고

두 바퀴로는 강의 자료랑 함께 보고

세 바퀴로는 공책에 적어가며 했더니 시간이 생각보다 오래 걸려요

주말에도 공부 해야겠어요,,

파이썬 라이브러리도 제대로 이해 못 했거든요,,

 

3. 머신러닝 실습

2주차 강의에서는 데이터셋을 다운받는 내용이 나왔어요

그 중에서 kaggle을 다운받는 절차를 따라 해봅시당

공식 홈페이지에 들어가셔서

회원가입부터 해주세요,,

그래야 프로필이 쓰고 settings에 들어갈 수 있더라구요

프로필 눌러주시면

Settings가 있습니다

스크롤하셔서 내려주시면

API가 있어요

거기에서 Create New Token을 눌러주시면

파일이 하나 다운로드 되실 겁니다

이걸 또 눌러주시면

이렇게 key를 받으실 거예요! 파일 저장해주세요!

~/.kaggle/kaggle.json

 

이렇게 되면 명령어를 통해서 다운로드 받을 수 있게 된대요!

kaggle datasets download -d <dataset-identifier>

 

음,, 저는 프로그래머가 아니기 때문에

그냥 공식 홈페이지에서 다운받았습니다.

https://www.kaggle.com/c/titanic/data

 

Titanic | Novice

Kaggle profile for Titanic

www.kaggle.com

이제서야 진행할 수 있겠네요!

휴우 😤

 


마무리

오늘은 뭔가 한 게 없는 날인 거 같아요

근데 벌써 내일이 금요일이래요! 🫠

내일 다시 머신러닝 2주차부터 해서 실습 하려구요,,

ㅠㅠ

화이팅입니다 ㅠㅠ

 

감사합니다!

 

 

 

+ Recent posts