본문 바로가기
2023-2/데이터 분석과 머신러닝

Python summary

by 철없는민물장어 2023. 10. 18.
728x90
반응형

파이썬 기초 

 

변수: 자료형을 명시할 필요 없음

a = 4

 

부동소수점 실수

123e2 #12300.0
123.456e-3 #0.123456

유효숫자e지수 형태로 적으면 된다.

 

출력 형식(format)

기본 방법

# 숫자를 문자열에 삽입하기
number = 42
formatted_string = "숫자는 {}입니다.".format(number)
print(formatted_string)  # 출력: 숫자는 42입니다.

# 여러 개의 값을 삽입하기
name = "홍길동"
age = 30
formatted_string = "이름은 {}, 나이는 {}세 입니다.".format(name, age)
print(formatted_string)  # 출력: 이름은 홍길동, 나이는 30세 입니다.

.format(변수값)을 입력하면 된다.

 

f문자열 사용하는 방법

name = "홍길동"
age = 30
formatted_string = f"이름은 {name}, 나이는 {age}세 입니다."
print(formatted_string)  # 출력: 이름은 홍길동, 나이는 30세 입니다.

{} 기호 내에 형식 지정하는 방법

  • {:>10} 전체 10칸 차지, 우측정렬
  • {:^10} 전체 10칸 차지, 중앙정렬
  • {:.5f} 소수점 이하 5자리까지 출력

함수 선언

def 함수이름(매개변수1, 매개변수2, ...):
    # 함수의 기능을 구현하는 코드
    # ...
    return 반환값

매개변수에 디폴트값을 주는 방법

def 함수이름(매개변수1=0, 매개변수2=1, ...):
    # 함수의 기능을 구현하는 코드
    # ...
    return 반환값

매개변수의 수를 가변적으로 사용

def 함수이름(*x):
    sum=0
    for i in x:
    	sum = sum+i
    return sum;

 

람다식 선언하기

f = lambda x,y: x**2+3*y

 

리스트, 딕셔너리 자료형

x=[88,99,100] #리스트
print(x[0]) 인덱스로 접근

b={"수학":88,"영어":90,"국어":100}
print(b["영어"])

자료형이 달라도 된다.


Numpy

numpy 배열

x=np.array([1,2,3])
x=np.array([1,2,3.0]) #객체에 정수,실수를 같이주면 모두 실수로 변환됨
x=np.array([1,2,3],dtype='f') #자료형을 명시하여 변환

다차원 배열

d=np.array([[1,2,3,4],
			[5,6,7,8],
            [9,10,11,12]])
            
d[1,2] #7출력. 다차원배열의 인덱싱은 [행,열]로 표시

넘파이배열은 벡터화되어있고 파이썬배열은 그렇지 않다. 각각 *2연산을 하면 넘파이배열은 각 원소가 2배가 되지만 파이썬배열은 배열크기가 2배가 됨.

 

팬시 인덱싱

인덱스 배열 사용

a=np.array([11,22,33,44,55,66,77,88,99])
idx=np.array([0,2,4,6])
print(a[idx]) 
#[11 33 55 77] 출력

 

Numpy 배열 생성 함수

  • zeros()
  • ones()
  • zeros_like()
  • ones_like()
  • empty()
a=np.zeros(5) #[0,0,0,0,0]
b=np.ones((3,2),dtype="i") #array([[1,1],[1,1],[1,1]],dtype=int32)
c= np.zeros_like(b,dtype='f') #b와 같은 형태의 0배열 생성
d=np.empty((2,3))

 

  • arange()
  • linspace()
  • logspace()
np.array(10) #[0,1,2,3,4,5,6,7,8,9]
np.linspace(0,100,5) #0부터 100까지 시작,끝포함 5등분.[0,25,50,75,100]
np.logspace(0.1,1,10)

Numpy배열 변환

a=np.array([[1,2,3],[4,5,6]])
a.T #전치. array([[1,4],[2,5],[3,6]]) 

a.reshape(3,2) #자료순서 그대로 차원 크기만 변환. [[1,2],[3,4],[5,6]]

Numpy 배열 연산

x=np.array([7,3,8,1,5,9])

np.sum(x)
x.sum()
x.max()
x.argmin() #x에서 최소값의 인덱스
x.mean() #평균
np.sort(x) #정렬. 배열자체의 값을 변경하지 않음

np.argsort(x) #x를 정렬한 인덱스 순서
x.sort() #배열자체의 값을 변경하는 정렬

축계산

d=np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]]) #2x2x3배열

d.sum()
d.sum(axis=2) #열방향 합
d.sum(axis=1) #행방향 합
d.sum(axis=0) #페이지방향 합

배열의 결합

a=np.array([[1,2],[3,4]])
b=np.array([[5,6],[7,8]])

np.hstack([a,b]) 
#[[1,2,5,6],
#[3,4,7,8]

np.vstack([a,b])
#[[1,2]
#[3,4]
#[5,6]
#[7,8]]

np.r_[a,b] #행방향 순서로 결합
#[[1,2],
#[3,4]
#[5,6]
#[7,8]]

np.c_[a,b] #열방향 결합
#[[1,2,5,6]
#[3,4,7,8]]

 

Numpy meshgrid

a=np.array([0,1,2])
b=np.array([0,1,2,3,4])
X,Y=np.meshgrid(a,b)
[list(zip(x,y) for x,y in zip(X,Y)]

Numpy 난수

np.random.rand(5) #0~1사이 균일 분포 난수발생. 원소5개 배열반환
np.random.rand(2,3) #0과 1사이의 균일 분포 난수 발생. 2x3배열로
np.random.randn(10) #평균0,표준편차1의 표준정규분포 난수 발생. 10개
np.random.randint(10,20,size=10) #10~19사이의 정수 난수 10개
np.random.randint(20,size=2,5) #0~19사이의 난수 2x5배열
x=np.arange(10)
np.random.shuffle(x) #항목 섞기

np.random.choice(x,5, replace=False) #배열x에서 5개 샘플링. 중복불가
np.random.choice(5,5, replace=False) #arange(5)한 후, 5개 샘플링. 중복불가
np.random.choice(5,10) #arange(5)한 후 10개 샘플링. 중복허용
np.random.choice(4,10, p=[0.1,0,0.3,0.6]) #[0,1,2,3]생성 후 각각의 선택 확률을 다르게 해서 10개 선택
dice=np.arange(1,7) 
x=np.random.choice(dice,10) #주사위 10번 샘플링
np.unique(x) #중복을 제외한 데이터 나열

index, count = np.unique(x, return_counts=True) #각 데이터의 빈도수 계산
print("주사위눈",index)
print("나온횟수",count)

np.bincount(x,minlength=7) #0~6까지의 데이터 중 0번 나온 데이터도 개수 출력
#[0,0,3,2,1,1,3]

Pandas

데이터 분석을 위한 수집,전처리,분석을 지원하기 위한 파이썬 라이브러리

시리즈: 1차원 배열+인덱스

데이터 프레임: 시리즈의 집합. (+컬럼이 존재할 수 있음)

import Pandas as pd

dic_data={"김":88,"이":89,"박":80}
s1=pd.Series(dic_data)

print(s1['이'])
print(s1[2])
print(s1['김,'정'])
print(s1[2:4])

#인덱스는 딕셔너리의 key 또는 정수로 사용가능
l_data=[88,89,98,77]
s2=pd.Series(l_data)
print(s2)
#0 88
#1 89
#2 98
#3 77

s3=pd.Series(l_data, index=['Kim','Lee','Park','Choi']) #인덱스 추가
print(s3)
#Kim 88
#Lee 89
#Park 98 
#Choi 77

 

딕셔너리로 {열 이름:[열 데이터]} 형식으로 지정가능

df = pd.DataFrame({"총점":[88,89,98,77],
					"성별":["남","여","남","여"],
                    "나이":[19,21,20,21],
                    "주소":["대구","대구","경산","포항"],
                    "키":[175,160,180,166.5]})
                    
df.index=["김","이","박","최"] #인덱스 설정

 

리스트로 [[],[],[]...] 2차원 배열형태의 표 작성하는 방식도 가능

df.pd.DataFrame([[88,89,80,77],
				[92,89,98,83],
                [75,77,87,80]],
                index=["학생1","학생2","학생3"]
               	,columns=["영어","수학","컴퓨터","역사"])

 

데이터프레임에서 특정 열, 행 출력하기

#열(시리즈)는 속성값처럼 동작함
df.컴퓨터
#학생1 80
#학생2 98
#학생3 98

#행은 []의 범위(슬라이싱)로 선택 가능
df[1:2] #1행을 선택
#학생2 92 89 98 83

df['학생1':'학생2'] #인덱스명으로 슬라이싱하면 마지막 인덱스명까지 선택됨

#2차원 배열처럼 데이터 선택 방식: .loc[], iloc[] 사용
df.loc['학생2':'학생3',['영어','수학']]
df.iloc[1:,0:2]
728x90
반응형

'2023-2 > 데이터 분석과 머신러닝' 카테고리의 다른 글

기계 학습  (1) 2023.10.21
머신러닝 개요  (0) 2023.10.18

댓글