Python Vibe Coding Course — Part 5 (Final)
Upload to Zenodo and GitHub
This is the final part of the series. In Part 4 you created requirements.txt and ensured environmental reproducibility. As a finishing touch, this part explains how to upload your complete analysis package to Zenodo, GitHub, or similar services and publish it alongside your paper. Once published, anyone can access your analysis code and environment through the link in your paper and reproduce your figures on the spot. Journals requiring data and code availability — including PLOS ONE, Nature-family journals, and eLife — are growing rapidly, and this trend is increasingly reaching agronomy journals such as Field Crops Research.
Before diving into the technical steps, you must carefully consider when to open your data and code to the public. Making them publicly accessible too early risks losing priority or allowing others to publish a similar analysis first.
Rule of thumb: the safest time to publicly release data and code is after the paper has been formally published as a peer-reviewed article. Posting a preprint first does establish a timestamp, but risks remain even at the preprint stage (e.g., others may publish a similar analysis during peer review, or managing secondary use of data becomes harder). Switching from Private to Public only after acceptance or publication strikes a practical balance between the researcher's interests and open-science principles.
The recommended workflow during submission and peer review is as follows:
If the journal's policy requires data to be public at submission, follow the journal's instructions. Most journals allow a reviewer link during peer review and require Public access only at publication. When in doubt, confirm with the editor in advance.
Before publishing, tidy up the folder structure. Here is an example of an ideal layout:
my_first_analysis/
├── data/
│ └── sample_data.xlsx # Raw data
├── notebooks/
│ └── analysis.ipynb # Analysis script
├── results/
│ ├── scatter.png # Output figure
│ └── statistics.csv # Output data
├── requirements.txt # Environment file
├── README.md # Usage instructions
└── .gitignore # Files to exclude
Note: .venv/ is excluded via .gitignore (not published)
Separating raw data, analysis scripts, and results into distinct folders makes the structure immediately clear to anyone who opens it. You can also ask an LLM to help you reorganize the folder.
If your raw data contains personally identifiable information (e.g., human subject data), anonymize or process it into a shareable form before publishing. Do not publish data outside the scope of your ethics approval.
Several platforms exist for publishing research data and code. This course recommends the Zenodo + GitHub combination. It is also worth knowing the other options so you can respond flexibly to requirements from your institution or journal.
Research data archive operated by CERN (Europe). Every upload receives a DOI. zenodo.org
World's largest code sharing and version-control platform. Excellent for collaboration and ongoing updates. github.com
Research data repository closely integrated with Springer Nature journals. figshare.com
Operated by the Center for Open Science (US). Well-suited for managing entire projects. osf.io
Open-source platform originating from Harvard; often deployed by individual institutions. dataverse.org
Some fields have dedicated repositories that are strongly recommended.
Choose based on your target journal's requirements and your institution's policies. This course recommends the "Zenodo + GitHub" combination: maintain ongoing updates on GitHub, then at the time of publication link your GitHub repository to Zenodo to issue a DOI (described below).
Uploading to GitHub follows essentially the same steps as described in the separate article "Portfolio Website Build & Publish Guide for Researchers" using GitHub Desktop. Here is a brief overview:
my-first-analysis, set to Public)This creates a public URL at https://github.com/your-username/my-first-analysis. Anyone can visit this URL and download the folder via "Code → Download ZIP".
For the URL you include in your paper's Appendix, a Zenodo DOI is recommended for its permanence and citability. Linking Zenodo to GitHub lets you issue a DOI in a semi-automated way.
my-first-analysis) to ONv1.0) and a title, then click "Publish release"The issued DOI takes the form 10.5281/zenodo.XXXXXXXX and is permanently linked to this snapshot of your code and environment. As long as the paper is not retracted, it is globally accessible.
In the Methods section, or in a Data Availability Statement or Code Availability Statement, include the link using wording like the following:
The Python code and processed data used to generate all figures and tables in this study are openly available at Zenodo (DOI: 10.5281/zenodo.XXXXXXXX) and GitHub (https://github.com/yourname/my-first-analysis). The analysis was performed using Python 3.12 with the libraries listed in requirements.txt.
Check your journal's author guidelines, as the exact format may vary. Most journals provide a dedicated section titled "Data Availability" or "Code Availability."
It is common to refine the analysis or add data after a paper is published. The workflow for continuing to use GitHub and Zenodo together looks like this:
If an older DOI is already cited in your paper, that's fine. Zenodo issues both a "Concept DOI" (always pointing to the latest version) and a "Version DOI" (pointing to a specific release), so you can use whichever is appropriate.
Throughout all five parts, you have learned everything from setting up a Python environment to vibe coding with an LLM, ensuring reproducibility, and publishing your analysis alongside your paper.
From here, the only thing left is practice — running through the process with your own research data alongside ChatGPT. Whenever you hit an error, the LLM will always help you find a solution. Welcome to the community of researchers who share code and build reproducible science.
Questions, feedback, and suggestions for improvement are welcome at Contact (tomoakiyamaguchirice@gmail.com).