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 |
댓글