[멋쟁이사자처럼 데이터분석] 제어문

블체·2025년 4월 6일

Notion에서 정리한 내용을 공유용으로 옮긴 내용입니다.
양식과 구성의 어색함이 있을 수 있습니다.

04/02(수) 학습내용을 바탕으로, 당일이 아닌 추후 업로드하였음


주피터 사용 방법 ↓

Restart Kernel and Run All Cells

  • 초기화 후 모든 셀 다시 실행
  • 처음 나오는 화면은 실행된 것이 아니라, 그냥 이전 것이 보이는 작업내역 따라서 어제 쓴 a1=100 을 오늘 바로 코드에 사용할 수 없음
  • 그냥 적용하면 not defined로 뜸 → 새로 실행해 주기

제어문

  • 코드의 흐름은 순행적인데 그 흐름을 제어하는 것이 → 제어문
  • 파이썬은 3가지의 제어문만 존재 (switch 없음)

if

  • 결과가 T,F인 식 들어감
  • 결과가 T면 동작
  • 결과가 F면 동작 X

while

  • 결과가 T,F인 식 들어감 → ☆
  • 결과가 T면 아래 내용 수행 후 다시 ☆로 돌아감
  • 결과가 F면 동작 X

for

  • 데이터를 관리하는 요소 반드시 필요

if 문

else

  • if 문의 False인 경우 수행되는 부분
  • if는 T든 F든 바로 실행됨
# else
# if 문의 조건식의 결과가 False인 경우 수행되는 부분
if a1 == 100 :
    print("a1은 100입니다") # 실행 O
else :
    print("a1은 100이 아닙니다") # 실행 X

if a1 != 100 :
    print("a1은 100이 아닙니다") # 실행 X
else :
    print("a1은 100입니다") # 실행 O
a1은 100입니다
a1은 100입니다

elif

  • 조건이 여러 개일 때
    • 조건이 2개 (ex. 성별)
      if - else 로 가능
    • 조건이 여러 개 (ex. 연령대)
      elif로 사용
  • True인 것만 수행되고 아래는 실행되지 않음
    • if 문은 위에서 아래로 내려오면서 조건식을 계산함

    • True인 것을 만나면 그 부분 수행

    • if문 전체 수행 끝

      ※ 문법 검사는 코드 수행 전 따로 하기 때문에 문법은 맞아야 함

※ switch case 문

  • if문은 처음부터 차례차례 실행
    100개 중 90번째가 T면 첫 번째부터 90개의 elif를 실행 후 결과 도출
  • 이걸 건너뛰고 그 위치만 바로 찾을 수 있게 해주는 게 switch
  • but 파이썬에서는 이 부분을 없앰

※ 슈퍼 컴퓨터

  • 1988에 슈퍼 컴퓨터 처음 들여옴
  • 측정 기준
    • 1+1을 얼마나 빠르게

    • 1+1을 1초에 얼마나 많이

      → 전력 공급량을 생각하지 않고 측정하는 방법

    • 전력량을 고려하여 측정하는 방법

      • 전력량 스트레스 테스트?
    • 요즘은 속도가 거의 차이를 느끼지 못할 정도

      (ns 단위의 차이)

      → 사용자가 편한 쪽으로

      → 파이썬 : 개발자의 공부량을 줄이고 다 빼버림

      cf) 코틀린

      • 최근에 만들어진 언어
      • 공부량 오히려 늘어남
      • but 생산성 좋음 → JAVA에서 코틀린으로 바뀌는 추세

반복문

while

  • True인 경우 구문 실행하고 다시 돌아옴
While (조건식) :
    구문 1
else :
    구문 2

but else는 무의미. 그냥 밖에 쓰면 됨

while (조건식) :
    구문 1
    구문 2
구문 3
구문 4
  • while은 F가 되지 않으면 영원히 돌아감 → 무조건 False 필요
  • 중단 시키는 방법 : Interrupt Kernel

for in

  • range(n)
    : 0부터 n-1까지 반복 (n개 반복)

반복 번째 에 해당하는 데이터가 변수에 들어감

  • for v1 range(10)
    0,1,2,3,4,5,6,7,8,9까지 들어감
    • 0이 v1에 들어감
      구문 실행
    • 1이 v1에 들어감
      구문 실행

    • 마지막인 9가 v1에 들어감
      구문 실행
  • range 대신 (10,20,30)
    for i in (10,20,30) :
        print(i)
    10
    20
    30
    • 10이 들어감, 반복
      20이 들어감, 반복
      30이 들어감, 반복
    • 관리하는 데이터의 반복 번째에 있는 데이터가 변수에 들어감
      → 구문 실행
  • 설계 능력을 늘리는 연습
    코딩을 실무에서는 구현할 일이 없음 그냥 갖다 씀
  • 절대 코드 외우지 X
    외우면 절대 다른 유형 문제 못 품
  • 단기간에 코딩 테스트 봐야 한다면 암기 어쩔 수 없음
    but 무조건 다시 설계하는 연습할 것
    ※ 주석 더 중요해짐
  • while : 이 조건을 가지고 반복할 거야. / 끝나는 범위가 지정
  • for : 몇 번을 반복해야 하지? / 여기 있는 데이터로 반복해야지

EX

  • 주석 필수로 달기!
    한글로 설계 먼저 하고, 그 후 코드 작성하기

Ex 1) 1부터 3씩 증가시킨 숫자를 총 20개 출력

원래는 a = a + 3print(a) 자리가 반대였는데, 4부터 출력되길래 순서 변경

# 학습
a = 1
for _ in range(20) :
    print(a)
    a = a + 3

이렇게 하면 for 밖에 print(a) 했을 때 61 출력됨

but 출력은 정상 작동

→ 다른 변수를 사용하면 됨. for 밖에서 a를 안 쓰면 되지

# [정답]
a1 = 1
# 1을 출력한다.
print(a1)

# 19번을 반복한다
for _ in range(19) :
    # 3을 증가시킨다
    a1 = a1 + 3
    # 출력한다
    print(a1)

Ex 2) 1부터 100까지의 숫자 중 3의 배수를 모두 출력

# [정답1]
# 1부터 100까지 반복한다.
for v1 in range(100) :
    # 3의 배수인지 확인한다.
    if (v1 + 1) % 3 == 0 :
        # 출력한다.
        print(v1 + 1)
# [정답2]
# 1부터 시작하므로 1을 가지고 있는 변수를 선언한다.
a1 = 1
# 100까지 반복한다.
while a1 <= 100 :
    # 현재 숫자가 3의 배수인지 검사한다.
    if a1 % 3 == 0 :
        # 만약 3의 배수이면 출력한다.
        print(a1)
    # 1을 증가시킨다.
    a1 = a1 + 1
# [정답3]
a1 = 3
while a1 <= 100 : # 내 풀이는 여기서 <= 대신 < 로 작성ㅠ 제대로 보자!
    # 출력한다.
    print(a1)
    # 3을 증가시킨다.
    a1 = a1 + 3
# <실행 중간>
# 숫자를 입력 받는다.
number1 = input('숫자를 입력해 주세요 :')
number2 = int(number1)
# print(number2)
# 1부터 입력 받은 숫자까지의 총합을 구한다.
# 출력한다.

# print(number2) 이 부분 보면 주석 되어 있음.

  • 한 데까지 잘 작동되는지 확인하는 습관 들이기
    그리고 주석 처리
    습관화되어야 나중에 리버깅?하기도 쉬움

break / continue

  • 단독으로 쓰이지 않고 if - break, if - continue로 씀

  • break, continue가 쓰이지 않아도 충분히 구현 가능 (break는 필요할 수 있음)

  • 왜 쓰는가? 데이터의 결함이 없게끔 하기 위해 사용 → 데이터 무결성 보장

  • break

    • True라고 하더라도 break 만나면 아래 구문 무시하고 중단
    • 외부의 요인에 의해 중단해야 하는 경우 사용
      • 0이 나올 때까지 진행하는데, 언제 0이 들어갈지 모르는 경우
  • continue

    • 끝까지 안 갔더라도, 뒤에 True인 내용이 있더라도 다음 반복 (while 위치로 올라가서) 실행
    • 밑이 더 있더라도 특정 조건이면 바로 반복되게

※ 절대 하면 안 되는 행위

  • 선택적 통계의 적용
    • 내가 세운 가설이 맞다는 걸 증명하기 위해서 나에게 유리한 것만 봄
  • 다방면 분석, 다양한 시각
  • 내가 세운 가설이 틀렸다, 라는 걸 가설검증
    → 내가 세운 가설이 맞다는 걸 주장하는 확실한 방법!
  • 데이터 처리 단계
  1. 데이터 수집
  2. 데이터 메모리에 저장
  3. 데이터 무결성 검사
  4. 처리 및 변환
  5. 분석 및 해석
  6. 출력 및 시각화
  7. 저장 및 배포
  • 데이터 무결성 검사를 위해 while - break 문 사용
# (학습) 데이터 결함 검사 예시 1
a1 = 0
while a1 <= 100 :
    a1 = a1 + 1
    if a1 % 3 == 0 :
        print(a1)
# (학습) 데이터 결함 검사 예시 2
a1 = 0
while a1 <= 100 :
    a1 = a1 + 1
    if a1 % 3 != 0 :
        continue
    print(a1)

💡

※ 데이터에 접근하는 자세

  • 공공데이터포털
  • 신한카드 API 같은 것들 제공
  • 서울시, 지방, 대학 등등 관심있게 알아두기
  • 병원 진료기록 어플
  • 데이터를 보고 이 데이터를 가지고 기업에서 어떤 이득을 취할까 생각해 보기
    • 비용 절감, 이득 극대화, 재고 절감 등등

      → 처방전 사진 찍으면 제휴병원 할인 : 보험 인수거절에 쓰임

      → 만보기 걸음 체크 : 운동 - 건강 연관지어 보험회사에서 사용

💡
  • 포트폴리오 작성시 비즈니스 모델이 무엇인가? 어떤 비즈니스 모델을 가져갈 수 있는가? (수입, 비용 절감 등등) 생각해 보기
  • 특정 회사에 포트폴리오 넣을 때 그 회사와 관련된 데이터 수집, 데이터 분석해서 넣기

※ AI-hub

다양한 분야들/형태들의 공부하기 좋은 데이터 많이 제공

→ 틈틈이 데이터 한 번씩 보기

→ 데이터 보는 시각 확장, 인사이트 뜨이게 하기

  • 검색 팁
    - 000(기업 이름) “개발자 센터”
        open API 제공하는 경우 많음
        
    - 000(지역 이름) “공공데이터”

과제 - 04.02

  • 1부터 1000까지 숫자 중 소수를 모두 출력한다.
# 1부터 1000까지 반복한다.
number1 = 1

while number1 <= 1000 :
    # 2부터 현재 숫자 - 1까지 반복하며 나머지를 구해본다.
    number2 = 2

    # 소수인지의 여부를 판단하기 위한 변수
    isPrimeNumber = True
    
    while number2 < number1 :
        # 만약 하나라도 나누어 떨어지게 된다면 소수가 아니므로 다음 반복으로 넘어간다
        if number1 % number2 == 0 :
            isPrimeNumber = False
            break

        number2 = number2 + 1
    # 만약 나누어 떨어지는 숫자를 만나지 못했다면 소수이므로 출력한다
    if number1 != 1 and isPrimeNumber == True :
        print(number1)

    number1 = number1 + 1

후기

설명 들으면서 느끼는 수학과의 공통점

  1. 처음 헷갈리면 일단 하나씩 다 해보고 반복되는 부분 찾으라고 하심

    → 축차대입법. 하나씩 해보면서 규칙 찾는 방법

  2. 외우기만 하면 안 되고 스스로 설계하는 과정 필요

    → 수학도 단순 공식 암기에서 끝나거나 문제를 외우는 것이 아니라 개념에 대한 이해 필요

    수시 대비는 어쩔 수 없이 외우더라도 그 후 반복하여 익히기

내가 설계하는 것보다 다른 사람이 만든 코드 이해하는 게 확실히 더 어렵다…

소수 알고 있는 개념이고 알고리즘 방식 알고 있어도 약간 차이가 있을 때 아 이걸 여기서 넣었구나, 이 개념 이렇게 했구나가 확실히 내가 구현하는 것보다 느림

주석이 진짜 필필수…남 보여줄 거면 자세할수록 좋다

profile
벨로그 적응할 수 있을까

0개의 댓글