|
import streamlit as st |
|
import pandas as pd |
|
import os |
|
import glob |
|
|
|
|
|
@st.cache_resource |
|
def load_specialties(csv_file='Provider-Specialty.csv'): |
|
return pd.read_csv(csv_file) |
|
|
|
@st.cache_resource |
|
def find_state_files(): |
|
|
|
return [file for file in glob.glob('./*.csv') if len(os.path.basename(file).split('.')[0]) == 2] |
|
|
|
|
|
specialties = load_specialties() |
|
|
|
|
|
st.title('Provider Specialty Analyzer π') |
|
|
|
|
|
st.markdown(''' |
|
## Specialty Fields Description π |
|
- **Code**: Unique identifier for the specialty π |
|
- **Grouping**: General category of the specialty π·οΈ |
|
- **Classification**: Specific type of practice within the grouping π― |
|
- **Specialization**: Further refinement of the classification if applicable π |
|
- **Definition**: Brief description of the specialty π |
|
- **Notes**: Additional information or updates about the specialty ποΈ |
|
- **Display Name**: Common name of the specialty π·οΈ |
|
- **Section**: Indicates the section of healthcare it belongs to π |
|
''') |
|
|
|
|
|
specialty_options = specialties['Display Name'].unique() |
|
selected_specialty = st.selectbox('Select a Specialty π©Ί', options=specialty_options) |
|
|
|
|
|
search_keyword = st.text_input('Or search for a keyword in specialties π') |
|
if search_keyword: |
|
filtered_specialties = specialties[specialties.apply(lambda row: row.astype(str).str.contains(search_keyword, case=False).any(), axis=1)] |
|
else: |
|
filtered_specialties = specialties[specialties['Display Name'] == selected_specialty] |
|
|
|
st.dataframe(filtered_specialties) |
|
|
|
|
|
default_state = 'MN' |
|
state_files = find_state_files() |
|
state_options = [os.path.basename(file).split('.')[0] for file in state_files] |
|
state_options.insert(0, default_state) |
|
selected_state = st.selectbox('Select a State (optional) πΊοΈ', options=state_options, index=0) |
|
use_specific_state = st.checkbox('Filter by selected state only? β
', value=True) |
|
|
|
|
|
def process_files(specialty_code, specific_state=default_state): |
|
results = [] |
|
files_to_process = [f for f in state_files if f.split('/')[-1].startswith(specific_state + '.csv')] |
|
|
|
for file in files_to_process: |
|
state_df = pd.read_csv(file, header=None) |
|
filtered_df = state_df[state_df[47] == specialty_code] |
|
if not filtered_df.empty: |
|
results.append((os.path.basename(file), filtered_df)) |
|
|
|
return results |
|
|
|
|
|
if st.button('Analyze Text Files for Selected Specialty π'): |
|
specialty_code = specialties[specialties['Display Name'] == selected_specialty].iloc[0]['Code'] |
|
state_data = process_files(specialty_code, selected_state if use_specific_state else default_state) |
|
if state_data: |
|
for state, df in state_data: |
|
st.subheader(f"Providers in {state.replace('.csv', '')} with Specialty '{selected_specialty}':") |
|
st.dataframe(df) |
|
else: |
|
st.write("No matching records found in text files for the selected specialty.") |
|
|