Nice article, and I have a few inputs to how I work with some of the same typics (I am not in data science).
Regarding #10 — Setting up a virtual environment:
I am a big fan of virtualenvwrapper, which makes working with multiple virtual environments for Python a charm.
Regarding #9 — Commenting according to PEP8 standards:
Since Python is dynamically typed, it can be usefull to use type hints in both the code and the docstring. It helps the IDE, it helps the next developer, and it helps you when you revisit that code later.
Example:
def is_valid_project(project_name: str) -> bool:
"""
Checks if the project name supplied exist in Product X.
:param project_name: Product X project name
:type project_name: str
:return: bool
"""
code-bla-bla-bla...
Regarding #4 — Measuring and optimizing runtime
I read a very good article recenty about Python decorators, where the author also gave an example on how to time your code through decorators.
https://medium.com/better-programming/why-you-need-decorators-in-your-python-code-df12d43eac9c