{% for book in books %}
<li>{{book}}</li>
{% endfor %}

목차

  • Python-조건문
  • django(7~10)

Python-조건문

  1. 조건문의 기본 개념
    • if: 조건이 True이면 코드블록을 실행한다.
    • elif: 앞의 조건이 거짓이라면 다음 조건을 검사
    • else: 위의 모든 조건이 거짓일 때 실행
  2. if 문
if 조건식:
    위 조건이 참일 때 실행할 코드
elif 조건식:
    if가 거짓이고 elif가 참일 때 실행할 코드
else:
    위 조건이 모두 거짓일 때 실행할 코드
  1. AND, OR, NOT 연산자
    • AND: 모든 조건이 True일 때만 True
    • OR: 하나라도 조건이 True이면 True
    • NOT: 조건의 결과를 반전 (True<->False)
  2. 삼항 연산자(조건부 표현식)
참일 때 값 if 조건식 else 거짓일 때 값
  1. 조건문과 함께 자주 쓰이는 비교 연산자

연산자의미예시결과

== 같음 x == y x와 y가 같으면 True
!= 같지 않음 x != y x와 y가 다르면 True
< 작음 x < y x가 y보다 작으면 True
> x > y x가 y보다 크면 True
<= 작거나 같음 `x <= y x가 y보다 작거나 같으면 True
>= 크거나 같음 x >= y x가 y보다 크거나 같으면 True

django(7~10)

7강 Django의 설계 철학 - MTV Pattern

  • 소프트웨어의 디자인 패턴
    • 클라이언트 - 서버 또한 소프트웨어 디자인 패턴 중 하나에요.
    • 자주 사용되는 소프트웨어의 구조를 마치 건축 공법처럼 일반화 해둔 것

Django의 디자인 패턴(MTV Pattern)

  • MTV 패턴은 MVC 패턴을 살짝 변형한 것
  • Model - View - Controller
    • Model : 데이터와 관련된 로직을 관리
    • View : 레이아웃과 관련된 화면을 처리
    • Controller : Model과 View를 연결하는 로직을 처리
  • MTV Pattern
    • Model
      • MVC에서의 Model입니다.
      • 데이터와 관련된 로직을 처리합니다. → 데이터 구조 정의, 데이터베이스 기록 관리해요.
    • Template
      • MVC에서의 View입니다.
      • 레이아웃과 화면상의 로직을 처리 →즉, UI와 레이아웃을 다루어요.
    • View
      • MVC에서의 Controller입니다.
      • 메인 비지니스 로직을 담당합니다.
      • 클라이언트의 요청에 대해 처리를 분기하는 역할을 합니다.
        • DB도 조회하고 외부로 요청하기도 해요.
        • 응답을 만들어서 클라이언트에게 전달해요.

MVCMTV

Model Model
View Template
Controller View

8강 Django Template 시작하기

  • 순서
    1. 요청(Request)이 들어오면
    2. URL(urls.py) 처리
    3. View(views.py) 처리
    4. Template(html) 처리
    5. 응답(Response) 전달
  • URL(urls.py) 방법1
    • urlpatterns(URL패턴 목록)에 path('index/',views.py 경로) 추가
    • path는 url경로 정의
    • url경로가 index일 때 처리 정의
    • views.py에 index view 추가
      • views.py 경로에 views.index 작성
      • views.py파일이 다른 폴더에 있기 때문에 from articles import views 추가
    • python manage.py runserver
      • 기존 링크에 /index를 추가 해주면 위에 정의한 함수들이 출력된 페이지가 나오게 된다.
      • http://127.0.0.1:8000/index/
  • URL(urls.py) 방법2
    • urlpatterns(URL패턴 목록)에 path('index/',views.py 경로) 추가
    • path는 url경로 정의
    • url경로가 index일 때 처리 정의
    • views.py에 index view 추가
      • views.py 경로에 views.index 작성
    • articles폴데에 pamplates 폴더 생성 index.html파일 생성 및 작성 (tip. !gkrh tab을 누르면 기본 html 자동 작성)
    • python manage.py runserver
      • 기존 링크에 /index를 추가 해주면 위에 정의한 함수들이 출력된 페이지가 나오게 된다.
      • http://127.0.0.1:8000/index/
def index(request):
    return render(request, 'index.html')

# render의 기본 구조
render(request, 템플릿, context)

9강 Django template System

  • template란?
    • 데이터를 보여주는 로직
  • Template System
    • 데이터 표현을 위해 다양한 도구를 제공
    • DTL: Django Template에서 사용하는 문법(파이썬과 비슷)
      • 변수, Variable: {{variable}}, view의 context의 키로 넘긴 데이터(value)를 접근할 수 있다.
      • 필터, Filters: {{variable|filter}}, 필터는 약 60개가있어 docs를 참고하여 사용해야한다./커스텀도 가능
      • 태그, Tags: {% tag %}, 반복 또는 논리를 수행하여 제어 흐름을 만들거나 특수한 기능을 수행(시작 태그{% if ~ %}, 종료 태그{% endif %})
      • 주석, Comments: {# 한 줄 주선 #}, {% comment %} 여러줄 주석 {% endcomment %}
    • 변수 사용 방법 views.py의 def함수 안에 context를 딕셔너리형태로 작성, html파일에 {{context의 키 이름}} 작성
    • 태그 사용 방법 views.py의 def함수 안에 태그로 사용할 변수 정의 후 html파일에으로 작성, 태그의 인덱스 순서로 접근하기 위해선 {{태그이름.0}}, 태그에 함수를 적용하고 싶다면 {{태그이름.0|upper}}, 여러줄 태그로 for문을 사용하고 싶다면
    • {{태그이름}}
 
  • Templates Inheritance (base.html과 hello.html보고 참고)
    • 코드의 중복 문제를 해결하기 위한 방법 즉, 템플릿 상속
    • 상위 템플릿에서 하위 템플릿 마다 달라질 부분을 정의
      • {% block block_name %} {% endblock block_name %}
    • 하위 템플릿에서 상위 템플릿을 상속해서 확장한다는 것(최상단에 위치해야 함)
      • {% extends 'template_name' %}
  • 템플릿을 깔끔하게 저장하기 위해서 가장 위의 디렉토리에 templates폴더를 만들고 base.thml 파일 작성하고 settings.py의 TEMPLATES안의 DIRS를 작성 'DIRS': [BASE_DIR / 'templates']

10강 HTTP Form

  • 클라이언트가 서버에게 데이터를 보내는 방법
<form action="/submit/" method="post">
    <label for="username">사용자 이름:</label><br>
    <input type="text" id="username" name="username" required><br>
    
    <label for="email">이메일 주소:</label><br>
    <input type="email" id="email" name="email" required><br>
    
    <label for="password">비밀번호:</label><br>
    <input type="password" id="password" name="password" required><br>
    
    <input type="submit" value="가입하기">
</form>
  • action
    • 데이터가 전송될 URL을 지정합니다.
    • 지정하지 않을경우 현재 페이지의 URL로 데이터를 전송합니다.
  • method
    • 데이터를 전송하는 방식(HTTP request method)을 지정합니다.
    • HTML Form은 GET 방식 또는 POST 방식으로만 전송이 가능합니다.
  • 실습은 data_throw.html 파일에 있다.
    • 사용 태그 lable(for=my_data), input(type=text,id=my_data), button(type=submit)
    • <>를 다 작성하면 뒤에 바로 텍스를 작성해서 화면에 노출
  • input:
    • 사용자의 입력을 받기 위해 사용
    • type 속성에 따라 입력 동작 방식이 달라진다. (defalut값은 text)(text, password, date등)
    • name으로 서버에 데이터를 전달하고, 서버는 name을 보고 데이터를 판단
    • input의 name 속성:
      • form을 제출(submit)하면 name속성에 설정된 값이 서버로 전송
      • name속성의 값이 key가 되고, 사용자가 입력한 값이 value가 되어 전송
  • HTTP란?
    • 하이퍼텍스트 전송 프로토콜 (Hyper Text Transfer Protocol)
    • 여러가지 리소스를 보내고 받을 때 사용하는 프로토콜 (통신규약) == 약속입니다.
    • 요청(request)와 응답(response)로 이루어지는 통신입니다.
    • 웹에서 이루어지는 데이터 교환의 기초라고 할 수 있습니다.
  • HTTP methods
    • HTTP에서 수행할 작업을 나타냅니다.
    • 특정 자원에 대해 내가 수행하고자 하는 동작을 method로 정의.
    • GET, POST, PUT, DELETE, … 등이 있다.
    • GET: 특정한 자원을 조회할 때 사용.
      • 쿼리스트링을 사용해서 전송
      • 쿼리스트링: URL에 데이터가 포함되어 전송하는 방식

목차

  • Docker 3~5강
  • Python-dictionary
  • django(2~6)

Docker 3~5강

모니터링과 로깅

  • 모니터링이란?
    • 컨테이너가 어떻게 돌아가고있는지 확인(성능, 자원, 네트원크 사용량 등)
  • Container 로깅
    • 앱의 실행 과정을 로그로 기록하고 로깅으로 확인
    • docker는 모드 로그의 출력 및 에러를 json-file 로기 드라이버에 기록한다.
    • 로그 파일이 계속 커짐으로 사용량을 정해 주어야한다.(최대크기, 파일 개수)
    • 저장 장소(Ubuntu기준: /var/lib/docker/containers/[컨테이너ID]/[컨테이너ID]-json.log)
    • 명려어 3가지
      1. 전체 출력: docker logs logs-test
      2. 실시간 출력: docker logs -f logs-test
      3. 마지막 10줄 출력: docker logs --tail 10 logs-test

Docker Volume

  • 특징
    • 컨테이너만 사용하는 것과 달리 종료 후 데이터가 남음
    • 여러 컨테이너가 같은 데이터 사용 가능
    • 백업 및 옭기긱 쉬움
    • 코드를 바꿔도 데이터는 유지
  • bind mount
    • 특정 폴더나 파일을 컨테이너 안에 직접 쓸 수 있게 해준다.
    • 폴더나 파일을 골라서 Docker 컨테이너에 붙여넣는 것과 비슷
    • 절대 경로
  • tmpfs mount
    • 컴퓨터 메모리를 사용
    • 일시적 데이터 저장 (영구x)
    • 컨테이너끼리 공유 X

Docker Network/컨테이너 네트워크 모델(CNM)

  • 도커 네트워크는 도커 컨테이너끼리 서로 통신할 수 있게 도와준다.
  • 하나의 샌드박스 안에는 여러개의 엔드포인트가 있을 수 있다.
  • 여러개의 네트워크가 연결 될 수 있다.
  • 요소
    • 샌드 박스: 컨테이너를 외부 세계로부터 완전히 분리하는 역할
    • 엔드 포인트: 외부세계와 샌드박스의 연결점
    • 네트워크: 엔드 포인트에서 다른 엔드 포인트로 즉, 컨테이너에서 다른 컨테이너로 데이터를 보내는 길
  • 종류
    • 브리지 네트워크: 기본 네트워크로 한 컴퓨터 안에서 여러 컨테이너가 서로 통신 (포트 맵핑을 사용하면 외부에서도 컨테이너로 접근 가능)
    • 공용 네트워크: 호스트 네트워크를 사용해 컨테이너가 직접 우리 컴퓨터의 네트워크를 쓰게 하는 방법
    • 사설 네트워크: 컨테이너끼리만 통신할 수 있는 네트워크(외부와 격리)

Python-dictionary

딕셔너리

  • 키, 값 쌍
  • 변경 가능(추가, 삭제, 변경)
  • 키 값 중복 불가
  • 키 값 변경 불가
  • 다양한 자료형 가능

생성

  • 중괄호로 생성 empty = {}
  • dict 함수로 생성
  • fromkeys() 메서드 사용

접근 및 변경

  • 키 값을 사용해 접근 print(person['name']) # Alice
  • get 메서드 print(person.get('name')) # Alice
  • 직접 지정해 변경 person['age'] = 26
  • 요소 추가 person['country'] = 'USA'
  • 삭제 pop , del , clear, del

딕셔너리 메서드

  • keys(), values(), items()
  • 키 값 쌍 요소 추가 update()
  • 제일 뒤 요소 삭제 popitem()
  • 추가나 기존값 불러오기 setdefault()

이후 반복문, 컴프리헨션, 중첩 딕셔너리, 메모리를 배웠습니다.


django(2~6)

장고 프로젝트 생성

  • manage.py로 장고 프로젝트를 핸들링한다.
  • 순서
    1. 가상환경 생성
    2. 프로젝트 생성 및 이동
      • django-admin startproject (프로젝트 이름)
      • cd (트로젝트 이름)
    3. 파일 활성화
      • python manage.py runserver
  • 프로젝트 생성 시 생성 되는 파일/폴더
    • settings.py : 프로젝트의 설정을 관리하는 곳
    • urls.py : 어떤 요청을 처리할지 결정하는 곳

앱과 프로젝트

  • 앱이란?
    • 하나의 프로젝트는 여러 개의 앱으로 구성 됳 수 있다.
      • 하나의 앱으로 모두 개발하는 것도 가능.
  • 비교
    • 프로젝트: 앱의 집합체
    • 앱: 각각의 기능 단위 모듈
  • 앱 생성
    • python manage.py startapp <app_name>
  • 앱 등록
    • setting.py의 INSTALLED_APPS 부분에 앱의 이름을 적어준다.

클라이언드와 서버

  • 클라이언트
    • 인터넷에 연결된 장치 특히, 웹 브라우저(사용자)
  • 서버
    • 자원(Resource)을 가지고 있는 컴퓨터(요청 처리 / 응답하는 주체)

요청과 응답

  • 요청
    • 클라이언트(웹 브라우저, 모바일 앱 등)가 서버에게 특정한 작업을 요청합니다.
    • 클라이언트의 정보, 요청의 형식, 인증 정보 등을 포함합니다.
    • 데이터를 포함하며, JSON이나 HTML 폼 데이터와 같은 형식으로 전달합니다.
    • 클라이언트가 요청하는 것이 무엇인지 URL을 보면 파악할 수 있습니다.
  • 응답
    • 서버가 클라이언트의 요청을 받고 처리한 후에 클라이언트에게 결과를 전송합니다.
    • 결과에는 여러 가지 부가적인 정보를 포함합니다.
    • HTML, JSON, XML 등의 형식일 수 있으며, 클라이언트가 요청한 작업에 따라 다양한 형태로 전송합니다.
 

목차

  • Docker 3강 (1~2)
  • Docker 특강
  • Python-tuple

Docker 3강 (1~2)

강의를 듣기 전에 도커, CI/CD, Ubuntu 등이 뭔지 모르겟어서 인터넷 검색으로 알아보았습니다.

  • docker란?
    • 도커 파일 (Dockerfile)(붕어빵 기계 설계도)
      • 정의: 도커 이미지를 빌드하기 위한 파일.
      • 내용: 빌드: 파일 실행 종류, 프로그램 종류, OS종류 정의 등이 들어간다.
      • 목적: 이미지 생성 과정 자동화.
      • 예: 어떤 운영체제를 사용할지, 애플리케이션 코드 및 라이브러리를 어떻게 추가할지 정의.
    • 도커 이미지 (Docker Image)(붕어빵 기계인데 레시피, 재료를 자동으로 넣어주는 기계)
      • 정의: 애플리케이션 실행에 필요한 모든 것을 포함한 읽기 전용 템플릿.
      • 목적: 컨테이너 실행의 기반 제공.
      • 특징: 불변성, 계층적 구조.
    • 도커 컨테이너 (Docker Container)(붕어빵)
      • 정의: 도커 이미지를 실행한 동작 중인 인스턴스.
      • 목적: 애플리케이션을 고립된 환경에서 실행.
      • 특징: 가벼운 프로세스, 독립 실행 환경.
  • 도커 사용 전체 흐름
    • 앱을 정의한 main코드를 개발자가 수정 후 push => CI파일이 Github Actions에서 코드 체크아웃하여 정의된 도커 파일을 불러와 새로운 가상환경에서 도커 이미지를 생성 =(성공)> 도커 이미지가 생성 되면 수정된 코드가 포함된 도커 이미지를 레지스트리(Docker Hub, AWS ECR 등)에 업로드 => CD파일에서 정의된 대로 도커 이미지를 가져와서 컨테이너로 실행 및 배포
      • 테스트가 성공하면 수동으로 main브랜치에 merge한다고 합니다.
      • 레지스트리에 도커 이미지가 업로드 되는 이유는 현재 진행 상황이나 같이 작업하는 사람들과 공유하기 위해 업로드 된다고 합니다.
  • compose
    • 편하게 설정하기: Docker Compose는 여러 컨테이너를 한 파일에 적어서 설정할 수 있어요. 이 파일에는 컨테이너가 무슨 이미지를 쓸지, 어떤 포트를 사용할지, 환경 변수는 뭐가 필요한지 등을 적어둬요. 이렇게 하면 여러 컨테이너를 한 번에 쉽게 설정할 수 있죠.
    • 자동으로 배포하기: 설정 파일이 있으면, Docker Compose가 알아서 컨테이너들을 만들어 주고 실행해 줘요. 개발자가 일일이 명령어를 입력할 필요가 없어요.
    • 의존성 관리: 컨테이너들이 서로 의존하는 관계가 있으면, Docker Compose가 이를 관리해 줘요. 예를 들어, A 컨테이너가 B 컨테이너를 필요로 하면, A를 먼저 켜고 나서 B를 실행하는 식이죠.
    • 모니터링과 로깅: Docker Compose는 컨테이너들이 어떻게 돌아가는지 지켜보고, 로그도 모아줘요. 이렇게 하면 문제가 생겼을 때 빨리 찾아서 고칠 수 있어요.
    • 확장성: 여러 컨테이너를 하나의 그룹으로 관리할 수 있어요. 이게 좋은 이유는, 예를 들어 웹 앱을 만드는 여러 컨테이너를 한꺼번에 관리하고 확장하기 쉽기 때문이에요.
    • 유연성: Docker Compose는 개발 환경, 테스트 환경, 실제 운영 환경에서도 같은 설정 파일을 써서 일관성을 유지할 수 있어요.
    • 보안 강화: 컨테이너들의 네트워크를 분리해서 외부로부터의 접근을 제한할 수도 있어요. 이렇게 하면 보안이 더 강화돼요.
    • 유지보수가 쉬워요: 설정 파일 하나로 컨테이너들을 관리하기 때문에, 뭔가 바꿀 일이 있으면 파일만 수정하면 돼요. 그러면 Docker Compose가 알아서 변경사항을 적용해 줘요.
  • 장점
    • 빠르게 서비스 실행
    • 한 번에 여러 컨테이너 설정
    • 같은 네트워크에서 쉽게 연결
  • 실행
    1. 각 애플리케이션의 Dockerfile 작성하기
      • 보통 내가 만든 애플리케이션을 실행하기 위한 Dockerfile 만 작성
    2. docker-compose.yaml 파일 작성하기
      • 내가 만든 애플리케이션을 실행하기 위해 필요한 database라든지 redis라든지 다른 서비스들을 한꺼번에 정의하는 파일을 작성
    3. docker compose up 으로 실행하기
  • yaml파일 들여쓰기 검사 링크

Docker 특강

특강에서는 docker에 대한 개념과 실습으로 진행 되었습니다.

  • port
    • 80 = http
    • 443 = https
    • 22 = SSH
    • 3360 = MySQL
    • 5432 = PostgreSQL
    • 8888 = MongoDB
  • 실행
    • 메인 파일 생성
    • 도커파일 생성
    • docker buildx build -t flask-app . 빌드로 도커 이미지 생성
    • docker run -d -p 5000:5000 flask-app 컨테이너 실행
    • 주소창에 localhost:5000 으로 접속
  • 정지 및 삭제
    • 실행 중인지 확인 docker ps
    • 컨테이너 정지 docker stop <CONTAINER_ID>
    • 컨테이너 삭제 docker rm <CONTAINER_ID>
    • 도커 이미지 확인 docker images
    • 도커 이미지 중 NONE 파일 삭제 docker image prune
    • 도커 이미지 삭제 docker rmi <image_id>

Python-tuple

  • 튜플이란?
    • 순서가 있어 인덱스로 접근 가능
    • 불변성(immutable)
    • 중복허용
  • 튜플 생성 방법
    • 괄호 사용 number = (1,2,3)
    • 괄호 없이 생성 my_tuple = 1,2,3
    • 단일 요소 튜플 생성 (5, )
    • tuple()함수 사용
  • 인덱싱과 슬라이싱
    • fruits = ('apple', 'banana', 'cherry', 'date')
      • print(fruits[0]) #apple
    • numbers = (0,1,2,3,4,5,6)
      • print(number[2:5]) #(2, 3, 4)
  • 불변, 삭제 불가
  • 추가는 가능
    • my_tiple = (1,2,3)
      • my_tuple += (4,)
  • 메서드
    • count
    • index
    • 튜플과 리스트의 차이점
    특징튜플리스트
    기호 ()또는 생략 []
    변경 가능성 불변 변경 가능
    요소추가/삭제 불가능 가능
    사용사례 변경이 불필요한 데이터, 키로 사용 데이터 조작이 필요한 경우
    • 튜플은 좌표나 날자 등 순서가 중요한 데이터에 자주 사용
    • 튜플끼리 비교 가능 결과 값은 bool
    • 데이터 베이스에서 레코드를 표현할 때 유용
    • 네임드 튜플은 튜플에 이름을 부여해 코드의 가독성을 높인다.

☑️ 목차

오늘 TIL 순서는

  1. 시작전 마음가짐
  2. Python 과제
  3. 머신러닝
  4. 회고

입니다.

오늘은 따로 필기하거나 작성한 코드가 없습니다.


☑️ 시작전 마음가짐

오늘은 학습에 흐름이 끊기지 않고 한 주제에 매몰 되지않게 순서를 짜 보았습니다.

 

물론 진행하다가 트러블이나 궁금증이 생기면 다시 매몰 될 수 있지만 학습에 오히려 좋은 것 같습니다.

 

어제 하지못한 API키 활용은 꼭 해보고 싶습니다!

 

그럼 학습을 시작하겟습니다.


☑️ Python 과제

1. 대소문자 바꿔서 출력하기

  • 대 소 문자 변환 함수가 upper, lower가 생각나고 한번에 전체 문자열을 바꾸는 함수가 있었는데 라고 생각함
  • 생각나지 않아 검색해보고 swapcase함수를 찾음
  • NameError로 swapcase() 작성 문법 틀려서 메서드 형태로 적용하고 해결
    str = input()
    str_swap = str.swapcase()
    while True:
      if len(str) >= 1 and len(str) <= 20:
          print(str_swap)
          break
      else:
          print('20자 이내의 영어문자만 입력하세요.')
          str = input()
          str_swap = str.swapcase()
          continue

2. 특수 문자열 출력

  • 특수 문자를 그대로 출력하는 방법을 몰라서 검색을 통하여 해결
  • \ 문자열은 \뒤에\를 붙이는 방식으로 출력 가능하는걸 알게 되었습니다. 하지만 너무 복잡해져서 더 알아보고 r string 방법을 찾았습니다.

3. 덧셈 식 출력하기

  • 이 문제는 모르는 부분 없이 금방 완료!!
  • 조건식을 간단하게 하는 방법을 찾아봄 1 <= a <= 100 and 1 <= b <= 100:
    a, b = map(int, input().strip().split(' '))
    if a >= 1 and a <= 100 and b >= 1 and b <= 100:
      print(f'{a} + {b} = {a + b}')

☑️ AI모델활용

강의를 3주차 1강까지 들었습니다.

강의를 들으며

  • 새로운 가상환경을 만들었습니다.
  • numpy 버젼 호환 문제가 발생하여 호환 가능한 버젼으로 다운 그레이드 해주었습니다.
  • transformers와 torch의 호환 문제로 호환되는 버젼으로 다운 그레이드 해주었습니다.
  • 다운그레드 과젱어서 torch vision과 오디오버젼에 문제가 생겼지만 당장 사용하지 않는 라이브러리들이라 변경하지 않았습니다.
  • 3-1까지 설명한 오류는 제외하면 깔끔하게 진행했습니다.
  • API키를 활용하는 모델이 나오지 않아 슬랙 질문방에 공유해주신 코드를 실행해보고 문제 없음을 알게 되었습니다.
  • 내일은 남은 강의를 들으며 나오는 코드와 공유받은 코드의 내부를 내가 바꾸고 싶은대로 해보는게 목표입니다.

☑️ 회고

오늘은 밍글데이로 약간의 쉬어가는 날이였습니다.

 

오늘 밍글데이라는걸 잊어버리고 계획을 잡아 머신러닝 복습과 포트폴리오 도전을 진행하지 못했습니다.ㅜㅜ

 

또한 새로운 챕터 발제가 있었고 내일부터 또 다른 강의를 수강해야할 것으로 보입니다.

 

아직 머신러닝도 복습 마무리 못했는데...

 

우선 강의를 1회 반복을 빠르게 진행하고 다른 복습을 진행하는게 진도 맞추기에 좋을것 같아 원래 한 주 계획이였던 포트폴리오와 머신러닝 복습은 미루어야겟습니다.

 

그리고 수준별 학습 강의를 진행했는데 처음 나오는 과제라서 문제없이 쉽게 풀었지만 튜터님께서 내가 생각한 한가지 방법말고도 여러 방법, 함수 등을 보여 주셨습니다.

 

하루를 마무리할 때 목표는 그 날 수준별 학습 강의 내용을 내 것으로 만들고 마무리하는 것으로 진행 예정입니다.

 

감사합니다.

☑️ 목차

오늘의 TIL순서는

  • 시작전 마음가짐
  • 머신러닝 복습
  • AI모델활용 복습
  • 파이썬 과제
  • 회고 

복습 내용과 코드는 GITHUB링크를 참고해주세요. 

TIL/ML/PCA.ipynb at main · Onesword-Jang/TIL

 

TIL/ML/PCA.ipynb at main · Onesword-Jang/TIL

오늘 배운 것은?! Contribute to Onesword-Jang/TIL development by creating an account on GitHub.

github.com

 

 

 


☑️시작전 마음가짐

오늘의 학습 목표는 ML, AL 복습을 진행하고 API키를 발급 받았기에 AL의 코드를 진행해볼 것입니다.

 

그리고 수준별 학습반의 과제와 포트폴리오 작성를 진행하겟습니다.

 

어제 진행한 ML 복습에서 차원축소 부분의 결과를 해석을 하지못해 갑갑한 마음이있었기에 차원축소 코드 결과를 해석하는데 집중하며 복습을 해야겟습니다.


☑️머신러닝 복습

1. PCA 결과 해석

  • 변수가 너무 많아 기존 변수를 조합해 새로운 변수를 가지고 모델링을 하려고 할 때 주로 PCA를 사용한다.
  • 전체 분산을 95%를 설명하는 주성분을 332개 찾았다.(기존 784차원에서 332차원으로 축소)
  • 각 주성분이 설명하는 분산 비율은 전체 데이터의 변동성을 각 주성분 마다 얼마정도씩 설명해주는지 보여주고 그 값이 제일 큰 주성분을 첫 번째 주성분이라 할 수 있다..
  • 그 332개중에 분산비율이 가장 크고 변동에 영향이 큰 주성분이 X축 두 번째 큰 주성분이 Y축으로 지정 되어서 그래프를 보여준다.
  • 첫번째(x축) 와 두번째(y축) 선을 기준으로 사용해서 데이터 포인트들을 shearing(잡아당김)해서 2차원 그래프로 나타낸다.
  • shearing 했을 때 분산도가 가장 크고 데이터 별로 잘 뭉쳐져있으면 잘 분류한것이라 볼 수 있다.

2. 변동이 많을수록 좋은 이유

  1. 데이터가 다양한 값으로 퍼져있다는 뜻으로, 주성분이 데이터의 다양한 특성을 잘 포착하고 있다는 의미 (데이터의 중요한 구조와 패턴을 더 많이 담고있다.)
  2. 차원 축소에서 고차원 데이터 중 불필요하거나 정보량이 적은 차원을 제거하고, 중요 패턴이 담긴 주성분을 유지하여 차원을 축소한다.
  3. 잡음 제거를 잘한 것이다.

3. 시각화한 그래프를 해석하는 방법

  • mnist데이터셋으로 보았을 때 가장 변동성이 큰 주성분이 X축, 두 번째로 큰 주성분이 Y축이라 볼 수 있고 각 데이터 포인트의 색들은 분류하고자하는 레이블(0~9)를 말한다.
  • 각 색깔 별로 잘 뭉쳐있다면 첫 번째 두 번째 주성분으로 잘 분류가 가능하다라는 의미가 된다.
  • 만약 너무 흩어져있다면 선택된 주성분들의 분류 성능이 좋지 못하다라는 뜻으로 해석이 가능하다.

4. PCA를 사용하는 상황

  1. 차원의 저주 해결이 필요할 떄(변수가 너무 많아 특서을 찾기 어려운 경우)
  2. 다중공선성 문제가 있을 때(변수들 간에 높은 상관관계가 존재하는 경우 모델이 특정 특성에 과도하게 의존해 불안정한 결과가 나오기 때문)
  3. 계산 비용 절감이 필요할 때(대용량 이미지 데이터셋 처리)
  4. 노이즈 제거가 필요할 때(예: 센서 데이터의 노이즈)

5. 머신 러닝의 결과 해석이 중요한지?

  • 실무에 적용 시키면 회사마다 다르지만 이런 기술을 내것으로 만들게 된다면 경쟁력이 높아진다고 생각할 수 있다.

6. 참고 자료

- PCA를 쉽게 설명한 영상

https://www.youtube.com/watch?v=FgakZw6K1QQ

 

- 공분산 행렬의 의미 영상

https://www.youtube.com/watch?v=jNwf-JUGWgg

 


☑️파이썬 과제

1. 문자열 출력하기

  • 공백을 없애는 방법은 기억이 나지않아 찾아보고 작성했다.
  • 다른 사람들의 풀이에서 else를 사용해서 continue 사용방법이 떠올랐다.
    str = input()
    if len(str) >= 1 and len(str) <= 1000000:
      print(str, end="")

2. a와 b 출력하기

  • 조건문을 복습하고 싶어 길게 사용해 보았습니다.
  • 오류로는 들여쓰기(IndentationError), 오타(NameError) 오류를 만낫습니다.
a, b = map(int, input().strip().split(' '))
while True:
    if a >= -100000 and a <= 100000 and b >= -100000 and b <= 100000:
        print(f'a = {a}') 
        print(f'b = {b}')
        break
    else:
        print("-100,000과 100,000 사이의 수 두개만 입력해주세요.")
        a, b = map(int, input().strip().split(' '))
        continue

3. 문자열 반복해서 출력하기

  • input에 틀렸을 때 나오는출력 글을 넣었는데 str과 같이 출력 되는 문제가 생겨서 input의 정보를 지우고 print로 틀렸을 때 경고 메세지로 나오게 만듦
  • str * n부분을 {str} * {n}으로 했다가 ({str} * {n})으로 했다가 마지막에 str * n으로 해서 해결
  • 마지막 continue위 n = int(n)을 추가하지않아 오류 만남 추가해서 해결
str, n = input().strip().split(' ')
n = int(n)
while True:
    if len(str) >= 1 and len(str) <= 10 and n >= 1 and n <= 5:
        print(str*n)
        break
    else:
        print(f'첫 번째 자리는 10자리 이내로, 두 번째 자리는 1~5 숫자만 입력하세요.')
        str, n = input().strip().split(' ')
        n = int(n)
        continue

☑️ AI모델활용 복습

오늘 다른 학습으로 인해서 시간이 없어 미리 필기해놓았던 코드를 가져와서 API키를 활용해 간단한 동작을하는 Chat봇을 만들어보았습니다.

 

하지만 계속 되는 오류(모듈, 들여쓰기, 단어정의, 오타 등)로 작동되지 않았습니다.

 

내일 AI모델활용 복습 시간에 강의를 처음부터 들어가며 새로운 가상환경을 만들어 진행하겟습니다.


☑️회고

오늘은 지금까지 하루 공부한 총 양을 따지면 가장 적게 공부한 날입니다.

 

하지만 한가지의 주제를 심도있게 공부한 날이기도해서 좋았습니다.

 

오늘은 포트폴리오를 만들기 위한 정보를 찾아보았습니다. 간단한 검색으로는 github에 웹싸이트를 만드는 방법들만 주루룩 나왔습니다.

 

깃허브에 웹싸이트는 이미 만들어 놓은 상태이기에 다른 정보를 찾아보았고 좋은 정보가있는 블로그를 발견했습니다.

 

내일은  꼭 API키를 사용해보고 이 블로그와 유튜브 등 영상까지 참고해서 포트폴리오 작성에 대한 철저한 준비와 도전해보겟습니다.

 

https://velog.io/@productuidev/%EC%A4%80%EB%B9%84%ED%95%98%EA%B8%B0-7-%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-GitHub

 

[준비하기] (7) 포트폴리오 - GitHub

인프런 비전공자를 위한 개발자 취업 강의 (7)

velog.io

 

+ Recent posts