|
import streamlit as st |
|
import pandas as pd |
|
import os |
|
import glob |
|
|
|
|
|
@st.cache(allow_output_mutation=True) |
|
def load_specialties(csv_file='Provider-Specialty.csv'): |
|
return pd.read_csv(csv_file) |
|
|
|
|
|
@st.cache(allow_output_mutation=True) |
|
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 with Code Grouping and Classification π') |
|
|
|
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) |
|
|
|
|
|
state_files = find_state_files() |
|
state_options = sorted([os.path.basename(file).split('.')[0] for file in state_files]) |
|
selected_state = st.selectbox('Select a State (optional) πΊοΈ', options=state_options, index=state_options.index('MN') if 'MN' in state_options else 0) |
|
|
|
|
|
use_specific_state = st.checkbox('Filter by selected state only? β
', value=True) |
|
|
|
|
|
def process_files(specialty_codes, specific_state='MN'): |
|
results = [] |
|
file_to_process = f'./{specific_state}.csv' if use_specific_state else state_files |
|
|
|
for file in [file_to_process] if use_specific_state else state_files: |
|
state_df = pd.read_csv(file, header=None) |
|
filtered_df = state_df[state_df[47].isin(specialty_codes)] |
|
if not filtered_df.empty: |
|
results.append((os.path.basename(file).replace('.csv', ''), filtered_df)) |
|
|
|
return results |
|
|
|
|
|
if st.button('Analyze Text Files for Selected Specialty π'): |
|
specialty_codes = filtered_specialties['Code'].tolist() |
|
state_data = process_files(specialty_codes, selected_state if use_specific_state else None) |
|
if state_data: |
|
for state, df in state_data: |
|
st.subheader(f"Providers in {state} with Specialties related to '{search_keyword or selected_specialty}':") |
|
st.dataframe(df) |
|
else: |
|
st.write("No matching records found in text files for the selected specialties.") |
|
|