본문 바로가기

2학년 2학기/데이터 사이언스 입문41

[pandas] 데이터 인덱싱과 접근 1. Series에서의 데이터 접근 및 값 변경 아래와 같은 Series가 있을 때를 가정하고 여러 데이터 접근 방식에 대해서 살펴보자. [index]를 통한 접근 및 변경  슬라이싱을 통한 값 접근 1) 명시적 인덱스: 사용자가 배열을 생성할 때 같이 작성해주는 인덱스. 예를 들면 'a', 'b', 'c'와 같은 인덱스 명시적 인덱스로 슬라이싱을 진행하면 끝 인덱스의 요소를 포함한다.   2) 암시적 인덱스: 배열을 생성하면 자동으로 작성되는 0, 1, 2, 3과 같은 인덱스 암시적 인덱스로 슬라이싱을 진행하면 끝 인덱스의 요소를 포함하지 않는다.    마스킹(조건)을 통한 값 접근  데이터의 특정한 조건을 통해 해당 조건에 true인 값을 추출한다.  팬시 인덱싱(특정 인덱스 추출)을 통한 값 접근 .. 2024. 10. 8.
[pandas] 주요 객체의 생성 - Series, DataFrame 1. Series: numpy 배열 중 1차원 배열과 동등한 객체이다.  기본적인 생성, 접근, 슬라이싱은 Numpy와 동일하다. [Series 생성]  [Dictionary로 Series 생성]  Dictionary로 Series를 생성하고 사용할 수 있다. [Series 명시적 인덱스] Numpy 배열과 다른 점이 있는데 index를 다양한 자료형으로 사용, 변형이 가능하다는 것이다.Numpy 배열은 배열을 생성하면 index가 0부터 1, 2, 3, ... 이런 식으로 암시적으로 인덱스가 자동 생성이 된다.    하지만 pandas 배열은 배열을 생성할 때 기본적으로 암시적 index가 생성되지만, 명시적으로 사용자가 직접 각각의 인덱스를 지정할 수 있다. 위의 사진처럼 생성할 때 사용자가 직접 인.. 2024. 10. 8.
numpy에서의 구조화된 배열 Structured array이란? 각각의 다른 데이터 타입을 가지는 한가지 데이터 여러개를 담을 수 있는 배열예를 들어 배열 하나의 요소에 이름, 나이, 몸무게를 넣고 싶을 때 사용하는 방식이다.  구조화된 배열을 만드는 방식 중첩 배열과 혼합 아이디를 Int로 갖고, matrix를 Float으로 갖는데 3x3 행렬 형태로 갖는다는 의미이다. 구조화된 배열 사용하기   이렇게 구조화된 배열을 numpy에서 쓰는 것은 효율적이지 않다. numpy는 숫자를 다루기 위해서 나온 라이브러리이기 때문에 다양한 자료형으로 된 배열을 연산하기에는 적합하지 않다. 따라서, 이러한 배열을 처리하기 위해서 padas가 나오게 되었다. 2024. 10. 5.
Sorting sort: 요소를 오름차순으로 정렬argsort: 요소를 오름차순으로 정렬했을 때 각각의 원본의 요소 인덱스를 출력     축(Axis) 기준으로 정렬axis = 0: 열마다 정렬 시킨다.axis = 1: 행마다 정렬 시킨다.    부분 정렬np.partition(배열, num): [0 ~ num-1]는 [num ~ last]보다 확실하게 작은 수로 구성되어 있음을 보장한다. 단, 각 구간 내의 정렬은 보장하지 않는다. 사용예시 - 나는 Top3를 뽑고 싶어 순서는 상관없어!라고 했을 때 부분 정렬 3을 사용하면 상위 3을 바로 추려낼 수 있다.   축 기준으로도 진행할 수 있다. axis = 1인 경우 행을 기준으로 행 마다 가장 작은 2개가 앞으로 오게 되고 나머지는 뒤로 밀려난다.axis = 0인 .. 2024. 10. 5.
Axis 1차원에서의 AxisAxis = 0행을 기준으로 2차원에서의 AxisAxis = 0열을 기준으로(열에서)Axis = 1행을 기준으로(행에서)import numpy as np# 2차원 배열 생성 (3x4 배열)arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])# axis=1일 때 (행을 기준으로 연산)max_in_rows = np.max(arr, axis=1)print(max_in_rows) # 각 행에서 최대값 추출: [4, 8, 12]# axis=0일 때 (열을 기준으로 연산)max_in_columns = np.max(arr, axis=0)print(max_in_columns) # 각.. 2024. 10. 5.
Fancy Indexing Fancy Indexing이란?: 주어진 배열 내에 여러 요소들에 대한 접근을 한번에할 수 있도록 해주는 방법이다.     [기존의 방식]    [Fancy Indexing]  이렇게 인덱스를 만들고 그 인덱스를 x의 인덱스에 넣어서 필요한 값만 가져오는 방식이다. 다차원에서의 Fancy Indexing  이렇게 배열 형태로 인덱스에 넣으면 배열 형태 그대로 배열의 요소들을 인덱싱해서 출력이 된다.   다차원에서의 Fancy Indexing - row, col  row의 요소 인덱스와 col의 요소 인덱스를 같이 인덱스로 넣을 수 있다. 차원이 다른 index인 경우 - 브로드캐스팅np.newaxis이란? NumPy에서 배열의 차원을 확장하는 데 사용하는 도구이다. 즉, 1차원 배열을 2차원 배열로, 2.. 2024. 10. 5.
비교, 마스크, Bool 연산 numpy에서의 비교 연산자 numpy에서 비교 연산자를 사용하면 Bool을 출력해준다. 조건에 부합하는 요소는 True, 부합하지 않으면 False를 출력한다.     비교 연산자와 내장 메소드를 함께 활용하면 더 많은 기능을 수행할 수 있다.  위의 사용 예시를 보면 비교연산자 통해서 조건에 부합하는 값을 모두 True(1)로 변경하고 count_nonzero를 이용해서 1의 개수를 세어 반환해서 조건에 부합하는 요소개 몇 개인지 출력한다.   주의할 내장 메소드로는 sum이 있다.   형태만 보면 6 미만의 요소들을 모두 합해준다고 생각할 수 있지만 그렇게 작동하지 않는다.  비교 연산자를 통해 6 미만의 요소들은 모두 1으로 변환해있는 상태에서 모든 요소를 더해준다.따라서 결과는 count_non.. 2024. 10. 5.
Numpy - 브로드캐스팅 브로드캐스팅(Broadcasting)은 넘파이에서 크기가 다른 배열들 간의 연산을 할 수 있게 해주는 강력한 기능이다. 일반적으로 크기가 같은 배열끼리만 요소별 연산이 가능하지만, 브로드캐스팅은 크기가 다른 배열끼리도 연산이 가능하게 만들어준다..[브로드캐스팅의 동작원리][브로드캐스팅 규칙]두 배열의 차원이 다른 경우, 더 적은 차원을 가진 배열 Shape의 앞쪽은 1로 채워 차원을 증가시킨다.두 배열의 Shape가 일치하지 않는다면, 일치하지 않는 차원의 Shape가 1인 배열이 다른 Shape와 일치하도록 늘어난다.임의의 차원에서 크기가 일치하지 않고, 1도 아닌 경우에는 오류가 발생하다. 1. 더 적은 차원을 가진 배열은 Shape의 앞쪽이 1로 채워져 차원이 증가한다. 두 배열의 차원이 다를 때,.. 2024. 9. 26.
Numpy - Ufunc ufunc는 유니버설 함수(Universal Function)의 약자이며, 넘파이에서 제공하는 빠르고 효율적인 벡터화된 연산을 지원하는 함수들이다. 단, 동일한 크기를 가진 배열끼리만 가능하다. (브로드 캐스팅으로 해결 가능!) ufunc는 배열의 요소별(element-wise)로 작동하며, 일반적인 산술 연산, 비교 연산, 논리 연산 등을 포함해 다양한 수학적 연산을 빠르게 수행할 수 있다.ufunc의 특징배열 연산을 요소별로 빠르게 수행: 파이썬의 루프를 사용하지 않고도 배열 전체에 대해 연산을 빠르게 처리할 수 있다.벡터화된 연산: 반복문 없이 배열 전체에 대해 연산을 수행함으로써 성능을 크게 향상시킨다.브로드캐스팅 지원: 배열 간 크기가 다를 때도 자동으로 크기를 맞춰서 연산을 수행할 수 있다. .. 2024. 9. 26.
Numpy - 배열 내 요소 접근(인덱싱과 슬라이싱) 1. 인덱싱 [1차원 인덱싱]import numpy as np# 1차원 배열 생성arr1 = np.array([10, 20, 30, 40, 50])# 1차원 배열 인덱싱 예시print("첫 번째 요소:", arr1[0]) # 인덱스 0의 요소print("세 번째 요소:", arr1[2]) # 인덱스 2의 요소print("마지막 요소 (-1 인덱싱):", arr1[-1]) # 마지막 요소---------------------------------------------------# 첫 번째 요소: 10# 세 번째 요소: 30# 마지막 요소 (-1 인덱싱): 50  [2차원 인덱싱]# 2차원 배열 생성arr2 = np.array([[1, 2, 3], [4, 5.. 2024. 9. 26.
Numpy - ndarray의 속성 1. dtype: 배열 요소의 자료형 2. ndim: 배열의 차원 (예시: 1차원, 2차원, 3차원) 3. shape: 배열의 모양 (예시: 1x2, 3x4x5) 4. size: 전체 요소의 개수 [예시 코드]import numpy as np# 2x3 배열 생성arr = np.array([[1, 2, 3], [4, 5, 6]])# 각 속성 출력print("dtype (배열 요소의 자료형):", arr.dtype) # 배열 요소의 자료형print("ndim (배열의 차원):", arr.ndim) # 배열의 차원print("shape (배열의 모양):", arr.shape) # 배열의 모양 (행과 열)print("size (전체 요소의 개수):", arr.size) .. 2024. 9. 26.
Numpy - random 표준편차: 표준편차는 데이터의 흩어짐 정도를 나타내는 통계적 지표이다. 평균을 기준으로 데이터가 얼마나 퍼져 있는지를 측정한다. 값들이 평균에 가까울수록 표준편차는 작고, 값들이 평균에서 멀리 떨어져 있을수록 표준편차는 크다. 쉽게 말해, 표준편차가 크면 데이터가 넓게 퍼져 있고, 표준편차가 작으면 데이터가 평균에 가까이 모여 있다는 것을 의미한다.정규분포: 데이터가 평균을 중심으로 좌우 대칭을 이루며 종 모양을 띠는 분포1. np.random.random(shape): 0과 1 사이의 균일 분포에서 난수를 생성하는 함수로, 지정된 모양(shape)의 배열을 반환함. # (2, 2) 크기의 0과 1 사이의 난수 배열 생성arr = np.random.random((2, 2))print(arr)# - 결과 .. 2024. 9. 26.
Numpy - 배열의 생성 1. empty(shape): 지정한 모양의 배열을 생성하지만, 배열의 값은 초기화되지 않음(쓰레기 값 포함). 따라서, shape는 생성되지만 내부 값은 0이 될 수도, 1이 될 수도, 쓰레기 값이 될 수도 있다. np.empty((2, 3))# array([[6.92367847e-310, 6.92367847e-310, 0.00000000e+000],# [0.00000000e+000, 0.00000000e+000, 0.00000000e+000]])  2. array(object): 리스트, 튜플 등 기존 데이터를 배열로 변환한 것. np.array([1, 2, 3])# array([1, 2, 3])   3. zeros(shape): 지정한 모양(shape)의 배열을 0으로 채워서 생성np.z.. 2024. 9. 26.
유용한 파이썬 함수들 - len(), map(), filter(), zip(), reduce(), enumerate() len(): 리스트, 문자열 등 자료의 길이 반환 map(): 리스트 내 각 요소들에게 동일하게 간단한 연산을 적용할 때 사용: 주로 이름 없는 람다 함수로 연산을 정의하고, 이를 각 요소에 적용하도록 하는 형태가 많이 사용됨# 기본 형태list(map(변경할 타입, 리스트 명))list(map(lambda 변경할 형태(람다함수), 리스트명))# 활용a = [1, 2, 3, 4, 5]list(map(str, a)) # ['1', '2', '3', '4', '5']b = [1, 2, 3, 4, 5]list(map(lambda x:x+1, b)) # [2, 3, 4, 5, 6] filter(): 리스트 내 요소 들을 특정 기준으로 필터링(즉, 특정 기준을 만족하는 요소만 추출하도록)할 때 사용 # 활용a =.. 2024. 9. 19.
컬렉션 - Dict, Set Dictionary: key, value를 쌍으로 이루는 데이터 콜렉션 타입 # 기본 형태person = dic()person['kim'] = 1person['park'] = 2# 또는person = {'kim': 1, 'park': 2} [딕셔너리 내 원소 접근] person = {'kim': 1, 'park': 2}print(person['kim']) # 1  [딕셔너리의 자료 존재 여부 검사]person = {'kim': 1, 'park': 2}print('kim' in person) #Trueprint('choi' in person) #False  [딕셔너리 내장 메소드]다음은 파이썬 딕셔너리 내장 메소드의 정리이다.1. `keys()`     딕셔너리의 모든 키를 반환한다.2. `values().. 2024. 9. 19.
순서열 -List, tuple 순서열: 여러 개의 데이터를 순차적으로 나열해놓은 자료구조 List: 순차적 데이터의 저장을 위해 사용되는 자료구조 / 순서 O, 수정 O a = [1, 2, 3, 4, 5]# 또는a = list((1, 2, 3, 4, 5))  [리스트 내 원소 접근]: 데이터의 위치 번호를 사용하여 리스트 내 원소 데이터로 접근하는 방법a = [1, 2, 3, 4]a[0] # 1  🚨 음수 인덱스?: 음수 인덱스는 List의 길이에서 뺀 값으로 접근한다.a = [1, 2, 3, 4]a[-1] # 4# a[-1] == a[len(a)-1] == a[4-1] = a[3]  ❓슬라이싱: List의 범위 내 모든 데이터를 접근# 기본 형태list[start:end:inteval] # -> (start   # 사용 방법a =.. 2024. 9. 19.