빅데이터분석기사 등 실기 시험을 볼 때, 모듈이나, 메서드, 속성 등이 생각나지 않을 때가 있습니다. 자주 사용하지만, 복사 & 붙여 넣기 해서 사용했던 코드들은 이런 경우가 많지요.
평상시에는 구글링을 하면 되는데, 시험 보러 가서는 구글링이 안되니, 확인할 방법이 필요합니다. 그럴 때 유용하게 사용할 수 있는 함수가 dir, help입니다. 그리고 __all__ 속성에 대해서도 확인해 보겠습니다.
1. dir
dir 함수는 모듈 또는 객체 내에서 사용할 수 있는 속성, 메서드 및 하위 모듈의 이름을 나타내는 문자열 목록을 반환합니다. 모듈이나 객체의 내용을 탐색하는 데 유용하게 사용할 수 있습니다. dir을 사용하기 위해서는 (1) 확인하고자 하는 모듈을 import 하고 (2) dir()에 담아서 확인이 가능합니다.
아래와 같이 예시를 들어보겠습니다.
import pandas as pd
print(dir(pd))
Output:
['BooleanDtype', 'Categorical', 'CategoricalDtype', 'CategoricalIndex', 'DataFrame',
'DateOffset', 'DatetimeIndex', 'DatetimeTZDtype', 'ExcelFile', 'ExcelWriter', 'Float64Index',
'Grouper', 'HDFStore', 'Index', 'IndexSlice', 'Int16Dtype', 'Int32Dtype', 'Int64Dtype',
'Int64Index', 'Int8Dtype', 'Interval', 'IntervalDtype', 'IntervalIndex', 'MultiIndex',
'NA', 'NaT', 'NamedAgg', 'Period', 'PeriodDtype', 'PeriodIndex', 'RangeIndex', 'Series',
...(중략)...
'pivot_table', 'plotting', 'qcut', 'read_clipboard', 'read_csv', 'read_excel', 'read_feather',
'read_fwf', 'read_gbq', 'read_hdf', 'read_html', 'read_json', 'read_orc', 'read_parquet',
'read_pickle', 'read_sas', 'read_spss', 'read_sql', 'read_sql_query', 'read_sql_table',
'read_stata', 'read_table', 'reset_option', 'set_eng_float_format', 'set_option',
'show_versions', 'test', 'testing', 'timedelta_range', 'to_datetime', 'to_numeric',
'to_pickle', 'to_timedelta', 'tseries', 'unique', 'util', 'value_counts', 'wide_to_long']
보시는 것처럼, pandas의 속성과 함수들이 출력이 됩니다. 한 가지 주의할 점은 import 할 때, alias를 지정한 경우에는 지정한 alias를 사용해야 합니다. 아래와 같이 실행하면 오류가 발생합니다.
import pandas as pd
print(dir(pandas))
Output:
NameError Traceback (most recent call last)
<ipython-input-21-4eb0ccbb092a> in <module>
1 import pandas as pd
2
----> 3 print(dir(pandas))
NameError: name 'pandas' is not defined
2. help
help 함수는 모듈, 함수, 클래스, 메서드 또는 파이썬의 다른 객체에 대한 문서나 정보를 표시하는 데 사용됩니다.
아래와 같이 예시를 보겠습니다. 이때, python 내장 함수는 함수명만 쓰면 되지만, 모듈을 import 한 경우에는 모듈명을 붙여주어야 오류가 나지 않습니다.
print(help(pd.qcut))
Output:
Help on function qcut in module pandas.core.reshape.tile:
qcut(x, q, labels=None, retbins: bool = False, precision: int = 3, duplicates: str = 'raise')
Quantile-based discretization function.
Discretize variable into equal-sized buckets based on rank or based
on sample quantiles. For example 1000 values for 10 quantiles would
produce a Categorical object indicating quantile membership for each data point.
Parameters
----------
x : 1d ndarray or Series
q : int or list-like of int
Number of quantiles. 10 for deciles, 4 for quartiles, etc. Alternately
array of quantiles, e.g. [0, .25, .5, .75, 1.] for quartiles.
labels : array or False, default None
Used as labels for the resulting bins. Must be of the same length as
the resulting bins. If False, return only integer indicators of the
bins. If True, raises an error.
retbins : bool, optional
Whether to return the (bins, labels) or not. Can be useful if bins
is given as a scalar.
precision : int, optional
The precision at which to store and display the bins labels.
duplicates : {default 'raise', 'drop'}, optional
If bin edges are not unique, raise ValueError or drop non-uniques.
Returns
-------
out : Categorical or Series or array of integers if labels is False
The return type (Categorical or Series) depends on the input: a Series
of type category if input is a Series else Categorical. Bins are
represented as categories when categorical data is returned.
bins : ndarray of floats
Returned only if `retbins` is True.
Notes
-----
Out of bounds values will be NA in the resulting Categorical object
Examples
--------
>>> pd.qcut(range(5), 4)
... # doctest: +ELLIPSIS
[(-0.001, 1.0], (-0.001, 1.0], (1.0, 2.0], (2.0, 3.0], (3.0, 4.0]]
Categories (4, interval[float64]): [(-0.001, 1.0] < (1.0, 2.0] ...
>>> pd.qcut(range(5), 3, labels=["good", "medium", "bad"])
... # doctest: +SKIP
[good, good, medium, bad, bad]
Categories (3, object): [good < medium < bad]
>>> pd.qcut(range(5), 4, labels=False)
array([0, 0, 1, 2, 3])
일반적으로 사용하는 IDE에서 표시되는 tooltip의 내용이 표시됩니다.(docstring)
3. __all__
dir과 반환값이 비슷해서 __all__도 비교 설명합니다. dir과 __all__은 용도가 다릅니다. __all__은 from module import *로 가져온 이름을 제어하고 모듈의 공개 API를 명시적으로 정의하는 데 사용됩니다. 반면에 dir은 공개 및 비공개 이름을 모두 포함하여 개체 내에서 사용할 수 있는 포괄적인 이름 목록을 제공하는 기능입니다.
말로 하면 어려우니, 아래 예시를 보겠습니다.
import sklearn
print('1. dir의 경우: ',dir(sklearn.model_selection))
print('2. __all__의 경우:',sklearn.model_selection.__all__)
Output:
1. dir의 경우: ['BaseCrossValidator', 'GridSearchCV', 'GroupKFold', 'GroupShuffleSplit',
'KFold', 'LeaveOneGroupOut', 'LeaveOneOut', 'LeavePGroupsOut', 'LeavePOut', 'ParameterGrid',
'ParameterSampler', 'PredefinedSplit', 'RandomizedSearchCV', 'RepeatedKFold',
'RepeatedStratifiedKFold', 'ShuffleSplit', 'StratifiedKFold', 'StratifiedShuffleSplit',
'TimeSeriesSplit', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__',
'__name__', '__package__', '__path__', '__spec__', '_search', '_split', '_validation',
'check_cv', 'cross_val_predict', 'cross_val_score', 'cross_validate', 'fit_grid_point',
'learning_curve', 'permutation_test_score', 'train_test_split', 'validation_curve']
2. __all__의 경우: ('BaseCrossValidator', 'GridSearchCV', 'TimeSeriesSplit', 'KFold',
'GroupKFold', 'GroupShuffleSplit', 'LeaveOneGroupOut', 'LeaveOneOut', 'LeavePGroupsOut',
'LeavePOut', 'RepeatedKFold', 'RepeatedStratifiedKFold', 'ParameterGrid', 'ParameterSampler',
'PredefinedSplit', 'RandomizedSearchCV', 'ShuffleSplit', 'StratifiedKFold',
'StratifiedShuffleSplit', 'check_cv', 'cross_val_predict', 'cross_val_score', 'cross_validate',
'fit_grid_point', 'learning_curve', 'permutation_test_score', 'train_test_split',
'validation_curve')
위의 결과처럼 dir은 해당 모듈의 하위모듈, 속성이 모두 표시가 되고, __all__의 경우에는 from module import * 로 불러올 수 있는 모듈이나 함수만 표시됩니다.
따라서 dir의 결과가 __all__의 결과를 모두 포함하고, 우리가 사용하고자 하는 함수는 __all__에 다 포함되어 있을 테니, __all__을 보아도 무방합니다. 대신 __all__은 모듈 내에 정의되어 있는 변수로서, 해당 변수가 정의되지 않은 모듈은 사용이 불가능한 경우가 있습니다.
print(pd.__all__)
Output: __all__이 정의되어있지 않으면 아래와 같이 오류가 발생합니다.
AttributeError Traceback (most recent call last)
<ipython-input-43-30685f78c384> in <module>
----> 1 print(pd.__all__)
~\anaconda3\lib\site-packages\pandas\__init__.py in __getattr__(name)
261 return _SparseArray
262
--> 263 raise AttributeError(f"module 'pandas' has no attribute '{name}'")
264
265
AttributeError: module 'pandas' has no attribute '__all__'
※ 위 내용은 "빅데이터 분석기사 실기 준비를 위한 캐글 놀이터"를 따라가며 공부한 내용입니다.
https://www.kaggle.com/datasets/agileteam/bigdatacertificationkr
'데이터분석과 AI > 빅데이터 분석기사' 카테고리의 다른 글
[빅데이터분석기사 실기] 시험 시 주의사항, 꿀팁 방출 (0) | 2023.06.23 |
---|---|
[빅데이터분석기사 실기][작업형3]카이제곱 검정(적합도 검정, 독립성 검정)+피셔의 정확검정 (0) | 2023.06.22 |
[빅데이터분석기사 실기][작업형1] 슬라이싱 (0) | 2023.06.17 |
[빅데이터분석기사 실기][작업형1] imputer로 결측치 처리하기 (0) | 2023.06.16 |
[빅데이터분석기사 실기][작업형1] pd.melt(), pd.pivot_table()로 데이터 프레임 변형하기 (0) | 2023.06.16 |
댓글