반응형
📝판다스(Pandas)
판다스(Pandas)는 파이썬 데이터 처리를 위한 라이브러리입니다. 파이썬을 이용한 데이터 분석과 같은 작업에서 필수 라이브러리입니다. → 테이블 형태 표현
시리즈
- 1차원 배열의 값(values)에 각 값에 대응되는 인덱스(index)를 부여할 수 있는 구조를 갖고 있습니다.
# pip install pandas
import pandas as pd
sr = pd.Series([17000, 18000, 1000, 5000],
index=["피자", "치킨", "콜라", "맥주"])
print(sr)
'''
=== 출력 결과 ===
피자 17000
치킨 18000
콜라 1000
맥주 5000
'''
print('시리즈의 값 : {}'.format(sr.values))
print('시리즈의 인덱스 : {}'.format(sr.index))
# 시리즈의 값 : [17000 18000 1000 5000]
# 시리즈의 인덱스 : Index(['피자', '치킨', '콜라', '맥주'], dtype='object')
데이터프레임(DataFrame)
- 데이터프레임은 2차원 리스트를 매개변수로 전달합니다. 2차원이므로 행방향 인덱스(index)와 열방향 인덱스(column)가 존재합니다. 다시 말해 행과 열을 가지는 자료구조입니다.
# pip install pandas
import pandas as pd
values = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
index = ['one', 'two', 'three']
columns = ['A', 'B', 'C']
df = pd.DataFrame(values, index=index, columns=columns)
print(df)
'''
=== 출력 결과 ===
A B C
one 1 2 3
two 4 5 6
three 7 8 9
'''
print('데이터프레임의 인덱스 : {}'.format(df.index))
print('데이터프레임의 열이름: {}'.format(df.columns))
print('데이터프레임의 값 : {}'.format(df.values))
# 데이터프레임의 인덱스 : Index(['one', 'two', 'three'], dtype='object')
# 데이터프레임의 열이름: Index(['A', 'B', 'C'], dtype='object')
# 데이터프레임의 값 :
# [
# [1 2 3]
# [4 5 6]
# [7 8 9]
# ]
리스트 To 데이터프레임
import pandas as pd
# 리스트로 생성하기
data = [
['1000', 'Steve', 90.72],
['1001', 'James', 78.09],
['1002', 'Doyeon', 98.43],
['1003', 'Jane', 64.19],
['1004', 'Pilwoong', 81.30],
['1005', 'Tony', 99.14],
]
df = pd.DataFrame(data)
print(df)
'''
=== 출력 결과 ===
0 1 2
0 1000 Steve 90.72
1 1001 James 78.09
2 1002 Doyeon 98.43
3 1003 Jane 64.19
4 1004 Pilwoong 81.30
5 1005 Tony 99.14
'''
df = pd.DataFrame(data, columns=['학번', '이름', '점수'])
print(df)
'''
=== 출력 결과 ===
학번 이름 점수
0 1000 Steve 90.72
1 1001 James 78.09
2 1002 Doyeon 98.43
3 1003 Jane 64.19
4 1004 Pilwoong 81.30
5 1005 Tony 99.14
'''
딕셔너리 To 데이터프레임
# pip install pandas
import pandas as pd
# 딕셔너리로 생성하기
data = {
'학번' : ['1000', '1001', '1002', '1003', '1004', '1005'],
'이름' : [ 'Steve', 'James', 'Doyeon', 'Jane', 'Pilwoong', 'Tony'],
'점수': [90.72, 78.09, 98.43, 64.19, 81.30, 99.14]
}
df = pd.DataFrame(data)
print(df)
'''
=== 출력 결과 ===
학번 이름 점수
0 1000 Steve 90.72
1 1001 James 78.09
2 1002 Doyeon 98.43
3 1003 Jane 64.19
4 1004 Pilwoong 81.30
5 1005 Tony 99.14
'''
데이터프레임 다양하게 출력해보기
import pandas as pd
data = {
'학번' : ['1000', '1001', '1002', '1003', '1004', '1005'],
'이름' : [ 'Steve', 'James', 'Doyeon', 'Jane', 'Pilwoong', 'Tony'],
'점수': [90.72, 78.09, 98.43, 64.19, 81.30, 99.14]
}
df = pd.DataFrame(data)
# 앞 부분을 3개만 보기
print(df.head(3))
'''
학번 이름 점수
0 1000 Steve 90.72
1 1001 James 78.09
2 1002 Doyeon 98.43
'''
# 뒤 부분을 3개만 보기
print(df.tail(3))
'''
학번 이름 점수
3 1003 Jane 64.19
4 1004 Pilwoong 81.30
5 1005 Tony 99.14
'''
# 원하는 열만 보기
print(df['학번'])
'''
0 1000
1 1001
2 1002
3 1003
4 1004
5 1005
Name: 학번, dtype: object
'''
📝넘파이(Numpy)
넘파이(Numpy)는 수치 데이터를 다루는 파이썬 패키지입니다. Numpy의 핵심이라고 불리는 다차원 행렬 자료구조인 ndarray를 통해 벡터 및 행렬을 사용하는 선형 대수 계산에서 주로 사용됩니다. Numpy는 편의성뿐만 아니라, 속도면에서도 순수 파이썬에 비해 압도적으로 빠르다는 장점이 있습니다. → 계산에 이용
1차원 넘파이
import numpy as np
vec = np.array([1, 2, 3, 4, 5])
print(vec)
# [1 2 3 4 5]
# 0부터 9까지
range_vec = np.arange(10)
print(range_vec)
# [0 1 2 3 4 5 6 7 8 9]
# 1부터 9까지 +2씩 적용되는 범위
n = 2
range_n_step_vec = np.arange(1, 10, n)
print(range_n_step_vec)
# [1 3 5 7 9]
print('vec의 축의 개수 :',vec.ndim) # 축의 개수 출력
print('vec의 크기(shape) :',vec.shape) # 크기 출력
# vec의 축의 개수 : 1
# vec의 크기(shape) : (5,)
Numpy 배열에는 축의 개수(ndim)와 크기(shape)라는 개념이 존재하는데, 배열의 크기를 정확히 숙지하는 것은 딥 러닝에서 매우 중요합니다
2차원 넘파이
import numpy as np
mat = np.array([[10, 20, 30], [ 60, 70, 80]])
print(mat)
#[
# [10 20 30]
# [60 70 80]
#]
print('mat의 축의 개수 :',mat.ndim) # 축의 개수 출력
print('mat의 크기(shape) :',mat.shape) # 크기 출력
# mat의 축의 개수 : 2
# mat의 크기(shape) : (2, 3)
# 모든 값이 0인 2x3 배열 생성.
zero_mat = np.zeros((2,3))
print(zero_mat)
# [
# [0. 0. 0.]
# [0. 0. 0.]
# ]
# 특정 값이 들어간 2x3 배열 생성
same_value_mat = np.full((2,2), 7)
print(same_value_mat)
# [
# [7 7]
# [7 7]
# ]
# 대각선 값이 1이고 나머지 값이 0인 2차원 배열을 생성.
eye_mat = np.eye(3)
print(eye_mat)
# [
# [1. 0. 0.]
# [0. 1. 0.]
# [0. 0. 1.]
# ]
# 임의의 값으로 채워진 배열 생성
random_mat = np.random.random((2,2)) # 임의의 값으로 채워진 배열 생성
print(random_mat)
# [
# [0.18242516 0.85876578]
# [0.60103237 0.2575347 ]
# ]
데이터 값 변경 없이 배열의 구조 변경
import numpy as np
# 내부 데이터는 변경하지 않으면서 배열의 구조를 바꿉니다
reshape_mat = np.array(np.arange(30)).reshape((5,6))
print(reshape_mat)
# [
# [ 0 1 2 3 4 5]
# [ 6 7 8 9 10 11]
# [12 13 14 15 16 17]
# [18 19 20 21 22 23]
# [24 25 26 27 28 29]
# ]
0부터 29까지의 숫자를 생성하는 arange(30)을 수행한 후, 원소의 개수가 30개이므로 5행 6열의 행렬로 변경
특정 행 또는 열에 접근
mat = np.array([[1, 2, 3], [4, 5, 6]])
print(mat)
# [
# [1 2 3]
# [4 5 6]
# ]
# 첫번째 행 출력
slicing_mat = mat[0, :]
print(slicing_mat)
# [1 2 3]
# 두번째 열 출력
slicing_mat = mat[:, 1]
print(slicing_mat)
# [2 5]
특정 원소 출력
mat = np.array([[1, 2], [4, 5], [7, 8]])
print(mat)
# [
# [1 2]
# [4 5]
# [7 8]
# ]
# 1행 0열의 원소
# => 0부터 카운트하므로 두번째 행 첫번째 열의 원소.
print(mat[1, 0])
# 4
# mat[[2행, 1행],[0열, 1열]]
# 각 행과 열의 쌍을 매칭하면 2행 0열, 1행 1열의 두 개의 원소.
indexing_mat = mat[[2, 1],[0, 1]]
print(indexing_mat)
# [7 5]
행렬 연산
x = np.array([1,2,3])
y = np.array([4,5,6])
# result = np.add(x, y)와 동일.
result = x + y
print(result)
# [5 7 9]
# result = np.subtract(x, y)와 동일.
result = x - y
print(result)
# [-3 -3 -3]
# result = np.multiply(result, x)와 동일.
result = result * x
print(result)
# [-3 -6 -9]
# result = np.divide(result, x)와 동일.
result = result / x
print(result)
# [-3. -3. -3.]
# 행렬곱
mat1 = np.array([[1,2],[3,4]])
mat2 = np.array([[5,6],[7,8]])
mat3 = np.dot(mat1, mat2)
print(mat3)
# [
# [19 22]
# [43 50]
# ]
📝Matplotlib(맷플롯립)
맷플롯립(Matplotlib)은 데이터를 차트(chart)나 플롯(plot)으로 시각화하는 패키지입니다. 데이터 분석에서 Matplotlib은 데이터 분석 이전에 데이터 이해를 위한 시각화나, 데이터 분석 후에 결과를 시각화하기 위해서 사용됩니다.
plt.title('students')
plt.plot([1,2,3,4],[2,4,8,6])
plt.plot([1.5,2.5,3.5,4.5],[3,5,8,10]) # 라인 새로 추가
plt.xlabel('hours')
plt.ylabel('score')
plt.legend(['A student', 'B student']) # 범례 삽입
plt.show()
🔗 참고 및 출처
반응형