🔗출처

 

📘 Python 계단밟기

제02장 두 번째 계단밟기

01. Python(파이썬) 표준 입출력

3. 모듈의 사용(import)

3.1. 모듈이란?

자주 사용되는 코드나 유용한 코드를 논리적으로 묶어서 관리하고 사용할 수 있도록 하는 것이다.

 

  • 보통 하나의 파이썬 .py 파일이 하나의 모듈이 된다.
  • 모듈 안에는 함수, 클래스, 혹은 변수들이 정의될 수 있으며, 실행 코드를 포함할 수도 있다.

 


3.2. 내장 모듈

 

파이썬은 기본적으로 상당히 많은 표준 라이브러리 모듈을 제공하고 있다.

IDLE에서 help("modules")을 입력하면 설치된 모듈의 목록을 확인할 수 있다.

help("modules")
>>> help("modules") [Enter]

Please wait a moment while I gather a list of all available modules...

__future__          autocomplete        idle                sched
__main__            autocomplete_w      idle_test           scrolledlist
_ast                autoexpand          idlelib             search
_asyncio            base64              idna                searchbase
_bisect             bdb                 imaplib             searchengine

중간 생략.....

asyncio             hmac                rstrip              zoomheight
asyncore            html                run                 zzdummy
atexit              http                runpy               
audioop             hyperparser         runscript           

Enter any module name to get more help.  Or, type "modules spam" to search
for modules whose name or summary contain the string "spam".

>>>

 


3.3. 모듈의 사용(import)

 

이러한 모듈들을 사용하기 위해서는 모듈을 import 하여 사용하면 된다.

import문은 다음과 같이 하나 혹은 복수의 모듈을 불러들일 수 있다.

import 모듈
import 모듈1, 모듈 2, 모듈 3...
import 모듈명 as 별명

 

  • 모듈에 있는 모든 내용을 포함시킨다.
  • '모듈명, 함수명'처럼 모듈명을 반드시 입력해야 한다.
  • as를 사용하여 모델명에 별명을 붙일 수 있다.

 

from 모듈 import 함수
from 모듈 import 함수 1, 함수 2, 함수 3...
from 모듈 import *
from 모듈 import 함수 as 별명

 

  • from import 방식을 사용하면 모듈 이름을 생략할 수 있다.
  • *를 사용하면 모듈에 있는 모든 내용이 포함된다.
  • as를 사용하여 모델명에 별명을 붙일 수 있다.

 

실행 값 입력
# 모듈(Module) 사용하기
import datetime
import math
import math as m
from math import pi
from math import *

# import datetime
now = datetime.datetime.now()
print(now)

# import math
print("The value of pi is", math.pi)

# import math as m
print("The value of pi is", m.pi)

# from math import pi
print("The value of pi is", pi)

# from math import *
print("The value of e is", e)
실행 결과
2018-07-06 17:27:36.859288
The value of pi is 3.141592653589793

The value of pi is 3.141592653589793

The value of pi is 3.141592653589793

The value of e is 2.718281828459045

🔗 출처

📘 Python 계단밟기

제02장 두 번째 계단밟기

01. Python(파이썬) 표준 입출력

2. Python(파이썬) 표준 입력

2.1. input 함수

 

Python에서는 표준 입력을 하는 함수로 input 함수를 지원한다.

실행 값 입력
# 표준 입력
# input함수의 도움말을 확인해 보자
help(input)
실행 결과
Help on built-in function input in module builtins:

input(prompt=None, /)
    Read a string from standard input.  The trailing newline is stripped.

    The prompt string, if given, is printed to standard output without a
    trailing newline before reading input.

    If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
    On *nix systems, readline is used if available.

 

위의 도움말을 보면 Input 함수의 사용법은 다음과 같다.

  • input() : 표준 입력장치(키보드)로부터 문자열을 입력받는다.
  • input('문자열') : 문자열을 출력하고 표준 입력장치(키보드)로부터 문자열을 입력받는다.
  • 입력된 값은 문자열이다.
  • 사용자가 EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return)을 입력하면 EOFError를 발생시킨다.

 

실행 값 입력
# 표준 입력
print('이름을 입력하세요', end="")
name = input();

print("이름 : {0}, type : {1}".format(name,type(name)))
name = input('이름을 입력하세요 ');

print("이름 : {0}, type : {1}".format(name,type(name)))
name = input('아무것도 입력하지 말고 EOF(Ctrl+D 또는 Ctrl+Z+Enter)를 입력해보세요');
실행 결과
이름을 입력하세요 한사람
이름 : 한사람, type : <class 'str'>

이름을 입력하세요 두사람
이름 : 두사람, type : <class 'str'>

아무것도 입력하지 말고 EOF(Ctrl+D 또는 Ctrl+Z+Enter)를 입력해보세요^D
Traceback (most recent call last):
  File "C:/PyThonProjects/Ex01/basic03/Ex13_input1.py", line 7, in <module>
    name = input('아무것도 입력하지 말고 EOF(Ctrl+D 또는 Ctrl+Z+Enter)를 입력해보세요');
EOFError: EOF when reading a line

 


2.2. 정수 입력

 

기본적으로 input() 함수는 문자열로 입력된다.

그래서 입력받은 값을 정수형으로 변환해서 사용해야 한다.

 

  • eval() 함수 : 인수를 유효한 파이썬 표현식으로 리턴한다.
  • int() 클래스 : class int(x=0), class int(x,base=10)
    숫자나 문자열 x로부터 만들어진 정수 객체를 돌려준다.
    인자가 주어지지 않으면 0을 돌려준다.
    base는 진법을 나타내며 주로 2, 8, 10, 16을 사용합니다. 10이 기본값이다.

 

실행 값 입력
# 표준 입력
data = input("정수를 입력하시오 : ")
print(data, type(data))
# print(data, type(data), data + 1) 에러 문자열과 정수를 +(더하기)할 수 없습니다.

data = eval(input("정수를 입력하시오 : "))
print(data, type(data), data + 1)

data = int(input("정수를 입력하시오 : "))
print(data, type(data), data + 1)

data = int(input("2진수를 입력하시오 : "), 2)
print(data, type(data), data + 1)

data = int(input("8진수를 입력하시오 : "), 8)
print(data, type(data), data + 1)

data = int(input("10진수를 입력하시오 : "), 10)
print(data, type(data), data + 1)

data = int(input("16진수를 입력하시오 : "), 16)
print(data, type(data), data + 1)
실행 결과
정수를 입력하시오 : 1
1 <class 'str'>

정수를 입력하시오 : 2
2 <class 'int'> 3

정수를 입력하시오 : 3
3 <class 'int'> 4

2진수를 입력하시오 : 1010
10 <class 'int'> 11

8진수를 입력하시오 : 10
8 <class 'int'> 9

10진수를 입력하시오 : 10
10 <class 'int'> 11

16진수를 입력하시오 : 1a
26 <class 'int'> 27

 


2.3. 실수 입력

 

기본적으로 input 함수는 문자열로 입력된다.

그래서 입력받은 값을 실수형으로 변환해서 사용해야 한다.

 

  • eval() 함수 : 인수를 유효한 파이썬 표현식으로 리턴한다.
  • float() 클래스 : class float(x)
    숫자나 문자열 x로부터 만들어진 실수 객체를 돌려준다.
    인자가 주어지지 않으면 0을 돌려준다.

 

실행 값 입력
# 표준 입력
data = input("실수를 입력하시오 : ")
print(data, type(data))
# 에러 문자열과 실수를 +(더하기)할 수 없습니다.
# print(data, type(data), data + 1.2)

data = eval(input("실수를 입력하시오 : "))
print(data, type(data), data + 1.2)

data = float(input("정수를 입력하시오 : "))
print(data, type(data), data + 1.2)
실행 결과
실수를 입력하시오 : 3.14
3.14 <class 'str'>

실수를 입력하시오 : 3.14
3.14 <class 'float'> 4.34

정수를 입력하시오 : 3.14
3.14 <class 'float'> 4.34

 


2.4. 튜플(tuple), 리스트(list)로 입력받기

 

기본적으로 input 함수는 문자열로 입력된다.

 

  • eval() 함수 : 인수를 유효한 파이썬 표현식으로 리턴한다.

 

실행 값 입력
# 표준 입력
string = input("(1,2) 처럼입력하시오 ")
print(string, type(string))

string = eval( input("(1,2) 처럼입력하시오 "))
print(string, type(string))

string = input("[1,2,3,4,5,6] 처럼입력하시오 ")
print(string, type(string))

string = eval( input("[1,2,3,4,5,6] 처럼입력하시오 "))
print(string, type(string))
실행 결과
(1,2) 처럼입력하시오 (1,2)
(1,2) <class 'str'>

(1,2) 처럼입력하시오 (1,2)
(1, 2) <class 'tuple'>

[1,2,3,4,5,6] 처럼입력하시오 [1,2,3]
[1,2,3] <class 'str'>

[1,2,3,4,5,6] 처럼입력하시오 [1,2,3]
[1, 2, 3] <class 'list'>

🔗 출처

📘 Python 계단밟기

제02장 두 번째 계단밟기

01. Python(파이썬) 표준 입출력

왜! 모든 프로그램은 배울 때, 처음에 출력문을 배우는 걸까?

▶ 컴퓨터로 작업을 지시하고 컴퓨터가 처리한 결과를 확인하기 위해서

▶ 출력을 어디로 할 것인가에 따라 프로그램이 변경된다.

▶ 출력 대상에 따라 다양한 출력이 생성된다.

출력하는 위치 출력 프로그램 명
콘솔(Console) 콘솔 어플리케이션(Console Application)
웹 브라우저(Web Browser) 웹 어플리케이션(Web Application)
스마트 기기 App(앱)
윈도우(Window) 윈도우 어플리케이션(Window Application)

 


1. Python(파이썬) 표준 출력

 

1.1. print 함수

 

사용법

  • print(출력 대상 1, 출력 대상 2....)
  • 출력 시, 출력 대상들의 사이에 구분자를 넣을 때는 sep를 기술한다. (기본값 : 공백)
  • 마지막 문자열을 출력하고 출력할 문자는 end를 기술한다. (기본값 : 줄 바꿈 문자)
  • 출력 방향을 변경할 때는 file을 기술한다. (기본값 : sys.stdout(표준 출력 장치, 모니터))
  • 스트림을 강제적으로 flush 할지를 지정할 때는 flush를 기술한다. (기본값 : False)
실행 값 입력
#  출력에 대하여 알아보자
print("하나","둘","셋",1,2,3) 

print("하나","둘","셋",1,2,3,sep='-') 

print("첫번째 값")
print("두번째 값") # 다른 줄에 출력

print("첫번째 값", end=" ---> ")
print("두번째 값") # 같은 줄에 출력
실행 결과
하나 둘 셋 1 2 3

하나-둘-셋-1-2-3

첫번째 값
두번째 값

첫번째 값 ---> 두번째 값

 

 

파일로 출력
# 출력 방향 변경
file = open("test.txt","w")
print("Hello Python!!", file=file) # 파일로 출력
file.close()
실행 결과
"text.txt" 파일로 생성되어 "Hello Python!!"이란 문자열이 저장되었음을 알 수 있다.

 


1.2. 문자열 출력

  • ('), (") 둘 중 하나를 사용하여 문자열 출력 가능하다.
  • 작은따옴표 안에 큰따옴표가 가능하다. (그 반대도 가능)
  • 큰따옴표 안에서 큰따옴표를 출력하려면 \"로 해야 한다.
  • 작은따옴표 안에서 작은따옴표를 출력하려면 \'로 해야 한다.
  • 동일한 문자열을 여러 번 출력 시, " * 횟수"를 사용한다.
실행 값 입력
print('Hello World!!')
print("Hello World!!")

print("나의 이름은 '한사람'입니다.")
print('나의 이름은 "한사람"입니다.')

print("나의 이름은 \"한사람\"입니다.")
print('나의 이름은 \'한사람\'입니다.')

print('-' * 40)
실행 결과
Hello World!!
Hello World!!

나의 이름은 '한사람'입니다.
나의 이름은 "한사람"입니다.

나의 이름은 "한사람"입니다.
나의 이름은 '한사람'입니다.

----------------------------------------

 


1.3. 확장 문자 출력

 

Python은 기본 확장 문자(escape sequence)를 지원한다.

▷ C언어를 쓸 때 자주 쓰는 거예요. 파이썬에선 안 써도 돼요

\' : 따옴표 문자
\" : 큰따옴표 문자
\ : backslash 문자
\a : bell 문자
\b : backslash 문자
\f : Formfeed 문자
\n : newline 문 \r : carriage return 문자(\n와 동일하지 않다.)
\t : tab 문자
\v : vertical tab 문자
  • ASCII 문자를 포함할 수 있는 확장 문자
    • 숫자 형식 (8진법과 16진법) 확장 문자(escape sequence)
    • Unicode 확장 문자(escape sequence)
    • 8진수 확장 문자(escape sequence)
    • 16진수 확장 문자(escape sequence)
  • 8진수 확장 문자(escape sequence)
    • backslash()와 세 자릿수 8진수 숫자를 사용한다.
  • 결과로는 8진수 확장 문자(escape sequence)에 해당하는 ASCII 문자가 출력된다.
  • 16진수 확장 문자(escape sequence)도 이와 비슷하지만 “\”가 아니라 “\x”로 시작되며, 16진수 숫자로 구성되는 점이 다르다.
  • 이 확장 문자(escape sequence)는 문자가 더 이상 16진수가 아닐 때 종료된다
    • 예를 들어
      • 문자 n은 ASCII 문자표에서 십진수 값 109이다. 이는 8진수로 하면 156이며 16진수로 하면 6E이다.

 

실행 값 입력
#  출력에 대하여 알아보자
print('Hello \tWorld!!')
print("Hello \nWorld!!")

print("나의 이름은 \"한사람\"입니다.")
print('나의 이름은 \'한사람\'입니다.')

print('-' * 40)

print('1 \n')
print('2 \012')
print('3 \x0A')

print('-' * 40)

print('n')
print('\156')
print('\x6E')

print('-' * 40)
실행 결과
Hello   World!!
Hello 
World!!

나의 이름은 "한사람"입니다.
나의 이름은 '한사람'입니다.

----------------------------------------

1 

2 

3 

----------------------------------------

n
n
n

----------------------------------------

 

  • Python 3 내의 모든 문자열은 Unicode 문자열(string)이다.
    • 모든 language에서 사용 가능한 대부분의 문자를 포함할 수 있다.

 


1.4. 형식에 맞추어 출력

 

데이터 형식에 맞추어 출력할 수 있다.

이것은 print 함수의 설명이라기보다는 문자열의 형식을 지정하는 방법이다.

형식화된 문자열로 만든 다음, 문자열을 출력하는 것이다.

 

  • 이전 방식 : "출력 형식"%(데이터....)
1. 출력 형식에 형식화된 문자열을 넣어 출력의 모양을 변경하는 것이다.
2. "% 형식문자"로 지정하면 % 뒤의 출력 대상들이 1:1로 대응되어 출력된다.
3. %s : 문자열, %d : 정수, %f : 실수 등이 있다.

예 1) %03d : "정수를 3칸에 맞추어 출력하는데 앞의 빈칸은 0으로 채워라"이다.
예 2) %6.2f : "실수를 전체 6칸 소수 이하 2칸에 맞추어 출력하라"이다.

 

  • 파이썬 3(Python 3) 포맷팅 방식 : "출력 형식".format(데이터....)
1. 출력 형식에 형식화된 문자열을 넣어 출력의 모양을 변경하는 것이다.
2. "{}" 지정하면 format에 기술한 출력 대상들이 대응되어 출력된다.
3. "{n}"안에 숫자를 지정하여 출력 대상의 위치를 지정할 수 있다.
4. 함수의 인자처럼 키워드를 사용해서 나타낼 수 있다.
5. 동일한 데이터를 여러 번 출력할 수 있다.

 

실행 값 입력
# 형식에 맞추어 출력하기

# 이전 방식
print('나의 이름은 %s입니다'%('한사람'))
print('나의 이름은 "%s"입니다. 나이는 %d세이고 성별은 %s입니다.'%('한사람',33,'남성'))
print('나이는 %d세이고 성별은 %s입니다. 나의 이름은 "%s"입니다. '%(33,'남성','한사람'))
print('나이는 %03d세이고 신장은 %6.2f입니다. 나의 이름은 "%s"입니다. '%(33,56.789,'한사람'))
print('-' * 40)

# 파이썬(Python) 3 포맷팅 방식
print('나의 이름은 {}입니다'.format('한사람'))
print('나의 이름은 "{0}"입니다. 나이는 {1}세이고 성별은 {2}입니다.'.format('한사람',33,'남성'))
print('나이는 {1}세이고 성별은 {2}입니다. 나의 이름은 "{0}"입니다. '.format('한사람',33,'남성'))
print('나이는 {age}세이고 성별은 {gender}입니다. 나의 이름은 "{name}"입니다. '
         .format(name='한사람',age=33,gender='남성'))
         
print('만세삼창 :  {0}!!! {0}!!! {0}!!! '.format('만세'))
print('삼삼칠 박수 :  {0}!!! {0}!!! {1}!!! '.format('짝'*3,'짝'*7))
print('-' * 40)
실행 결과
나의 이름은 한사람입니다
나의 이름은 "한사람"입니다. 나이는 33세이고 성별은 남성입니다.
나이는 33세이고 성별은 남성입니다. 나의 이름은 "한사람"입니다. 
나이는 033세이고 신장은  56.79입니다. 나의 이름은 "한사람"입니다. 
----------------------------------------
나의 이름은 한사람입니다
나의 이름은 "한사람"입니다. 나이는 33세이고 성별은 남성입니다.
나이는 33세이고 성별은 남성입니다. 나의 이름은 "한사람"입니다. 
나이는 33세이고 성별은 남성입니다. 나의 이름은 "한사람"입니다.

만세삼창 :  만세!!! 만세!!! 만세!!! 
삼삼칠 박수 :  짝짝짝!!! 짝짝짝!!! 짝짝짝짝짝짝짝!!! 
----------------------------------------

 


1.5. 문자열 앞 0으로 채우기 zfill()

 

지정한 길이만큼 공간을 확보하고 남는 앞부분을 "0"으로 채워준다.

길이가 문자열보다 적을 경우에는 모든 문자열을 출력한다.

 

실행 값 입력
# 형식에 맞추어 출력하기
#  앞의 빈칸 0으로 채우기
print('12'.zfill(5))
print('-12'.zfill(5))
print('3.141'.zfill(7))
print('-3.141'.zfill(7))
print('3.14159265359'.zfill(5))
print('-3.14159265359'.zfill(5))
print('문자열'.zfill(10))
print('문자열'.zfill(1))
print('-' * 40)
실행 결과
00012
-0012
003.141
-03.141
3.14159265359
-3.14159265359
0000000문자열
문자열
----------------------------------------

 

 

 

 

🔗 출처

📘 Python 계단밟기

제01장 첫 번째 계단밟기

06. Python(파이썬) 기본

  1. 주석
  2. 들여 쓰기(indent)
  3. 행결합/행분리

 

01. 주석

1. 주석이란?

프로그램의 실행에는 전혀 관여하지 않으면서 프로그램 코드 중간중간에 코드에 대한 자세한 설명을 첨부하는 것

 

 

2. 주석의 필요성

사용자가 만든 프로그램을 다른 사람에게 해석시키려면 적은 코드에도 적지 않은 시간과 노력이 소요된다.
실무에서는 혼자 프로그래밍하는 게 아닌 여러 사람이 팀으로 작업하기 때문에,
코드 해석 및 공유 시 주석을 달아놓아 코드 해석에 쓰이는 시간과 노력을 줄이기 위해서 쓴다.

 

 

3. 주석의 종류

  • 블록 단위 : 작은따옴표(')를 연달아 세 개를 사용한다.
사용법 : ''' 주석처리 적용문장 '''
사용예
''' 주석처리 적용 문장 1
주석처리 적용 문장 2
주석처리 적용 문장 3
주석처리 적용 문장 4
'''

 

  • 행 단위 : #을 사용한다.
사용법 : # 주석처리 적용 문장
사용예
# 주석처리 적용 문장 1
# 주석처리 적용 문장 2
# 주석처리 적용 문장 3

 

 

4. 주석의 사용 예

  • Document String
    • 큰 따옴표(") 3개 를 연속으로 사용하여 주석으로 사용하는 것
    • 모듈, 함수, 클래스, 메서드 등을 만들 때, 자체 설명서를 등록하는 역할을 한다.
  • Block comment
    • 작은 따옴표(') 3개 를 연속으로 사용하여 주석으로 사용하는 것
    • 일반적인 주석을 쓸 때 사용한다.
'''
프로그램명 : comment1.py
작 성 자 : 한 사 람
작 성 일 : 2018년 8월 1일
설  명 : 파이선에서 주석을 어떻게 처리하는지 보여주는 예제
'''

#  random 모듈을 사용할 수 있도록 포함한다.
import random

#-----------------------------------------------------------------
# 함수 정의 시작
def lotto():
    """
    로또 번호를 생성해 줍니다.
    ------------------------------
    호출 방법 : lotto()
    1~45사이의 정수 6개를 리스트로 리턴합니다.
    :return : <class 'list'>
    """
    # 1~45사이의 정수 중에서 6개를 무작위로 추출합니다.
    lotto =  random.sample(range(1,46),6)
    lotto.sort() #  오름차순으로 정렬합니다.
    return lotto # 결과를  호출항 곳으로 돌려줍니다.
# 함수 정의 끝

#-----------------------------------------------------------------
# 함수 호출하여 결과를 바로 출력합니다.
print(lotto())

# 도큐멘트 스트링 사용방법
print(lotto.__doc__)   # 도큐멘트 스트링 출력
help(lotto) # 도움말 함수 사용

 

실행 결과
[13, 16, 29, 33, 35, 45]

    로또 번호를 생성해 줍니다.
    ------------------------------
    호출 방법 : lotto()
    1~45사이의 정수 6개를 리스트로 리턴합니다.
    :return : <class 'list'>

Help on function lotto in module __main__:

lotto()
    로또 번호를 생성해 줍니다.
    ------------------------------
    호출 방법 : lotto()
    1~45사이의 정수 6개를 리스트로 리턴합니다.
    :return : <class 'list'>

 


02. 들여 쓰기(Indent)

1. 들여 쓰기(indent)

  • 가독성을 위해 들여 쓰기를 한다.
  • 다른 프로그램 언어에서는 {}을 사용하여 영역을 지정한다.
    • 하지만 파이썬에서는 들여쓰기를 사용하여 영역을 지정한다. (== 문법적인 강제 사항이다)
  • 코드 블록을 구성하기 위해 if, for, class, def 등등을 작성하면서 나오는 콜론(:) 다음 아랫 줄은 반드시 들여 쓰기를 해야 한다.
    • 들여쓰기 방법 : 한 칸, 두 칸, 네 칸, 탭 등
** 중요한 것은 같은 블록 내에서는 들여쓰기 칸 수가 동일해야 한다.
위반 시에는 "IndentationError: unexpected indent"라는 에러를 출력한다.**

 

C언어 들여쓰기
 int factorial(int x) {
     if(x == 0)     {
         return 1;
     }     else     {
         return x * factorial(x - 1);
     }
 }
int factorial(int x){
    return (x==0) ? 1 :  x * factorial(x - 1);
}

 

Python 들여쓰기
def factorial(x):
     if x == 0:
         return 1
     else:
         return x * factorial(x - 1)
def factorial(x):
    return 1 if x==0 else x * factorial(x - 1)

 


03. 행결합/행분리

 

행결합 : 세미콜론(;)

  • 많은 언어들이 구문이 끝날 때 문장의 뒤에 구문의 종료를 알리는 세미콜론(;)을 적는다.
  • 하지만 파이썬은 구문이 끝나고 다음 줄로 내려갈 때 세미콜론이 필요 없다.
    • 줄이 바뀌면 자동으로 구분이 종료되었음을 인식한다.
** 세미콜론을 붙여도 에러는 나지 않는다. 여러 구문을 이어 쓸 때는 세미콜론을 쓰기도 한다**

 

# 세미콜론(semicolon) 사용법
print("Hello Python!!")	# Hello Python!!
print("Hello Python!!");	# Hello Python!!

print("첫번째 줄!!"); print("두번째 줄")
# 첫번째 줄!!
# 두번째 줄

print("첫번째 줄!!"); print("두번째 줄");
# 첫번째 줄!!
# 두번째 줄

 

 

행분리 : (역슬레쉬), 괄호

** 한 줄의 내용이 길어서 여러 줄로 타이핑해야 하는 경우에는, (역슬레쉬)나 괄호를 이용한다.**
# 긴 내용을 한줄인것 처럼 인식 시키기(\ 사용)
a = 1 + 2 + 3 + \
      4 + 5 + 6
      
# 긴 내용을 한줄인것 처럼 인식 시키기(괄호 사용)
b = (1 + 2 + 3 +
        4 + 5 + 6)
        
#  파라메터를 넘기는 것이라면 콤마(comma) 뒤에서 그냥 엔터를 쓰면 된다.
print("Hello",  "Python",
          end="\n", sep="\t")
# 결괏값
# Hello   Python

# 문자열 중간에 줄바꿈을 하면 자동으로 ""가 열고 닫히며 1줄로 인식한다.
print("아주 아주 아주 긴 문자열이라고 가정하자 " 
         "한줄에 모두 타이핑이 힘들다면")
         
# 결괏값
# 아주 아주 아주 긴 문자열이라고 가정하자 한줄에 모두 타이핑이 힘들다면

 

🔗 출처

 

📘 Python 계단밟기

제01장 첫 번째 계단밟기

05. Python이란?

1. 프로그램이란?

어떤 문제를 해결하기 위해 컴퓨터에게 주어지는 처리 방법과 순서를 기술한 일련의 명령문의 집합체.

 

 

컴퓨터란?

많은 양의 데이터를 정확하고 빠르게 자동으로 처리할 수 있는 기계

 

컴퓨터의 특징

  • 신속성 : 입력된 데이터를 보다 빠른 시간 내에 처리하여 원하는 결과를 얻을 수 있다.
  • 대량성 : 한꺼번에 많은 양의 자료를 기억하거나 처리할 수 있다.
  • 정확성 : (신뢰성) 자료처리 과정에서 발생가능한 오차를 최소화하여 정확한 결과를 얻을 수 있다.
  • 호환성 : 다른 컴퓨터나 매체에서 작성한 자료도 공유하여 처리할 수 있다.
  • 자동성 : 입력된 자료를 프로그램이라고 하는 정해진 처리 순서에 따라 자동으로 처리한다.
  • 범용성 : 여러 가지 분야에 다양하게 사용된다.
  • 수동성 : 컴퓨터는 데이터를 주어진 프로그램에 따라 처리할 뿐 스스로 작업을 수행할 수 없다.

 

컴퓨터 프로그램이란?

컴퓨터가 알아들을 수 있는 명령어를 이용하여 컴퓨터에게 작업을 지시하는 작업지시서

 


2. 프로그래밍 언어란?

주어진 어떤 문제를 해결하기 위해 인간과 컴퓨터 사이에서 의사소통을 가능하게 하는 인공적인 언어
>> 
이 언어를 통하여 사용자는 컴퓨터에게 일련의 일을 시키는 명령어의 집합체인 프로그램을 작성할 수 있다.

 

 

프로그래밍 언어의 특징

  • 간결성 : 사람이 프로그램을 쉽게 이해하고 읽을 수 있도록 간결하게 표현할 수 있다.
  • 직교성 : 언어의 각 구성요소가 상호 독립적이고 어떤 환경에서도 그 구성요소가 같은 의미로 사용된다.
  • 가독성 : 사람이 이해하기 쉽도록 작성된 문법, 주석 등이 가독성의 향상에 도움이 된다.
  • 정확성 : 잘 정의된 문법은 정확성을 보장한다. 각 언어의 문법은 대부분이 세계 표준이다.
  • 기계 독립성 : 서로 다른 컴퓨터 상에서 항상 같은 결과를 요구한다.

 

프로그래밍 언어의 종류

  • 저급언어 : 컴퓨터 개발 초창기에 사용되던 프로그래밍 언어이다.
    • 기계어와 어셈블리어로 나뉜다.
  • 고급언어: 사용자 중심의 언어로 사람이 쓰는 자연어에 가까운 프로그래밍 언어이다.
    • C/C++, JAVA, Python, Basic 기타...

📝 고급언어로 만들어진 모든 프로그램은 실행되기 전, 컴퓨터가 이해할 수 있는 기계어로 변환되어야 한다.

     이를 위해서 컴파일러, 인터프리터를 이용하여 코드를 변환한다.

  • 컴파일러 : 한 프로그램을 한꺼번에 번역한 뒤 실행한다
    • 예) C/C++, JAVA 등
  • 인터프리터 : 명령어 단위로 한 행씩 번역해 가며 실행한다
    • 예) Python, Basic 등

 


3. Python 언어란?

1991년 프로그래머인 귀도 반 로섬(Guido van Rossum)이 발표한 고급 프로그래밍 언어이다.
플랫폼이 독립적이며 인터프리터식, 객체지향적, 동적 타이핑(dynamically typed) 대화형 언어이다.
비영리의 파이썬 소프트웨어 재단이 관리하는 개방형, 고동체 기반 개발 모델을 가지고 있다.
C언어로 구현된 C파이썬 구현이 사실상이 표준이다.

 

 

주요 특징

  • 실행 시간에 자료형을 검사하는 동적 타이핑(dynamic typing)을 지원한다.
  • 객체의 멤버에 무제한으로 접근할 수 있다.
  • 모듈, 클래스, 객체 등과 같은 언어의 요소가 내부에서 접근할 수 있다.
  • 리플렉션을 이용한 기술을 쓸 수 있다.

 

해석 프로그램의 종류

  • C파이썬 : C로 작성된 인터프리터
  • 스택리스 파이썬 : C 스택을 사용하지 않는 인터프리터
  • 자이썬 (제이파이썬 : JPython) : 자바 가상 머신용 인터프리터
  • IronPython : .NET 플랫폼용 인터프리터
  • PyPy : 파이썬으로 작성된 파이썬 인터프리터

 


목차

  1. Jupyter Notebook 설치
    1. 파이썬이 설치돼 있는지 확인
    2. Jupyter Notebook 설치
  2. Jupyter Notebook 실행
  3. Jupyter Notebook 가상 환경에 연결 (선택 사항)
    1. 가상 환경 만들기 (만약 아직 만들지 않았다면)
    2. 가상 환경 활성화
    3. ipykernel 설치
    4. 가상 환경을 Jupyter 커널로 추가
    5. Jupyter Notebook 실행
  4. Jupyter Notebook에서 가상 환경 선택
  5. Jupyter Notebook 종료
  6. 요약

1. Jupyter Notebook 설치 

1.1. 파이썬이 설치돼 있는지 확인

python --version

# 또는

python3 --version
  1. 터미널에서 파이썬이 제대로 설치돼 있는지 확인
  2. 파이썬 버전이 출력된다면 파이썬이 정상적으로 설치된 것
  3. 만약 설치되어 있지 않다면 🔗Python 공식 홈페이지

 

1.2. Jupyter Notebook 설치

pip install jupyter
  • 터미널에서 명령어 실행
  • pip 패키지 관리자를 사용하여 Jupyter Notebook 설치

2. Jupyter Notebook 실행 

jupyter notebook
  • 터미널(또는 명령 프롬프트)에서 위의 명령어로 Jupyter Notebook을 실행
  • 이 명령어를 실행하면 자동으로 웹 브라우저가 열리면서 대시보드가 나타남
  • 대시보드에서 새로운 노트북을 만들거나 기존 노트북을 열 수 있음

 

3. Jupyter Notebook 가상 환경에 연결 (선택 사항)

-> 가상 환경을 사용하고 있고, 가상 환경에서 Jupyter Notebook을 실행하고 싶을 시.

3.1. 가상 환경 만들기 (만약 아직 만들지 않았다면)

# 가상 환경 만들기
python3 -m venv myenv

 

3.2. 가상 환경 활성화

  • Windows
myenv\Scripts\activate

 

  • Mac/Linux
source myenv/bin/activate

 

3.3. ipykernel 설치

pip install ipykernel
  • 가상 환경에서 ipykernel을 설치하면 해당 환경을 Jupyter Notebook에서 사용할 수 있게 해줌

 

3.4. 가상 환경을 Jupyter 커널로 추가

python -m ipykernel install --user --name=myenv --display-name "Python (myenv)"
  • 위의 명령어로 가상 환경을 Jupyter에 커널로 추가함
  • --name=myenv : 커널 이름으로 사용할 가상 환경 이름을 지정합니다.
  • --display-name "Python (myenv)" : Jupyter Notebook에서 표시될 이름입니다.

 

3.5. Jupyter Notebook 실행

jupyter notebook
  1. 가상 환경을 추가한 후, Jupyter Notebook을 다시 실행
  2. 브라우저에서 Jupyter Notebook을 염
  3. 새 노트북을 만들 때 Kernel 메뉴에서 "Python (myenv)"이라는 커널을 선택할 수 있음
  4. 가상 환경을 Jupyter Notebook에서 사용할 수 있음

 

4. Jupyter Notebook에서 가상 환경 선택 

  1. Jupyter Notebook을 실행한 후, 새 노트북을 만들거나 기존 노트북을 염
  2. 상단 메뉴에서 Kernel -> Change Kernel을 클릭
  3. 커널 목록에서 원하는 가상 환경(예: "Python (myenv)")을 선택
  4. 그러면 Jupyter Notebook이 해당 가상 환경에서 실행됨

 

5. Jupyter Notebook 종료 

  • 터미널에서 Ctrl + C를 눌러서 서버를 중지할 수 있음
  • 브라우저에서 직접 "Quit" 버튼을 눌러서 종료 할 수 있음

6. 요약 

1. Jupyter Notebook 설치:

pip install jupyter

 

2. Jupyter Notebook 실행:

jupyter notebook

 

3. 가상 환경에서 Jupyter Notebook 사용:

python -m ipykernel install --user --name=myenv --display-name "Python (myenv)"

 

4. Jupyter Notebook에서 커널을 가상 환경으로 변경:

  •  Kernel   Change Kernel  → "Python (myenv)"

'공부' 카테고리의 다른 글

[공부] Jupyter Notebook 가상 환경 설정하기_맥(MacOS)  (4) 2024.12.27

 


목차

  1. 가상 환경 만들기
    1. 가상 환경 생성
    2. 가상 환경 활성화
  2. Jupyter Notebook에서 가상 환경 사용하기
  3. 요약
  4. 추가 Tip
    1. pip list : pip의 list 확인 명령어
    2. deactivate : 가상환경 종료 <-> source 가상환경/bin/activate : 가상환경 실행
    3. sudo rm -rf "가상 환경 이름" : 가상 환경 삭제
  5. 가상 환경을 만들어야 하는 이유

1. 가상 환경 만들기 

1.1. 가상 환경 생성

  • 터미널을 열고, 원하는 폴더에 가상 환경을 생성
# 원하는 폴더로 이동 후 가상 환경 생성
cd /path/to/your/project/directory

# 가상 환경 생성
python3 -m venv myenv

 

 

myenv는 가상 환경 이름이기 때문에 원하는 이름으로 변경 가능 (영어로만 입력)

 

1.2. 가상 환경 활성화

source myenv/bin/activate

 

활성화 시, 터미널 프롬프트에 (myenv)의 가상 환경 이름이 표시됨

 

1.3. 필요한 패키지 설치

pip install jupyter ipykernel

 

  • 가상 환경이 활성화된 상태에서 필요한 패키지들을 설치할 수 있음
    • ipykernel
    • jupyter

 

2. Jupyter Notebook에서 가상 환경 사용하기 

2.1. 가상 환경을 Jupyter에서 커널로 추가

Jupyter Notebook에서 사용할 수 있도록 가상 환경을 커널로 등록해야 함

python -m ipykernel install --user --name=myenv --display-name "Python (myenv)"
  • --name=myenv : 커널 이름을 설정(이 이름은 내부적으로 사용됨
  • --display-name "Python (myenv)" : Jupyter Notebook에서 사용자에게 보여지는 이름임

 

2.2. Jupyter Notebook 실행

jupyter notebook

 

  • 이제 Jupyter Notebook을 실행
    1. 브라우저에서 Jupyter Notebook 열림
    2. 새 노트북을 만들 때 Kernel 메뉴에서 Python (myenv)라는 이름의 커널을 선택할 수 있음
    3. 이렇게 하면 생성한 가상 환경을 Jupyter Notebook에서 사용할 수 있음

요약

  1. 가상 환경 생성: python3 -m venv myenv
  2. 가상 환경 활성화: source myenv/bin/activate (Mac/Linux)
  3. Jupyter에서 사용할 수 있도록 ipykernel 설치: pip install jupyter ipykernel
  4. 가상 환경을 Jupyter 커널에 등록: python -m ipykernel install --user --name=myenv --display-name "Python (myenv)"
  5. Jupyter Notebook 실행: jupyter notebook

추가 Tip

명령어 설명 비 고
pip list 설치된 pip의 list를 확인하는 명령어    
deactivate 가상 환경 종료 <-> "가상 환경 명"/bin/activate
sudo rm -rf "가상 환경 이름" 가상 환경 삭제  

 

🤔 가상 환경을 만들어야 하는 이유

  1. 하나의 컴퓨터로 여러 가지 개발을 할 수 있음
  2. 개발별로 관리가 쉬워짐

'공부' 카테고리의 다른 글

[공부] Jupyter Notebook 설치, 실행, 확인, 종료  (1) 2024.12.28

목차

  1. 결측값 처리
    1. 결측값 처리 방법
      1. 제거
      2. 대체
        1. 0으로 대체
        2. 각 열의 평균값으로 대체
        3. 각 열의 중간값으로 대체
        4. 각 열의 최빈값으로 대체
      3. 예측
  2. 이상값 처리
    1. 이상치란?
      1. 이상치 확인 방법
      2. 이상치 처리 방법
        1. 제거
        2. 대체
        3. 변환
  3. 중복값 제거
  4. 데이터 타입 변환
    1. 데이터 타입 변환의 필요성
      1. 정수형
      2. 문자열
      3. 부등 소수점
  5. 인코딩
    1. 인코딩이란? 
    2. 인코딩 방법
  6. 샘플링
    1. 샘플링이란? 
    2. 샘플링 방법
  7. 특징 선택 및 추출
    1. 특징 선택 및 추출이란?
    2. 특징 선택 방법
    3. 특징 추출 방법

1. 결측값 처리

1.1. 결측값 처리 방법

1.1.1. 제거

  • 정의 : 결측값이 포함된 행 또는 열을 제거
# 결측값이 포함된 행 제거
df_dropped_rows = df.dropna()

# 결측값이 포함된 열 제거
df_dropped_cols = df.dropna(axis=1)
행 제거 = df.dropna()
열 제거 = df.dropna(axis=1)

 

1.1.2. 대체

  • 정의 : 결측값을 특정 값으로 대체

1.1.2.1. 결측값을 0으로 대체

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

 

1.1.2.2. 결측값을 각 열의 평균값으로 대체

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

 

1.1.2.3. 결측값을 각 열의 중간값으로 대체

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

 

1.1.2.4. 결측값을 각 열의 최빈값으로 대체

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

 

1.1.3. 예측

  • 정의 : 머신러닝 모델을 사용하여 결측값을 예측
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
결측 값이 있는 열과 없는 열 분리 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

2. 이상값 처리

2.1. 이상치란?

  • 정의
    • 데이터셋에서 비정상적으로 큰 값이나 작은 값
    • 이상치는 분석 결과에 큰 영향을 미칠 수 있으므로, 이를 적절히 처리하는 것이 중요

2.1.1. 이상치 확인 방법

자료를 분석 후 비율을 조정해야 해요

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

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

# 이상치 확인
outliers = df[(df['column_name'] < lower_bound) | (df['column_name'] > upper_bound)]
print(outliers)
이상치 확인(IQR 방법) Q1 = df['column_name'].quantile(0.25) 
Q3 = df['column_name'].quantile(0.75) 
IQR = Q3 - Q1
이상치 범위 설정 lower_bound = Q1 - 1.5 * IQR 
upper_bound = Q3 + 1.5 * IQR
이상치 확인 outliers = df[(df['column_name'] < lower_bound) | (df['column_name'] > upper_bound)] 
print(outliers)

 

2.1.2. 이상치 처리 방법

2.1.2.1. 제거

  • 정의 : 이상치를 데이터셋에서 제거
# 이상치 제거
df_no_outliers = df[(df['column_name'] >= lower_bound) & (df['column_name'] <= upper_bound)]

 

2.1.2.2. 대체

  • 정의 : 이상치를 특정 값으로 대체
# 이상치를 평균값으로 대체
mean_value = df['column_name'].mean()
df['column_name'] = df['column_name'].apply(
lambda x: mean_value if x < lower_bound or x > upper_bound else x)

 

2.1.2.3. 변환

  • 정의 : 이상치를 변환하여 데이터의 분포를 조정

3. 중복값 제거

# 중복된 행 확인
print(df.duplicated().sum())

# 중복된 행 제거
df_no_duplicates = df.drop_duplicates()
중복된 행 확인 print(df.duplicated().sum())
중복된 행 제거 = df.drop_duplicates()

4. 데이터 타입 변환

  • Pandas의 .astype() 메서드를 사용

4.1. 데이터 타입 변환의 필요성

  • 잘못된 데이터 타입은 분석 결과에 영향을 미칠 수 있음
  • 잘못된 데이터 타입은 모델 학습에 오류를 발생시킬 수 있음

 

4.1.1. 정수형

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

 

4.1.2. 문자열

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

 

4.1.3. 부등 소수점

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

5. 인코딩

5.1. 인코딩이란?

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

 

5.2. 인코딩 방법

# 범주형 데이터를 더미 변수로 변환
df_encoded = pd.get_dummies(df, columns=['category_column'])

# 결과 출력
print(df_encoded.head())

Pandasget_dummies() 메서드를 사용

범주형 데이터를 더미 변수로 변환 = pd.get_dummies(df, columns=['category_column'])

6. 샘플링

6.1. 샘플링이란?

  • 정의
    • 데이터셋의 크기를 줄이거나 늘리는 과정
    • 데이터셋의 대표성을 유지하면서 데이터의 크기를 조절하는 데 사용

 

6.2. 샘플링 방법

# 데이터셋에서 50% 샘플 추출
df_sampled = df.sample(frac=0.5)

# 데이터셋에서 100개의 샘플 추출
df_sampled_n = df.sample(n=100)

Pandassample() 메서드를 사용

퍼센트 = df.sample(frac=0.5)
개수 = df.sample(n=100)

7. 특징 선택 및 추출

7.1. 특징 선택 및 추출이란?

  • 정의
    • 모델 성능을 높이기 위해 중요한 특징을 선택하거나 새로운 특징을 추출하는 과정

 

7.2. 특징 선택 방법

from sklearn.feature_selection import SelectKBest, f_classif

# 특징 선택 (상위 5개의 특징 선택)
selector = SelectKBest(score_func=f_classif, k=5)
X_new = selector.fit_transform(X, y)

# 선택된 특징의 인덱스
selected_features = selector.get_support(indices=True)
print(selected_features)

PandasScikit-learn을 사용하여 특징 선택을 수행

 

7.3. 특징 추출 방법

# 두 열의 곱을 새로운 특징으로 추가
df['new_feature'] = df['feature1'] * df['feature2']

# 두 열의 합을 새로운 특징으로 추가
df['new_feature_sum'] = df['feature1'] + df['feature2']
두 열의 곱  = df['feature1'] * df['feature2']
두 열의 합  = df['feature1'] df['feature2']

 


목차

  1. 머신러닝이란?
    1. 머신러닝 특징
    2. 구성요소
      1. 데이터셋
      2. 특성(Feacture)
      3. 레이블(Label)
      4. 모델
      5. 학습
  2. 머신러닝의 학습 과정
    1. 데이터 수집
    2. 데이터 전처리
    3. 특징 선택
    4. 모델 선택
    5. 모델 훈련
    6. 모델 평가
    7. 모델 배포
  3. 학습 방법
    1. 지도 학습(Supervised Learning)
    2. 비지도 학습(Unsupervised Learning)
    3. 앙상블 학습(Ensemble Learning)
  4. 데이터셋 불러오기
    1. CSV 불러오기
    2. 엑셀 불러오기
    3. 기본 정보 확인
  5. 데이터 전처리(Data cleaning)
    1. 정의
    2. 장점
    3. 주요 기법 
      1. 결측치 처리(Handling Missing Data)
      2. 이상치 처리(Handing Outliers)
      3. 데이터 정규화(Normalization)
      4. 데이터 표준화(Standardization)
      5. 특성 공학(Feacture Engineering)
      6. 데이터 인코딩(Data Encoding)
      7. 데이터 분할(Data Splitting)

1. 머신러닝이란?

1.1. 정의

  • 컴퓨터가 명시적으로 프로그래밍이 되지 않아도 데이터를 통해 학습하고, 예측할 수 있도록 하는 기능
  • 대량의 데이터를 알고리즘에 입력하여 학습 과정을 통해 모델을 생성하고 예측을 수행

1.2. 특징

  • 데이터를 통해 패턴과 규칙을 스스로 학습함
  • 예측 모델을 통해 새로운 데이터에 대한 결과를 도출함
  • 프로그램이 아닌 모델이 중심임

1.3. 구성요소

1.3.1. 데이터셋

  • 정의 : 머신러닝은 데이터셋을 통해서 학습하며, 일반적으로 데이터셋은 입/출력 데이터로 구성됨
    1. 입력 데이터 : 모델이 학습할 수 있는 정보
    2. 출력 데이터(레이블) : 모델이 예측해야 하는 목푯 값

1.3.2. 특징(Feacture)

  • 정의 : 데이터에서 모델이 학습할 수 있는 개별 속성
  • 예 : 주택 가격 예측 - 주택의 크기, 위치, 방의 개수 등이 특징이 됨

1.3.3. 레이블(Label)

  • 정의
    • 예측하고자 하는 목표 변수
    • 지도학습 모델에서는 레이블이 있는 데이터셋을 이용하여 모델을 학습 시킴

1.3.4. 모델

  • 정의
    • 데이터의 특징으로부터 레이블(정답)을 예측할 수 있는 지식을 학습할 수 있는 프로그램 또는 함수
    • 입력 데이터와 출력 데이터간의 관계를 학습하여 새로운 데이터에 대한 예측 수행

1.3.5. 학습

  • 정의
    • 모델이 데이터를 통해서 패턴을 인식하고, 이를 기반으로 예측을 수행할 수 있도록 함수 내의 가중치를 조정하는 과정

2. 머신러닝의 학습 과정

2.1. 데이터 수집

  • 정의
    • 모델을 학습시키기 위한 필요 데이터를 수집하는 단계

2.2. 데이터 전처리

  • 정의
    • 결측값 처리, 이상치 제거, 정규화 등등을 하는 단계

2.3. 특징 선택

  • 정의
    • 중요 특징(feacture)을 선택하고 불필요한 피쳐를 제거하여 학습 효율을 높이는 단계

2.4. 모델 선택

  • 정의
    • 문제에 적합한 머신러닝 알고리즘을 선택하는 단계

2.5. 모델 훈련

  • 정의
    • 트레이닝 데이터셋을 사용해서 모델을 학습시키는 단계

2.6. 모델 평가

  • 정의
    • 테스트 데이터셋을 사용하여 모델 성능을 평가하는 단계

2.7. 모델 배포

  • 정의
    • 학습된 모델을 실제 환경에 배포하여 예측을 수행하는 단계

3. 학습 방법

3.1. 지도 학습(Supervised Learning)

  • 정의
    • 레이블이 있는 데이터셋을 이용하여 모델을 학습시키는 방법
      1. 회귀(Regression) : 연속적인 값을 예측하는 문제
        • 예) 주택 가격 예측, 주식 가격 예측
      2. 분류(Classification) : 이산적인 값을 예측하는 문제
        • 예) 이메일 스팸 필터링, 이미지 분류

3.2. 비지도 학습(Unsupervised Learning)

  • 정의
    • 레이블이 없는 데이터셋을 이용하여 모델을 학습시키는 방법
      1. 군집화(Clustering) : 데이터를 유사한 그룹으로 묶는 문제
        • 예) 고객 세분화, 이미지 세그멘테이션
      2. 차원 축소(Dimensionality Reduction) : 고차원 데이터를 저차원으로 변환
        • 예) PCA, t-SNE

3.3. 앙상블 학습(Ensemble Learning)

  • 정의
    • 여러개의 머신러닝 모델을 결합하여 더 나은 성능을 얻는 방법
      1. 배깅(Bagging) : 여러 모델을 독립적으로 학습시키고, 예측을 평균내거나 다수결 투표로 최종 예측
        • 예) 랜덤 포레스트
      2. 부스팅(Boosting) : 여러 모델을 순차적으로 학습시키고, 이전 모델의 오차를 보완하여 최종 예측
        • 예) 그랜디언트 부스팅, XGboost
      3. 스태킹(Stacking) : 여러 모델을 학습시키고 예측 결과를 새로운 데이터로 사용하여 메타 모델을 학습

4. 데이터셋 불러오기

4.1. CSV 불러오기

Pandas의 read_csv 함수를 사용하여 CSV 파일을 불러올 수 있다

import pandas as pd

# CSV 파일 불러오기
df = pd.read_csv('data.csv')

# 데이터 프레임의 첫 5행 출력
print(df.head())

 

4.2. 엑셀 불러오기

Pandas의 read_excel 함수를 사용하여 엑셀 파일을 불러올 수 있다

import pandas as pd

# 엑셀 파일 불러오기
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')

# 데이터 프레임의 첫 5행 출력
print(df.head())

 

4.3. 기본 정보 확인

함수 설명
print(df.shape) 데이터 프레임의 크기 (행, 열) 확인
print(df.columns) 데이터 프레임의 컬럼명 확인
print(df.dtypes) 데이터 프레임의 데이터 타입 확인
print(df.describe()) 데이터 프레임의 요약 통계량 확인
print(df.info()) 데이터 프레임의 정보 확인(null 값, 데이터 타입 등)

5. 데이터 전처리(Data cleaning)

5.1. 정의

  • 데이터 분석 및 머신러닝 모델링을 위해 데이터를 준비하는 과정
  • 데이터의 품질을 높이고, 분석 결과의 신뢰성을 확보하기 위한 필수 과정

5.2. 장점

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

 

5.3. 주요 기법

5.3.1. 결측치 처리(Handling Missing Data)

  • 누락된 값을 처리함
  • 삭제 : 결측치가 있는 행이나 열을 삭제
    • 데이터 손실이 발생할 수 있음
  • 대체 : 평균, 중앙값, 최빈값 등으로 결측치를 대체
  • 예측 : 다른 특성을 사용하여 결측치를 예측하고 채움

5.3.2. 이상치 처리(Handing Outliers)

  • 비정상적으로 크거나 작은 값을 처리함
  • 제거 : 이상치를 데이터셋에서 제거
  • 변환 : 이상치를 다른 값으로 변환
    • 예) 상한선이나 하한선으로 대체
  • IQR 방법 : IQR(InterQuartile Range)을 사용하여 이상치를 탐지하고 처리함

 

5.3.3. 데이터 정규화(Normalization)

  • 일정한 범위로 스케일링하는 과정. [0,1] 단위로 변환함
  • Min-Max 정규화 : 최솟값을 0, 최댓값을 1로 변환

 

5.3.4. 데이터 표준화(Standardization)

  • 평균 0, 분산 1로 변환하는 과정
  • Z-점수 표준화

 

5.3.5. 특성 공학(Feacture Engineering)

  • 새로운 유용한 특성을 생성하는 과정
  • 특성 생성 : 기준 데이터를 기반으로 새로운 특성을 생성함
    • 예) 날짜 데이터를 사용하여 요일 특성 생성
  • 특성 선택 : 모델 성능에 중요한 특성을 선택하고, 중요하지 않은 특성을 제거함

 

5.3.6. 데이터 인코딩(Data Encoding)

  • 비정형 데이터를 모델이 이해할 수 있는 형태로 변환
  • 레이블 인코딩 : 범주형 데이터를 숫자로 변환
  • 원_핫 인코딩 : 범주형 데이터를 이진 벡터로 변환

 

5.3.7. 데이터 분할(Data Splitting)

  • 데이터를 학습용(train), 검증용(validation), 테스트용(test)으로 분할함
  • 이를 통해 모델의 일반화 성능을 평가할 수 있음
  • 학습 데이터(Training Data) : 모델 학습에 사용되는 데이터
  • 검증 데이터(Validation Data) : 모델 튜닝 및 성능 검증에 사용되는 데이터
  • 테스트 데이터(Test Data) : 최종 모델 평가에 사용되는 데이터

 

'공부 > 머신러닝 공부' 카테고리의 다른 글

[머신러닝] 데이터 전처리  (0) 2024.12.23

인사말

안녕하세요~!

사전캠프도 이번주 금요일이 마지막이네요

아쉽게도 이번주 금요일엔 개인 사정이 있어서 참석은 못 하지만,

SQL의 마지막 문제는 풀어보았답니다!

오늘 공부한 내용도 포스팅 해보도록 하겠습니다!

ps. 부쩍 추워진 거 같으니, 감기 조심하세요 😘


🎁 마지막 연습 문제!

데이터 베이스가 될 파일 내용입니다.
마지막 문제_20241121배민경.sql
0.00MB

 

문제 1. 모든 주문의 주문 ID와 주문된 상품의 이름을 나열하는 쿼리를 작성해주세요!

select p.name, o.id
from products p
join orders o
on p.id = o.product_id;

이제는 "Join"을 어떻게 쓰는지 이해가 된 거 같아요!

막힘없이 쭈르륵 나열한 저를 보니까 기분이 좋았습니다 😋.

팀원분들이랑 대화를 나눴는데 "Join"만 쓸 때는 "Inner"를 내포하는 거라고 하더라구요

그래서

"left join"를 쓰는 게 아닐까 싶은 생각을 했습니다

좀 더 확실한 범위값에서 데이터를 갖고 오는 느낌?으로 이해했거든요 😎

 

문제 2. 총 매출(price * quantity의 합)이 가장 높은 상품의 ID와 해당 상품의 총 매출을 가져오는 쿼리를 작성해주세요!

select p.id, sum(p.price * o.quantity) as total
from products p
join orders o
on p.id = o.product_id
group by p.id
order by total desc
limit 1;

이렇게 킨 코드를 막힘없이 적어내린 저한테 너무 신기했어요 😋

sum이랑 avg랑 count를 쓸 때는 "group by"를 함께 적어줘야 한다는 거!

스스로 인지하고 있다는 느낌을 받아서 기분 좋았습니다

점점 익숙해져 가는 걸지두요? 😏

 

하지만, 틀렸죠?

제가 보여드린 코드는, 데이터가 작아서 가능했던 거였구요

데이터의 크기가 만일 컸더라면

select p.id, SUM(p.price * o.quantity) as 총매출
from products p
join orders o
on p.id = o.product_id
group by p.id
order by 총매출 DESC
LIMIT 1;

이렇게 Sum을 기입하여야 정확히 값을 불러와질 수 있음을 배웠습니다

 

문제 3. 각 상품 ID별로 판매된 총 수량(quantity)을 계산하는 쿼리를 작성해주세요!

select p.name, p.id, o.quantity
from products p
join orders o
on p.id = o.product_id;

저는 이번 문제들의 기준을 "Products" 파일로 작업하였습니다!

기준 파일을 정해놓고 작업을 하니까 편하더라구요!

그래서 막힘없이 코드를 만들어내지 않았을까 싶었어요 😊

 

하지만, 또 실수했죠?

"총 수량"이기 때문에

만일, 데이터 파일이 컸더라면 이번에도 Sum을 활용하는 게 맞았다고 생각합니다.

select o.product_id, SUM(o.quantity) as 총수량
from orders o
group by o.product_id;

 

문제 4. 2023년 3월 3일 이후에 주문된 모든 상품의 이름을 나열하는 쿼리를 작성해주세요!

select p.name
from products p
join orders o
on p.id = o.product_id
where o.order_date > '2023-03-03'
order by p.name desc;

"나열" 보자마자 'order by ~ desc 써야겠다'를 생각해낸 문제였습니다

아직은 SQL과 친해지는 과정이라서 그런지

코드를 짜낼 때마다 즐거움이 퐁~ 퐁~ 올라오네요

역시, 무엇이든지 새롭게 배우고 적응하고 공부한다는 행위 자체가

너무 즐겁고 성장해가는 저의 모습을 볼 수 있어서 좋습니다!

계속 공부하며 성장해나가는 저의 과정과 모습도 잘 담아보겠습니다 😋

 

문제 5. 가장 많이 판매된 상품의 이름을 찾는 쿼리를 작성해주세요!

select p.name, o.quantity
from products p
join orders o
on p.id = o.product_id
order by o.quantity desc
limit 1;

"가장 많이 판매된"이라는 문구를 보고

"limit"를 마지막에 작성함으로써 Best 1를 끌어온 문제였습니다

 

이번에도, Sum을 활용해야 했지 않았나 싶었어요

"가장 많이 판매된"이기 때문에 합해야 한다고 생각하거든요

그래서 팀원분들께 피드백 받은 후 수정하였습니다.

select p.name
from products p
join orders o on p.id = o.product_id
group by p.name
order by SUM(o.quantity) DESC
LIMIT 1;

 

문제 6. 각 상품 ID별로 평균 주문 수량을 계산하는 쿼리를 작성해주세요!

select p.id, avg(o.quantity) as avg_orders
from products p
join orders o
on p.id = o.product_id
group by p.id;

앞서 언급하였던 avg 때도 group by 쓰는 걸 잊지 않았구요

여기서 제가 계속 놓치는 걸 찾았습니다

한 번 오류가 나서 뭐가 문제인지 코드를 천천히 살펴보았는데,

select p.id avg(o.quantity) as avg_orders
select p.id, avg(o.quantity) as avg_orders

두 개의 차이점이 보이시나요?

그렇습니다

제가 계속 콤마(,)를 빼먹어서 오류가 나더라구요

이제부터 알았으니, 다음 코드를 짤 때는 더 신경쓰면서 해야 할 거 같습니다

저의 실수를 이렇게 알게 되어서 다행이에요!

 

오늘의 마지막 문제입니다!

문제 7. 판매되지 않은 상품의 ID와 이름을 찾는 쿼리를 작성해주세요!

select p.id, p.name
from products p
left join orders o
on p.id = o.product_id 
where o.id is null;

여기서 제가 틀린 코드를 짰더라구요..

지금 보고 계시는 코드는 수정이 완료된 코드구요.

이전에는

select p.id, p.name
from products p
join orders o
on p.id = o.product_id 
where o.quantity is null;

이렇게 작성하였습니다.

생각을 해보니까,

지금 데이터 파일의 크기가 작아서 가능한 거고,

실제로 보는 데이터들은 파일 크기가 클 테니까

명확한 범위값을 주는 게 맞다고 생각합니다!

이 부분을 간과하고 있었던 거 같아요

이제라도 알았으면 됐죠 😋


마무리

최근에 새로운 팀원분이 오셨는데

다른 데서 조금은 배우고 오셨다 하셨거든요

그 분의 데이터를 바라볼 때 관점과 저의 관점을 비교할 수 있어서

너무 좋았습니다

저의 부족한 관점이 무엇이고, 데이터를 바라볼 때 접근법을 어떻게 해야 할지

생각할 수 있었던 기회였거든요 😋

차차 발전해가고, 여럿 사람들과 대화를 많이 나누고 싶습니다

서로 발전해나갔으면 좋겠어요 🤗

 

이제 다음주부터는 본 캠프 내용으로 찾아뵙겠습니다!

감사합니다 🤗

 

<새롭게 알게 된 것들>

1. "Join"은 "Inner"의 개념을 내포하고 있음

2. 데이터 값이 클 때를 생각해야 함

3. left join을 잘 활용해보자!

4. "총", "모든"이 들어갈 땐 Sum을 활용하여 데이터 명확히 끌고 오기! 

+ Recent posts