File size: 3,127 Bytes
553d692 4081be9 911163c d56f2c2 553d692 911163c 553d692 3d956aa 911163c be2d971 911163c 553d692 911163c 553d692 be2d971 553d692 3d956aa 911163c 4081be9 911163c 553d692 4081be9 911163c 4081be9 911163c 4081be9 3d956aa 4081be9 3d956aa 4081be9 553d692 911163c 3d956aa 4081be9 553d692 3d956aa 553d692 3d956aa |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
import streamlit as st
import pandas as pd
import os
import glob
# Cache the loading of specialties and state files for efficiency
@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()
# UI for specialty selection
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)
# State selection with MN as default for testing
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) # Assuming no header for simplicity
for code in specialty_codes:
filtered_df = state_df[state_df[47].isin(specialty_codes)] # Match against 48th column
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 'MN')
if state_data:
for state, df in state_data:
st.subheader(f"Providers in {state} with Specialties related to '{search_keyword}':")
st.dataframe(df)
else:
st.write("No matching records found in text files for the selected specialties.")
|