Blair  - Soul Eater [패스트캠퍼스] 데이터분석 부트캠프12기 학습일지_04

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

[패스트캠퍼스] 데이터분석 부트캠프12기 학습일지_04

oujin 2024. 1. 14. 23:11
728x90

2023년 12월 18일부터 데이터분석 부트캠프를 진행하게 되었습니다.

오늘은 2024년 01월 14일로 시작한지 28일째 되는 날이네요!

 


데이터 분석을 위한 핵심 Tool Python

 

▶ 시퀀스 자료형 공통 기능 사용하기

요소 < 시퀀스 자료형 < 시퀀스 객체

 

1. 특정 값이 있는지 확인

값 in 시퀀스객체

시퀀스 객체 = list, tuple, range, 문자열

* 리스트, 튜플, 범위, 문자열에 해당 값이 있는지 없는지 확인하기

a = [0,10,20,30,40,50,60,70,80,90]

print(30 in a)

print(30 not in (6.,5.,26,21))

print(1 not in range(10))

print('P' not in "Hello, Python")

실행결과  

True
True
False
False

 

2. 시퀀스 객체 연결하기 :

 

* +연산자 사용

a = [1,2]
b = [3,4]
c=a+b
print(a+b)
print(a)
print(b)
print(c)

실행결과  

[1, 2, 3, 4]
[1, 2]
[3, 4]
[1, 2, 3, 4]

 

3. 시퀀스 객체의 요소 개수 구하기 : len() 함수 사용

a = [0,10,20,30,40,50,60,70,80,90]
print(len(a))

L1 = ['사과', '배', '귤', '오렌지']
L2 = ['토마토','바나나','수박','딸기']
print(len(L1+L2))

print(len(range(0,10,2)))

print(len("HELLO Python"))

실행결과  

10
8
5
12

 

4. 시퀀스 객체 인덱싱하기

a = [38,21,53,83,18]
print(a[0])
print(a[2])
print(a[4])

r = range(1,11,2)
print(r[2])

print(L[-1]) #음수 인덱싱 가능

실행결과  

38
53
18
5
19

 

+ 마지막 요소에 접근하기 : len()-1

 

5. 리스트 값 수정하기 (튜플은 안됨)

추가

a = [0,0,0]
print(a)
a[0]=10
print(a)

실행결과  

[0, 0, 0]
[10, 0, 0]

 

삭제

a = [10,20,30,40]
del a[2]
print(a)

실행결과  

[10, 20, 40]

 

슬라이스

a = [10,20,30,40,50,60,70,80,90]
print(a[1:3])

print(a[:]) # 전체를 가져오기

실행결과  

[20, 30]
[10, 20, 30, 40, 50, 60, 70, 80, 90]

 

슬라이스에 요소 할당하기

a = [0,10,20,30,40,50,60,70,80,90]
a[2:8:2] = ['a','b','c']
print(a)

실행결과  

[0, 10, 'a', 30, 'b', 50, 'c', 70, 80, 90]

 

+ 튜플, range, 문자열은 슬라이스 범위를 지정하더라도 요소를 할당 할 수 없음

 

슬라이스로 요소 제거

a = [0,10,20,30,40,50,60,70,80,90]
del a[2:5]
print(a)

실행결과  

[0, 10, 50, 60, 70, 80, 90]

 

인덱스가 홀수인 요소 출력

n = -32,75,97,-10,9,32,4,-15,0,76,14,2
print(n[1::2])

실행결과  

(75, -10, 32, -15, 76, 2)

 


▶ 딕셔너리

딕셔너리 만드는 법 4가지

1. {키:값,키:값}
2. zip함수
3. 리스트안에 (키,값) 형식의 튜플을 나열
4. dict안에서 딕셔너리 뒤에 []사용해 [] 안에 키를 지정해주면 됨

lux = {'health' : 490, 'mana' : 334, 'melee' : 550, 'armor' : 18.72}

print("키 유무 여부를 확인 :")
if 'health' in lux:
    print(lux['health'])    # 키의 값이 없으면 에러 발생

if lux.get('health') != None:    # 키의 값이 없을 경우 = None
    print(lux['health'])

# print("key를 사용하여 value에 접근하는 경우:")
# print(lux['health1'])    # 키의 값이 없으면 에러 발생

print("get 메소드를 사용하는 경우:")
print(lux.get('health1'))    # 키의 값이 없을 경우 : None

 


조건문

▶ if 조건문 : 조건식을 지정하고   :  을  붙이고 들여쓰기(Tap)를 한 후 실행 할 코드가 온다.

pass : 아무일도 하지 않고 그냥 넘어간다는 뜻, pass만 넣고 나중에 할 일은 주석으로 남겨놓는 방식임.

num = int(input(''))
if num ==7:
    print('행운')
num = int(input('값 입력 :'))
if num ==10:
    print(f'{num}은 10과 같습니다.')
if num >10:
    print(f'{num}은 10보다 큽니다.')
if num <10:
    print(f'{num}은 10보다 작습니다.')

 

▶ 중첩 if 문 : if문 안에 if문 사용

x = int(input(''))
if x >= 10:
    print('10이상입니다.')
    if x==15:
        print('15입니다.')
    if x==20:
        print('20입니다.')
값 비교시 !=
객체 비교시 is , is not

 

▶ else를 사용하여 두 방향으로 분기하기

조건식이 만족할때와 만족하지 않을때를 각각 적을 수 있다.

num = int(input('값 입력 :'))
if num ==10:
    print('10입니다')
else:
    print('10이 아닙니다')

 

 조건식 여러개 지정하기

written_test = 75
coding_test = True
if written_test >=80 & coding_test==True:
    print('합격')
else:
    print('불합격')

 

 

 if elif else 를 사용하여 여러 조건 사용하기

참, 거짓으로만 프로그램을 작성하기 어려울 때 사용

if-else 의 else에 다시 if-else 를 사용하는 것과 동일하다

if-elif-else 구문은 if-elif- elif- elif- elif- ...-else 로 사용한다.

if-elif-else 구문은 예외상황 처리가 가능하다.

x = int(input())
if 11 <= x <= 20:
    print("11~20")
elif 21 <= x <=30:
    print("21~30")
else:
    print("아무것도 해당되지 않음")

 

else는 예외처리 할 때 사용하는 것이 좋음


▶ 참과 거짓

0:거짓

1: 참

빈문자열: 거짓

문자열:참

 


반복문

for, range

for i in range(7):
    print("hello, world!",i+5)
    
for i in range(5,12):
    print("hello, world!",i+5)

 

for문과 while문 차이점

- for 시퀀스 객체

- while 조건

 

▶ while 문법

초기식
while 조건식
    반복할코드
    변화식
i = 0
while i <5:
    print("hello world!")
    i +=1

 


▶ random.random

import random
random.random()

 

▶1~6 사이의 랜덤값 출력 : random.randint()

i=1
while i<=10:
    print(random.randint(1,6))
    i+=1

 

continue : 일부코드를 실행하지 않고 건너뛰기, 아래 코드를 실행하지 않고 위로 다시 올라가서 코드를 실행함

 


▶ 대각선으로 별 출력하기

for i in range(5):
    for j in range(5):
        if i == j:
            print("*",end=" ")
        else:
            print(" ",end=" ")
    print()

실행결과 

*         
  *       
    *     
      *   
        *

 


eda시 고려해야 할 8가지:

1. 변수탐색: 독립 변수와 종속변수를 개별적으로 탐색. 변수들의 분포, 기술통계량, 이상치의 존재 여부, 변수간의 관계 살펴보기

2. 상관 관계 탐색: 변수들 간의 상관관계조사. 회귀 모델에서 사용된 독립 변수들 간의 다중공선성(변수 간 상관성)이 높을 수 있으며, 이것이 모델의 통계적 유의성을 낮출 수 있다.

3. 변수 선택: 불필요한 변수를 제거하거나 새로운 변수를 도입하여 모델을 개선 할 수 있는지 고민, 변수 선택 기법을 사용하여 모델의 복잡성을 줄이는 방법 고려

4.모델 개선: 다른 회귀 모델(다중 선형 회귀, 로지스틱 회귀, 의사결정트리, 랜덤포레스트)을 시도하여 모델을 개선 할 수 있는지 확인, 모델의 하이퍼파라미트 조정하여 성능을 향상시킬 수 있음

5. 데이터 전처리: 데이터의 결측치, 이상치, 스케일링 등을 적절하게 처리. 이러한 전처리 단계가 모델의 성능에 영향을 미침

6. 새로운 가설 생성. 데이터를 더 깊에 탐색하면서 새로운 가설 생성, 검증하기, 이 과정에서 유용한 변수나 특징을 찾을 수있다.

7. 교차 검증, 모델의 안정성과 일반화 능력을 평가하기 위해 교차 검증 수행

8. 시각화: 데이터 시각화를 활용하여 패턴을 탐색하고 모델의 결과를 시각적으로 분석, 특히 잔차 분석을 통래 모델의적합성 평가 가능


▶ 리스트에 값 추가하기

append(), extend(), insert()

1. append()는 단일 항목을 추가

2. extend()는 다른 리스트의 모든 항목( 다른 리스트나 반복 가능한(iterable) 객체의 모든 항목 )을 추가

3. insert()는 특정 위치에 항목을 추가 ( 인덱스 이후의 항목들은 한 칸씩 뒤로 밀리게 됨)

 

▶ 리스트에 값 삭제하기

pop(), remove()

1. pop()은 리스트에서 지정된 인덱스에 있는 항목을 제거하고 남은 리스트를 반환. 인덱스 지정안하면 마지막 항목 제

2. remove()는 리스트에서 특정 값을 찾아 첫번째로 일치하는 항목을 제거합니다.

 

▶ 스택과 큐 차이점

# 스택구조: Last In First Out, First In Last Out
# 활용예시 - 웹브라우저 방문기록, 실행 취소
a = []
for i in range(4):
    i += 1
    a.append(i*10)
    print(a)

for i in range(4):
    print(a.pop())

print(a)
print('-'*10)

# 큐구조: First In First Out, Last in Last Out
# 활용예시 - 프린터 인쇄 대기열, 은행/콜센터 업무, 프로세스 관리
for i in range(4):
    i += 1
    a.append(i*10)
    print(a)
for i in range(4):
    print(a.pop(0))

print(a)

실행결과 ↓

[10]
[10, 20]
[10, 20, 30]
[10, 20, 30, 40]
40
30
20
10
[]
----------
[10]
[10, 20]
[10, 20, 30]
[10, 20, 30, 40]
10
20
30
40
[]

 

▶ index(), count(), reverse(), sort()

1. index()는 리스트에서 특정 값의 인덱스를 반환. 해당 값이 리스트에 없으면 ValueError 출력.

2. count()는 리스트에서 특정 값의 개수를 반환

3. reverse()는 리스트의 순서를 뒤집는다

4. sort()는 리스트의 항목들을 정렬. 기본적으로는 오름차순(작은 값에서 큰 값 순서)으로 정렬

 

▶ 리스트 표현식 (List Comprehension)

new_list = [expression for item in iterable if condition]

 

▶ 2차원 리스트 언패킹

a = [[10, 20], [30, 40], [50, 60]]

for aa in a: #aa = [10, 20] / [30, 40] / [50, 60] - 2차원 리스트의 요소인 1차원 리스트 추출
    for aaa in aa: #aaa = 10/20/30/40/50/60 - 1차원 리스트의 요소인 값 추출
        print(aaa, end=' ') #개별 요소를 띄어쓰기하여 추출
    print()
    
#추가 코드

for x, y in a: #x, y에 각각 요소를 언패킹
    print(x, y)

실행결과 ↓

10 20 
30 40 
50 60 
10 20
30 40
50 60
728x90