{"id":37075029,"url":"https://github.com/tlint101/py50","last_synced_at":"2026-01-14T08:50:30.486Z","repository":{"id":207327699,"uuid":"716929963","full_name":"tlint101/py50","owner":"tlint101","description":"Generate Dose-Response Curves in Python","archived":false,"fork":false,"pushed_at":"2025-09-19T07:20:42.000Z","size":11273,"stargazers_count":10,"open_issues_count":0,"forks_count":4,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-09-19T08:43:28.929Z","etag":null,"topics":["bioinformatics","cheminformatics","data-visualization","dose-response","python"],"latest_commit_sha":null,"homepage":"https://py50.readthedocs.io/en/latest/","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tlint101.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-11-10T07:13:58.000Z","updated_at":"2025-09-19T07:20:45.000Z","dependencies_parsed_at":"2023-11-20T04:29:42.007Z","dependency_job_id":"6fb4680b-2a50-42ba-a768-e1c24cfc7aed","html_url":"https://github.com/tlint101/py50","commit_stats":{"total_commits":179,"total_committers":1,"mean_commits":179.0,"dds":0.0,"last_synced_commit":"28825e3d7ccee3558c7becff045ddbbe3273ba43"},"previous_names":["tlint101/py50"],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/tlint101/py50","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tlint101%2Fpy50","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tlint101%2Fpy50/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tlint101%2Fpy50/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tlint101%2Fpy50/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tlint101","download_url":"https://codeload.github.com/tlint101/py50/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tlint101%2Fpy50/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28414694,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T08:38:59.149Z","status":"ssl_error","status_checked_at":"2026-01-14T08:38:43.588Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bioinformatics","cheminformatics","data-visualization","dose-response","python"],"created_at":"2026-01-14T08:50:29.986Z","updated_at":"2026-01-14T08:50:30.476Z","avatar_url":"https://github.com/tlint101.png","language":"Jupyter Notebook","readme":"![py50_full.png](img/py50_full.png)\n\n# py50: Generate Dose-Response Curves\n\n[![py50](https://img.shields.io/pypi/v/py50.svg?labelColor=gray\u0026style=flat)](https://pypi.org/project/py50/)\n[![Streamlit](https://img.shields.io/badge/Streamlit-1.34.0-FF4B4B.svg?style=flat\u0026logo=Streamlit\u0026logoColor=white)](https://py50-app.streamlit.app)\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/py50?style=flat\u0026logo=python\u0026logoColor=white)](https://pypi.org/project/py50/)\n[![Documentation Status](https://readthedocs.org/projects/py50/badge/?version=latest)](https://py50.readthedocs.io/en/latest/?badge=latest)\n[![DOI](https://zenodo.org/badge/716929963.svg)](https://zenodo.org/doi/10.5281/zenodo.10183912)\n\n## Summary\n\nThe aim of py50 is to make the generation of dose-response curves and annotated plots with statistics. The project was\ncreated primarily for my personal use and for my coworkers/classmates. I found many of my classmates/coworkers were\nusing a program that I find to be unfriendly in generating dose-response curves or with calculating statistics and\nplots. During my search, I found other helpful repositories that can generate dose-response curves, calculate\nstatistics, or make annotated plots. However, I found that these packages did not meet my requirements:\n\n1. Use Pandas for the Data so that it can be easily plugged into a Jupyter Notebook or Python scripts\n2. Adaptable to user needs\n3. Easy to use (hopefully!)\n\nThe dose-response curves in py50 are built using the four parameter logistic regression model:\n\n$`Y = \\text{Min} + \\frac{\\text{Max} - \\text{Min}}{1 + \\left(\\frac{X}{\\text{IC50}}\\right)^{\\text{Hill coefficient}}}`$\n\nwhere min is the minimum response value, max is the maximum response value, Y is the response values of the curves, and \nX is the concentration.\n\nThe statistics and annotated plots are wrapped from [Pingouin](https://github.com/raphaelvallat/pingouin)\nand [Statannotations](https://github.com/trevismd/statannotations).\nThis may have been done inelegantly and will be updated based on my use or recommendations by others. As things stand, \nthis project meets my needs and the needs of my classmates/coworkers.\nHopefully it can meet the needs of others.\n\n## Installation\n\n```\npip install py50\n```\n\nPacakge can be upgraded specifically using pip with the following:\n\n```\npip install py50 -U\n```\n\n## Tutorial\n\nDocumentation can be found [here](https://py50.readthedocs.io/en/latest/).\n\nA Jupyter Notebook demoing the code can be found [here](https://github.com/tlint101/py50/tree/main/tutorials).\n\nA blog post demoing the code can be found at [Practice in Code](https://tlint101.github.io/practice-in-code/)\n\n# Web Application [![Streamlit App](https://static.streamlit.io/badges/streamlit_badge_black_white.svg)](https://py50-app.streamlit.app)\n\nFor those who are not versed in python coding, py50 has been converted into a web application using Streamlit!\n\nThe web application can be found here: [py50-app](https://py50-app.streamlit.app)\n\nThe repository for the Streamlit app version can be found\nhere: [py50-streamlit](https://github.com/tlint101/py50-streamlit)\n\n**NOTE:** Updates to the web application take more time. Updates will be made when possible or upon request.\n\n## Future Work\n\nWith the release of py50 v1.0.0, I have finished a project that has been on my mind for the past six months. My aim now\nwill be to reformat the code for maintainability and to fix any bugs that I find or others report. I plan on maintaining\npy50 for the foreseeable future. As such, my current \"To-Do\" list (in no particular order) are as follows:\n\n- [ ] Complete To-Do notes in Python script\n- [X] Update Tutorials for clarity\n- [X] Update py50 Streamlit to version 1.0.0\n- [ ] Refactor code for maintainability\n- [ ] **Add error messages!**\n- [ ] (Bonus Points) Provide KNIME workflow?\n\n## Citation\n\nIf you are interested in citing the repository, the BibTeX reference is as follows:\n```aiignore\n@software{lin_2024_14523624,\n  author       = {Lin, Tony Eight},\n  title        = {py50: Generate Dose-Response Curves},\n  month        = dec,\n  year         = 2024,\n  publisher    = {Zenodo},\n  version      = {v1.0.10},\n  doi          = {10.5281/zenodo.14523624},\n  url          = {https://doi.org/10.5281/zenodo.14523624},\n}\n```\nAll versions can be linked to the Zenodo repository here: [![DOI](https://zenodo.org/badge/716929963.svg)](https://zenodo.org/doi/10.5281/zenodo.10183912)\n\nThanks for your interest! \n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftlint101%2Fpy50","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftlint101%2Fpy50","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftlint101%2Fpy50/lists"}