[Vaex 1.0.0-beta.6] Virtual Column 알아보기

2020. 8. 29. 15:50분석 Python/Vaex

728x90

Vaex에서는 DataFrame에서 변수를 파생할 경우에, virtual columns로 결과가 나온다.

 

Virtual Column 같은 경우, 진짜 정상적인 컬럼처럼 행동하지만, 메모리를 차지 않는 컬럼이다.

Vaex는 실제 컬럼 Virtual Column 차이에 구별이 없어져서 거의 진짜처럼 있다고 생각하고 처리하면 된다.

 

 

실제로 연산하기가 오래 걸릴 경우에는 pythran이나, numba를 활용할 수 있다.

import pandas as pd
import vaex
DATA = vaex.open("./data/AMAZON_FASHION.hdf5")

add the Columns (1)

DATA["binding_1"] = DATA.func.where( DATA.overall == 5 , "good","bad")
DATA["binding_2"] = DATA.func.where( DATA.overall > 3 , "good","bad")
DATA.fillna(0 , column_names=["vote"], inplace=True)

데이터 컬럼에 virtual column이 속하면서, 실제로 virtual column도 따로 볼 수 있다.

위에서 결측치를 대체하는 부분이 있는데, 실제로 저것을 inplace로 하면 기존에 있던 real column인 "vote"가 사라지고 virtual column "vote"가 새로 생기는 것은 주의해야 한다.

add the Columns (2)

아니면 add_column은 진짜 column을 추가하는 것이고, add_virtual_column 같은 경우 virtual column을 expression으로 표현하는 것이다. 그래서 실제로 test_1 은 add_column을 하니 virtual column에 속하지 않게 된다. 즉 이 말은 결국 메모리를 차지한다는 말이 될 수도 있다.

DATA.add_column("test_1", np.random.normal(size=len(DATA)),dtype=float)
DATA.add_virtual_column("test_virtual_1", "overall/5")

Remove the Columns

실제로 제거를 둘 다(real, virtual) 해보면 다 없어진 것을 알 수 있다.

DATA.drop(["test_virtual_1","test_1"],inplace=True)
print(DATA.virtual_columns)
print(DATA.column_names)
{'binding_1': "where((overall == 5), 'good', 'bad')", 'binding_2': "where((overall > 3), 'good', 'bad')", 'vote': 'fillna(__original_vote, 0)'}
['overall', 'verified', 'reviewTime', 'reviewerID', 'asin', 'reviewerName', 'reviewText', 'summary', 'unixReviewTime', 'index', 'binding_1', 'binding_2', '__original_vote', 'vote']

이렇게 만든 것을 pandas dataframe을 할 때는 주의사항이 있다.

바로 virtual을 True로 할지 False로 할 지에 따라서 Virtual Column을 쓸 것인지 말 것인지 결정된다.

DATA.to_pandas_df( virtual=False)
## columns
['overall',
 'verified',
 'reviewTime',
 'reviewerID',
 'asin',
 'reviewerName',
 'reviewText',
 'summary',
 'unixReviewTime',
 'index']

vote 실제 변수를 virtual column으로 만들다 보니(즉 기존 것을 지우고 새로 만듦), 변수 순서도 변하니 조심!

DATA.to_pandas_df( virtual=True).columns.tolist()
## columns
['overall',
 'verified',
 'reviewTime',
 'reviewerID',
 'asin',
 'reviewerName',
 'reviewText',
 'summary',
 'unixReviewTime',
 'index',
 'binding_1',
 'binding_2',
 'vote']

 

 

 

 

 

https://towardsdatascience.com/vaex-out-of-core-dataframes-for-python-and-fast-visualization-1 2c102db044a

 

Vaex: Out of Core Dataframes for Python and Fast Visualization

1 billion row datasets on your laptop

towardsdatascience.com

 

728x90