티스토리 뷰

1-1. Basic computer class for newbies (Day1)

1. 컴퓨터 OS

  • 프로그램은 OS에 의존적이다. 

2. File System

  • file system이란, OS에서 파일을 저장하는 트리구조 저장 체계를 의미한다.
  • 절대 경로: 루트 디렉토리에서 파일 위치까지의 경로 (ex.C:\Program Files (x86))
  • 상대 경로: 현재 있는 디렉토리에서 타깃 파일까지의 경로 (ex. ..\..\function_example.py)

3. 터미널 환경

  • 과거 컴퓨터를 사용할 때 대형 컴퓨터에 접속하기 위해 Terminal 창을 통해 연결했다.
  • GUI(Graphic User Interface)와 반대되는 개념으로 생각할 수 있다. (<=>Command Line Interface)
  • Console = Terminal = CMD창
  • Terminal 창 위에 shell이라는 프로그램이 작동된다.

참고) https://velog.io/@cataiden/terminal-shell

 

터미널(Terminal)과 쉘(Shell)

터미널과 쉘에 대한 기본적인 개념을 알아보았습니다.

velog.io

  • CMD창과 powershell 등의 차이가 뭔지 이해가 안 되어 팀원분이 보내주신 글을 기반으로 다시 정리해봤다.
    • 윈도우 Powershell은 기존 command prompt(명령 프롬프트)보다 더 발전되었고,  cmd의 모든 작업을 수행할 수 있다.
    • 윈도우 terminal은 powershell, 명령 프롬프트 등의 작업들을 모두 수행한다.

https://junetony.junebest.com/entry/%EB%AA%85%EB%A0%B9-%ED%94%84%EB%A1%AC%ED%94%84%ED%8A%B8-vs-%ED%8C%8C%EC%9B%8C%EC%89%98-vs-%EC%9C%88%EB%8F%84%EC%9A%B0-%ED%84%B0%EB%AF%B8%EB%84%90-%EC%B0%A8%EC%9D%B4%EC%A0%90

 

명령 프롬프트(CMD) vs 파워쉘 vs 윈도우 터미널 차이점

윈도우 운영 체제와 함께 제공되는 가장 오래된 앱 및 명령줄 도구 중 하나는 CMD라고 하는 명령 프롬프트입니다. 이제 윈도우에는 한두 가지가 아닌 세 가지 도구가 제공됩니다. 명령 프롬프트

junetony.junebest.com

  •  

1-2. Python Overview

  • 파이썬은 플랫폼 독립적인 인터프리터 언어이고, 객체 지향 동적 타이핑 언어이다.
  • 컴파일러 vs. 인터프리터
    • 컴파일러: 소스코드를 기계어로 한 번에 번역하여, 실행속도가 빠르지만 많은 메모리가 필요하다.
    • 인터프리터: 소스코드를 실행시점에 한 줄씩 해석해서 처리함. 파이썬은 인터프리터 언어이다.
  • 동적 타이핑: 프로그램이 실행되는 동시에 데이터에 대한 타입을 정함. (자바와 비교해볼 수 있다.)

1-3. 파이썬 코딩(개발) 환경

1. 운영 체제

  • 종류: 윈도우, 리눅스, Mac OS

2. Python Interpreter

  • 종류: Python, Anaconda

3. 코드 편집기(Editor)

  • 종류:
    • 1) 설치된 어플리케이션: 메모장, Visual Studio Code, Pycharm 
    • 2) 웹 기반 인터랙티브 편집기: jupyter notebook, google colab 

 

  • "conda activate base" Powershell에서 anaconda prompt를 실행시킨다. (속도가 더 빠른 것 같다.)
  • Jupyter notebook이나 "code ."으로 vscode를 실행시킬 수 있다.

2-1. [Python] Variable & List

1. Variable

  • 변수(Variable)는 값을 가지고 있는 것이 아니라, 그 값을 저장한 메모리 주소를 가지고 있다.
  • apple = 5는 "apple은 5개"라는 뜻이 아니라 apple이라는 이름을 가진 메모리 주소에 5를 저장하라는 뜻이다.

2. List

  • 리스트 변수에는 리스트의 메모리 주소값이 저장된다. ("="를 equal로 생각하지 말고, 메모리 주소에 그 값을 할당 및 연결한다는 의미로 생각.)
  • 패킹(packing): 한 변수에 여러 데이터를 넣는 것 (ex. fruits = ["apple","banana","cherry"])
  • 언패킹(unpacking): 한 변수의 데이터를 각각의 변수로 반환하는 것 (ex. a, b, c = fruits)
  • 일차원 리스트는 (리스트 이름)[:] 을 하면 복사가 가능하지만, 이차원 리스트에서는 copy 모듈을 사용해야 한다.

2-2. Function & Console I/O

1. Function

  • parameter 와 argument의 차이
    • parameter: 함수의 입력 값 인터페이스 (ex. def client(name): return ("Hi"+name) 에서 name)
    • argument: 실제 parameter에 대입된 값 (ex. client("JinYu") >>>Hi JinYu 에서 JinYu)
    • 주의! print 함수의 return값은 None임!

2. Console I/O

  • print할 때 콤마(,)기준으로 자동 띄어쓰기되어 출력됨.

3. print formatting

  • 1)  %-format
    • "%datatype" %(varable or argument)
    • ex. print("I eat %d apples." %3)
    • ex. number = 5 , print("I eat %d bananas." %number)  (,는 가독성을 위해 잠시,,,)
    • "%.2f" 의 의미: float 타입의 수를 소수점 뒤 둘째 자리까지만 출력해라.
  • 2) str.format()
    • "{datatype}".format(variable or argument)
    • ex. age = 22, name = "JinYu", print("My name is {0} and {1} years old.".format(name, age))
  • 3) f-string
    • f"{varible or argument}"
    • ex. print(f"Hello {name}. You are {age} years old")

2-3. 조건문과 반복문

  • Debugging Loop을 통해 반복문 안에서 버그를 잡는 습관을 들이자.

 

Day1 회고) 긴 방학을 끝내고 오랜만에 강의를 들으려니 머리가 지끈거렸다,,, 그래도 이렇게 집중해보는 것도 오랜만이라 성취감도 있었고 팀원 분들 열심히 하시는 모습을 보니 나도 더 분발해야겠다는 욕심이 생긴다! 학교 행사 때문에 온전히 집중할 수 없다는 점이 아쉽지만 피해 가지 않게 더 노력해야겠다.

 

Day1 질문) cmd(terminal)과 shell의 관계. GUI가 아니라 터미널 사용을 굳이 해야하는 이유?! 결국 파워쉘, cmd창, cmder 등의 차이

2-4. String and advanced function concept (Day2)

1. String

  • raw string: \n 과 같은 기호를 무시하고 그대로 출력하게 해준다.
    • 사용 예시: raw = r"밥 먹고 싶다. \n 레알", print(raw) >>>밥 먹고 싶다. \n 레알

2. Function

  • 함수 호출 방식:
    • (1) 값에 의한 호출(Call by Value) : 함수에 argument를 넘길 때 값 자체만 넘긴다. 그렇기 때문에 함수 안에서 parameter를 변경할 때 기존의 argument 값에는 영향을 주지 않는다.
    • (2) 참조에 의한 호출(Call by Reference): 함수에 argument를 넘길 때 그 값의 메모리 주소를 넘긴다. 그러므로 함수 안에서 parameter를 변경할 때 기존 argument 값도 변경된다.
    • (3) 객체 참조에 의한 호출(Call by Object Reference): 객체의 주소가 전달되는 방식이다. 파이썬이 이에 해당된다. 전달된 객체를 참조하여, 함수 안에서 변경 시 argument에도 영향을 주지만, 새로운 객체를 만들 경우 영향을 주지 않는다.
  • function type hints:
    • 파이썬의 가장 큰 특징인 dynamic typing이 오히려 함수를 사용하고자 하는 사용자에게 어려움을 줄 수 있다.
    • type hints의 장점: 사용자에게 인터페이스를 명확히 암시할 수 있고, 함수 문서화 시 parameter에 대한 정보를 알 수 있다.
  • docstring:
    • 큰따옴표 세 개로 함수명 아래에 함수에 대한 자세한 설명을 작성한다.
  • 함수 개발 가이드 라인
    • 이해하기 좋은 함수 이름을 써야한다.
    • 하나의 함수에는 유사한 역할을 하는 코드만 포함한다. 
    • 함수 내에서는 임시변수를 선언하자.
    • 보통 복잡한 수식이나 조건을 작성해야할 때, 공통적으로 사용되는 코드를 함수로 작성한다.
    • 코드는 하나의 '보고서'이다. 좋은 코드는 많은 사람이 이해할 수 있는 코드이다.
    • 들여쓰기는 4 space 나 tab 모두 상관없지만 혼합해서 써서는 안 된다.
    • i, I, O 사용 자제
    • black 모듈 사용해서 pop8 like 수준을 준수하는지 알 수 있고, 이 모듈을 코드를 자동으로 수정해준다.

별개 다 예뻐보임 하하


3-1. Python Data Structure

1. 파이썬 기본 데이터 구조

  • 스택(Stack), 큐(Queue), 튜플(Tuple), 집합(Set), 사전(Dictionary) (해시 테이블)

2. collections

  • 기본 데이터 자료 구조에 대한 Python Built-in 확장 자료 구조
  • (1) deque: stack과 queue를 지원하는 모듈이다. rotate, reverse 등 Linked List의 특성을 지원한다. 기존 list보다 효율적인 자료구조로 처리 속도가 더 빠르다.
  • (2) OrderedDict: 데이터를 입력한 순서대로 dict를 반환한다. 하지만 python 3.6부터는 쓸모 없어졌다,,,
  • (3) defaultdict: Dict type의 값에 기본 값을 지정해준다. (사용 예시: defaultdict(lambda: 0))
  • (4) Counter: sequence type의 원소들의 갯수를 dict 형태로 반환한다. set 연산들을 지원한다.
  • (5) namedtuple: tuple 형태로 data 구조체를 저장한다.

3-2. Pythonic code

1. Split & join

  • split: (문자열).split(문자를 나누는 기준) # 기준이 없이 그냥 빈 괄호이면 빈칸을 기준으로 문자열 나눈다.
  • join: '(연결 할 문자)'.join(리스트)

2. List Comprehension

  • 기존 List로 간단히 다른 List를 만드는 방법으로 일반적으로 for문이나 append 함수보다 속도가 빠르다.
  • 사용 예시:
#1
result = [i+j for i in word_1 for j in word_2]

#2
result = [i+j for in case_1 for j in case_2 if not(i==j)]

#3
result = [[i+j for i in case_1] for j in case_2]

3. enumerate & zip

(1) enumerate

  • list의 원소들을 출력할 때 번호(인덱스)를 붙여서 출력한다.
  • 사용 예시:

 

위에 jupyter notebook 옮겨오는 법은 우리 팀원 분께서 알려주셨다,,,~!

(2) zip

  • 두 개 이상의 list의 원소들을 병렬적으로 출력한다.
  • 사용 예시:

 

망고가 고양이를 먹는다?!?!?!

4. lambda & map & reduce

(1) lambda

  • 함수이다. 하지만 기존의 다른 함수처럼 def (함수명): 형식으로 선언할 필요없다.
  • 오히려 이 점 때문에 PEP8 에서는 lambda 사용을 권장하지 않는다.
  • 이외에도 다양한 단점이 있지만 여전히 많이 쓰인다.

(2) map

  • 함수에 list를 인자로 넣어준다. 두개 이상의 list에도 적용된다.
  • map 사용 시 iteration을 생성하기 때문에 list를 붙여줘야 한다.
  • 실행 시점에 값을 생성하여 메모리 측면에서 효율적이지만 lambda와 비슷한 이유로 권장되진 않는다.
  • 사용 예시:
ex1 = [1,2,3,4,5]
ex2 = [6,7,8,9,10]
f = lambda x,y : x+y
print(list(map(f,ex1,ex2)))
>>> [7, 9, 11, 13, 15]

(3) reduce

  • map function과 다르게 연속형 자료구조(리스트 등)의 원소들을 누적하여 값을 추출한다.
  • 사용 예시:
from functools import reduce
ex1 = [1,2,3,4,5]
print(reduce(lambda x,y:x+y, ex1))
>>>15

5. iterable object

  • iterable는 리스트나 문자열과 같이 연속적으로 반환할 수 있다는 것을 의미한다. 즉, iterable object는 차례대로 꺼낼 수 있는 객체를 의미한다.
  • __iter__ () : iter(객체) 와 같은 함수로 객체의 메모리 주소를 저장한다.
  • __next__() : next(객체)와 같은 함수로 객체의 다음 원소를 불러낸다.
  • 사용 예시:

 

6. generator

  • yield 함수를 통해 iterable object인 generator를 만들 수 있다.
  • list와 동일하게 next함수를 통해 원소를 불러낼 수 있다.
  • []가 아니라 ()를 사용하여 표현한다.
  • 큰 데이터를 처리할 때는 generator expression이 더 적합하다.

7. function passing arguments

(1) Keyword arguments

def introduce(name,age):
	print(f"Hi, My name is {name} and I'm {age} years old!")
    
name = "marie"
age = "27"
print(introduce(name,age))
>>> Hi, My name is marie and I'm 27 years old!

(2) Default arguments

  • arguments를 따로 입력하지 않을 경우 parameter의 기본 값을 출력한다. 
def introduce(name, age = 25):
	print(f"Hi, My name is {name} and I'm {age} years old.")
    
name = "jun"
print(introduce(name))
>>> Hi, My name is jun and I'm 25 years old.

(3) variable-length asterisk

  • 함수의 parameter가 정해지지 않았을 때 사용한다.
  • (1) 가변인자(variable-length):
    • 개수가 정해지지 않은 변수를 함수의 parameter로 사용한다.
    • asterisk(*) 기호를 사용하여 나타낸다.
    • 입력된 값은 tuple 형태로 사용된다.
    • 일반적으로 *args를 parameter이름으로 사용한다.
    • 사용 예시:
def ast(a,b,*args):
	return a,b,sum(args)
print(ast(1,2,3,4,5))
>>>(1, 2, 12)
  • (2) 키워드 가변인자(Keyword variable-length):
    • parameter 변수명을 지정하지 않고 입력하는 방법이다.
    • asterisk(*) 두 개를 사용하여 나타낸다.
    • 입력된 값은 dict 형태로 사용된다.
def ast(a, **kwargs):
    print(a,kwargs)
    print(type(kwargs))
    
ast(1,b=2,c=3,d=4)

>>> 1 {'b': 2, 'c': 3, 'd': 4}
>>><class 'dict'>

 

  • asterisk의 또다른 용도 - unpacking a container
    • tuple, dict 와 같은 자료형에 들어가 있는 원소들을 unpacking할 수 있다.
a = ([1,2],[3,4],[5,6])
print(*a)

>>> [1,2],[3,4],[5,6]

for data in zip(*a):
	print(data)
>>> (1,3,5),(2,4,6)

Day3 질문: Day1 질문과 이어지는데 파일 핸들링과 같은 건 왜 배워야하는지,,,


4. Python OOP(Object-Oriented Programming)

1. 클래스와 객체

  • 클래스: 인스턴스를 구현하는 틀이나 설계도를 의미한다. 클래스를 기반으로 다양한 인스턴스를 만들 수 있다.
  • 객체: 인스턴스의 더 포괄적인 의미로, 실제 세계에 존재하는 모든 물건, 실체라 할 수 있다. 이 객체는 각각의 속성 및 특성이 있고, 특정 행동을 할 수 있다. 여기에서 속성을 변수(variable), 행동은 함수(method)라 한다.
  • 처음 클래스를 만들 때, 속성(attribute)를 추가한다. 이때 __init__라는 이름의 객체 초기화 built-in 함수를 만들고 그 파라미터에 self를 넣어 준다. 여기서 self는 생성된 인스턴스 자신을 가리킨다.

2. OOP 의 특징

  • 상속(Inheritance): 부모 클래스로부터 속성(attribute)와 함수(method)를 물려받은 자식 클래스를 생성할 수 있다.
  • 다형성(Polymorphism): 이름이 같은 method가 서로 다른 행동을 수행하게 할 수 있다.
  • 가시성(Visibility): private, public 등 직접 설정하여 객체의 정보를 다른 사용자가 어느정도 볼 수 있는지 조절할 수 있다.

3. Decorate

  • first-class object: 파이썬의 함수는 일급함수 및 일급객체(first-class object) 로 파라미터로써 전달이 가능하다.
  • inner function: 함수 내에 또 다른 함수가 존재한다.
  • 위의 두가지 특성을 통해 decorator function을 구현할 수 있다.

 

 

4-2. Module and Project

  • module == .py 파일을 의미한다.
  • 프로젝트 진행 시, 각 프로젝트마다 필요한 패키지를 따로 설치하려면 가상 환경에서 설치하는 방법이 있다.
  • 대표적으로 virtualenc + pip 과 conda가 있다. Windows에서는 conda, linux와 mac에서는 conda 또는 pip을 사용한다.

5-1. Exception / File / Log Handling

1. Exception

  • 예상 가능한 예외와 예상 불가능한 예외 상황으로 나누어 볼 수 있다. 예상 가능한 예외는 미리 개발자가 명시적으로 정의할 수 있지만, 예상 불가능한 예외는 그렇지 않다.
  • 예상 불가능한 예외에 대한 대처를 Exception Handling이라 한다. 대표적으로 try~except문과 Built-in Exception 등을 사용할 수 있다. 
  • try~except 문을 사용할 때는 except 다음에 예외 상황을 자세히 적어주는 것이 좋다. (except Exception: ~ 이라 하게되면 어디에서 에러가 났는지 알 수 없다.)
  • raise 구문: 강제로 Exceptiondmf 발생시켜야할 때 사용한다. (raise <Exception type>())

2. File Handling

  • 파일 종류는 크게 text 파일과 binary 파일로 나눌 수 있다. text 파일은 인간이 이해할 수 있는 ASCII/Unicode 문자열 형식으로 저장되어 있고, Binary 파일은 컴퓨터만 이해할 수 있는 이진법 형식으로 저장되어 있다. (text 파일도 실제로는 binary 파일이다.)
  • 파이썬에서 open()함수를 통해 파일과 연결하고 read()함수나 with구문을 통해 문자열로 반환할 수 있다. 또한 readline() 함수로 한 줄씩만 읽어오게 할 수 있다.
  • open()함수에서 'w'로 모드를 바꾸어 파일을 작성할 수 있다. 이때 encoding 설정을 꼭 해줘야하는데, 주로 utf8이 쓰이고 cp949 도 쓰인다.
  • os모듈로 directory를 다룰 수 있다.
    • os.mkdir("디렉토리명") : 디렉토리를 생성한다.
    • os.path.isdir("디렉토리명") : 디렉토리가 있는지 확인한다.
    • os.path.exists("디렉토리명") : 디렉토리가 있는지 확인한다.
    • os.path.join("이동시킬 파일의 도착 디렉토리","파일명") : 파일을 특정 디렉토리로 이동시킨다.
    • shutil.copy (복사할 파일, 붙여넣을 파일) : 파일 복사 함수
  • pathlib 모듈을 사용하여 path를 객체로 다룸으로, os마다 path가 다른 것을 해결할 수 있다.
  • Pickle : 파이썬의 객체를 영속화하는 built-in 객체이다. python에 특화된 binary file이기도 하다.

3. Logging Handling

  • 로그란 기록을 의미한다. 프로그램이 작동하는 동안 (WHAT) 유저의 접근, Exception 등을 (HOW) Console 화면에 출력하거나 파일/DB에 남겨서 (WHY) 기록된 로그를 분석하여 프로그램을 보완할 수 있다.
  • logging level : 프로그램의 개발 시점, 운영 시점마다 다른 log가 남을 수 있도록 한다. DEBUG > INFO > WARNING > ERROR  > Critical순서이고, setLevel()함수로 화면에 출력시킬 레벨을 설정할 수 있다.
  • logging level이나 로그 저장 장소 등을 설정해줄 방법이 필요하다.
    • 1) configparser :  로그를 파일에 저장해준다. Dict type으로 호출 후 사용한다.
    • 2) argparser : 실행시점에 Console 창에서 Setting 정보를 저장한다.

5-2. Python data Handling


6. Numpy(Day4)

  • 일반적으로 속도는 for 문 < list comprehension < numpy 순으로 빠르다.
  • Numpy는 C로 구현되어 있어 dynamic typing이 적용되지 않는다.
a_list = [1,2,3]
b_list = [3,4,5]
print(a_list[0] == b_list[-1])
>>> True

a = np.array(a_list)
b = np.array(b_list)
print(a[0] == b[-1])
>>> False

리스트는 python이 메모리 안에 고정된 실수 값(-5 ~ 256)의 주소를 저장하기 때문에 같은 값으로 인식하는 반면, numpy array는 각 array마다 Memory block을 가지고 있기 때문에 서로 다른 값으로 인식한다.

  • 이외에도 numpy의 아주 다양한 함수 및 기능들을 배웠다. 강의자료를 사전처럼 잘 활용하면 좋을 것 같다.

7. Pandas

(출처 : https://wikidocs.net/75004)

  • 강의에서는 가로축 Series를 instance, tuple, row라 배웠다.
  • numpy와 마찬가지로 다양한 기능을 배웠다. 이 글은 주간 학습 정리를 하는 글이므로 자세한 내용은 필요하다면 따로 다룰 예정이다.
  • 처음 groupby 함수를 pandas에서도 사용할 수 있다는 사실을 알았다.

 

 

week1 학습 분량이 워낙 많기도 하고, 일정이 겹쳐서 결국 week2에 이어서 작성 중이다... 첫 주부터 이럼 안 되는데 이번주 밤을 샌다는 생각으로 열심히 따라잡아야겠다ㅠㅠ

 

혹시 수정할 부분이 있다면 언제든지 피드백 남겨주세요!~

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함