Skip to content

Commit adc8854

Browse files
authored
enh: enhance editorial dashboard (#142)
1 parent 4654f26 commit adc8854

File tree

5 files changed

+113
-96
lines changed

5 files changed

+113
-96
lines changed

.github/workflows/update-pr-data.yml

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ jobs:
1818
runs-on: ubuntu-latest
1919
steps:
2020
- name: Check out the code
21-
uses: actions/checkout@v4
21+
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4
2222
- name: Setup Python
23-
uses: actions/setup-python@v5
23+
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
2424
with:
2525
python-version: "3.10"
2626
- name: Upgrade pip
@@ -44,6 +44,8 @@ jobs:
4444
github.event.pull_request.head.repo.full_name == github.repository )
4545
env:
4646
GITHUB_TOKEN: ${{ secrets.PROJECTS_READ }}
47+
- name: Update editors
48+
run: python scripts/get-editors.py
4749
run: python scripts/get-sprint-data.py
4850
- name: get-review-contributors
4951
run: python scripts/get-review-contributors.py
@@ -53,7 +55,7 @@ jobs:
5355
# - name: get-editors
5456
# run: python scripts/get-editors.py
5557
- name: Cache metrics
56-
uses: actions/upload-artifact@v4
58+
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
5759
with:
5860
name: metrics
5961
path: _data
@@ -65,14 +67,14 @@ jobs:
6567
if: github.ref == 'refs/heads/main'
6668
steps:
6769
- name: Check out the code
68-
uses: actions/checkout@v4
70+
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4
6971
- name: Download metrics
70-
uses: actions/download-artifact@v4
72+
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
7173
with:
7274
name: metrics
7375
path: _data
7476
- name: Create Pull Request
75-
uses: peter-evans/create-pull-request@v6
77+
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8
7678
with:
7779
add-paths: |
7880
_data/*.csv

_data/editorial_team_domains.csv

Lines changed: 18 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,18 @@
1-
gh_username,active,first_name,last_name,country,state,OS,Domain_areas,Description,technical_areas
2-
Batalex,yes,Alexandre,Batisse,France,,"Windows, Mac, Linux","Statistics, ML, AI, Computer sciences, Bioinformatics","I work as a Data Scientist on health care data. I conduct epidemiology studies and maintain private packages (analytics, dataviz).","Data visualization, Data extraction & retrieval, Data munging, Python package structure, Documentation quality, Unit Testing, Continuous Integration, Object oriented programming, Web API's, Docker"
3-
HaoZeke,,,,,,,,,
4-
JuliMillan,yes,Julieta,Millan,Argentina,Buenos Aires,Mac,"Statistics, ML, AI, Ecology / Biology","Biology, neuroscience, industry data science","Data visualization, Data extraction & retrieval, Python package structure, Documentation quality, Object oriented programming, Tool usability / accessibility"
5-
NimaSarajpoor,yes,Nima,Sarajpoor,Canada,Ontario,"Mac, Linux","Mathematics, Statistics, ML, AI, Computer sciences, Energy",[PhD research] Analyzing renewable energy data to discover patterns using shape-aware unsupervised learning algorithms [Current work] Using SQL and Python to develop tools for our Fraud Detection applications for different business lines (insurance and finance),"Data visualization, Data extraction & retrieval, Data munging, Data deposition, Python package structure, Documentation quality, Unit Testing, Continuous Integration, Object oriented programming"
6-
SimonMolinsky,,,,,,,,,
7-
ab93,yes,Avik,Basu,USA,California,"Mac, Linux","NLP, text analysis, Linguistics, Mathematics, Statistics, ML, AI, Computer sciences, Education","Deep Learning, time series, industry data science, deep unsupervised learning, ML in finance ","Data visualization, Data munging, Python package structure, Documentation quality, Unit Testing, Continuous Integration, Object oriented programming, Web API's, Docker, Tool usability / accessibility, Python best practices"
8-
banesullivan,yes,Bane,Sullivan,United States,California,Mac,"Spatial data, spatial analysis, GIS, Geosciences / earth science, 3D visualization","Remote sensing of the environment and subsurface, developer advocacy, data science, 3D visualization","Data visualization, Python package structure, Documentation quality, Unit Testing, Continuous Integration, Object oriented programming, Web API's, Docker, Tool usability / accessibility"
9-
cmarmo,yes,Chiara,Marmo,USA,Hawaii,Linux,"Spatial data, spatial analysis, GIS, Space sciences, Geosciences / earth science, Astronomy","Data processing in Astronomy, Planetary Sciences, Geospatial data. Standard development, interoperability.","Data extraction & retrieval, Data munging, Data deposition, Documentation quality, Continuous Integration"
10-
coatless,yes,James,Balamuta,United States,California,"Mac, Linux","NLP, text analysis, Spatial data, spatial analysis, GIS, Mathematics, Statistics, ML, AI, Computer sciences, Bioinformatics, Education","Latent variable modeling, restricted latent class models, deep learning, computational statistics, psychometrics, item response theory, biostatistics, genomics","Data visualization, Data extraction & retrieval, Data munging, Data deposition, Python package structure, Documentation quality, Unit Testing, Continuous Integration, Object oriented programming, Web API's, Web scraping, Security, Docker, Tool usability / accessibility"
11-
crhea93,,,,,,,,,
12-
ctb,,,,,,,,,
13-
dhomeier,yes,Derek,Homeier,Germany,Lower Saxony,"Mac, Linux","Physics, Atmospheric sciences, Space sciences, Astrophysics","scientific data analysis, spectroscopy, atmospheric simulations","Data visualization, Data extraction & retrieval, Python package structure, Documentation quality, Unit Testing"
14-
eliotwrobson,yes,Eliot,Robson,United States,Illinois,"Windows, Linux","Mathematics, Computer sciences, Education","Algorithms, specifically involving randomness, geometry, and graph theory.","Data visualization, Data extraction & retrieval, Data munging, Python package structure, Documentation quality, Unit Testing, Continuous Integration, Object oriented programming"
15-
hamogu,yes,Hans Moritz,Günther,USA,MA,"Mac, Linux","Physics, Astronomy","Astronomy wit ha focus on star formation and high-energy observations, also instrument development","Data visualization, Data extraction & retrieval, Data munging, Data deposition, Python package structure, Documentation quality, Unit Testing, Continuous Integration, Object oriented programming"
16-
isabelizimm,yes,Isabel,Zimmerman,USA,Florida,Mac,"Statistics, ML, AI, Computer sciences",building IDEs and MLOps Python frameworks,"Data visualization, Data extraction & retrieval, Python package structure, Documentation quality, Continuous Integration"
17-
jonas-eschle,,,,,,,,,
18-
mjhajharia,,,,,,,,,
19-
shirubana,yes,Silvana,Ovaitt,United States,Colorado,"Windows, Linux","Energy, Solar Energy, Spectra, Light","Photovoltaic optical and electrical modeling, and other renewable energy models","Data munging, Python package structure, Documentation quality, Tool usability / accessibility"
20-
slobentanzer,,,,,,,,,
21-
sneakers-the-rat,yes,Jonny,Saunders,US,CA,"Mac, Linux","NLP, text analysis, Linguistics, Ecology / Biology, Bioinformatics, Bibliometrics (Library science, scientific literature access), Social Sciences","Formerly auditory neuroscience, animal models of phonetics. Realtime experimental hardware/software, low-resource computing, data modeling and schema creation. Currently peer-to-peer social/data systems.","Data visualization, Data extraction & retrieval, Data munging, Data deposition, Python package structure, Documentation quality, Unit Testing, Continuous Integration, Object oriented programming, Web API's, Web scraping, Security, Tool usability / accessibility"
22-
tkoyama010,yes,Tetsuo,Koyama,Japan,Tokyo,Linux,"Physics, Mathematics",Scientific computing,"Data visualization, Python package structure, Documentation quality, Unit Testing, Continuous Integration, Object oriented programming, Tool usability / accessibility"
23-
yeelauren,yes,Lauren,Yee,Canada,Ontario,"Windows, Mac, Linux","Spatial data, spatial analysis, GIS, Statistics, ML, AI, Ecology / Biology, Epidemiology, Geosciences / earth science","data scientist, consultant, machine learning and remote sensing, ecology based projects, computer vision, deep learning","Data visualization, Data extraction & retrieval, Data munging, Documentation quality, Web scraping, Docker, Tool usability / accessibility"
1+
gh_username,active,first_name,last_name,country,state,OS,Domain_areas,Description,technical_areas
2+
ab93,yes,Avik,Basu,United States,California,"Mac, Linux","NLP, text analysis, Linguistics, Mathematics, Statistics, ML, AI, Computer sciences, Education","Deep Learning, time series, industry data science, deep unsupervised learning, ML in finance ","Data visualization, Data munging, Python package structure, Documentation quality, Unit Testing, Continuous Integration, Object oriented programming, Web API's, Docker, Tool usability / accessibility, Python best practices"
3+
banesullivan,yes,Bane,Sullivan,United States,California,Mac,"Spatial data, spatial analysis, GIS, Geosciences / earth science, 3D visualization","Remote sensing of the environment and subsurface, developer advocacy, data science, 3D visualization","Data visualization, Python package structure, Documentation quality, Unit Testing, Continuous Integration, Object oriented programming, Web API's, Docker, Tool usability / accessibility"
4+
batalex,yes,Alexandre,Batisse,France,,,"Statistics, ML, AI, Computer sciences, Bioinformatics","I work as a Data Scientist on health care data. I conduct epidemiology studies and maintain private packages (analytics, dataviz).","Data visualization, Data extraction & retrieval, Data munging, Python package structure, Documentation quality, Unit Testing, Continuous Integration, Object oriented programming, Web API's, Docker"
5+
cmarmo,yes,Chiara,Marmo,United States,Hawaii,Linux,"Spatial data, spatial analysis, GIS, Space sciences, Geosciences / earth science, Astronomy","Data processing in Astronomy, Planetary Sciences, Geospatial data. Standard development, interoperability.","Data extraction & retrieval, Data munging, Data deposition, Documentation quality, Continuous Integration"
6+
coatless,yes,James,Balamuta,United States,California,"Mac, Linux","NLP, text analysis, Spatial data, spatial analysis, GIS, Mathematics, Statistics, ML, AI, Computer sciences, Bioinformatics, Education","Latent variable modeling, restricted latent class models, deep learning, computational statistics, psychometrics, item response theory, biostatistics, genomics","Data visualization, Data extraction & retrieval, Data munging, Data deposition, Python package structure, Documentation quality, Unit Testing, Continuous Integration, Object oriented programming, Web API's, Web scraping, Security, Docker, Tool usability / accessibility"
7+
crhea93,yes,Carter,Rhea,Canada,,,"NLP, text analysis, Spatial data, spatial analysis, GIS, Physics, Mathematics, Statistics, ML, AI, Computer sciences, Hydrology, Space sciences, Geosciences / earth science",Astronomical Image and Spectral Pipeline and Analysis,"Data visualization, Data extraction & retrieval, Documentation quality, Unit Testing, Web API's, Tool usability / accessibility"
8+
ctb,yes,Titus,,,,,,,
9+
eliotwrobson,yes,Eliot,Robson,United States,Illinois,"Windows, Linux","Mathematics, Computer sciences, Education","Algorithms, specifically involving randomness, geometry, and graph theory.","Data visualization, Data extraction & retrieval, Data munging, Python package structure, Documentation quality, Unit Testing, Continuous Integration, Object oriented programming"
10+
hamogu,yes,Hans Moritz,Günther,United States,MA,"Mac, Linux","Physics, Astronomy","Astronomy wit ha focus on star formation and high-energy observations, also instrument development","Data visualization, Data extraction & retrieval, Data munging, Data deposition, Python package structure, Documentation quality, Unit Testing, Continuous Integration, Object oriented programming"
11+
haozeke,yes,Rohit,Goswami,Switzerland,Vaud,,"Physics, Chemistry, Mathematics, Statistics, ML, AI","Transition state searches, kinetic monte carlo, excited state calculations, heavy element (relativistic) calculations, Gaussian Process Regression, Bayesian Hierarchical models, Numerical lasing studies, molecular dynamics","Data visualization, Data extraction & retrieval, Data munging, Data deposition, Python package structure, Documentation quality, Unit Testing, Continuous Integration, Object oriented programming, Docker"
12+
jonas-eschle,yes,Jonas,Eschle,Switzerland,Geneva,,"Physics, Statistics, ML, AI",statistical analysis of physics at CERN,"Data visualization, Data extraction & retrieval, Python package structure, Documentation quality, Unit Testing, Continuous Integration, Object oriented programming"
13+
julimillan,Yes,Julieta,Millan,Argentina,Buenos Aires,,"Statistics, ML, AI, Ecology / Biology","Biology, neuroscience, industry data science","Data visualization, Data extraction & retrieval, Python package structure, Documentation quality, Object oriented programming, Tool usability / accessibility"
14+
mjhajharia,,Meenal,,,,,,,
15+
simonmolinsky,yes,Simon,Molinsky,,,,,,
16+
slobentanzer,,Sebastian,Lobentanzer,,,,,,
17+
tkoyama010,yes,Tetsuo,Koyama,Japan,Tokyo,Linux,"Physics, Mathematics",Scientific computing,"Data visualization, Python package structure, Documentation quality, Unit Testing, Continuous Integration, Object oriented programming, Tool usability / accessibility"
18+
yeelauren,yes,Lauren,Yee,Canada,Ontario,"Windows, Mac, Linux","Spatial data, spatial analysis, GIS, Statistics, ML, AI, Ecology / Biology, Epidemiology, Geosciences / earth science","data scientist, consultant, machine learning and remote sensing, ecology based projects, computer vision, deep learning","Data visualization, Data extraction & retrieval, Data munging, Documentation quality, Web scraping, Docker, Tool usability / accessibility"

_data/emeritus_editor_domains.csv

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
gh_username,active,first_name,last_name,country,state,OS,Domain_areas,Description,technical_areas
2+
isabelizimm,yes,Isabel,Zimmerman,USA,Florida,Mac,"Statistics, ML, AI, Computer sciences",building IDEs and MLOps Python frameworks,"Data visualization, Data extraction & retrieval, Python package structure, Documentation quality, Continuous Integration"
3+
lwasser,,,,,,,,,
4+
nimasarajpoor,,,,,,,,,
5+
sneakers-the-rat,yes,Jonny,Saunders,US,CA,"Mac, Linux","NLP, text analysis, Linguistics, Ecology / Biology, Bioinformatics, Bibliometrics (Library science, scientific literature access), Social Sciences","Formerly auditory neuroscience, animal models of phonetics. Realtime experimental hardware/software, low-resource computing, data modeling and schema creation. Currently peer-to-peer social/data systems.","Data visualization, Data extraction & retrieval, Data munging, Data deposition, Python package structure, Documentation quality, Unit Testing, Continuous Integration, Object oriented programming, Web API's, Web scraping, Security, Tool usability / accessibility"

peer-review/editorial-dashboard.qmd

Lines changed: 41 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ execute:
1010

1111
```{python}
1212
#| echo: false
13-
#|
13+
14+
# TODO: The next thing to add - now that we have a way to offboard is to list all editors that are running reviews and will be offboarded when the review is done. This would be people who are in the emeritus list that are also named on a review
15+
1416
import os
1517
from pathlib import Path
1618
@@ -62,7 +64,10 @@ label_map = {
6264
}
6365
6466
def get_active_status(labels):
65-
"""A function that returns an active status value based on a list of label values"""
67+
"""A function that returns an review status value based on a list of
68+
label values available in the issue.
69+
"""
70+
6671
for status, label_list in label_map.items():
6772
if any(label in labels for label in label_list):
6873
return status
@@ -96,50 +101,56 @@ reviews = reviews.rename(
96101
open_reviews = reviews[reviews["Date Closed"].isna()]
97102
open_reviews.drop(columns=["Date Closed","Unnamed: 0"], inplace=True)
98103
99-
```
100-
101-
```{python}
102-
# get editor team data
103-
editor_path = Path.cwd().parents[0] / "_data" / "editorial_team_domains.csv"
104-
editor_data = pd.read_csv(editor_path)
105-
editor_data = editor_data[["gh_username","first_name","Domain_areas","Description","technical_areas"]]
106-
all_editors_df = editor_data[["gh_username"]].rename(columns={"gh_username": "editor"})
107-
108-
# Get busy editors
109-
busy_editors = open_reviews.loc[open_reviews.editor != "TBD", ["editor"]].value_counts().reset_index()
104+
editors = open_reviews["editor"].astype(str).str.split().str[0]
105+
editors = editors[editors != "TBD"]
110106
107+
active_editor_counts = (
108+
editors.value_counts()
109+
.rename_axis("gh_username")
110+
.reset_index(name="count")
111+
)
111112
```
112113

114+
113115
```{python}
114-
#| echo: false
115-
all_editor_activity = all_editors_df.merge(busy_editors, on="editor", how="outer").fillna(0)
116+
# Open editor team data
117+
# The total list is derived from the scripts/editors.py script which parses the (active) editorial team data.
116118
117-
all_editor_activity["count"]= all_editor_activity["count"].astype(int)
118-
all_editor_activity.sort_values(by="count", inplace=True)
119-
all_editor_activity = all_editor_activity.reset_index(drop=True)
119+
editor_path = Path.cwd().parents[0] / "_data" / "editorial_team_domains.csv"
120+
all_editors = pd.read_csv(editor_path)
121+
all_editors = all_editors[["gh_username","first_name","Domain_areas","Description","technical_areas"]]
120122
121-
# Get counts of available and unavailable editors
122-
available_editors = all_editor_activity[all_editor_activity["count"] == 0]
123-
all_busy_editors = all_editor_activity[all_editor_activity["count"] != 0]
123+
editor_activity = (
124+
all_editors.merge(active_editor_counts, on="gh_username", how="left")
125+
.fillna({"count": 0})
126+
)
127+
editor_activity["count"] = editor_activity["count"].astype(int)
128+
editor_activity = editor_activity.sort_values(by="count", ascending=False).reset_index(drop=True)
124129
130+
# Get counts of available and busy editors
131+
available_editors = editor_activity[editor_activity["count"] == 0]
132+
busy_editors = editor_activity[editor_activity["count"] != 0]
125133
num_available_editors = len(available_editors)
126-
available_editors = available_editors.merge(editor_data, left_on="editor", right_on="gh_username", how="inner")
127134
128-
available_editors = available_editors.rename(columns={"count": "review count"})
129-
available_editors = available_editors[["editor", "review count", "Domain_areas", "Description", "technical_areas", "first_name"]]
135+
# Rename and cleanup
136+
editor_activity=editor_activity.rename(columns={"count": "active review count"})
137+
col = editor_activity.pop("active review count")
138+
editor_activity.insert(1, "active review count", col)
139+
130140
```
131141

132142

143+
133144
## Row {height=.5%}
134145

135146
```{python}
136147
#| content: valuebox
137148
#| title: "Total Editors"
138149
139150
dict(
140-
icon = "box2-heart",
151+
icon = "people-fill",
141152
color = "primary",
142-
value = len(all_editors_df)
153+
value = len(all_editors)
143154
)
144155
```
145156

@@ -148,7 +159,7 @@ dict(
148159
#| title: "Busy Editors"
149160
# fails if the value isn't an int
150161
dict(
151-
icon = "person-hearts",
162+
icon = "box2-heart",
152163
color = "primary",
153164
value = len(busy_editors)
154165
)
@@ -167,10 +178,8 @@ dict(
167178

168179
## Row {height=1%}
169180
```{python}
170-
#| title: "pyOpenSci Editorial Team"
171-
print("Note: the total editor count is currently incorrect-we should open an issue.")
172-
173-
show(editor_data)
181+
#| title: "pyOpenSci Active Editorial Team"
182+
show(editor_activity)
174183
```
175184

176185
## Row {height=1%}
@@ -193,7 +202,6 @@ show(available_editors)
193202
194203
# Get a list of all editors over time that have supported pyOpenSci
195204
ignore_editors = ["TBD"]
196-
ignore_editors += ["lwasser", "xmnlab"]
197205
editors = [
198206
editor
199207
for editor in pd.unique(reviews.editor)
@@ -289,7 +297,7 @@ fig = px.bar(
289297
facet_col_wrap=facet_wrap,
290298
color_discrete_sequence=["indigo"],
291299
labels={"count": "Number of edits", "QuarterLabel": "Quarter"},
292-
title="Editor activity by quarter",
300+
title="Editor Activity by Quarter (Current Editor Team)",
293301
height=row_height * num_rows,
294302
width=1200,
295303
)

0 commit comments

Comments
 (0)