본문 바로가기
ABC부트캠프

[3일차] ABC 부트캠프 : 파이썬프로그래밍1 (24.07.08)

by 나무거나 2024. 7. 9.
728x90

#ABC부트캠프 #유클리드소프트 #고용노동부 #대한상공회의소 #미래내일일경험사업 #인공지능 #파이썬 #머신러닝 #딥러닝

오늘은 기술 배움 1일차~!!

비가 많이 와서 교육장까지 가기 힘들었지만 어떻게든 도착!

오늘부터는 동구 대전 지식산업센터도 아니고 ibs 기초과학연구원도 아닌

대전 정보문화산업진흥원에서 진행하였습니다.

https://www.dicia.or.kr/

오늘은 테크노트 작성방법을 설명해주시는 것을 시작으로 추가 전달사항에 대해 공지 해주시고 강의를 시작하였습니다.


Jupyter Notebook 활용 및 Python 기초

오늘 교육은 아나콘다라는 실습 플랫폼 설치로 시작했습니다.

아나콘다 플랫폼은 실습환경에 필요한 각종 라이브러리와 코드 작성을 위한 실습 환경을 제공합니다.

https://www.anaconda.com/

오늘의 주요 내용!!

  1. Jupyter notebook의 주요 기능 및 단축키 등 설명
  2. 라이브러리 활용 등 Python 기초 문법 리뷰

오늘의 목표!!

  1. Jupyter Notebook을 활용해서 Python 코드를 작성하고 실행할 수 있다.
  2. Python 기초 문법을 복습한다.

Jupyter Notebook 사용법과 기본 단축키

jupyter notebook은 여러 cell을 수직적으로 결합해서 문서를 만들거나 분석을 수행

상단 메뉴바와 아이콘을 활용하여 cell을 추가, 제거, 이동, 복사 가능

cell에 명령어를 입력하고 실행해서 결과 확인

1-1. Jupyter notebok 주요 단축키 목록 명령 모드(cell의 추가, 복사, 삭제 등), "ESC"
A : 위에 cell 추가 B : 아래에 cell 추가
/아래 화살표 : cell 이동
D, D : cell 삭제
M : cell을 Markdown(문서 작성) 형식으로 변경
Y : cell을 Code(명령어 작성) 형식으로 변경 수정 모드(각 cell 안에서 명령어 등 입력),
"ENTER" Tab : 들여쓰기 혹은 코드 완성 Shift + Tab : 들여쓰기 취소 혹은 툴팁(도움말)
Ctrl + / : 주석처리/해제
 
cell 실행
Shift + Enter : 실행하고 다음 cell로 이동
Ctrl + Enter : 실행
 
기타
Ctrl + S : 저장하기
Shift + Tab : 함수 정의보기

이 코드의 결과는 어떨까요?

# 단축키를 이용하여 Cell을 실행하고 결과를 확인할 수 있습니다.
1 + 2
3 * 6

두 개의 사칙연산이 있으니 이렇게 나올까요?

3
18

정답은 18만 결과로 도출됩니다.

그 이유는 둘 다 계산은 하였지만 마지막에 계산한 값을 도출하게 된 것이죠

주석

위의 코드에서 뭔가 이상한 게 있죠?

# 단축키를 이용하여 Cell을 실행하고 결과를 확인할 수 있습니다.
1 + 2
3 * 6

# 뒤에 설명을 넣어두었는데요

이건 다른 사람이나 자신이 코드를 이해하기 쉽게 코드 실행에 영향을 주지 않는 설명란이라고 생각하면 좋을 것 같아요.

나름 전공자이지만 드래그해서 ctrl+/를 하면 모든 부분이 주석 처리되는 것은 오늘 알았네요..

주석 처리를 하면

# "#"을 붙여서 주석(comment)을 달 수 있습니다.
# 1 + 2
# 3 * 6

이렇게 바뀐답니다.

1-2. 새 폴더와 새 노트북 파일 만들기

jupyter 메인 페이지에서 경로를 이동하거나 새 폴더 생성 가능

jupyter 메인 페이지 및 노트북 내 상단 메뉴 [File] > [New Notebook]에서 새 노트북 파일 생성

간단한 실습

새 노트북 파일에서 A, B 를 눌러 새로운 cell을 추가하고, M, Y를 눌러 마크다운과 코드로 형식을 바꿔봅시다. Enter를 누른 수정 모드에서 간단한 수식을 넣고 Ctrl+Enter로 실행하고, Shift+Enter로 다시 한번 실행한 다음 차이를 확인합니다. 다시 방향 키로 위의 cell로 이동한 다음 수정 모드에서 Ctrl+/를 눌러 작성한 스크립트를 주석 처리하거나 직접 #을 써서 주석을 입력해 봅시다.

[File] > [Download as]로 다양한 형식으로 노트북을 저장 가능

[Edit] > [Clear Outputs of All Cells]로 모든 실행 결과를 지울 수 있음

1. 새로운 Cell 추가 (A 또는 B)

2. Cell 형식 변경 (M 또는 Y)

마크다운 셀

이것은 마크다운 셀입니다. 굵게 또는 기울임과 같은 형식을 사용할 수 있습니다.

# 이것은 코드 셀입니다.
print("Hello, World!")

3. 수식 입력 및 실행

마크다운 셀에 다음과 같은 수식을 입력:

$$
E = mc^2
$$

4. 주석 처리

코드 셀에서:

# 이 코드는 Hello, World!를 출력합니다.
print("Hello, World!")

Ctrl+/로 주석 처리하거나 #을 사용하여 직접 주석을 입력합니다.

5. 출처 입력 및 다양한 형식으로 저장

  • 노트북을 다양한 형식으로 저장하려면 [File] > [Download as]로 이동.
  • 모든 실행 결과를 지우려면 [Edit] > [Clear Outputs of All Cells]로 이동

자 오전 수업이 끝났으니 밥을 먹어 볼까요? (중요)

오늘의 사건

오늘 구내 식당 이용이 불가하다는 공지를 보고 저희 조는 고민중이었는데요.

비도 많이 오니 걱정중이었죠..

이러는 중 저희의 생각을 읽으신걸까요

한 줄기 빛같은 공지

구내식당 이용 못한다는 공지와 피자 제공 공지의 공감 차이가 보이시나요

저희 팀도

안심하고 수업을 계속 수강하였습니다.ㅎㅎ

그리고 중간중간 배고픔과 당충전을 위해 준비해주신 과자와 음료수!!

이거 사라지면 끝일줄 알았는데 어디서 자꾸 다른 과자가 충전되어 있더라구요

항상 배려에 감사합니다

 

그리고 배달 온 피자 처음 먹어본 맛이었어요.

(피자를 처음먹어본건 아니구요.. 신기한맛..?)

잘 먹었습니다~~


2. Library 관리

Python을 활용해 데이터를 분석하기 위해서는 pandas와 같은 라이브러리 설치가 필수 pip 툴을 활용해서 라이브러리를 설치 가능

jupyter notebook 안에서 shell command를 실행하기 위해서 !를 앞에 붙임

라이브러리를 설치하기 위해서는 외부망 접속이 가능해야 하고, 외부망에서 소스 파일을 다운로드해 압축을 풀기 위해서는 특정 폴더에 대한 권한도 필요합니다.

2-1. Library 설치하기

!pip install numpy pandas matplotlib seaborn plotly xlrd openpyxl
>>>
Defaulting to user installation because normal site-packages is not writeable Requirement already satisfied: numpy in c:\programdata\anaconda3\lib\site-packages (1.24.3) Requirement already satisfied: pandas in c:\programdata\anaconda3\lib\site-packages (1.5.3) Requirement already satisfied: matplotlib in c:\programdata\anaconda3\lib\site-packages (3.7.1) Requirement already satisfied: seaborn in c:\programdata\anaconda3\lib\site-packages (0.12.2) Requirement already satisfied: plotly in c:\programdata\anaconda3\lib\site-packages (5.9.0) Collecting xlrd Obtaining dependency information for xlrd from https://files.pythonhosted.org/packages/a6/0c/c2a72d51fe56e08a08acc85d13013558a2d793028ae7385448a6ccdfae64/xlrd-2.0.1-py2.py3-none-any.whl.metadata Downloading xlrd-2.0.1-py2.py3-none-any.whl.metadata (3.4 kB) Requirement already satisfied: openpyxl in c:\programdata\anaconda3\lib\site-packages (3.0.10) Requirement already satisfied: python-dateutil>=2.8.1 in c:\programdata\anaconda3\lib\site-packages (from pandas) (2.8.2) Requirement already satisfied: pytz>=2020.1 in c:\programdata\anaconda3\lib\site-packages (from pandas) (2022.7) Requirement already satisfied: contourpy>=1.0.1 in c:\programdata\anaconda3\lib\site-packages (from matplotlib) (1.0.5) Requirement already satisfied: cycler>=0.10 in c:\programdata\anaconda3\lib\site-packages (from matplotlib) (0.11.0) Requirement already satisfied: fonttools>=4.22.0 in c:\programdata\anaconda3\lib\site-packages (from matplotlib) (4.25.0) Requirement already satisfied: kiwisolver>=1.0.1 in c:\programdata\anaconda3\lib\site-packages (from matplotlib) (1.4.4) Requirement already satisfied: packaging>=20.0 in c:\programdata\anaconda3\lib\site-packages (from matplotlib) (23.0) Requirement already satisfied: pillow>=6.2.0 in c:\programdata\anaconda3\lib\site-packages (from matplotlib) (9.4.0) Requirement already satisfied: pyparsing>=2.3.1 in c:\programdata\anaconda3\lib\site-packages (from matplotlib) (3.0.9) Requirement already satisfied: tenacity>=6.2.0 in c:\programdata\anaconda3\lib\site-packages (from plotly) (8.2.2) Requirement already satisfied: et_xmlfile in c:\programdata\anaconda3\lib\site-packages (from openpyxl) (1.1.0) Requirement already satisfied: six>=1.5 in c:\programdata\anaconda3\lib\site-packages (from python-dateutil>=2.8.1->pandas) (1.16.0) Downloading xlrd-2.0.1-py2.py3-none-any.whl (96 kB) ---------------------------------------- 0.0/96.5 kB ? eta -:--:-- ------------ --------------------------- 30.7/96.5 kB 1.3 MB/s eta 0:00:01 ------------ --------------------------- 30.7/96.5 kB 1.3 MB/s eta 0:00:01 ------------------------- -------------- 61.4/96.5 kB 409.6 kB/s eta 0:00:01 ---------------------------------------- 96.5/96.5 kB 553.1 kB/s eta 0:00:00 Installing collected packages: xlrd Successfully installed xlrd-2.0.1

"pip install"은 Python의 패키지 관리 시스템인 pip을 사용하여 패키지를 설치하는 명령어입니다.

이를 통해 다양한 외부 라이브러리와 패키지를 쉽게 설치하고 사용할 수 있어요.

2-2. Library 설치 확인

  • 4개 결과 출력여부 확인
  • openpyxl
  • pandas
  • plotly
  • seaborn
# Windows !pip list --format=freeze | findstr /r "pandas seaborn plotly openpyxl"
# Mac # !pip list --format=greeze | grep "pandas\|seaborn\|plotly\|openpyxl"
>>> geopandas==0.14.1 openpyxl==3.0.10 pandas==1.5.3 plotly==5.9.0 seaborn==0.12.2

위 4개의 라이브러리 설치를 확인하는 코드인데

저는 이전에 다른 라이브러리를 설치한 적이 있어 하나가 더 뜨네요.


3. 기본 문법

  • 세미콜론: 한 줄에 여러 코드를 입력할 때 각 코드를 구별한다.
  • #: 실행 코드가 아닌 설명을 위한 텍스트
  • 들여 쓰기: Tab으로 들여쓰기
  • 코드 블록: 복수의 명령 집합, 들여 쓰기를 기준으로 하며 동일 코드 블록은 동일한 들여 쓰기를 갖는다.
  • 입력: input 내장 함수
  • 출력: print, display 내장 함수

위의 내용과 비슷하지만 조금은 다른 코드입니다. 결과가 어떻게 나올까요?

 

# 4 + 1 과 같이 간단한 사칙 연산을 수행해 본다.
print(4 + 1)
2 * 3
1 + 1

 

이 코드의 결과는

5
2

이렇게 나옵니다. 그 이유는 코드를 위에서부터 순서대로 진행하였을 때

print라는 함수가 괄호 안의 값을 도출하고 2*3 계산 후 패스 1 + 1은 마지막 계산이니 도출하는 방식인 것이죠.

그럼 출력을 해주는 파이썬 함수는 어떤 것이 있을까요?

printdisplay가 있습니다.

한번 실행해 볼까요?

# print("hello python!") 명령어를 실행해 본다. 출력해주는 함수 2가지 print, display
print("hello python!")
display(2)
>>>
hello python!
2

다음으로 우리가 어떤 정보를 넣고 싶은데 계속 코드 안을 수정하기 싫을 때가 있잖아요

예를 들어 이름을 넣으면 어떠한 결과가 나오는 코드를 만들고 싶은데 코드 안에서 계속 이름을 바꿔주는 것보다는 실행하였을 때 내가 입력한 값으로 결과가 나오게 하는 함수가 있어요.

바로 input() 함수입니다.

예제로 확인해 볼까요?

# input 함수를 활용하면 사용자로부터 입력을 받을 수 있습니다. 입력함수 input() # 사용자로부터의 입력은 "문자열"로 취급됩니다. input("이름을 입력해주세요") #print() 함수를 쓰지 않으면 코드쉘에 마지막에 실행된것의 결과가 보여진다.

이 코드를 실행하면

"이름을 입력해 주세요"라고 뜨고 내가 원하는 이름을 입력할 수 있어요.

#결과 이름을 입력해주세요 ABC
ABC

4. Python 기초

4-1. 변수, 상수 그리고 리터럴

변수란 값을 저장하는 메모리 공간! 저장되는 값 자체를 리터럴이라고 한다. 상수는 기본적으로 변하지 않는 값이지만 파이썬에서는 표기법으로만 구분한다

자 아래 코드 통해 변수에 대해 설명드리겠습니다.

# 변수명에 값을 대입함으로써 변수를 만들 수 있습니다. (선언과 할당)
x = 35 #그냥 대입이니 결과가 반환되지 않는다
x #대입한 결과를 반환

변수는 이름을 지을 때 규칙이 있어요.

  1. 영문 대/소문자를 구별
  2. 특수문자는 오직 "_"만 사용 가능
  3. 숫자로 시작할 수는 없지만 변수명 중간에는 가능
  4. 공백을 포함할 수 없음

자 위에 코드는 x라는 변수를 선언한 것입니다. 위의 규칙에 위배되는 사항은 없죠?

하지만 여기서 잠깐!

변수명은 x라고 하는 것보다 우리가 사용하는 목적에 맞는 변수명을 사용하는 게 좋아요.

예를 들어 나이를 변수로 설정한다면 age로 하는 게 나중에 알아보기 좋겠죠?

다시 위 코드로 돌아가서 x라는 변수를 선언하고 35의 값을 변수 x에 할당한 것입니다.

즉, x는 35의 주소를 대신하게 되는 것이죠.

하지만 x = 35만 코드에 넣으면 대입만 한 것이라 아까처럼 마지막에 있다고 해서 결과가 반환되지는 않아요

변수의 결과를 반환하고 싶다면?

변수 이름을 적어주시면 됩니다!!

그럼 위 코드에서는 35가 반환될 거예요.

이번엔 참조에 대해 알아보겠습니다.

선언, 할당, 참조

참조는 무엇일까요?

참조는 이미 만들어진 변수를 이름을 통해 불러서 사용할 수 있다는 것을 의미해요

아까 위에서 x를 35로 선언, 할당했었죠?

그럼 이 코드는 어떤 결과를 반환할까요?

c = x + 10 print(c) # 선언 할당 참조

c는 x(35)+10 이니 45의 값이 할당되고

print() 함수를 이용하여 결괏값을 도출하면 45가 도출되겠죠?

# 기본적인 표기법 카멜 표기법, 스네이크 표기법, 헝가리안 표기법
userName = '홍길동'
user_name = '홍길동'
str_userName = '홍길동' # 상수 ## 대문자 표기로 상수임을 암시
PI = 3.14 # 하지만 변수와 동일하게 값이 변경 가능
PI = 123

잘못된 변수명은?

inputScore

__age

cat house

dog&cat

정답은 cat house와 dog&cat입니다

그 이유는 cat house에는 공백이 포함되어 있고 dog&cat에는 &의 특수문자가 사용되어 잘못된 변수명입니다.

[연습 1] 입력 함수 input()을 사용하여 이름, 나이, 주소를 입력받아 변수에 저장한 후 출력하시오.

name = str(input("이름을 입력하세요:"))
age = int(input("나이를 입력하세요:"))
address = str(input("주소를 입력하세요:"))
print("이름은 {}이고, 나이는 {}이고, 주소는 {}입니다.".format(name,age,address))
>>>
이름을 입력하세요:jun
나이를 입력하세요:24
주소를 입력하세요:대전
이름은 jun이고, 나이는 24이고, 주소는 대전입니다.

배운 것을 활용하면 간단하죠? 조금 다른 점이 있다면 차후 나올 예정입니다.

위에 나온 내용으로 풀어도 결과는 같아요!

4-2. 파이썬 데이터 타입과 연산자

파이썬은 다양한 데이터 타입을 제공한다.

Numeric, Boolean, Text, Sequence, Set 등

숫자형 데이터 타입 (Numeric Types)

# 숫자형 데이터 타입,
정수(int) 실수(float)
x = 10
y = 10.0
x_type = type(x)
y_type = type(y) # 값을 형태를 알 수 있는 내장 함수, type()
x_type
y_type

 

x와 y의 데이터 타입은 무엇일까요?

x는 정수이니 타입은 int

y는 실수이니 타입은 float

입니다.

# 정수(integer)는 0을 포함한 소수점 없는 수

## 1, -10, 0

# 숫자를 활용한 산술 연산자

## +, -, *, /, //, %, **

# 대입 연산자

## +=, -=, *=, /=

# 연산자 우선순위

a = 1 + 3 * 2

# 타입 변환 ## int(), float()
int("10")
float("3.14")
int(3.14)
float(10)
>>> 10.0

내가 만약 정수로 10을 받고 실수로 3.14를 받았는데 둘의 데이터 타입을 바꾸고 싶다

라면 위 코드처럼 int() 안에 실수 float() 안에 정수를 넣으면 데이터 타입이 바뀌는 것을 확인하실 수 있습니다.

# 숫자형 데이터 다루기
## abs, pow, divmod
 
print(abs(1))#절대값
print(pow(2,3))#제곱승
divmod(3,2)#몫과 나머지

[연습] x에 10.1을 저장하고, y에 101을 저장한 다음 더하기

x = 10.1
y = 101
x+y
>>> 111.1

 

[연습] 21을 8로 나눈 몫과 나머지 구하기

print("21 // 8=",21//8,"\n""21 % 8=",21%8)
>>> 21 // 8= 2 21 % 8= 5

[연습] 실수 3.14를 정수형 타입으로 변경하기

print(int(3.14))
>>> 3

논리형 데이터 타입 (Boolean Type)

# 참과 거짓을 나타내는 데이터 타입

## 참(True), 거짓(False)

True

False

# 형 변환

bool('1')

## 거짓으로 취급되는 다양한 값들

## 1. None, False

## 2. 0, 0.0

## 3. '', (), [], {}, set(), range(0)

# 논리형 값이 도출되는 연산 - 비교 연산자

# 논리형 값의 연산 - 논리 연산자 and, or, not

# and

x = True and True

x = True and False

x = False and True

x = False and False

# or - 각자 해보고 결과 출력하기

True or True

True or False

False or False

False or True

# not

not True or False = False or Fals

[연습] 변수 x가 10 이상 99 이하인지 확인하는 연산을 비교연산자와 논리연산자를 활용하여 구성하시오

  • x = 20
x = 20
if x >=20 and x <= 90:
  print("변수 x가 10이상 99이하 입니다.")
x >=20 and x <= 90
>>> 변수 x가 10이상 99이하 입니다.
True

[연습] 변수 x가 3의 배수인지 확인하는 연산을 구성하시오

  • x = 20
x = 20
if x % 3 == 0:
  print("변수 x는 3의 배수 입니다")
else:
  print("변수 x는 3의 배수가 아닙니다")
x % 3 == 0
>>>
변수 x는 3의 배수가 아닙니다
False

[연습] 변수 x가 3의 배수이면서 동시에 7의 배수인지 확인하는 연산을 구성하시오

  • x = 210
x = 210
if x % 3 == 0 and x % 7 == 0:
  print("변수 x는 3의 배수이면서 동시에 7의 배수 입니다")
else:
  print("변수 x는 3의 배수이면서 동시에 7의 배수가 아닙니다")
x % 3 == 0 and x % 7 == 0
>>> 변수 x는 3의 배수이면서 동시에 7의 배수 입니다
True

[연습] 변수 score가 80점대 인지 확인하는 연산을 구성하시오

  • x = 85
score = 85
if score >= 80 and score < 90:
  print("변수 score가 80점대 입니다")
else:
  print("변수 score가 80점대가 아닙니다") score >= 80 and score < 90 >>> 변수 score가 80점대 입니다 True

[연습] 변수 x가 3의 배수이고 7의 배수가 아닌지 확인하는 연산을 구성하시오

  • x = 60
x = 60
if x % 3 == 0 and not(x % 7 == 0):
  print("변수 x는 3의 배수이면서 7의 배수가 아닙니다")
else:
  print("변수 x는 3의 배수이면서 7의 배수가 아닙니다")
x % 3 == 0 and not(x % 7 == 0) x % 3 == 0 and x % 7 != 0
>>> 변수 x는 3의 배수이면서 7의 배수가 아닙니다
True

[연습] x가 y보다 크고, y가 z보다 작은지 확인하는 연산을 구성하시오

  • x = 10
  • y = 5
  • z = 15
x = 10
y = 5
z = 15
x > y and y < z
>>> True

문자형 데이터 타입 (Text Sequence Type)

# 문자열 (str)은 큰따옴표(") 또는 작은따옴표('), 세 따옴표(''', """) 쌍으로 표시

x = '안녕하세요'

# 문자열을 활용한 연산 ( + , * )

## 덧셈(+), 곱셈(*)

# 문자열 포멧팅

## printf-style String Formatting | format % values

## %로 시작하며

"나는 %s를 좋아합니다" % '고양이'

## format method

"나는 {}를 좋아합니다.".format('고양이')

## f-strings

f"나는 {'고양이'}를 좋아합니다."

# 문자열 다루기

## 인덱스

message = "hello python!"

message[0]

## 인덱싱과 슬라이지

## object[index]

## object[start:end:step]

# 문자열 다루기 - 함수와 메서드

## len, count

## find, index, split, join, upper, lower, replace

len("abc")

"abcd".replace('a', '1')

"abcd".find('b')

"abcd".index('e')

[연습] a=1, b=5로 할당하고 문자 'a + b는'과 a+b 계산 결과를 print( )로 함께 출력

a = 1 
b = 5
print("{} + {}는 {}".format(a,b,a+b))
>>>
1 + 56

[연습] text를 모두 대문자로 변환하여 출력하시오.

text = "Python is Fun!"

text = "Python is Fun!"
str.upper(text)
text.upper()
>>> 'PYTHON IS FUN!'

[연습] 문자열 "Python"을 추출하여 출력하세요.

text = "Learning Python is fun!"

text = "Learning Python is fun!"
text[9:15]
>>> Python

[연습] text에서 "programming"을 "Python"으로 교체하여 출력하세요.

text = "I love programming."

text = "I love programming."
#text = text[0:7] + "python"
text = text.replace("programming", "Python")
text
>>> 'I love Python.'

여기까지가 오늘의 강의 내용이었습니다 내일은 파이썬 2일차로 돌아오겠습니다.~~

728x90