PliniusNatHist / app.py
bestroi's picture
Update app.py
e215539 verified
raw
history blame
2.57 kB
import streamlit as st
import pandas as pd
import plotly.express as px
import nltk
nltk.download('punkt')
def count_tokens(text):
tokens = nltk.word_tokenize(text)
return len(tokens)
def extract_number(entry):
start_index = entry.find("plin. nat.") + len("plin. nat.")
num_str = ''
for char in entry[start_index:]:
if char.isdigit() or char == '.':
num_str += char
else:
break
return float(num_str) if num_str else 0.0
def visualize_data(csv_file, sort_entries=False):
data = pd.read_csv(csv_file)
if sort_entries:
data['SortKey'] = data['Book/Chapter'].apply(extract_number)
data = data.sort_values(by='SortKey')
data['token_count'] = data['Context'].apply(count_tokens)
lemma_stats = data.groupby('Lemma').agg({'Context': 'count', 'token_count': 'mean'}).reset_index()
st.write("Basic Statistics:")
st.table(lemma_stats)
fig_bar = px.bar(
lemma_stats,
x='Lemma',
y='Context',
color='Lemma',
labels={'Context': 'Frequency'},
title='Lemma Frequency in the Dataset'
)
st.plotly_chart(fig_bar)
lemma_stats_additional = data['Lemma'].value_counts().reset_index()
lemma_stats_additional.columns = ['Lemma', 'Frequency']
most_common_lemma_additional = lemma_stats_additional.iloc[0]['Lemma']
chapter_stats_additional = data.groupby(['Lemma', 'Book/Chapter']).size().unstack(fill_value=0)
fig_pie = px.pie(
lemma_stats_additional,
values='Frequency',
names='Lemma',
title='Lemma Frequency Distribution'
)
st.plotly_chart(fig_pie)
fig_additional = px.bar(
chapter_stats_additional,
barmode='stack',
labels={'index': 'Book/Chapter'},
title='Chapter-wise Lemma Mentions'
)
st.plotly_chart(fig_additional)
st.write(f"Most Common Lemma: {most_common_lemma_additional}")
with st.expander("Click to view context"):
for index, row in data.iterrows():
st.write(f"Lemma: {row['Lemma']}")
st.write(f"Book/Chapter: {row['Book/Chapter']}")
st.write(f"Context: {row['Context']}")
st.write('-' * 50)
def main():
st.title("Lemma Frequency Visualization")
csv_file = st.sidebar.selectbox("Select CSV file:", ["allData.csv","places.csv","ethnonyms.csv","rivers.csv","mountains.csv","toponyms.csv"])
visualize_data(csv_file)
if __name__ == "__main__":
main()