Loading...

verticapy.vDataColumn.discretize

vDataColumn.discretize(method: Literal['auto', 'smart', 'same_width', 'same_freq', 'topk'] = 'auto', h: Annotated[int | float | Decimal, 'Python Numbers'] = 0, nbins: int = -1, k: int = 6, new_category: str = 'Others', RFmodel_params: dict | None = None, response: str | None = None, return_enum_trans: bool = False) → vDataFrame

Discretizes the vDataColumn using the input method.

Parameters

method: str, optional

The method used to discretize the vDataColumn:

  • auto:

    Uses method ‘same_width’ for numerical vDataColumns, casts the other types to varchar.

  • same_freq:

    Computes bins with the same number of elements.

  • same_width:

    Computes regular width bins.

  • smart:

    Uses the Random Forest on a response column to find the most relevant interval to use for the discretization.

  • topk:

    Keeps the topk most frequent categories and merge the other into one unique category.

h: PythonNumber, optional

The interval size used to convert the vDataColumn. If this parameter is equal to 0, an optimised interval is computed.

nbins: int, optional

Number of bins used for the discretization (must be > 1)

k: int, optional

The integer k of the ‘topk’ method.

new_category: str, optional

The name of the merging category when using the ‘topk’ method.

RFmodel_params: dict, optional

Dictionary of the Random Forest model parameters used to compute the best splits when ‘method’ is set to ‘smart’. A RF Regressor is trained if the response is numerical (except ints and bools), a RF Classifier otherwise. Example: Write {“n_estimators”: 20, “max_depth”: 10} to train a Random Forest with 20 trees and a maximum depth of 10.

response: str, optional

Response vDataColumn when method is set to ‘smart’.

return_enum_trans: bool, optional

Returns the transformation instead of the vDataFrame parent, and does not apply the transformation. This parameter is useful for testing the look of the final transformation.

Returns

vDataFrame

self._parent

Examples

We import verticapy:

import verticapy as vp

Hint

By assigning an alias to verticapy, we mitigate the risk of code collisions with other libraries. This precaution is necessary because verticapy uses commonly known function names like “average” and “median”, which can potentially lead to naming conflicts. The use of an alias ensures that the functions from verticapy are used as intended without interfering with functions from other libraries.

For this example, we will use the Titanic dataset.

import verticapy.datasets as vpd

data = vpd.load_titanic()
123
pclass
Integer
123
survived
Integer
Abc
Varchar(164)
Abc
sex
Varchar(20)
123
age
Numeric(8)
123
sibsp
Integer
123
parch
Integer
Abc
ticket
Varchar(36)
123
fare
Numeric(12)
Abc
cabin
Varchar(30)
Abc
embarked
Varchar(20)
Abc
boat
Varchar(100)
123
body
Integer
Abc
Varchar(100)
110male71.000PC 1760949.5042[null]C[null]22
210male45.00011378435.5TS[null][null]
310male[null]0011379831.0[null]S[null][null]
410male17.00011305947.1[null]S[null][null]
510male27.01013508136.7792C89C[null][null]
610male37.011PC 1775683.1583E52C[null][null]
710male31.010F.C. 1275052.0B71S[null][null]
810male50.010PC 17761106.425C86C[null]62
910female36.000PC 1753131.6792A29C[null][null]
1010male37.01011380353.1C123S[null][null]
1110male24.000PC 1759379.2B86C[null][null]
1210male45.0103697383.475C83S[null][null]
1310male40.0001120590.0B94S[null]110
1410male42.00011303842.5B11S[null][null]
1510male[null]001746351.8625E46S[null][null]
1610male42.01011378952.0[null]S[null]38
1710male[null]00PC 1760030.6958[null]C14[null]
1810male29.00011350130.0D6S[null]126
1910male46.0001305075.2417C6C[null]292
2010male54.0001746351.8625E46S[null]175
2110male47.00011379642.4[null]S[null][null]
2210male58.00235273113.275D48C[null]122
2310male45.50011304328.5C124S[null]166
2410male29.01011377666.6C2S[null][null]
2510male47.00011046552.0C110S[null]207
2610male38.000199720.0[null]S[null][null]
2710male22.000PC 17760135.6333[null]C[null]232
2810male31.000PC 1759050.4958A24S[null][null]
2910male50.0101350755.9E44S[null][null]
3010male56.0001776430.6958A7C[null][null]
3110male57.010PC 17569146.5208B78C[null][null]
3210female63.010PC 17483221.7792C55 C57S[null][null]
3310male61.0003696332.3208D50S[null]46
3410male21.0013528177.2875D26S[null]169
3510male51.001PC 1759761.3792[null]C[null][null]
3611female63.0101350277.9583D7S10[null]
3711female32.0001181376.2917D15C8[null]
3811female58.00011378326.55C103S8[null]
3911female44.000PC 1761027.7208B4C6[null]
4011female41.00016966134.5E40C3[null]
4111female53.000PC 1760627.4458[null]C6[null]
4211male36.001PC 17755512.3292B51 B53 B55C3[null]
4311female58.001PC 17755512.3292B51 B53 B55C3[null]
4411male11.012113760120.0B96 B98S4[null]
4511female76.0101987778.85C46S6[null]
4611female[null]0111350555.0E33S6[null]
4711female39.011PC 1775683.1583E49C14[null]
4811female27.012F.C. 1275052.0B71S3[null]
4911female[null]0017421110.8833[null]C4[null]
5011female35.000113503211.5C130C4[null]
5111female22.00111237859.4[null]C7[null]
5211female25.0101176555.4417E50C5[null]
5311male48.010PC 1757276.7292D33C3[null]
5411female35.0103697383.475C83SD[null]
5511male27.000PC 1757276.7292D49C3[null]
5611female24.0001176783.1583C54C7[null]
5711female52.0111274993.5B69S3[null]
5811female44.00111136157.9792B18C4[null]
5911female15.00124160211.3375B5S2[null]
6011male30.0101323657.75C78C11[null]
6111female31.01035273113.275D36C6[null]
6211female39.000PC 17758108.9C105C8[null]
6311female22.00111350961.9792B36C5[null]
6411male52.00011378630.5C104S6[null]
6511female43.00124160211.3375B3S2[null]
6611female33.00011015286.5B77S8[null]
6711male45.01116966134.5E34C3[null]
6811female40.01116966134.5E34C3[null]
6911male48.0101999652.0C126S5 7[null]
7011female[null]00PC 1758579.2[null]CD[null]
7111female35.000PC 17755512.3292[null]C3[null]
7211female60.01011081375.25D37C5[null]
7311male21.001PC 1759761.3792[null]CA[null]
7420male23.000C.A. 3103010.5[null]S[null][null]
7520male28.00024435826.0[null]S[null][null]
7620male60.0112975039.0[null]S[null][null]
7720female44.01024425226.0[null]S[null][null]
7820male29.010200326.0[null]S[null][null]
7920male18.000S.O.C. 1487973.5[null]S[null][null]
8020male18.000S.O.C. 1487973.5[null]S[null][null]
8120male54.0002840326.0[null]S[null][null]
8220male18.00023617113.0[null]S[null][null]
8320male36.00022923613.0[null]S[null]236
8420male34.0102866421.0[null]S[null][null]
8520male21.0102813311.5[null]S[null][null]
8620male21.0102813411.5[null]S[null][null]
8720male24.00023386613.0[null]S[null]155
8820male34.0001223313.0[null]S[null][null]
8920male30.00025065313.0[null]S[null]75
9020male44.00024874613.0[null]S[null]35
9120male49.01222084565.0[null]S[null][null]
9220male21.020S.O.C. 1487973.5[null]S[null][null]
9320male21.000S.O.C. 1487973.5[null]S[null][null]
9420female60.0102406526.0[null]S[null][null]
9520male24.020C.A. 3102931.5[null]S[null][null]
9620male22.020C.A. 3102931.5[null]S[null][null]
9720male35.00023373412.35[null]Q[null][null]
9820male31.000C.A. 1872310.5[null]S[null]165
9920male36.000SC/Paris 216312.875DC[null][null]
10020male[null]00SC/A.3 286115.5792[null]C[null][null]
Rows: 1-100 | Columns: 14

Note

VerticaPy offers a wide range of sample datasets that are ideal for training and testing purposes. You can explore the full list of available datasets in the Datasets, which provides detailed information on each dataset and how to use them effectively. These datasets are invaluable resources for honing your data analysis and machine learning skills within the VerticaPy environment.

Let’s look at “age” vcolumn

data["age"]
123
age
Numeric(8)
171.0
245.0
3[null]
417.0
527.0
637.0
731.0
850.0
936.0
1037.0
1124.0
1245.0
1340.0
1442.0
15[null]
1642.0
17[null]
1829.0
1946.0
2054.0

Let’s look at the distribution of age.

data["age"].bar()

Let’s discretize “age” using the same bar width.

data["age"].discretize(method = "same_width", h = 10)
data["age"]
Abc
age
Varchar(127)
1[70;80]
2[40;50]
3[null]
4[10;20]
5[20;30]
6[30;40]
7[30;40]
8[50;60]
9[30;40]
10[30;40]
11[20;30]
12[40;50]
13[40;50]
14[40;50]
15[null]
16[40;50]
17[null]
18[20;30]
19[40;50]
20[50;60]

Let’s look at the distribution of age again.

data["age"].bar()

Let’s discretize “age” using the same frequency per bin.

data = vpd.load_titanic() # Reloading the dataset
data["age"].discretize(method = "same_freq", nbins = 5)
data["age"]
Abc
age
Varchar(15)
1[42.000;80.000]
2[42.000;80.000]
3[null]
4[0.330;19.000]
5[25.000;31.000]
6[31.000;42.000]
7[25.000;31.000]
8[42.000;80.000]
9[31.000;42.000]
10[31.000;42.000]
11[19.000;25.000]
12[42.000;80.000]
13[31.000;42.000]
14[31.000;42.000]
15[null]
16[31.000;42.000]
17[null]
18[25.000;31.000]
19[42.000;80.000]
20[42.000;80.000]

Let’s look at the distribution of age again.

data["age"].bar()

Let’s discretize “age” using a response column distribution.

Note

While discretizing using a response column distribution, a Random Forest Model will be created.

data = vpd.load_titanic()
data["age"].discretize(
    method = "smart",
    response = "survived",
    nbins = 6,
    RFmodel_params = {"n_estimators": 20},
)
data["age"].topk()
...
count
percent
[15.467300;48.132000]...77462.723
[48.132000;80.0]...1189.562
[8.297000;15.467300]...383.079
[1.126700;5.110200]...332.674
[0.33;1.126700]...201.621
[5.110200;8.297000]...141.135

Let’s look at the distribution of age again.

data["age"].bar()

See also

vDataFrame.decode() : User Defined Encoding.
vDataFrame.label_encode() : Label Encoding.
vDataFrame.mean_encode() : Mean Encoding.
vDataFrame.one_hot_encode() : One Hot Encoding.