Download utils.py from friedeggy/Final2: direct link, hf CLI and curl.
- Browser
- Download file 4.85 kB
-
https://huggingface.co/spaces/friedeggy/Final2/resolve/main/utils.py
- Command line
-
hf download hf://spaces/friedeggy/Final2/utils.py
-
curl -L -o utils.py https://huggingface.co/spaces/friedeggy/Final2/resolve/main/utils.py
4.85 kB
| """ | |
| Ashley Wu | |
| Creates visualizations for app | |
| """ | |
| import gradio as gr | |
| from datetime import datetime | |
| import pandas as pd | |
| def update_dropdown(df): | |
| """ | |
| Updates the dropdown with the columns of the dataframe in question | |
| Args: | |
| df: dataframe | |
| the dataframe in question | |
| Returns: | |
| gr.update | |
| Gradio update object to dropdown | |
| """ | |
| columns = df.columns.tolist() | |
| return gr.update(choices=columns) | |
| def update_filter_block(df, column_title): | |
| """ | |
| Chooses whick blocks to hide and show based off of column dtype | |
| Args: | |
| df: dataframe | |
| dataframe in question | |
| column_title: string | |
| title of the column | |
| returns: | |
| gr.update: gr.update | |
| an update to the visibility of the max number textbox | |
| gr.update: gr.update | |
| an update to the visibility of the min number textbox | |
| gr.update: gr.update | |
| an update to the visibility of the category checklist | |
| gr.update: gr.update | |
| an update to the visibility of the max date selector | |
| gr.update: gr.update | |
| an update to the visibility of the min date selector | |
| gr.update: gr.update | |
| an update to the visibility of the date submitter | |
| string: string | |
| a string update incase use selects a dtype that does not have a filter | |
| """ | |
| df = detect_categories(df) | |
| df = detect_dates(df) | |
| dtype = df[column_title].dtype | |
| max_num = False | |
| min_num = False | |
| category = False | |
| max_date = False | |
| min_date = False | |
| if dtype.kind == 'i' or dtype.kind == 'f' or dtype.kind == 'u' or dtype.kind == 'c': | |
| max_num = True | |
| min_num = True | |
| elif dtype.name == 'category': | |
| category = True | |
| elif dtype.kind == 'M' or dtype.kinda == 'm': | |
| max_date = True | |
| min_date = True | |
| else: | |
| raise gr.Warning('selected column is not a filterable type!', duration=5) | |
| return gr.update(visible=max_num), gr.update(visible=min_num), gr.update(visible=category), gr.update(visible=max_date), gr.update(visible=min_date), gr.update(visible=min_date) | |
| def apply_filter(df): | |
| """ | |
| Docstring for apply_filter | |
| :param df: Description | |
| """ | |
| return df | |
| def detect_categories(df): | |
| """ | |
| Detects whether or not there are categories in a string column | |
| Args: | |
| df: dataframe | |
| Returns: | |
| df: dataframe | |
| """ | |
| for column in df.columns: | |
| unique = df[column].nunique() | |
| if unique < 100 and df[column].dtype == 'object': | |
| df[column] = df[column].astype('category') | |
| return df | |
| def populate_categories(df, column): | |
| """ | |
| Populate categories of an element | |
| Args: | |
| df: dataframe | |
| column: column to get categories for | |
| Returns: | |
| list of strings: list of categories in column | |
| """ | |
| list = df[column].unique().tolist() | |
| return gr.update(choices=list) | |
| def change_slider(df, col): | |
| if df[col].dtype.name == 'object': | |
| raise gr.Error("The column can not be a category!") | |
| max_val = df[col].max() | |
| min_val = df[col].min() | |
| return gr.update(maximum=max_val, minimum=min_val, step=1) | |
| def count_rows(df): | |
| """ | |
| Return the row count of the dataframe | |
| Args: | |
| df: dataframe | |
| Returns: | |
| int: # of the rows of the dataframe | |
| """ | |
| return df.shape[0] | |
| def detect_dates(df): | |
| """ | |
| Checks every column for date values, if a column with dates is found, then sets that column dtype to a date value | |
| Args: | |
| df: dataframe | |
| Returns: | |
| df: dataframe | |
| """ | |
| formats = [ | |
| '%Y-%m-%d', | |
| '%m/%d/%Y', | |
| '%d/%m/%Y', | |
| '%Y/%m/%d', | |
| '%d-%m-%Y', | |
| '%d.%m.%Y', | |
| ] | |
| for column in df.columns: | |
| for fmt in formats: | |
| try: | |
| datetime.strptime(df[column].iloc[0], fmt) | |
| df[column] = pd.to_datetime(df[column]) | |
| break | |
| except: | |
| continue | |
| return df | |
| def download_chats(fig1, fig2, fig3, fig4): | |
| """ | |
| Downloads all figures, if figure hasn't been generated, doesn't download | |
| Args: | |
| fig1: bar chart | |
| fig2: time series | |
| fig3: histogram | |
| fig4: scatter plot | |
| """ | |
| if fig1 is not None: | |
| fig1.savefig("bar_chart.png") | |
| if fig2 is not None: | |
| fig2.savefig("time_series.png") | |
| if fig3 is not None: | |
| fig3.savefig("histogram.png") | |
| if fig4 is not None: | |
| fig4.savefig("scatter_plot.png") | |
| pass |