diff --git a/.gitignore b/.gitignore index 57e2df9..3b5a8fe 100644 --- a/.gitignore +++ b/.gitignore @@ -68,3 +68,6 @@ CLAUDE.md node_modules/ test-pu **/*.quarto_ipynb + +# data +raw_data.csv diff --git a/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/execute-results/html.json b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/execute-results/html.json new file mode 100644 index 0000000..c477006 --- /dev/null +++ b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/execute-results/html.json @@ -0,0 +1,17 @@ +{ + "hash": "28fb910addfc461a6f6338a5ae4c7fea", + "result": { + "engine": "knitr", + "markdown": "---\ntitle: \"ds4owd-002 Registration: Per-Variable Exploratory Analysis\"\ndescription: A systematic, variable-by-variable exploratory analysis of the registration data for the Data Science for Open WASH Data (ds4owd-002) course. Each variable is summarised briefly and accompanied by a frequency plot, followed by two observations and one implication for the course.\ncategories:\n - academy\n - open data\n - learning\n - data science\n - R\nauthor:\n - name: \"Adriana Clavijo Daza\"\n url: https://openwashdata.org/about/adriana/\n affiliation: Global Health Engineering, ETH Zurich\n affiliation_url: https://ghe.ethz.ch/\n orcid: 0009-0002-0589-2274\ndate: \"2025-09-01\"\ndraft: true\nimage: \"OWD-logo-20.svg\"\nimage-alt: \"openwashdata logo\"\ntoc: true\ntoc-depth: 3\n---\n\n\n\n\n::: {.cell}\n\n:::\n\n\n\n::: {.cell}\n\n:::\n\n\nThis analysis walks through the registration data for the **Data Science for Open WASH Data (ds4owd-002)** course one variable at a time. After de-duplicating by GitHub username, the dataset contains **196 participants**. For each variable we give a one-line summary, a frequency plot, and then two observations plus one implication for the course.\n\nA note on coverage: identifiers and free-text fields (names, emails, ORCID, open-ended goals) are summarised by completeness rather than plotted, because they are not categorical. Consent fields that every participant answered identically are reported as a single line. Everything else is plotted.\n\n# Identity and contact\n\nThese five text fields identify the participant. They are not plotted (they contain personal data), but their completeness is a useful data-quality check.\n\n\n::: {#tbl-identity .cell}\n::: {.cell-output-display}\n\n\n|Field | Provided| %|\n|:---------------|--------:|---:|\n|github_username | 196| 100|\n|orcid_id | 196| 100|\n|email | 196| 100|\n|first_name | 196| 100|\n|surname | 196| 100|\n\n\n:::\n:::\n\n\nAll five identity fields are complete for every participant, which means each registration can be linked to a GitHub account and an ORCID. This is the foundation the course relies on for issuing per-participant homework repositories and for crediting contributors.\n\n# Demographics\n\n## Gender\n\nParticipants selected their gender from a fixed list, with options to prefer not to say or self-describe.\n\n\n::: {.cell}\n::: {.cell-output-display}\n![](analysis_files/figure-html/plot-gender-1.png){width=672}\n:::\n:::\n\n\n- Men are the largest group at 115 participants, against 75 women, so men outnumber women by roughly three to two.\n- Only four participants preferred not to say, and no one self-described, so almost the entire sample falls into the two main categories.\n- *Implication:* female participation at about 39% is strong for a data-science course, and worth protecting through deliberately inclusive examples, group composition, and facilitation.\n\n## Self-described gender\n\nA free-text field offered to anyone who preferred to self-describe their gender.\n\n\n::: {#tbl-gender-self .cell}\n\n:::\n\n\n0 participants used the self-describe field. No frequency plot is shown because the field is empty across the dataset.\n\nBecause nobody used the self-describe option, the three fixed gender categories capture the full sample. The course can report gender with the standard categories without needing to handle additional free-text values.\n\n## Age group\n\nParticipants reported their age band.\n\n\n::: {.cell}\n::: {.cell-output-display}\n![](analysis_files/figure-html/plot-age-1.png){width=672}\n:::\n:::\n\n\n- The 25-34 band dominates with 92 participants, and together with 35-44 (53) the two early-career bands account for nearly three quarters of the sample.\n- The tails are thin: only five participants are 55 or older, and 25 are in the youngest 18-24 band.\n- *Implication:* pacing and examples can target working-age early-career professionals, while keeping the small number of older and younger learners in mind so nobody is left behind.\n\n## Accessibility needs\n\nParticipants indicated whether they have accessibility needs the course should accommodate.\n\n\n::: {.cell}\n::: {.cell-output-display}\n![](analysis_files/figure-html/plot-accessibility-1.png){width=672}\n:::\n:::\n\n\n- The overwhelming majority (182) report no accessibility needs, with only three answering yes and one preferring not to say.\n- The yes group is small enough to support individually rather than through aggregate design changes.\n- *Implication:* the course can reach out personally to the three participants with stated needs, while still applying universal-design basics (captions, readable fonts, keyboard-friendly materials) for everyone.\n\n## Accessibility specification\n\nA free-text field for participants who answered yes to accessibility needs.\n\n\n::: {#tbl-accessibility-spec .cell}\n\n:::\n\n\n2 participants specified an accessibility need. Given the very small number, the entries are reviewed individually by the course team rather than plotted.\n\nThe small number of specified needs means individual accommodation is practical: the course team can read each entry and respond personally rather than designing for aggregate patterns.\n\n## Country of residence\n\nParticipants selected their country of residence. The plot shows the top 12 of 44 countries represented.\n\n\n::: {.cell}\n::: {.cell-output-display}\n![](analysis_files/figure-html/plot-country-1.png){width=672}\n:::\n:::\n\n\n- African countries lead the ranking: Nigeria (25), Uganda (16), Ghana (15), and a three-way tie between South Africa, Malawi, and Ethiopia at 13 each.\n- Switzerland (19) is the second-largest single country, reflecting the course's ETH Zurich base, while the long tail spreads across 44 countries in total.\n- *Implication:* the strong African and globally distributed cohort means scheduling, time zones, and WASH examples should centre low- and middle-income contexts rather than a single region.\n\n## Education level\n\nParticipants reported their highest completed education level.\n\n\n::: {.cell}\n::: {.cell-output-display}\n![](analysis_files/figure-html/plot-education-1.png){width=672}\n:::\n:::\n\n\n- The cohort is highly educated: 102 hold a master's degree and 31 a doctorate, so two thirds already have a postgraduate qualification.\n- Below bachelor level is almost empty, with only two participants each at upper-secondary and postsecondary non-tertiary.\n- *Implication:* materials can assume comfort with academic reading and reasoning, while the few participants without a tertiary degree may need extra scaffolding on foundational concepts.\n\n## Employment situation\n\nParticipants reported their current employment situation.\n\n\n::: {.cell}\n::: {.cell-output-display}\n![](analysis_files/figure-html/plot-employment-1.png){width=672}\n:::\n:::\n\n\n- Employed full-time is the largest group at 92, with students (41) and people unemployed and looking for work (30) the next two.\n- A meaningful minority is not in stable employment: 30 unemployed-and-looking plus 41 students means many participants are studying alongside other commitments.\n- *Implication:* the substantial full-time-employed share argues for evening or flexible scheduling, while the unemployed-and-looking group suggests the course also has a clear career-development draw worth supporting with portfolio-friendly outputs.\n\n## Organisation name\n\nA free-text field for the participant's organisation, asked of those employed or self-employed.\n\n\n::: {#tbl-org-name .cell}\n\n:::\n\n\n119 of 196 participants (61%) named an organisation. This open field is not plotted; the structured `org_type` variable below summarises the same information categorically.\n\nAbout six in ten participants named an organisation, consistent with the share who are employed or self-employed. The structured `org_type` field is the better basis for analysis, while the free-text names are useful for partnership outreach.\n\n## Organisation type\n\nParticipants who named an organisation classified its type. Participants who are students or not employed were not asked, so this field is blank for them.\n\n\n::: {.cell}\n::: {.cell-output-display}\n![](analysis_files/figure-html/plot-orgtype-1.png){width=672}\n:::\n:::\n\n\n- Among those who named an organisation type, academia (42) and NGOs (38) are almost level and together dominate.\n- Private sector (15), government (10), and multilateral organisations (5) make up a smaller but real practitioner presence.\n- *Implication:* the strong academia-plus-NGO mix means examples should bridge research and field practice, since many participants will apply skills to programme data rather than only to academic studies.\n\n# Barriers to participation\n\nParticipants rated six potential barriers on a three-point scale (not a barrier, a barrier, don't know). The faceted plot shows all six together.\n\n\n::: {.cell}\n::: {.cell-output-display}\n![](analysis_files/figure-html/plot-barriers-1.png){width=864}\n:::\n:::\n\n\n- Infrastructure is rarely the problem: access to a computer (191), electricity (179), supervisor support (176), and stable internet (170) are \"not a barrier\" for the large majority.\n- The two human-resource constraints stand out: time availability is a barrier for 42 participants and a second screen for 56, far more than any infrastructure item.\n- *Implication:* the biggest risk to completion is time, not connectivity, so short modular sessions, recordings, and single-screen-friendly layouts will help more than assuming hardware gaps.\n\n# Programming experience\n\n## General, R, and Python experience\n\nParticipants rated their experience separately for programming in general, R, and Python, on the same four-point scale.\n\n\n::: {.cell}\n::: {.cell-output-display}\n![](analysis_files/figure-html/plot-programming-1.png){width=864}\n:::\n:::\n\n\n- R and Python experience is genuinely low: about 100 participants have none in each, and only three to four have maintained larger software in any language.\n- General programming experience is slightly higher than language-specific experience, with 85 having written a few lines and 44 having written programs for own use, so some transferable coding intuition exists even where R and Python are new.\n- *Implication:* the course should be taught as a true introduction to R, assuming no prior R or Python, while occasionally acknowledging the minority with general coding background so they stay engaged.\n\n## Other programming languages\n\nA select-multiple field for any other languages or tools participants have used.\n\n\n::: {.cell}\n::: {.cell-output-display}\n![](analysis_files/figure-html/plot-languages-1.png){width=672}\n:::\n:::\n\n\n- The most common answer is \"none of the above\" (71), confirming many participants bring no other programming language at all.\n- Among those who do, the tools are statistical and data-oriented rather than general-purpose software languages: SQL (53), SPSS (50), and STATA (34) lead, well ahead of C++ (31) or JavaScript (21).\n- *Implication:* the strong SPSS and STATA presence signals a cohort migrating from point-and-click statistics software, so framing R as a reproducible alternative to those familiar tools will resonate.\n\n# Version control and workflow\n\n## Git experience\n\nParticipants rated their experience with Git.\n\n\n::: {.cell}\n::: {.cell-output-display}\n![](analysis_files/figure-html/plot-git-1.png){width=672}\n:::\n:::\n\n\n- A clear majority (131, about two thirds) have never used Git, and only 18 use it regularly or extensively.\n- The experienced tail is very thin: just five participants have used Git extensively for collaborative development.\n- *Implication:* Git must be taught from absolute basics with generous hand-holding, since version control will be unfamiliar to most and is a common early stumbling block.\n\n## GitHub experience\n\nParticipants rated their experience with GitHub.\n\n\n::: {.cell}\n::: {.cell-output-display}\n![](analysis_files/figure-html/plot-github-1.png){width=672}\n:::\n:::\n\n\n- GitHub mirrors Git: 117 have never used it, while 58 have only viewed or downloaded repositories.\n- Active use is rare, with 17 regularly managing their own repositories and just four using GitHub for collaboration.\n- *Implication:* because the course relies on per-participant GitHub repositories for homework, onboarding to GitHub (accounts, cloning, pushing) needs dedicated early sessions rather than being assumed.\n\n## Data storage format\n\nParticipants reported the format in which they usually store data.\n\n\n::: {.cell}\n::: {.cell-output-display}\n![](analysis_files/figure-html/plot-dataformat-1.png){width=672}\n:::\n:::\n\n\n- Spreadsheets dominate overwhelmingly: 148 participants store data in Excel or Google Sheets, more than four times the next option.\n- Only 34 use machine-readable files such as CSV or JSON, and just eight use a database, so structured open formats are the exception.\n- *Implication:* a core teaching opportunity is the move from spreadsheets to tidy, machine-readable data, which is exactly the open-data habit the course aims to build.\n\n## Narrative documents\n\nParticipants reported how they usually write documents that combine narrative and code output.\n\n\n::: {.cell}\n::: {.cell-output-display}\n![](analysis_files/figure-html/plot-narrative-1.png){width=672}\n:::\n:::\n\n\n- Word processors without code are the norm (137), and another 43 copy and paste code output into Word or Google Docs.\n- Literate programming with R Markdown, Quarto, or Jupyter is rare, used by only nine participants.\n- *Implication:* most participants manually move results between code and documents, so introducing Quarto for reproducible reporting addresses a clear and widespread gap.\n\n# Tooling\n\n## IDEs used\n\nA select-multiple field for the integrated development environments (IDEs) participants have used.\n\n\n::: {.cell}\n::: {.cell-output-display}\n![](analysis_files/figure-html/plot-ide-1.png){width=672}\n:::\n:::\n\n\n- RStudio is already the most-used environment at 86, a helpful head start given the course is R-based, with Jupyter Notebook (60) and VS Code (49) also common.\n- The second-largest bar is \"none of the above\" (72), so a large group has used no IDE at all and will be installing one for the first time.\n- *Implication:* RStudio is a natural default the course can standardise on, but setup support must assume a sizeable share are starting from zero IDE experience.\n\n## IDE experience\n\nParticipants rated their overall experience with IDEs.\n\n\n::: {.cell}\n::: {.cell-output-display}\n![](analysis_files/figure-html/plot-ide-exp-1.png){width=672}\n:::\n:::\n\n\n- Despite RStudio being widely listed above, 103 participants say they have never used an IDE, suggesting much of that exposure is shallow or one-off.\n- Only 36 use an IDE regularly or extensively, so confident day-to-day IDE use is the minority.\n- *Implication:* time spent on the basics of the RStudio interface (panes, running code, projects) is well justified, since reported familiarity is low even where the tool name is recognised.\n\n## Command-line interface usage\n\nParticipants rated their use of the command-line interface (CLI).\n\n\n::: {.cell}\n::: {.cell-output-display}\n![](analysis_files/figure-html/plot-cli-1.png){width=672}\n:::\n:::\n\n\n- More than half (109) have never used the command line, and another 67 only use it occasionally for basic tasks.\n- Regular or extensive CLI use is rare, with 13 and seven participants respectively.\n- *Implication:* terminal-based steps (installing tools, running Git commands) should be demonstrated slowly with copy-ready commands, because the command line is genuinely new territory for most participants.\n\n# Large language models and AI\n\n## LLM platforms used\n\nA select-multiple field for the LLM and AI platforms participants have used.\n\n\n::: {.cell}\n::: {.cell-output-display}\n![](analysis_files/figure-html/plot-llm-platforms-1.png){width=672}\n:::\n:::\n\n\n- ChatGPT is near-universal at 179, more than twice the next platform, Gemini (81), with Copilot for Microsoft 365 (63) third.\n- Coding-specific assistants are far less common: Copilot for IDEs reaches only 15 and Claude Code just nine, so most exposure is to general chat assistants rather than in-editor tools.\n- *Implication:* participants arrive familiar with chat-style AI but not with AI integrated into coding workflows, which is exactly the gap the planned \"AI for coding support\" module can fill.\n\n## LLM usage by purpose\n\nParticipants rated how often they use LLMs for nine purposes, on a four-point frequency scale.\n\n\n::: {.cell}\n::: {.cell-output-display}\n![](analysis_files/figure-html/plot-llm-freq-1.png){width=864}\n:::\n:::\n\n\n- Question answering and summarization are the most embedded uses, with the smallest \"never\" shares and the largest regular-plus-rely segments.\n- Task automation is the least adopted purpose, where \"never\" covers the clear majority, and code assistance also leans heavily toward never or only occasional use.\n- *Implication:* participants already trust LLMs for understanding and condensing text, so the course can build on that comfort while deliberately teaching the less-familiar coding and automation uses where the gap is largest.\n\n# Digital habits\n\n## Password storage\n\nParticipants reported how they usually store their passwords.\n\n\n::: {.cell}\n::: {.cell-output-display}\n![](analysis_files/figure-html/plot-password-1.png){width=672}\n:::\n:::\n\n\n- A majority (113) use a password manager, which is encouraging for a cohort that will manage GitHub and other accounts.\n- A real risk remains, though: 45 store passwords nowhere, 25 keep them in unprotected files, and 13 on paper, so about four in ten have no secure storage.\n- *Implication:* because the course requires creating and reusing several logins, a short note on password managers and account security is a low-cost, high-value addition.\n\n## Web browser\n\nParticipants reported their main web browser.\n\n\n::: {.cell}\n::: {.cell-output-display}\n![](analysis_files/figure-html/plot-browser-1.png){width=672}\n:::\n:::\n\n\n- Google Chrome dominates at 130, more than five times Microsoft Edge (24) and Firefox (20).\n- The remaining browsers are minor, and only one participant fell outside the predefined list.\n- *Implication:* any browser-specific guidance (extensions, developer tools, rendering tips) can safely default to Chrome while noting the Firefox and Safari minorities.\n\n## Other browser\n\nA free-text field for browsers not on the list.\n\n\n::: {#tbl-browser-other .cell}\n\n:::\n\n\n1 participant used the other-browser field, so it is not plotted. The fixed browser list above covers essentially the whole sample.\n\nAlmost nobody needed the free-text browser option, confirming the predefined list is comprehensive. Browser choice is dominated by mainstream options, which simplifies any browser-specific setup guidance the course provides.\n\n## Bookmark use\n\nParticipants reported whether they use browser bookmarks.\n\n\n::: {.cell}\n::: {.cell-output-display}\n![](analysis_files/figure-html/plot-bookmarks-1.png){width=672}\n:::\n:::\n\n\n- A clear majority (150) use browser bookmarks, against 46 who do not.\n- The roughly three-to-one split suggests most participants already organise online resources in some way.\n- *Implication:* sharing course links as a curated bookmark set or resource page fits how most participants already work and will likely be used.\n\n## Note-taking tool use\n\nParticipants reported whether they use a dedicated note-taking tool.\n\n\n::: {.cell}\n::: {.cell-output-display}\n![](analysis_files/figure-html/plot-notetaking-1.png){width=672}\n:::\n:::\n\n\n- Most participants (135) do not use a dedicated note-taking tool, with only 61 who do.\n- This is the inverse of the bookmark pattern: organising links is common, but structured note-taking is not.\n- *Implication:* the course should not assume a note-taking habit, and could gently model lightweight ways to keep code notes (for example, comments and Quarto documents) as part of building reproducible workflows.\n\n## Note-taking tool specified\n\nA free-text field for the specific note-taking tool used.\n\n\n::: {#tbl-notetaking-spec .cell}\n\n:::\n\n\n61 participants named a specific note-taking tool. As an open field with many distinct answers, it is summarised by completeness rather than plotted.\n\nRoughly a third of participants named a specific note-taking tool, matching the share who reported using one. The variety of named tools means the course should stay tool-agnostic when suggesting note-taking workflows.\n\n# Goals and consent\n\n## Learning goals\n\nA free-text field where every participant described what they want to learn.\n\n\n::: {#tbl-goals .cell}\n\n:::\n\n\nAll 196 participants wrote a learning goal. This open field is not plotted; it is best read directly to shape course content, and is a strong signal of motivation.\n\nFull completion of the open-ended goals field shows participants are engaged and willing to articulate what they want. These free-text goals are the richest qualitative input the course has for tailoring examples and exercises to participant intent.\n\n## Data availability\n\nParticipants reported whether they can identify a WASH dataset to work with.\n\n\n::: {.cell}\n::: {.cell-output-display}\n![](analysis_files/figure-html/plot-dataavail-1.png){width=672}\n:::\n:::\n\n\n- A majority (115) can already identify a WASH dataset to work with, but a substantial 81 cannot.\n- That roughly three-to-two split means a sizeable group will need a dataset provided to them to complete hands-on work.\n- *Implication:* the course should curate a few ready-to-use open WASH datasets so the 81 without their own data are not blocked during practical exercises.\n\n## Mentorship interest\n\nParticipants reported their interest in the mentorship programme.\n\n\n::: {.cell}\n::: {.cell-output-display}\n![](analysis_files/figure-html/plot-mentorship-1.png){width=672}\n:::\n:::\n\n\n- Interest in being a mentee is very high (161), while only 20 are not interested at all.\n- The mentor pool is small at 15, far short of the mentee demand.\n- *Implication:* the strong appetite for mentorship is a real asset, but the roughly ten-to-one mentee-to-mentor ratio means mentoring should likely be group-based or peer-supported rather than one-to-one.\n\n## Co-authorship agreement\n\nParticipants indicated whether they agree to be listed as a co-author on shared outputs.\n\n\n::: {.cell}\n::: {.cell-output-display}\n![](analysis_files/figure-html/plot-coauthorship-1.png){width=672}\n:::\n:::\n\n\n- The vast majority (177) agree to co-authorship on shared outputs, with only one declining outright.\n- A small group of 18 want more information before committing, so they are open rather than opposed.\n- *Implication:* there is broad willingness to be credited on collaborative outputs, and a short explainer addressed to the 18 undecided participants would likely convert most of them.\n\n## Code of conduct and data privacy\n\nBoth consent fields were required to complete registration.\n\n\n::: {#tbl-consent .cell}\n::: {.cell-output-display}\n\n\n|Field | Agreed| %|\n|:---------------------|------:|---:|\n|Code of conduct (yes) | 196| 100|\n|Data privacy (yes) | 196| 100|\n\n\n:::\n:::\n\n\nEvery participant agreed to both the code of conduct and the data privacy terms, which is expected because both were required to submit the form. This gives the course a complete consent record covering all 196 participants, with no follow-up needed before sharing materials or processing data.\n", + "supporting": [ + "analysis_files" + ], + "filters": [ + "rmarkdown/pagebreak.lua" + ], + "includes": {}, + "engineDependencies": {}, + "preserve": {}, + "postProcess": true + } +} \ No newline at end of file diff --git a/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-accessibility-1.png b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-accessibility-1.png new file mode 100644 index 0000000..b0d44f3 Binary files /dev/null and b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-accessibility-1.png differ diff --git a/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-age-1.png b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-age-1.png new file mode 100644 index 0000000..e670116 Binary files /dev/null and b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-age-1.png differ diff --git a/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-barriers-1.png b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-barriers-1.png new file mode 100644 index 0000000..1fc47c5 Binary files /dev/null and b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-barriers-1.png differ diff --git a/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-bookmarks-1.png b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-bookmarks-1.png new file mode 100644 index 0000000..50fc03b Binary files /dev/null and b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-bookmarks-1.png differ diff --git a/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-browser-1.png b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-browser-1.png new file mode 100644 index 0000000..5642fb6 Binary files /dev/null and b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-browser-1.png differ diff --git a/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-cli-1.png b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-cli-1.png new file mode 100644 index 0000000..0edd7c4 Binary files /dev/null and b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-cli-1.png differ diff --git a/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-coauthorship-1.png b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-coauthorship-1.png new file mode 100644 index 0000000..1ef38c0 Binary files /dev/null and b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-coauthorship-1.png differ diff --git a/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-country-1.png b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-country-1.png new file mode 100644 index 0000000..d687f3a Binary files /dev/null and b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-country-1.png differ diff --git a/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-dataavail-1.png b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-dataavail-1.png new file mode 100644 index 0000000..fb8f913 Binary files /dev/null and b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-dataavail-1.png differ diff --git a/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-dataformat-1.png b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-dataformat-1.png new file mode 100644 index 0000000..4aab76c Binary files /dev/null and b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-dataformat-1.png differ diff --git a/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-education-1.png b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-education-1.png new file mode 100644 index 0000000..4b93a40 Binary files /dev/null and b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-education-1.png differ diff --git a/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-employment-1.png b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-employment-1.png new file mode 100644 index 0000000..05d89ef Binary files /dev/null and b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-employment-1.png differ diff --git a/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-gender-1.png b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-gender-1.png new file mode 100644 index 0000000..f52c036 Binary files /dev/null and b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-gender-1.png differ diff --git a/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-git-1.png b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-git-1.png new file mode 100644 index 0000000..84fec3d Binary files /dev/null and b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-git-1.png differ diff --git a/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-github-1.png b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-github-1.png new file mode 100644 index 0000000..901569b Binary files /dev/null and b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-github-1.png differ diff --git a/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-ide-1.png b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-ide-1.png new file mode 100644 index 0000000..258b56d Binary files /dev/null and b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-ide-1.png differ diff --git a/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-ide-exp-1.png b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-ide-exp-1.png new file mode 100644 index 0000000..727877d Binary files /dev/null and b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-ide-exp-1.png differ diff --git a/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-languages-1.png b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-languages-1.png new file mode 100644 index 0000000..30a8213 Binary files /dev/null and b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-languages-1.png differ diff --git a/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-llm-freq-1.png b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-llm-freq-1.png new file mode 100644 index 0000000..3c4c591 Binary files /dev/null and b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-llm-freq-1.png differ diff --git a/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-llm-platforms-1.png b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-llm-platforms-1.png new file mode 100644 index 0000000..17e7c0c Binary files /dev/null and b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-llm-platforms-1.png differ diff --git a/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-mentorship-1.png b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-mentorship-1.png new file mode 100644 index 0000000..84741aa Binary files /dev/null and b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-mentorship-1.png differ diff --git a/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-narrative-1.png b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-narrative-1.png new file mode 100644 index 0000000..d36a495 Binary files /dev/null and b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-narrative-1.png differ diff --git a/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-notetaking-1.png b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-notetaking-1.png new file mode 100644 index 0000000..10e8540 Binary files /dev/null and b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-notetaking-1.png differ diff --git a/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-orgtype-1.png b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-orgtype-1.png new file mode 100644 index 0000000..278c15d Binary files /dev/null and b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-orgtype-1.png differ diff --git a/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-password-1.png b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-password-1.png new file mode 100644 index 0000000..9b462c0 Binary files /dev/null and b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-password-1.png differ diff --git a/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-programming-1.png b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-programming-1.png new file mode 100644 index 0000000..4d48c1e Binary files /dev/null and b/_freeze/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis/figure-html/plot-programming-1.png differ diff --git a/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis.qmd b/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis.qmd new file mode 100644 index 0000000..4b33d0e --- /dev/null +++ b/pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/analysis.qmd @@ -0,0 +1,771 @@ +--- +title: "ds4owd-002 Registration: Per-Variable Exploratory Analysis" +description: A systematic, variable-by-variable exploratory analysis of the registration data for the Data Science for Open WASH Data (ds4owd-002) course. Each variable is summarised briefly and accompanied by a frequency plot, followed by two observations and one implication for the course. +categories: + - academy + - open data + - learning + - data science + - R +author: + - name: "Adriana Clavijo Daza" + url: https://openwashdata.org/about/adriana/ + affiliation: Global Health Engineering, ETH Zurich + affiliation_url: https://ghe.ethz.ch/ + orcid: 0009-0002-0589-2274 +date: "2025-09-01" +draft: true +image: "OWD-logo-20.svg" +image-alt: "openwashdata logo" +toc: true +toc-depth: 3 +--- + +```{r} +#| label: setup +#| include: false + +# Set global options +knitr::opts_chunk$set( + echo = FALSE, + warning = FALSE, + message = FALSE +) + +# Load required libraries +library(tidyverse) +library(readxl) +library(here) + +# Define OWD color palette +owd_palette <- c("#5b195b", "#9b2c60", "#ce525b", + "#f08453", "#ffbd54", "#f9f871") + +background_color <- "#f5f5f2" +``` + +```{r} +#| label: load-data + +form_file <- here::here("pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/data/registration_form.xlsx") + +raw_data <- read_csv(here::here("pages/blog/posts/2025-09-01-ds4owd-002-registration-analysis/data/raw_data.csv")) + +# read in questionnaire and labels from XLS form +questionnaire <- read_xlsx(form_file, sheet = "survey") +label_dict <- read_xlsx(form_file, sheet = "choices") + +# de-duplicate by GitHub username (one row per participant) +registration_data <- raw_data |> + distinct(github_username, .keep_all = TRUE) + +n_participants <- nrow(registration_data) +``` + +```{r} +#| label: helper-functions + +# Look up the name -> label dictionary for a given choice list +label_for <- function(list_name) { + label_dict |> + filter(.data$list_name == !!list_name) |> + select(name, label) +} + +# Shared minimal theme using the OWD background colour +owd_theme <- function() { + theme_minimal() + + theme( + plot.background = element_rect(fill = background_color, color = NA), + panel.background = element_rect(fill = background_color, color = NA), + plot.title = element_text(face = "bold") + ) +} + +# Frequency bar plot for a single-choice (or any categorical) variable. +# `list_name` joins the choice dictionary to recover human-readable labels. +# `wrap` wraps long labels; `fill` selects an OWD palette colour. +plot_freq <- function(data, var, list_name = NULL, title = NULL, + fill = owd_palette[1], wrap = 30) { + tbl <- data |> + filter(!is.na(.data[[var]])) |> + count(.data[[var]], name = "n") + + if (!is.null(list_name)) { + tbl <- tbl |> + left_join(label_for(list_name), by = setNames("name", var)) |> + mutate(cat = coalesce(label, .data[[var]])) + } else { + tbl <- tbl |> mutate(cat = .data[[var]]) + } + + tbl <- tbl |> + mutate(cat = str_wrap(cat, wrap)) + + ggplot(tbl, aes(x = reorder(cat, n), y = n)) + + geom_col(fill = fill) + + geom_text(aes(label = n), hjust = -0.2, size = 3.3, fontface = "bold") + + coord_flip() + + labs(x = NULL, y = "Number of participants", title = title) + + owd_theme() + + scale_y_continuous(expand = expansion(mult = c(0, 0.15))) +} + +# Frequency bar plot for a select-multiple variable stored as one 0/1 +# column per option, named `prefix_