본문 바로가기
# 연구실

파이썬 데이터 분석을 위한 NumPy

by lakedaimong 2023. 2. 28.

 

글 목록

     

     



    Introduction to the NumPy package for Python data analysis

    소개

    NumPy는 지원을 제공하는 강력한 Python 데이터 분석 패키지입니다. 배열 및 행렬용, 과학 컴퓨팅, 재무 분석 및 대용량 데이터 세트의 효율적인 처리가 필요한 기타 여러 분야에서 널리 사용됩니다. 이 게시물에서는 NumPy에 대한 소개를 제공하고 Python 데이터 분석에서 NumPy가 어떻게 사용될 수 있는지 보여줍니다.

    주요 개념

    NumPy는 NumPy가 어떻게 사용되는지 이해하는 데 필수적인 몇 가지 주요 개념을 제공합니다.

    • 배열: NumPy 배열은 Python 목록과 유사하지만 수치 연산에 최적화되어 있고 다차원적일 수 있습니다.
    • 데이터 유형: NumPy는 정수, 부동 소수점 숫자 및 복소수를 포함한 광범위한 데이터 유형을 지원합니다.
    • 브로드캐스팅: NumPy는 브로드캐스팅을 지원하여 크기나 모양이 다른 배열에서 작업을 수행할 수 있습니다.

    구현

    Python 데이터 분석에서 NumPy를 사용하려면 먼저 패키지를 설치해야 합니다. . 다음 명령을 사용하여 이를 수행할 수 있습니다.

    !pip install numpy

    NumPy를 설치했으면 다음 명령을 사용하여 NumPy를 Python 코드로 가져올 수 있습니다.

    import numpy as np

    이 섹션에서는 NumPy를 사용하여 기본 데이터 분석 작업을 수행하는 방법을 보여주는 예제 코드를 제공합니다. 배열 생성, 인덱싱 및 슬라이싱, 배열에 대한 수학적 연산 수행과 같은 주제를 다룰 것입니다.

    # Create a NumPy array
    a = np.array([1, 2, 3, 4, 5])
    
    # Indexing and Slicing
    print(a[0])     # Output: 1
    print(a[1:3])   # Output: [2 3]
    
    # Performing mathematical operations on arrays
    b = np.array([6, 7, 8, 9, 10])
    c = a + b
    print(c)        # Output: [ 7  9 11 13 15]

    모범 사례

    Python 데이터 분석에서 NumPy를 사용할 때 모범 사례를 따라 성능을 최적화하고 일반적인 실수를 피하는 것이 중요합니다. 유의해야 할 몇 가지 팁은 다음과 같습니다.

    • 가능한 벡터화된 작업을 사용하십시오. 반복 작업보다 효율적이기 때문입니다.
    • 불필요하게 배열을 복사하면 코드 속도가 느려질 수 있으므로 피하세요.
    • 배열에 올바른 데이터 유형을 사용하여 정확한 계산을 하세요.

    사용 사례

    NumPy는 다음과 같은 다양한 애플리케이션에서 사용됩니다.

    과학 컴퓨팅

    NumPy는 수치 시뮬레이션 및 데이터 분석과 같은 과학 컴퓨팅 애플리케이션에 널리 사용됩니다.

    import numpy as np
    
    # Define the constants
    k = 1.38064852e-23  # Boltzmann constant
    T = 300             # Temperature in Kelvin
    N = 1000            # Number of particles
    m = 1.67e-27        # Mass of particles in kg
    
    # Generate random velocities for the particles
    velocities = np.random.normal(loc=0, scale=1000, size=(N, 3))
    
    # Calculate the kinetic energy of the particles
    kinetic_energy = 0.5 * m * np.sum(velocities**2)
    
    # Calculate the root-mean-square velocity of the particles
    rms_velocity = np.sqrt(np.sum(velocities**2) / N)
    
    # Calculate the mean free path of the particles
    mean_free_path = k * T / (np.sqrt(2) * np.pi * m**2 * 1e-5)
    
    # Print the results
    print(f"Kinetic Energy: {kinetic_energy:.2e} Joules")
    print(f"Root-Mean-Square Velocity: {rms_velocity:.2e} m/s")
    print(f"Mean Free Path: {mean_free_path:.2e} m")

    이 예에서는 주어진 온도에서 입자의 가스를 시뮬레이션하고 운동 에너지, 제곱 평균 속도, 자유 경로를 의미합니다.

    볼츠만 상수, 온도, 입자 수 및 입자 질량과 같은 상수를 정의하는 것으로 시작합니다. 그런 다음 NumPy의 np.random.normal() 함수를 사용하여 입자에 대한 임의의 속도를 생성합니다. 이 함수는 가스 입자의 속도를 시뮬레이션하는 데 유용한 정규 분포로 난수 배열을 생성합니다.

    다음으로 kineticenergy = 0.5 공식을 사용하여 입자의 운동 에너지를 계산합니다. m np.sum(속도2). 이 공식은 질량과 속도를 기반으로 각 입자의 운동 에너지를 계산합니다.

    또한 rmsvelocity = np.sqrt(np. 합계(속도2) / N). 이 공식은 가스 입자의 속도 분포를 특성화하는 데 유용한 제곱 평균 제곱근 공식을 사용하여 입자의 평균 속도를 계산합니다.

    마지막으로 다음을 사용하여 입자의 평균 자유 경로를 계산합니다. 공식 meanfreepath = k T / (np.sqrt(2) np.pi m2 1e-5). 이 공식은 입자가 다른 입자와 충돌하기 전에 이동하는 평균 거리를 계산합니다.

    NumPy를 사용하여 이러한 계산을 수행하면 가스 입자의 대규모 데이터 세트를 효율적으로 시뮬레이션하고 분석할 수 있으며 이는 많은 과학 컴퓨팅에 유용합니다.

    재무 분석

    NumPy는 주가나 이자율과 같은 재무 데이터에 대한 계산을 수행하는 데 사용됩니다.

    import numpy as np
    
    # Define the data
    prices = np.array([10, 12, 11, 13, 12, 14, 15, 16, 18, 20])
    
    # Calculate the daily returns
    daily_returns = np.diff(prices) / prices[:-1]
    
    # Calculate the average daily return
    avg_daily_return = np.mean(daily_returns)
    
    # Calculate the standard deviation of daily returns
    std_daily_return = np.std(daily_returns)
    
    # Calculate the Sharpe ratio
    rf_rate = 0.01
    sharpe_ratio = (avg_daily_return - rf_rate) / std_daily_return
    
    # Print the results
    print(f"Daily Returns: {daily_returns}")
    print(f"Average Daily Return: {avg_daily_return:.2%}")
    print(f"Standard Deviation of Daily Returns: {std_daily_return:.2%}")
    print(f"Sharpe Ratio: {sharpe_ratio:.2f}")

    이 예에서는 NumPy를 사용하여 주가 데이터 세트를 기반으로 다양한 재무 지표를 계산합니다.

    먼저 일정 기간 동안 주식의 과거 가격을 포함하는 prices 배열을 정의합니다. 그런 다음 dailyreturns = np.diff(prices) / prices[:-1] 공식을 사용하여 주식의 일일 수익률을 계산합니다. 이 수식은 하루에서 다음 날까지 주식 가격의 백분율 변화를 계산합니다.

    다음으로 avgdailyreturn = np.mean(dailyreturns 수식을 사용하여 주식의 일일 평균 수익률을 계산합니다. ). 이 공식은 일정 기간 동안 주식의 일일 평균 수익률을 계산합니다.

    또한 stddailyreturn = np.std(dailyreturns) 공식을 사용하여 주식 일일 수익률의 표준 편차를 계산합니다. . 이 공식은 일정 기간 동안 주식의 일일 수익률 변동성을 계산합니다.

    마지막으로 sharperatio = (avgdailyreturn - rfrate) / stddailyreturn 공식을 사용하여 주식의 샤프 비율을 계산합니다. . 이 공식은 주식의 성과를 평가하는 데 유용한 위험 단위당 무위험 수익률에 대한 주식의 초과 수익률을 측정합니다.

    NumPy를 사용하여 이러한 계산을 수행하면 효율적으로 분석할 수 있습니다. 재무 데이터 및 투자 의사 결정을 위한 중요한 지표를 계산합니다.

    머신 러닝

    NumPy는 머신 러닝 애플리케이션에서 대규모 데이터 세트에 대한 수치 연산을 수행하는 데 사용됩니다.

    import numpy as np
    from sklearn.datasets import load_iris
    from sklearn.model_selection import train_test_split
    from sklearn.linear_model import LogisticRegression
    from sklearn.metrics import accuracy_score
    
    # Load the iris dataset
    iris = load_iris()
    
    # Split the dataset into training and testing sets
    X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=42)
    
    # Train a logistic regression model on the training set
    model = LogisticRegression(random_state=42)
    model.fit(X_train, y_train)
    
    # Predict the class labels for the testing set
    y_pred = model.predict(X_test)
    
    # Calculate the accuracy of the model
    accuracy = accuracy_score(y_test, y_pred)
    
    # Print the results
    print(f"Accuracy: {accuracy:.2%}")

    이 예에서는 NumPy를 사용하여 기계 학습을 위한 데이터 세트를 전처리하고 분석합니다. 우리는 분류 작업을 위해 기계 학습에서 일반적으로 사용되는 홍채 데이터 세트를 사용하고 있습니다.

    우리는 scikit-에서 loadiris() 함수를 사용하여 홍채 데이터 세트를 로드하는 것으로 시작합니다. 이 함수는 기능 데이터와 데이터세트의 대상 레이블이 포함된 개체를 반환합니다.

    다음으로 scikit-의 traintestsplit() 함수를 사용하여 데이터세트를 훈련 및 테스트 세트로 분할합니다. 이 함수는 지정된 테스트 크기에 따라 데이터 세트를 무작위로 두 세트로 분할하고 두 세트 모두에 대한 기능 데이터와 대상 레이블을 반환합니다.

    그런 다음 LogisticRegression() 이 함수는 훈련 데이터에 로지스틱 회귀 모델을 맞추고 훈련된 모델 개체를 반환합니다.

    다음으로 훈련된 모델을 사용하여 predict() 이 메서드는 테스트 세트의 기능 데이터를 가져오고 예측된 클래스 레이블 배열을 반환합니다.

    마지막으로 accuracyscore() 함수를 사용하여 모델의 정확도를 계산합니다. scikit-learn. 이 함수는 테스트 세트의 실제 대상 레이블과 모델의 예측 레이블을 가져와 모델의 정확도를 백분율로 반환합니다.

    NumPy를 scikit-learn과 함께 사용하면 다음과 같은 작업을 수행할 수 있습니다. 이미지 인식, 자연어 처리, 예측 모델링과 같은 광범위한 애플리케이션에 유용한 기계 학습 작업을 위한 대규모 데이터 세트를 효율적으로 전처리하고 분석합니다.

    이미지 처리

    NumPy는 이미지 처리 애플리케이션에서 필터링 또는 컨볼루션과 같은 이미지 작업을 수행하는 데 사용됩니다.

    import numpy as np
    import matplotlib.pyplot as plt
    from PIL import Image
    
    # Load the image
    image = Image.open('cat.jpg')
    
    # Convert the image to grayscale
    grayscale_image = np.array(image.convert('L'))
    
    # Apply a Gaussian blur to the image
    from scipy.ndimage import gaussian_filter
    blurred_image = gaussian_filter(grayscale_image, sigma=3)
    
    # Threshold the image to create a binary mask
    threshold = 128
    binary_mask = np.where(blurred_image > threshold, 255, 0).astype('uint8')
    
    # Apply a morphological operation to the binary mask
    from skimage.morphology import binary_erosion, binary_dilation
    struct_element = np.ones((5,5))
    eroded_mask = binary_erosion(binary_mask, struct_element)
    dilated_mask = binary_dilation(eroded_mask, struct_element)
    
    # Display the results
    fig, axs = plt.subplots(2, 2, figsize=(8, 8))
    axs[0, 0].imshow(image)
    axs[0, 0].set_title('Original Image')
    axs[0, 1].imshow(grayscale_image, cmap='gray')
    axs[0, 1].set_title('Grayscale Image')
    axs[1, 0].imshow(blurred_image, cmap='gray')
    axs[1, 0].set_title('Blurred Image')
    axs[1, 1].imshow(dilated_mask, cmap='gray')
    axs[1, 1].set_title('Dilated Mask')
    plt.show()

    이 예제에서는 NumPy를 사용하여 고양이 이미지를 처리합니다. 그레이스케일로 변환하고, 가우시안 블러를 적용하고, 이진 마스크를 만들기 위해 임계값을 지정하고, 마스크에 형태학적 작업을 적용하는 등 이미지에 대해 다양한 작업을 수행하고 있습니다.

    다음을 사용하여 이미지를 로드하는 것으로 시작합니다. PIL 라이브러리의 Image.open() 함수. 이 함수는 NumPy를 사용하여 조작할 수 있는 이미지 개체를 반환합니다.

    다음으로 이미지 개체의 convert() 메서드를 사용하여 이미지를 회색조로 변환합니다. 이 메서드는 이미지를 회색조로 변환하고 회색조 이미지의 픽셀 값을 포함하는 NumPy 배열을 반환합니다.

    그런 다음 gaussianfilter()를 사용하여 회색조 이미지에 가우시안 블러를 적용합니다. scipy 라이브러리의 기능. 이 함수는 이미지에 가우시안 블러를 적용하여 노이즈나 불규칙성을 부드럽게 합니다.

    다음으로 NumPy의 where() 함수를 사용하여 바이너리 마스크를 생성하기 위해 블러링된 이미지의 임계값을 지정합니다. 이 함수는 임계값보다 큰 요소는 255로 설정되고 임계값보다 작거나 같은 요소는 0으로 설정되는 새 배열을 생성합니다.

    그런 다음 다음을 사용하여 이진 마스크에 형태학적 연산을 적용합니다. scikit-image 라이브러리의 binaryerosion() 및 binarydilation() 함수. 이러한 함수는 바이너리 마스크에 침식 및 확장 작업을 적용하여 노이즈를 제거하고 이미지의 간격을 채웁니다.

    마지막으로 matplotlib의 imshow() 함수. 이 기능은 플롯에 이미지를 표시하고 우리가 수행한 다양한 처리 단계를 시각화할 수 있게 해줍니다.

    NumPy 및 기타 과학 컴퓨팅 라이브러리를 사용하여 대용량 이미지 데이터 세트를 효율적으로 처리하고 분석할 수 있습니다. 컴퓨터 비전, 의료 영상, 원격 감지와 같은 다양한 응용 분야에 유용합니다.

    추가 자료

    NumPy 및 해당 애플리케이션에 대해 자세히 알아보려면 다음 리소스를 참조하세요.

    • NumPy 공식 문서: https://numpy.org/doc/
    • NumPy 사용자 가이드: https://numpy.org/doc/stable /user/index.html
    • 데이터 과학용 Python 핸드북: https://jakevdp.github.io/PythonDataScienceHandbook/

    결론

    이 게시물에서 우리는 Python 데이터 분석을 위한 NumPy 패키지 소개. 배열, 데이터 유형 및 브로드캐스팅과 같은 주요 개념을 다루고 NumPy를 사용하여 기본 데이터 분석 작업을 수행하는 방법을 시연했습니다. 또한 NumPy를 효과적으로 사용하기 위한 팁과 실제 시나리오에서 NumPy가 어떻게 사용되는지에 대한 예를 제공했습니다. 마지막으로 NumPy와 해당 응용 프로그램에 대해 더 자세히 알아보고자 하는 독자를 위해 추가 리소스를 제공했습니다. 이 게시물이 도움이 되었기를 바라며 NumPy를 더 깊이 탐구할 영감을 얻으시기 바랍니다.

    반응형

    댓글