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 기본 모듈화 과정
- 프로그램 내용이 담긴 main() 함수를 만들어 줍니다
- if __name__=="__main__": 구문을 코드 가장 하단에 추가해 줍니다
- main() 함수를 추가된 구문에 들여쓰기를 맞춰서 실행될 수 있도록 합니다 3..py 파일을 만들어 주고, 프로그램 내용을 붙여넣습니다
- .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
'• 패스트캠퍼스 데이터분석 부트캠프 12기 > Python' 카테고리의 다른 글
Part.3_Chapter.02_데이터 분석 라이브러리 (1) | 2024.01.04 |
---|---|
Part.3_Chapter.01_파이썬 프로그래밍 (3) | 2024.01.03 |