Blair  - Soul Eater Part.2_Chapter.01_파이썬 기초 프로그래밍

• 패스트캠퍼스 데이터분석 부트캠프 12기/Python

Part.2_Chapter.01_파이썬 기초 프로그래밍

oujin 2024. 1. 10. 17:08
728x90

▶ 파이썬 특징

  • Python 은 대소문자를 구분합니다 (print - O, PRINT - X)
  • Python 은 들여쓰기(INDENT)에 민감하니 주의하세요
  • 들여쓰기는 암묵적으로 Tab 한번 혹은 스페이스 4번을 기준으로 합니다
  • Python 및 대부분의 프로그래밍 언어는 첫번째 인덱스가 0 부터 시작합니다

▶ 파이썬 자료형

  • Python 자료형은 숫자형(int, float), 문자열(str), 참/거짓(bool), 리스트(list), 튜플(tuple), 딕셔너리(dict), 집합(set) 이 있습니다

 

▶ 변수의 이름

  • 변수의 이름은 일반적으로 "알파벳 소문자 + 숫자(혹은 언더바 _)" 형식을 사용
  • 변수의 이름으로 적절하지 않은 조합
    • 알파벳 이외의 언어로 된 변수 (한글, 중국어, 일본어 등)
    • 숫자가 맨 앞에 오는 경우 (ex. 1a)
    • 언더바 외 특수 문자 (ex. *, /, &, $, #, ~ 등)
    • 변수명 사이에 공백이 있는 경우

 

▶  여러줄 입력하기

c = """Life is too short,
You need Python
My life would be so long!
"""
type(c)

 

▶ 문자열 안에 따옴표 넣기

c = "Life is too short, You need 'Python'"
print(c)

 

▶ 문자열 연산

# 문자열 더하기
head = "Python"
tail = " is fun!"
head + tail

# 문자열 곱하기
head = "Python"
head*2

 

▶ 문자열 슬라이싱

c = "Life is too short, You need Python"
c[0]
c[0:4] #0이상 4미만의 인덱스에 해당하는 값을 가져옴
split_c = c.split(' ')
split_c

 

▶ 값의 존재 유무를 볼 때 None

b = None
type(b)

if b:
    print('True!')  # 출력없음

 


▶ 리스트

  • 요소(값)의 모음 형태의 자료형입니다
  • 묶고 싶은 요소(값)들을 대괄호 ([]) 를 사용하여 감싸주어 만듭니다
    • 리스트명 = [요소1, 요소2, 요소3, ...]
  • Python 의 모든 자료형을 리스트의 요소로 담을수 있습니다

 

▶ 리스트 정리

# 리스트 더하기
a = [1,2,3]
b = [4,5,6]
a + b

# 리스트 곱하기
a = [1,2,3]
a * 3

# 리스트 값 바꾸기
a = [1,2,3]
a[0] = 4
a

# 리스트 요소 추가
a = [1,2,3]
a.append(4)
a

# 리스트 요소 제거
a.remove(4)
a

# 리스트 요소 삽입
a = [1,2,3]
a.insert(1,4)
a

# 리스트 정렬
a.sort(reverse=False)
a

# 리스트 위치 반환
a = [1,2,3]
a.index(2)

# 리스트 개수 세기
a = [1,1,2,3]
a.count(1)

# 리스트 길이 파악
len(a)

 

▶ 튜플

  • 값의 수정,  추가, 삭제 가 불가능하며, 오로지 읽기만 가능
  • 묶고 싶은 요소(값)들을 괄호 (()) 를 사용하여 감싸주어 만듭니다
    • 튜플명 = (요소1, 요소2, 요소3, ...)

 

▶ 딕셔너리

  • 키(Key): 값(Value) 쌍 모음 사전 형태의 자료형입니다
  • 리스트나 튜플과 다르게 순서가 없습니다
  • 값을 찾고 싶을 때, 매우 빠르게 값을 찾을 수 있습니다
  • 키와 값 쌍들을 중괄호 ({}) 를 사용하여 감싸주어 만듭니다
    • 딕셔너리명 = {'Key1': Value1, 'Key2': Value2, ...}
  • 키(Key) 는 문자형/튜플, 값(Value) 은 모든 자료형을 담을수 있습니다

 

▶ 딕셔너리 정리

a = {'Bulldog': 'dog', 'Munchkin' : 'cat'}
type(a)

# 키 검색
a.keys()

# 값 검색
a['Bulldog']

# 값 추가
a['Poodle'] = 'dog'
a

# 값 변경
a['Bulldog'] = 'cat'
a

# 요소 삭제
del a['Bulldog']
a

# 모두 삭제
a.clear()
a

 

▶ 집합

  • 순서가 없고, 중복이 허용되지 않는 자료형입니다
  • 묶고 싶은 요소들을 중괄호 ({}) 를 사용하여 감싸주어 만듭니다
    • 집합명 = {요소1, 요소2, 요소3, ...}

 

▶ 집합 정리

중복, 교집합, 합집합, 차집합, 다른 자료형으로 변환

a = {1,2,3}
type(a)

a = {1,1,2,3}
a

b = {'H', 'E', 'L', 'L', 'O'}
b

# 교집합
a = {1,2,3,4,5}
b = {4,5,6,7,8}
a & b

# 합집합
a = {1,2,3,4,5}
b = {4,5,6,7,8}
a | b

# 차집합
a = {1,2,3,4,5}
b = {4,5,6,7,8}
a - b

# 다른 자료형으로 변환
a = {1,2,3,4,5}
print(type(a))
a = list(a)
print(type(a))

▶ if 문

# 코드를 입력해 주세요
sleepy = True
awake_point = 10    # 잠이 깨는 시점
max_coffee = 5 

num_coffee = 0

while sleepy==True:                    # 조건 1 : 잠이 오면, 아래 실행
    num_coffee = num_coffee + 1
    print('커피를 {} 잔 마셨습니다!'.format(num_coffee))

    if num_coffee >= awake_point:      # 조건 2 : 잠이 깨는 시점이 되면, 아래 실행
        sleepy = False
        print('더이상 잠이 오지 않습니다')

    if num_coffee >= max_coffee:       # 조건 3 : 커피가 떨어지면, 아래 실행
        print('커피가 다 떨어졌습니다')
        break

 

▶ for 문

# 동작문 Skip 하기
drink = ['커피', '차', '물']

for item in drink:
    if item=='차':
        continue

    print('{} 을(를) 마셨습니다!'.format(item))
# 반복문 중간에 나오기
drink = ['커피', '차', '물']

for item in drink:
    print('{} 을(를) 마셨습니다!'.format(item))

    if item=='차':
        break

 

▶ while 

# 코드를 입력해 주세요
sleepy = True
awake_point = 10    # 잠이 깨는 시점

num_coffee = 0

while sleepy==True:                    # 조건 1 : 잠이 오면, 아래 실행
    num_coffee = num_coffee + 1
    print('커피를 {} 잔 마셨습니다!'.format(num_coffee))

    if num_coffee >= awake_point:      # 조건 2 : 잠이 깨는 시점이 되면, 아래 실행
        sleepy = False
        print('더이상 잠이 오지 않습니다')

 

▶ 함수

# 출력이 하나일 경우
def drink_beverage(drink):
    for item in drink:
        print('{} 을(를) 마셨습니다!'.format(item))

    return len(drink)
    
num_drink = drink_beverage(['커피', '차', '물'])
print('총 {} 잔 마셨습니다'.format(num_drink))
# 출력이 여러개일 경우
def drink_beverage(drink):
    for item in drink:
        print('{} 을(를) 마셨습니다!'.format(item))

    return len(drink), drink[-1]
    
num_drink, last_drink = drink_beverage(['커피', '차', '물'])
print('총 {} 잔 마셨습니다'.format(num_drink))
print('마지막으로 {} 을(를) 마셨습니다'.format(last_drink))
# 다중 입력값 사용하기
def drink_beverage(drink1, drink2, drink3):
    drink = [drink1, drink2, drink3]
    for item in drink:
        print('{} 을(를) 마셨습니다!'.format(item))
        
drink1 = '커피'
drink2 = '차'
drink3 = '물'

drink_beverage(drink1, drink2, drink3)

▶ 값 입력받기, 형식

favorite = input('당신이 가장 좋아하는 것은 무엇입니까?')
print(f'{favorite}는 빠릅니다')

 

▶ 파일 생성, 파일 쓰기, 파일 읽기

# 파일생성
f = open('new_file.txt', 'w')
f.close()

# 파일 쓰기
f = open('new_file.txt', 'w')
for i in range(1, 6):
    f.write("안녕! ")
    f.write('{}번째 줄입니다\n'.format(i))
f.close()

# 파일 읽기
f = open('new_file.txt', 'r')
for line in f.readlines():
    print(line)
f.close()

실행 결과 ↓

# 파일 읽기 실행결과
안녕! 1번째 줄입니다

안녕! 2번째 줄입니다

안녕! 3번째 줄입니다

안녕! 4번째 줄입니다

안녕! 5번째 줄입니다

List Comprehension

  • List Comprehension 은 파이썬이 고유하게 제공하는 기능으로, 리스트를 빠르고 쉽게 생성하는 기능입니다
  • 일반적으로 for 문 을 사용하는 것보다 무척 빠릅니다
  • 프로그램 동작 시간이 너무 오래 걸리는 경우, 대안으로 생각해 볼 수 있습니다
  • 기본 문법
    • 리스트형 = [변수 for 변수 in [변수1, 변수2, 변수3, ...]]
    • 리스트형 = [변수 for 변수 in [변수1, 변수2, 변수3, ...] if 조건문 ]
new_list = [elem for elem in range(10)]
new_list
new_list = [elem for elem in range(10) if (elem % 2) == 1]
new_list

 

▶ 예외처리

오류를 무시하거나, 오류 유형에 따라 이후 조치를 추가해 주는 기능

  • 기본 문법
    • try: 우선적으로 실행할 구문 ...
    • except : 오류 발생 시 실행할 구문 ...
def error_function(input):
    for i in range(10):
        try:
            result = input / i
            print(result)
        except:
            pass
            

error_function(10) 
#input값이 10이고 range(10)은 0부터 시작하므로, 10을 0으로 나눌 수 없어서 오류가 생기지만,
#pass로 인해서 실행이 멈추지 않고 계속 진행됨

 

 

  • 예상되는 예외만을 지정해서 처리하도록 합니다
  • 모든 예외를 무시하는 습관을 가지다 보면, 다른 프로그램과 충돌이 났을 때 원인을 파악하기 힘듭니다
def error_function(input):
    for i in range(10):
        try:
            result = input / i
            print(result)
        except ZeroDivisionError:   # 0으로 나누었을 때 발생하는 에러만 무시, ZeroDivisionError 에러코드 입력
            pass

 

▶ 프로그램 모듈화

  • 모듈화란? 우리가 작성한 Python 코드를 실제 동작할 수 있는 프로그램처럼 만드는 방법입니다
  • 모듈화가 이루어진 코드는, 다른 외부 장치에서도 import 하고, 실행할 수 있습니다
  • Python 기본 모듈화 과정
    1. 프로그램 내용이 담긴 main() 함수를 만들어 줍니다
    2. if __name__=="__main__": 구문을 코드 가장 하단에 추가해 줍니다
    3. main() 함수를 추가된 구문에 들여쓰기를 맞춰서 실행될 수 있도록 합니다 3..py 파일을 만들어 주고, 프로그램 내용을 붙여넣습니다
    4. .py 파일을 실행합니다
# 모듈파일 생성
f = open('python module_sample.py', 'w')
f.close()

# 파일에 코드 입력후 저장
def main():
    item = input('당신이 가장 좋아하는 것은 무엇입니까?')
    print('저도 {} 을(를) 참 좋아합니다!'.format(item))

if __name__=="__main__":
    main()

#모듈 실행 (!모듈명.py)
!python module_sample.py

▶ Numpy

  • 다차원 배열을 쉽고 효율적으로 계산할 수 있도록 해주는 Python 의 대표 라이브러리 입니다
  • Numpy 는 데이터 분석을 할 때, Pandas 와 거의 항상 함께 연계해 사용합니다.

왜 사용할까?

  • 데이터란 이미지, 오디오, 텍스트, 숫자 등 다양한 형태와 크기로 존재합니다
  • 모든 데이터는 결국, 숫자의 배열 형태로 해석이 가능한데, 실제로 컴퓨터가 연산 작업을 수행하기 위해서는 배열 단위로 작업이 이루어지게 됩니다
  • 따라서 Numpy 는 Python 에서 모든 데이터 자료형을 분석하고, 계산하기 위한 데이터 분석에 필수적인 라이브러리 입니다

 

▶ array (배열)

  • 다중 리스트 구조와 다른 점은, 배열은 같은 데이터 타입 으로 이루어져 있다는 점입니다

▶ 배열 생성

# 1 배열
np.ones((3,3))

# 0 배열
np.zeros((3,3))

# 단위 행렬
np.eye(3,3)

# 사용자 지정 값
np.full((3,3), 10)

# 사용자 지정 값
np.full((3,3), np.arange(3))

# 랜덤 값
np.random.rand(3,3)

# np.arrange
np.arange(10)

np.arange(2, 10, 2)

# np.linspace, 1부터 10까지 같은간격으로 나누어진 5개의 숫자, 그래프 그릴때 유용
np.linspace(1, 10, 5)

 

▶ 슬라이싱

arr = np.array([[1, 2, 3, 4], 
                [5, 6, 7, 8], 
                [9, 10, 11, 12], 
                [13, 14, 15, 16]])
                
# 행 기준으로 슬라이싱
arr[0]

# 열 기준으로 슬라이싱
arr[:,0]

 

▶ numpy 함수

arr = np.array([[1, 2, 3, 4], 
                [5, 6, 7, 8], 
                [9, 10, 11, 12], 
                [13, 14, 15, 16]])

# 최소값, 최대값
print(np.min(arr), np.max(arr))

# 최소값, 최대값 인덱스
print(np.argmin(arr), np.argmax(arr))

# 전체 합, 평균
print(np.sum(arr), np.mean(arr))

# 특정 값 인덱스
np.where(arr==5)

 

▶ 배열 차원 변환

# 1차원 -> 2차원 변환
arr1 = np.arange(10)
arr1

arr2 = arr1.reshape(2,-1) # -1넣으면 차원을 자동으로 계산해서 남은 차원 입력해줌
arr2

# 2차원 -> 1차원 변환
arr1 = arr2.reshape(5,-1)
arr1

 

▶ 행렬의 연산

arr1 = np.array([[1, 2, 3, 4], 
                 [5, 6, 7, 8], 
                 [9, 10, 11, 12], 
                 [13, 14, 15, 16]])
arr2 = np.array([[1, 2, 3, 4], 
                 [5, 6, 7, 8], 
                 [9, 10, 11, 12], 
                 [13, 14, 15, 16]])
                 
# 곱셈
arr1 * arr2

# 나눗셈
arr1 / arr2

#내적
np.dot(arr1, arr2)

# 합계 - 행방향 (위에서 아래로)
np.sum(arr1, axis=0)

# 합계 - 열방향 (왼쪽에서 오른쪽으로)
np.sum(arr1, axis=1)

 

▶ 브로드캐스팅

arr3d = np.array([[[0,1],[2,3],[4,5],[6,7]], [[8,9],[10,11],[12,13],[14,15]], [[16,17],[18,19],[20,21],[22,23]]])
arr2d = np.array([[0,1],[2,3],[4,5],[6,7]])
np.shape(arr3d), np.shape(arr2d)

# 고차원으로 맞춰서 연산
arr3d + arr2d

# 단일 값 브로드캐스팅도 가능
arr2d + 10

 


▶ Pandas

딕셔너리로 데이터프레임 만들기

mydict = {'종목': ['야구', '축구', '롤'],
          '이름': ['류현진', '손흥민', '페이커'],
          '연봉': ['22,300,000,000', '15,000,000,000', '5,200,000,000']}
df = pd.DataFrame(mydict)
df

 

▶ pandas 파일 읽고 다른이름으로 저장

# csv 파일이 저장'된' 경로
csv_path = 'kpop_idols.csv'

# 파일 읽기
df = pd.read_csv(csv_path)

# csv 파일을 저장'할' 경로
csv_path = 'kpop_idols(1).csv'

# 파일 저장
df.to_csv(csv_path)

 

▶ 크롤링

import requests
site = 'https://dbkpop.com/db/all-k-pop-idols'
r = requests.get(site)

df = pd.read_html(r.text)[0]
df.columns = df.columns.get_level_values(0)

 

▶ 판다스 데이터 슬라이싱

#특정컬럼을 인덱스로 사용하기
loc_df.index = loc_df['Korean Name']

 

통계값 계산 및 정

 

 

피벗테이블 및 그룹통계

 

 

join, merge

 

 

▶ 자료형변환, 산술연

 

 

결측값 , 중복처리

 

 

apply, lambda, map

 

 

데이터프레임 시각화

728x90