Programming/Python

[Python] inspect 모듈의 getsource() 함수

자동화먹 2022. 6. 12. 00:35
반응형

우리가 쓰는 패키지는 대부분 소스코드와 함께 제공이 되고 있다. 또한 공식적인 패키지가 아니라면, 함수에 자세한 설명이 적혀있지 않은 경우도 많다. 이러한 경우, 함수의 소스코드를 직접 확인하고 참조해야 하는 경우가 있는데, 이럴 때 inspect의 get source를 사요하면 좋다. 

 

1. inspect 설치

inspect 설치는 간단하다. pip install로 설치한다. 

pip install inspect

 

2. inspect의 기능

inspect는 모듈, 클래스, 함수에 대한 소스코드를 출력해준다. 

다양한 기능이 있다고 하지만, getsource()함수 하나도 참 유용하다. 

getsource() 안에 클래스 이름을 써주면, 해당 클래스의 소스코드가 출력된다.

from inspect import getsource
from sklearn.metrics improt confusion_matrix

print(getsource(confusion_matrix))

위의 예시와 같이 confusion_matrix의 소스코드를 보고싶다면 다음과 같이 쓰면 되고, 그럼 아래와 같이 출력된다.

def confusion_matrix(
    y_true, y_pred, *, labels=None, sample_weight=None, normalize=None
):
    """Compute confusion matrix to evaluate the accuracy of a classification.
    By definition a confusion matrix :math:`C` is such that :math:`C_{i, j}`
    is equal to the number of observations known to be in group :math:`i` and
    predicted to be in group :math:`j`.
    Thus in binary classification, the count of true negatives is
    :math:`C_{0,0}`, false negatives is :math:`C_{1,0}`, true positives is
    :math:`C_{1,1}` and false positives is :math:`C_{0,1}`.
    Read more in the :ref:`User Guide <confusion_matrix>`.
    Parameters
    ----------
    y_true : array-like of shape (n_samples,)
        Ground truth (correct) target values.
    y_pred : array-like of shape (n_samples,)
        Estimated targets as returned by a classifier.
    labels : array-like of shape (n_classes), default=None
        List of labels to index the matrix. This may be used to reorder
        or select a subset of labels.
        If ``None`` is given, those that appear at least once
        in ``y_true`` or ``y_pred`` are used in sorted order.
    sample_weight : array-like of shape (n_samples,), default=None
        Sample weights.
        .. versionadded:: 0.18
    normalize : {'true', 'pred', 'all'}, default=None
        Normalizes confusion matrix over the true (rows), predicted (columns)
        conditions or all the population. If None, confusion matrix will not be
        normalized.
    Returns
    -------
    C : ndarray of shape (n_classes, n_classes)
        Confusion matrix whose i-th row and j-th
        column entry indicates the number of
        samples with true label being i-th class
        and predicted label being j-th class.
    See Also
    --------
    ConfusionMatrixDisplay.from_estimator : Plot the confusion matrix
        given an estimator, the data, and the label.
    ConfusionMatrixDisplay.from_predictions : Plot the confusion matrix
        given the true and predicted labels.
    ConfusionMatrixDisplay : Confusion Matrix visualization.
    References
    ----------
    .. [1] `Wikipedia entry for the Confusion matrix
           <https://en.wikipedia.org/wiki/Confusion_matrix>`_
           (Wikipedia and other references may use a different
           convention for axes).
    Examples
    --------
    >>> from sklearn.metrics import confusion_matrix
    >>> y_true = [2, 0, 2, 2, 0, 1]
    >>> y_pred = [0, 0, 2, 2, 0, 2]
    >>> confusion_matrix(y_true, y_pred)
    array([[2, 0, 0],
           [0, 0, 1],
           [1, 0, 2]])
    >>> y_true = ["cat", "ant", "cat", "cat", "ant", "bird"]
    >>> y_pred = ["ant", "ant", "cat", "cat", "ant", "cat"]
    >>> confusion_matrix(y_true, y_pred, labels=["ant", "bird", "cat"])
    array([[2, 0, 0],
           [0, 0, 1],
           [1, 0, 2]])
    In the binary case, we can extract true positives, etc as follows:
    >>> tn, fp, fn, tp = confusion_matrix([0, 1, 0, 1], [1, 1, 1, 0]).ravel()
    >>> (tn, fp, fn, tp)
    (0, 2, 1, 1)
    """
    y_type, y_true, y_pred = _check_targets(y_true, y_pred)
    if y_type not in ("binary", "multiclass"):
        raise ValueError("%s is not supported" % y_type)

    if labels is None:
        labels = unique_labels(y_true, y_pred)
       
  ...(생략)

이런식으로 inspect의 getsource()함수를 이용해 print하면 도큐멘테이션을 찾아볼 필요 없이, 소스코드를 바로 확인할 수 있다. 

검색이 어려운 환경 안에서, 해당 함수를 확인하고 싶을 때 유용해 보인다.

반응형