# using pandas cut method to convert fields into discrete intervals books_metadata_selected['num_pages'].replace(np.nan, -1, inplace=True) books_metadata_selected['num_pages'] = pd.to_numeric(books_metadata_selected['num_pages']) books_metadata_selected['num_pages'] = pd.cut(books_metadata_selected['num_pages'], bins=25) # rounding ratings to neares .5 score books_metadata_selected['average_rating'] = books_metadata_selected['average_rating'].apply(lambda x: round(x*2)/2) # using pandas qcut method to convert fields into quantile-based discrete intervals books_metadata_selected['ratings_count'] = pd.qcut(books_metadata_selected['ratings_count'], 25) # replacing missing values to year 2100 books_metadata_selected['publication_year'].replace(np.nan, 2100, inplace=True) # replacing missing values to 'unknown' books_metadata_selected['language_code'].replace(np.nan, 'unknown', inplace=True) # convert is_ebook column into 1/0 where true=1 and false=0 books_metadata_selected['is_ebook'] = books_metadata_selected.is_ebook.map( lambda x: 1.0*(x == 'true')) profile = pandas_profiling.ProfileReport(books_metadata_selected[['average_rating', 'is_ebook', 'num_pages', 'publication_year', 'ratings_count']]) profile.to_file('./results/profiler_books_metadata_2.html')