Update st.cache
Browse files- apps/h_index.py +3 -3
- apps/journal.py +3 -3
- apps/researcher.py +6 -11
- multiapp.py +3 -2
- streamlit_app.py +2 -2
apps/h_index.py
CHANGED
@@ -9,7 +9,7 @@ if "dsl" not in st.session_state:
|
|
9 |
st.session_state["dsl"] = scholarpy.Dsl()
|
10 |
|
11 |
|
12 |
-
@st.
|
13 |
def the_H_function(sorted_citations_list, n=1):
|
14 |
"""from a list of integers [n1, n2 ..] representing publications citations,
|
15 |
return the max list-position which is >= integer
|
@@ -41,7 +41,7 @@ def dim_login(key=None, endpoint=None):
|
|
41 |
raise Exception("Failed to login to Dimensions")
|
42 |
|
43 |
|
44 |
-
@st.
|
45 |
def get_pubs_df(dsl, researcher_id):
|
46 |
|
47 |
q = """search publications where researchers.id = "{}" return publications[id+title+doi+times_cited] sort by times_cited limit 1000"""
|
@@ -50,7 +50,7 @@ def get_pubs_df(dsl, researcher_id):
|
|
50 |
return pubs.as_dataframe()
|
51 |
|
52 |
|
53 |
-
@st.
|
54 |
def get_citations(df):
|
55 |
return list(df.fillna(0)["times_cited"])
|
56 |
|
|
|
9 |
st.session_state["dsl"] = scholarpy.Dsl()
|
10 |
|
11 |
|
12 |
+
@st.cache_data
|
13 |
def the_H_function(sorted_citations_list, n=1):
|
14 |
"""from a list of integers [n1, n2 ..] representing publications citations,
|
15 |
return the max list-position which is >= integer
|
|
|
41 |
raise Exception("Failed to login to Dimensions")
|
42 |
|
43 |
|
44 |
+
@st.cache_data
|
45 |
def get_pubs_df(dsl, researcher_id):
|
46 |
|
47 |
q = """search publications where researchers.id = "{}" return publications[id+title+doi+times_cited] sort by times_cited limit 1000"""
|
|
|
50 |
return pubs.as_dataframe()
|
51 |
|
52 |
|
53 |
+
@st.cache_data
|
54 |
def get_citations(df):
|
55 |
return list(df.fillna(0)["times_cited"])
|
56 |
|
apps/journal.py
CHANGED
@@ -25,13 +25,13 @@ def read(filename_dot_csv):
|
|
25 |
return df
|
26 |
|
27 |
|
28 |
-
@st.
|
29 |
def get_token():
|
30 |
|
31 |
return os.environ.get("DIM_TOKEN")
|
32 |
|
33 |
|
34 |
-
@st.
|
35 |
def get_journals():
|
36 |
|
37 |
with open("data/journals.json") as f:
|
@@ -40,7 +40,7 @@ def get_journals():
|
|
40 |
return journals
|
41 |
|
42 |
|
43 |
-
@st.
|
44 |
def read_excel(sheet_name):
|
45 |
|
46 |
df = pd.read_excel(
|
|
|
25 |
return df
|
26 |
|
27 |
|
28 |
+
@st.cache_data
|
29 |
def get_token():
|
30 |
|
31 |
return os.environ.get("DIM_TOKEN")
|
32 |
|
33 |
|
34 |
+
@st.cache_data
|
35 |
def get_journals():
|
36 |
|
37 |
with open("data/journals.json") as f:
|
|
|
40 |
return journals
|
41 |
|
42 |
|
43 |
+
@st.cache_data
|
44 |
def read_excel(sheet_name):
|
45 |
|
46 |
df = pd.read_excel(
|
apps/researcher.py
CHANGED
@@ -9,7 +9,7 @@ if "dsl" not in st.session_state:
|
|
9 |
st.session_state["dsl"] = scholarpy.Dsl()
|
10 |
|
11 |
|
12 |
-
@st.
|
13 |
def get_geonames():
|
14 |
return scholarpy.get_geonames()
|
15 |
|
@@ -57,8 +57,7 @@ def annual_collaborators(pubs, col="year"):
|
|
57 |
def annual_citations(pubs, col="year"):
|
58 |
if pubs is not None:
|
59 |
df = pubs.groupby([col]).sum()
|
60 |
-
df2 = pd.DataFrame(
|
61 |
-
{"year": df.index, "citations": df["times_cited"].values})
|
62 |
fig = px.bar(
|
63 |
df2,
|
64 |
x="year",
|
@@ -107,8 +106,7 @@ def app():
|
|
107 |
|
108 |
info_df = json_to_df(id_info, transpose=True)
|
109 |
info_df.rename(
|
110 |
-
columns={info_df.columns[0]: "Type",
|
111 |
-
info_df.columns[1]: "Value"},
|
112 |
inplace=True,
|
113 |
)
|
114 |
with row1_col1:
|
@@ -132,14 +130,12 @@ def app():
|
|
132 |
|
133 |
with row1_col2:
|
134 |
st.header("Researcher statistics")
|
135 |
-
columns = ["pubs", "collaborators",
|
136 |
-
"institutions", "cities"]
|
137 |
selected_columns = st.multiselect(
|
138 |
"Select attributes to display:", columns, columns
|
139 |
)
|
140 |
if selected_columns:
|
141 |
-
fig = scholarpy.annual_stats_barplot(
|
142 |
-
df1, selected_columns)
|
143 |
st.plotly_chart(fig)
|
144 |
leafmap.st_download_button(
|
145 |
"Download data",
|
@@ -171,8 +167,7 @@ def app():
|
|
171 |
)
|
172 |
|
173 |
st.header("Publication counts with collaborators")
|
174 |
-
collaborators = dsl.search_researcher_collaborators(
|
175 |
-
id, pubs)
|
176 |
markdown = f"""
|
177 |
- Total number of collaborators: **{len(collaborators)}**
|
178 |
"""
|
|
|
9 |
st.session_state["dsl"] = scholarpy.Dsl()
|
10 |
|
11 |
|
12 |
+
@st.cache_data
|
13 |
def get_geonames():
|
14 |
return scholarpy.get_geonames()
|
15 |
|
|
|
57 |
def annual_citations(pubs, col="year"):
|
58 |
if pubs is not None:
|
59 |
df = pubs.groupby([col]).sum()
|
60 |
+
df2 = pd.DataFrame({"year": df.index, "citations": df["times_cited"].values})
|
|
|
61 |
fig = px.bar(
|
62 |
df2,
|
63 |
x="year",
|
|
|
106 |
|
107 |
info_df = json_to_df(id_info, transpose=True)
|
108 |
info_df.rename(
|
109 |
+
columns={info_df.columns[0]: "Type", info_df.columns[1]: "Value"},
|
|
|
110 |
inplace=True,
|
111 |
)
|
112 |
with row1_col1:
|
|
|
130 |
|
131 |
with row1_col2:
|
132 |
st.header("Researcher statistics")
|
133 |
+
columns = ["pubs", "collaborators", "institutions", "cities"]
|
|
|
134 |
selected_columns = st.multiselect(
|
135 |
"Select attributes to display:", columns, columns
|
136 |
)
|
137 |
if selected_columns:
|
138 |
+
fig = scholarpy.annual_stats_barplot(df1, selected_columns)
|
|
|
139 |
st.plotly_chart(fig)
|
140 |
leafmap.st_download_button(
|
141 |
"Download data",
|
|
|
167 |
)
|
168 |
|
169 |
st.header("Publication counts with collaborators")
|
170 |
+
collaborators = dsl.search_researcher_collaborators(id, pubs)
|
|
|
171 |
markdown = f"""
|
172 |
- Total number of collaborators: **{len(collaborators)}**
|
173 |
"""
|
multiapp.py
CHANGED
@@ -1,8 +1,9 @@
|
|
1 |
"""Frameworks for running multiple Streamlit applications as a single app.
|
2 |
"""
|
|
|
3 |
import streamlit as st
|
4 |
|
5 |
-
# app_state = st.
|
6 |
# app_state = {k: v[0] if isinstance(v, list) else v for k, v in app_state.items()} # fetch the first item in each query string as we don't have multiple values for each query string key in this example
|
7 |
|
8 |
|
@@ -41,7 +42,7 @@ class MultiApp:
|
|
41 |
self.apps.append({"title": title, "function": func})
|
42 |
|
43 |
def run(self):
|
44 |
-
app_state = st.
|
45 |
app_state = {
|
46 |
k: v[0] if isinstance(v, list) else v for k, v in app_state.items()
|
47 |
} # fetch the first item in each query string as we don't have multiple values for each query string key in this example
|
|
|
1 |
"""Frameworks for running multiple Streamlit applications as a single app.
|
2 |
"""
|
3 |
+
|
4 |
import streamlit as st
|
5 |
|
6 |
+
# app_state = st.query_params
|
7 |
# app_state = {k: v[0] if isinstance(v, list) else v for k, v in app_state.items()} # fetch the first item in each query string as we don't have multiple values for each query string key in this example
|
8 |
|
9 |
|
|
|
42 |
self.apps.append({"title": title, "function": func})
|
43 |
|
44 |
def run(self):
|
45 |
+
app_state = st.query_params
|
46 |
app_state = {
|
47 |
k: v[0] if isinstance(v, list) else v for k, v in app_state.items()
|
48 |
} # fetch the first item in each query string as we don't have multiple values for each query string key in this example
|
streamlit_app.py
CHANGED
@@ -27,13 +27,13 @@ apps = {
|
|
27 |
"researcher": {"title": "Researcher", "icon": "person-circle"},
|
28 |
"orcid": {"title": "ORCID", "icon": "person-square"},
|
29 |
"organization": {"title": "Organization", "icon": "building"},
|
30 |
-
"google": {"title": "Google Scholar", "icon": "google"},
|
31 |
}
|
32 |
|
33 |
|
34 |
titles = [app["title"] for app in apps.values()]
|
35 |
icons = [app["icon"] for app in apps.values()]
|
36 |
-
params = st.
|
37 |
|
38 |
if "page" in params:
|
39 |
default_index = int(titles.index(params["page"][0].lower()))
|
|
|
27 |
"researcher": {"title": "Researcher", "icon": "person-circle"},
|
28 |
"orcid": {"title": "ORCID", "icon": "person-square"},
|
29 |
"organization": {"title": "Organization", "icon": "building"},
|
30 |
+
# "google": {"title": "Google Scholar", "icon": "google"},
|
31 |
}
|
32 |
|
33 |
|
34 |
titles = [app["title"] for app in apps.values()]
|
35 |
icons = [app["icon"] for app in apps.values()]
|
36 |
+
params = st.query_params
|
37 |
|
38 |
if "page" in params:
|
39 |
default_index = int(titles.index(params["page"][0].lower()))
|