1. Numpy
**list1 = [1, 2, 3]
print('list1 type:', type(list1))
array1 = np.array(list1)
#array1 = np.array([1,2,3])
print('array1 type:',type(array1))
print('array1 array 형태:',array1.shape)
array2 = np.array([[1,2,3],
[2,3,4]])
print('array2 type:',type(array2))
print('array2 array 형태:',array2.shape)
array3 = np.array([[1,2,3]])
print('array3 type:',type(array3))
print('array3 array 형태:',array3.shape)**
- ndarray 생성하기
sequence_array = np.arange(10)
print(sequence_array)
print(sequence_array.dtype, sequence_array.shape)
#(3, 2) shape을 가지는 모든 원소가 0, dtype은 int32 인 ndarray 생성.
zero_array = np.zeros((3, 2), dtype='int32')
print(zero_array)
print(zero_array.dtype, zero_array.shape)
#(3, 2) shape을 가지는 모든 원소가 1인 ndarray 생성. ,
one_array = np.ones((3, 2))
print(one_array)
print(one_array.dtype, one_array.shape)
- ndarray의 차원과 크기를 변경하는 reshape
array1 = np.arange(10)
print('array1:\\n', array1)
# (2, 5) shape으로 변환
array2 = array1.reshape(2, 5)
print('array2:\\n',array2)
#(5, 2) shape으로 변환.
array3 = array1.reshape(5,2)
print('array3:\\n',array3)
- ndarray의 데이터 세트 선택하기 - Indexing
# 1에서 부터 9 까지의 1차원 ndarray 생성
array1 = np.arange(start=1, stop=10)
print('array1:',array1)
# index는 0 부터 시작하므로 array1[2]는 3번째 index 위치의 데이터 값을 의미
value = array1[2]
print('value:',value)
print(type(value))
array1d = np.arange(start=1, stop=10)
array2d = array1d.reshape(3,3)
print(array2d)
print('(row=0,col=0) index 가리키는 값:', array2d[0,0] )
print('(row=0,col=1) index 가리키는 값:', array2d[0,1] )
print('(row=1,col=0) index 가리키는 값:', array2d[1,0] )
print('(row=2,col=2) index 가리키는 값:', array2d[2,2] )
- 슬라이싱 인덱싱
array1 = np.arange(start=1, stop=10)
print('array1:', array1)
array3 = array1[0:3]
print('array3:', array3)
print(type(array3))
array1 = np.arange(start=1, stop=10)
# 위치 인덱스 0-2(2포함)까지 추출
array4 = array1[0:3]
print(array4)
# 위치 인덱스 3부터 마지막까지 추출
array5 = array1[3:]
print(array5)
# 위치 인덱스로 전체 데이터 추출
array6 = array1[:]
print(array6)
- 팬시 인덱싱
array1d = np.arange(start=1, stop=10)
array2d = array1d.reshape(3,3)
print(array2d)
array3 = array2d[[0,1], 2]
print('array2d[[0,1], 2] => ',array3.tolist())
array4 = array2d[[0,1], 0:2]
print('array2d[[0,1], 0:2] => ',array4.tolist())
array5 = array2d[[0,1]]
print('array2d[[0,1]] => ',array5.tolist())
- 불린 인덱싱
array1d = np.arange(start=1, stop=10)
print(array1d)
# [ ] 안에 array1d > 5 Boolean indexing을 적용
array3 = array1d[array1d > 5]
print('array1d > 5 불린 인덱싱 결과 값 :', array3)
행렬의 정렬 sort()와 argsort()
- 행렬 정렬
org_array = np.array([ 3, 1, 9, 5])
print('원본 배열:', org_array)
# np.sort( )로 정렬
sort_array1 = np.sort(org_array)
print ('np.sort( ) 호출 후 반환된 정렬 배열:', sort_array1)
print('np.sort( ) 호출 후 원본 배열:', org_array)
# ndarray.sort( )로 정렬
sort_array2 = org_array.sort()
print('org_array.sort( ) 호출 후 반환된 배열:', sort_array2)
print('org_array.sort( ) 호출 후 원본 배열:', org_array)
- 정렬 행렬의 인덱스 반환
org_array = np.array([ 3, 1, 9, 5])
sort_indices = np.argsort(org_array)
print(type(sort_indices))
print('행렬 정렬 시 원본 배열의 인덱스:', sort_indices)
import numpy as np
name_array = np.array(['John', 'Mike', 'Sarah', 'Kate', 'Samuel'])
score_array= np.array([78, 95, 84, 98, 88])
sort_indices_asc = np.argsort(score_array)
print('성적 오름차순 정렬 시 score_array의 인덱스:', sort_indices_asc)
print('성적 오름차순으로 name_array의 이름 출력:', name_array[sort_indices_asc])
선형대수 연산 - 행렬 내적과 전치 행렬 구하기
- 행렬 내적
A = np.array([[1, 2, 3],
[4, 5, 6]])
B = np.array([[7, 8],
[9, 10],
[11, 12]])
dot_product = np.dot(A, B)
print('행렬 내적 결과:\\n', dot_product)
판다스 Pandas
- value_counts()
동일한 개별 데이터 값이 몇건이 있는지 정보를 제공합니다. 즉 개별 데이터값의 분포도를 제공합니다. value_counts()는 과거에는 Series객체에서만 호출 될 수 있었지만 현재에는 DataFram에서도 호출가능합니다.
value_counts() 메소드를 사용할 때는 Null 값을 무시하고 결과값을 내놓기 쉽습니다. value_counts()는 Null값을 포함하여 개별 데이터 값의 건수를 계산할지 여부를 dropna 인자로 판단합니다. dropna는 디폴트로 True이며 이 경우는 Null값을 무시하고 개별 데이터 값의 건수를 계산합니다.
Data Frame과 리스트, 딕셔너리, 넘파이 ndarray 상호 변환
변환 형태 설명
리스트(list)를 DataFrame으로 변환 | df_list1 = pd.DataFrame(list, columns=col_name1) |
ndarray를 DataFrame으로 변환 | df_array2 = pd.DataFrame(array2, columns=col_name2)와 같이 DataFrame 생성 인자로 ndarray와 매핑되는 컬럼명들을 입력 |
딕셔너리를 DataFrame으로 변환 | dict = {’col1’:[1,11],’col2’:[2,22],’col3’=[3,33]} |
df_dict = pd.DataFrame(dict)와 같이 딕셔너리의 키(Key)로 컬렴명의 값(Value)를 리스트 형식으로 입력 | |
DataFrame을 ndarray로 변환 | DataFrame 객체의 values 속성을 이용하여 ndarray 변환 → Df.values |
DataFrame을 리스트로 변환 | DataFrame 객체의 values 속성을 이용하여 먼저 ndarray로 변환 후 tolist()를 이용하여 list로 변환 → Df.values.tolist |
DataFrame을 딕셔너리로 변환 | DataFrame 객체의 to_dict()를 이용하여 변환 |
DataFrame 데이터 삭제
DataFrame.drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors=’raise’)
inplace=False → 원본 데이터 프레임 그대로 유지
- Index 객체
# 원본 파일 재 로딩
titanic_df = pd.read_csv('titanic_train.csv')
# Index 객체 추출
indexes = titanic_df.index
print(indexes)
# Index 객체를 실제 값 arrray로 변환
print('Index 객체 array값:\\n',indexes.values)
- DataFrame 인덱싱 및 필터링
# DataFrame객체에서 []연산자내에 한개의 컬럼만 입력하면 Series 객체를 반환
series = titanic_df['Name']
print(series.head(3))
print("## type:",type(series), 'shape:', series.shape)
# DataFrame객체에서 []연산자내에 여러개의 컬럼을 리스트로 입력하면 그 컬럼들로 구성된 DataFrame 반환
filtered_df = titanic_df[['Name', 'Age']]
display(filtered_df.head(3))
print("## type:", type(filtered_df), 'shape:', filtered_df.shape)
# DataFrame객체에서 []연산자내에 한개의 컬럼을 리스트로 입력하면 한개의 컬럼으로 구성된 DataFrame 반환
one_col_df = titanic_df[['Name']]
display(one_col_df.head(3))
print("## type:", type(one_col_df), 'shape:', one_col_df.shape)
- DataFrame loc [] 연산자
인덱스 값 three인 행의 Name칼럼값: Jinwoong
인덱스 값 one 부터 two까지 행의 Name과 Year 칼럼값:
Name Year
one Chulmin 2011
two Eunkyung 2016
인덱스 값 one 부터 three까지 행의 Name부터 Gender까지의 칼럼값:
Name Year Gender
one Chulmin 2011 Male
two Eunkyung 2016 Female
three Jinwoong 2015 Male
모든 데이터 값:
Name Year Gender
one Chulmin 2011 Male
two Eunkyung 2016 Female
three Jinwoong 2015 Male
four Soobeom 2015 Male
불린 인덱싱:
Name Year Gender
two Eunkyung 2016 Female
three Jinwoong 2015 Male
four Soobeom 2015 Male
- 불린 인덱싱
pd.set_option('display.max_colwidth', 200)
titanic_df = pd.read_csv('titanic_train.csv')
titanic_boolean = titanic_df[titanic_df['Age'] > 60]
print(type(titanic_boolean))
titanic_boolean
정렬, Aggregation함수, GroupBy 적용
- DataFrame, Series의 정렬- sort_values()
# 이름으로 정렬
titanic_sorted = titanic_df.sort_values(by=['Name'])
titanic_sorted.head(3)
- Aggregation 함수 적용
# DataFrame의 건수를 알고 싶다면 count() 보다는 shape를 이용
titanic_df.count()
- Groupby() 이용하기
groupby()내에 인자로 by를 Group by 하고자 하는 컬럼을 입력. 여러개의 컬럼으로 Group by 하고자 하면 []내에 컬럼명을 입력
DataFrame에 groupby()를 호출하면 DataFrameGroupBy 객체를 반환
결손 데이터 처리하기
- isna()로 결손 데이터 여부 확인
titanic_df.isna().head(3)
- fillna()로 missing데이터 대체하기
titanic_df['Cabin'] = titanic_df['Cabin'].fillna('C000')
titanic_df.head(3)
- nunique로 컬럼내 몇건의 고유값이 있는지 파악
print(titanic_df['Pclass'].nunique())
print(titanic_df['Survived'].nunique())
print(titanic_df['Name'].nunique())
- replace로 원본 값을 특정값으로 대체
replace_test_df = pd.read_csv('titanic_train.csv')
- apply lambda식으로 데이터 가공
'Python' 카테고리의 다른 글
사이킷런(scikit-learn)으로 시작하는 머신러닝 (0) | 2024.07.14 |
---|---|
회귀(Regression) - 1 (0) | 2024.07.14 |
데이터 전처리 - 스케일링 (1) | 2024.04.03 |
교차 검증 : 성능평가 함수와 하이퍼 파라미터 튜닝 (0) | 2024.04.02 |
데이터 전처리 - 인코딩 개요 및 실습 (0) | 2024.03.27 |