swarecito's picture
Add scipy to requirements.txt and refactor data visualization in app.py
a740be5
from math import e
import panel as pn
import pandas as pd
import hvplot.pandas
# A class to process the dataframe and create visualizations according to the shape, nature, and distribution of the data.
class Visualizations:
def __init__(self, df, pn: pn):
self.df = df
self.pn = pn
def high_level_visualization(self):
# Create a high-level visualization of the dataframe
# Check the number of rows and columns in the dataframe
rows, columns = self.df.shape
if columns > 7:
widget = self.pn.Column(
self.pn.pane.Markdown(
"""
# Data Preview
### Here is a preview of the dataset.
"""
),
self.pn.Column(
self.pn.Column(
self.pn.pane.Markdown("## Head"),
self.pn.pane.DataFrame(self.df.head(5)),
),
self.pn.Column(
self.pn.pane.Markdown("## Describe"),
self.pn.pane.DataFrame(self.df.describe(),)
),
),
)
return widget
else:
widget = self.pn.Column(
self.pn.pane.Markdown(
"""
# Data Preview
### Here is a preview of the dataset.
"""
),
self.pn.Row(
self.pn.Column(
self.pn.pane.Markdown("## Head"),
self.pn.pane.DataFrame(self.df.head(5)),
),
self.pn.Column(
self.pn.pane.Markdown("## Describe"),
self.pn.pane.DataFrame(self.df.describe(),)
),
),
)
return widget
def data_shape_visualization(self):
# Create a visualization of the shape of the dataframe
widget = self.pn.Column(
self.pn.pane.Markdown(
"""
# Data Shape
### Here is the shape of the dataset.
"""
),
self.pn.Column(
self.pn.Column(
self.pn.pane.Markdown("## Shape"),
self.pn.pane.DataFrame(pd.DataFrame({'Rows': [self.df.shape[0]], 'Columns': [self.df.shape[1]]}),
)),
),
)
return widget
def nature_visualization(self):
# Create a visualization of the nature of the dataframe
widget = self.pn.Column(
self.pn.pane.Markdown(
"""
# Data Nature
### Here is the nature of the dataset.
"""
),
self.pn.Row(
self.pn.Column(
self.pn.pane.Markdown("## Data Types"),
self.pn.pane.DataFrame(self.df.dtypes.to_frame(),)
),
self.pn.Column(
self.pn.pane.Markdown("## Null Values"),
self.pn.pane.DataFrame(self.df.isnull().sum().to_frame(),)
),
),
)
return widget
def distribution_visualization(self):
# Create a visualization of the distribution of the dataframe
widget = self.pn.Column(
self.pn.pane.Markdown(
"""
# Data Distribution
### Here is the distribution of the dataset.
"""
),
self.pn.Column(
self.pn.Column(
self.pn.pane.Markdown("## Distribution"),
self.df.hvplot.density()
),
),
)
return widget