From 0b51e10825b6b32fbce12b6064685312a47fce1c Mon Sep 17 00:00:00 2001 From: adarshkannada Date: Mon, 7 Aug 2023 00:08:31 +0530 Subject: [PATCH] show monthly charts --- README.md | 20 +++--- requirements.txt | Bin 534 -> 556 bytes src/main/{ea => analyse}/data_plots.py | 0 src/main/{ea => analyse}/expense_analyzer.py | 0 src/main/analyse/main.py | 61 +++++++++++++++++++ src/main/analyse/pages/monthly.py | 26 ++++++++ src/main/data/core_data.py | 3 + src/main/ea/main.py | 36 ----------- src/main/ea/pages/monthly.py | 17 ------ 9 files changed, 97 insertions(+), 66 deletions(-) rename src/main/{ea => analyse}/data_plots.py (100%) rename src/main/{ea => analyse}/expense_analyzer.py (100%) create mode 100644 src/main/analyse/main.py create mode 100644 src/main/analyse/pages/monthly.py create mode 100644 src/main/data/core_data.py delete mode 100644 src/main/ea/main.py delete mode 100644 src/main/ea/pages/monthly.py diff --git a/README.md b/README.md index b178c1f..9801179 100644 --- a/README.md +++ b/README.md @@ -6,18 +6,12 @@ Utility code written for personal use - Install dependencies from requirements.txt - Install **pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib** - Basic setup guide https://developers.google.com/sheets/api/quickstart/python -- Required Environment details - - ENV variable SPREADSHEET_ID: provide the google sheet ID - - ENV variable SHEET_CELLS: cell range in format '!F35:G48' - - place the credentials.json file having google sheets details in the folder src/main/config - -# Analysis - My Datascience application -- install streamlit, pandas, matplotlib -- place the data excel file at the location -- run streamlit main.py as below -- open the browser with the given local IP address + - place the credentials.json file having google sheets details in the folder +- set the environment variables appropriately # Run -- python -s -m src.main.expense_analysis.expense_analyzer -- python -s - m src.main.util.website_sanity_test -- python -m streamlit run src/main/expense_analysis/main.py +- Data Load + - SET ENV variable LOAD_TYPE to full/incremental + - RUN python3 -m src.main.data.data_import +- RUN Streamlit server + - python -m streamlit run src/main/analyse/main.py diff --git a/requirements.txt b/requirements.txt index 891f1b2d97a22436c2ab6230c07370a2efeddf0a..459d588f89c54055f50a5a7fde9bbc9f8c0e2150 100644 GIT binary patch delta 68 zcmbQnvW8_t7b9;nLlHwhLmop3Ln1@c&4R1-Uykx86| Imw}4`0QVyei~s-t diff --git a/src/main/ea/data_plots.py b/src/main/analyse/data_plots.py similarity index 100% rename from src/main/ea/data_plots.py rename to src/main/analyse/data_plots.py diff --git a/src/main/ea/expense_analyzer.py b/src/main/analyse/expense_analyzer.py similarity index 100% rename from src/main/ea/expense_analyzer.py rename to src/main/analyse/expense_analyzer.py diff --git a/src/main/analyse/main.py b/src/main/analyse/main.py new file mode 100644 index 0000000..e78b463 --- /dev/null +++ b/src/main/analyse/main.py @@ -0,0 +1,61 @@ +import streamlit as st +from dotenv import load_dotenv + +from src.main.data.core_data import CoreData +from src.main.data.data_import import ImportData +from loguru import logger +from streamlit_echarts import st_echarts + +from src.main.data.sqlite_conn import Sql +from src.main.utils.utils import Utils + +load_dotenv() + + +# streamlit app +st.title('My Analytics') +st.markdown("# Home 🎈") +st.sidebar.markdown("# Home 🎈") +# Create a text element and let the reader know the data is loading. +data_load_state = st.text('Loading data...') + + +# @st.cache_data +def get_data(): + return Sql().get_data_from_table(query=f"select * from Jul2023 where Date = 'Jul2023'") + + +data = get_data() + +# Notify the reader that the data was successfully loaded. + +bardf = Sql().get_data_from_table(query=f"select * from {Utils().get_current_month_year()} where Date = " + f"'{Utils().get_current_month_year()}'") +home_bar = bardf['Home'].values[0] +bills_bar = bardf['Bills'].values[0] +shopping_bar = bardf['Shopping'].values[0] +food_bar = bardf['Food'].values[0] +travel_bar = bardf['Travel'].values[0] +clothes_bar = bardf['Clothes'].values[0] +fuel_bar = bardf['Fuel'].values[0] +gifts_bar = bardf['Gifts'].values[0] +general_bar = bardf['General'].values[0] +invest_bar = bardf['Investment'].values[0] +meds_bar = bardf['Medicine'].values[0] + + +options = { + "xAxis": { + "type": "category", + "data": CoreData().columns, + }, + "yAxis": {"type": "value"}, + "series": [{"data": [home_bar, bills_bar, shopping_bar, food_bar, travel_bar, clothes_bar, + fuel_bar, gifts_bar, general_bar, invest_bar, meds_bar], + "type": "bar"}], +} + +st.write("# Current Month") +st_echarts(options=options, height="500px") + +data_load_state.text(f'Data for the current month') diff --git a/src/main/analyse/pages/monthly.py b/src/main/analyse/pages/monthly.py new file mode 100644 index 0000000..651380b --- /dev/null +++ b/src/main/analyse/pages/monthly.py @@ -0,0 +1,26 @@ +import streamlit as st +import pandas as pd +from src.main.data.core_data import CoreData +from src.main.data.sqlite_conn import Sql + +st.markdown("# Monthly Chart ❄️") +st.sidebar.markdown("# Monthly Chart ❄️") + +data_load_state = st.text('Loading data...') +data_load_state.text(f'Data for the months of 2023') + +df_jul2023 = Sql().get_data_from_table(query=f"select * from Jul2023 where Date = 'Jul2023'") +df_jun2023 = Sql().get_data_from_table(query=f"select * from Jun2023 where Date = 'Jun2023'") +df_may2023 = Sql().get_data_from_table(query=f"select * from May2023 where Date = 'May2023'") +df_apr2023 = Sql().get_data_from_table(query=f"select * from Apr2023 where Date = 'Apr2023'") +df_mar2023 = Sql().get_data_from_table(query=f"select * from Mar2023 where Date = 'Mar2023'") +df_feb2023 = Sql().get_data_from_table(query=f"select * from Feb2023 where Date = 'Feb2023'") +df_jan2023 = Sql().get_data_from_table(query=f"select * from Jan2023 where Date = 'Jan2023'") + +frames = [df_jul2023, df_jun2023, df_may2023, df_apr2023, df_mar2023, + df_feb2023, df_jan2023] +df_merged = pd.concat(frames) +st.write(df_merged) +for each in CoreData().columns: + st.line_chart(data=df_merged, x='Date', y=[each], + width=0, height=0, use_container_width=True) diff --git a/src/main/data/core_data.py b/src/main/data/core_data.py new file mode 100644 index 0000000..79d81b5 --- /dev/null +++ b/src/main/data/core_data.py @@ -0,0 +1,3 @@ +class CoreData: + columns = ["Home", "Bills", "Shopping", "Food", "Travel", "Clothes", + "Fuel", "Gifts", "General", "Investment", "Medicine"] diff --git a/src/main/ea/main.py b/src/main/ea/main.py deleted file mode 100644 index 6d3322f..0000000 --- a/src/main/ea/main.py +++ /dev/null @@ -1,36 +0,0 @@ -import streamlit as st -from dotenv import load_dotenv -from src.main.data.data_import import ImportData -from loguru import logger - -from src.main.data.sqlite_conn import Sql -from src.main.utils.utils import Utils - -load_dotenv() - - -# streamlit app -st.title('My Analytics') -st.markdown("# Home 🎈") -st.sidebar.markdown("# Home 🎈") -# Create a text element and let the reader know the data is loading. -data_load_state = st.text('Loading data...') - - -# @st.cache_data -def get_data(): - return Sql().get_data_from_table(query=f"select * from Jul2023 where Date = 'Jul2023'") - - -data = get_data() - -# Notify the reader that the data was successfully loaded. - -data_load_state.text(f'Data for the months of 2023') -st.write(Sql().get_data_from_table(query=f"select * from Mar2023 where Date = 'Mar2023'")) -st.write(Sql().get_data_from_table(query=f"select * from Apr2023 where Date = 'Apr2023'")) -st.write(Sql().get_data_from_table(query=f"select * from May2023 where Date = 'May2023'")) -st.write(Sql().get_data_from_table(query=f"select * from Jun2023 where Date = 'Jun2023'")) -st.write(data) -st.write(Sql().get_data_from_table(query=f"select * from {Utils().get_current_month_year()} where Date = " - f"'{Utils().get_current_month_year()}'")) diff --git a/src/main/ea/pages/monthly.py b/src/main/ea/pages/monthly.py deleted file mode 100644 index da65b81..0000000 --- a/src/main/ea/pages/monthly.py +++ /dev/null @@ -1,17 +0,0 @@ -import streamlit as st - -from src.main.data.data_import import ImportData - -st.markdown("# Monthly Chart ❄️") -st.sidebar.markdown("# Monthly Chart ❄️") - - -@st.cache_data -def get_data(): - return ImportData().get_data(rows=32, worksheet='jun 2023', header_col_num=1) - - -st.markdown("# June 2023") -data = get_data() -st.write(data) -