From 1c30115adc1d4caabbf1d331a377caf032360c47 Mon Sep 17 00:00:00 2001 From: Quarto GHA Workflow Runner Date: Mon, 6 Nov 2023 10:20:26 +0000 Subject: [PATCH] Built site for gh-pages --- .nojekyll | 2 +- projects/data_cleaning/Project_module_02.html | 21 +++-- projects/data_cleaning/Project_module_05.html | 89 ++++++++++++++----- search.json | 8 +- sitemap.xml | 50 +++++------ 5 files changed, 108 insertions(+), 62 deletions(-) diff --git a/.nojekyll b/.nojekyll index 7c7d802..ee68c19 100644 --- a/.nojekyll +++ b/.nojekyll @@ -1 +1 @@ -f4c8872c \ No newline at end of file +92b70b93 \ No newline at end of file diff --git a/projects/data_cleaning/Project_module_02.html b/projects/data_cleaning/Project_module_02.html index 435f090..4ad3792 100644 --- a/projects/data_cleaning/Project_module_02.html +++ b/projects/data_cleaning/Project_module_02.html @@ -118,8 +118,11 @@

Module 2: Mod +
  • Consider modifying the cleaning functions if they modify the input (remember that inputs are passed as reference, not a copy), e.g. 
  • + +
    data_cleaned = data.copy()
    +...
    +return data_cleaned
  • 2.2 Modules
    • Move cleaner functions into a separate module cleaning.py. Commit.
    • @@ -142,13 +145,13 @@

      Module 2: Mod

  • modify main.py and check that it runs
  • -
    cleaners = [
    -  SpikeCleaner(max_jump=10),
    -  OutOfRangeCleaner(min_val=0, max_val=50),
    -  FlatPeriodCleaner(flat_period=5),
    -]
    -for cleaner in cleaners:
    -  data = cleaner.clean(data)
    +
    cleaners = [
    +  SpikeCleaner(max_jump=10),
    +  OutOfRangeCleaner(min_val=0, max_val=50),
    +  FlatPeriodCleaner(flat_period=5),
    +]
    +for cleaner in cleaners:
    +  data = cleaner.clean(data)
    diff --git a/projects/data_cleaning/Project_module_05.html b/projects/data_cleaning/Project_module_05.html index 1013c06..29f14b6 100644 --- a/projects/data_cleaning/Project_module_05.html +++ b/projects/data_cleaning/Project_module_05.html @@ -20,6 +20,40 @@ margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */ vertical-align: middle; } +/* CSS for syntax highlighting */ +pre > code.sourceCode { white-space: pre; position: relative; } +pre > code.sourceCode > span { display: inline-block; line-height: 1.25; } +pre > code.sourceCode > span:empty { height: 1.2em; } +.sourceCode { overflow: visible; } +code.sourceCode > span { color: inherit; text-decoration: inherit; } +div.sourceCode { margin: 1em 0; } +pre.sourceCode { margin: 0; } +@media screen { +div.sourceCode { overflow: auto; } +} +@media print { +pre > code.sourceCode { white-space: pre-wrap; } +pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; } +} +pre.numberSource code + { counter-reset: source-line 0; } +pre.numberSource code > span + { position: relative; left: -4em; counter-increment: source-line; } +pre.numberSource code > span > a:first-child::before + { content: counter(source-line); + position: relative; left: -1em; text-align: right; vertical-align: baseline; + border: none; display: inline-block; + -webkit-touch-callout: none; -webkit-user-select: none; + -khtml-user-select: none; -moz-user-select: none; + -ms-user-select: none; user-select: none; + padding: 0 4px; width: 4em; + } +pre.numberSource { margin-left: 3em; padding-left: 4px; } +div.sourceCode + { } +@media screen { +pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; } +} @@ -86,34 +120,43 @@

    Module 5:
  • 5.2 Data class
      -
    • Make all the cleaner classes dataclasses. e.g.: ```python from dataclasses import dataclass
    • +
    • Make all the cleaner classes dataclasses.
    • +
    +
    from dataclasses import dataclass
    +
    +@dataclass
    +class SpikeCleaner:
    +    ...
    +
      +
    • remove the __init__ method (not needed anymore)
    • +
    • Check that the notebook still runs and that the classes indeed work as data classes (e.g. have a string representation and support equality testing etc)
    • +
    • Commit
  • +
  • 5.3 Module level function +
      +
    • Make a private module function _print_stats() that prints the number of cleaned values
    • +
    • call the function from each of the clean methods (note: inheritance is not required to obtain common functionality)
    • +
  • +
  • 5.4 Composition or inheritance +
      +
    • Create a new cleaner class called CleanerWorkflow that takes a list of cleaners when constructed and has a clean method that run all the cleaners’ clean methods.
    -

    @dataclass class SpikeCleaner:

    -
        - remove the `__init__` method (not needed anymore)
    -    - Check that the notebook still runs and that the classes indeed work as data classes (e.g. have a string representation and support equality testing etc)
    -    - Commit
    -- 5.3 Module level function
    -    - Make a private module function `_print_stats()` that prints the number of cleaned values
    -    - call the function from each of the clean methods (note: inheritance is not required to obtain common functionality)
    -- 5.4 Composition or inheritance
    -    - Create a new cleaner class called CleanerWorkflow that takes a list of cleaners when constructed and has a clean method that run all the cleaners' clean methods. 
    -```python
    -class CleanerWorkflow:
    -    def __init__(self, cleaners) -> None:
    -        self.cleaners = cleaners
    -
    -    def clean(self, data: pd.Series) -> pd.Series:
    -        data_cleaned = data.copy()
    -        for cleaner in self.cleaners:
    -        ...
    -
    - Modify the notebook to use the CleanerWorkflow instead of looping over the cleaners
    -- Consider what type of validation you would want CleanerWorkflow to have? Is it better check validity up front or to just go ahead and handle problems afterwards? 
    -- Consider whether it would be better to create a base class BaseCleaner - write down your considerations as a comment in the pull request, refer to specific lines of code
    -    - e.g. how would you handle e.g. common plotting functionality in the cleaner classes? 
    +
    class CleanerWorkflow:
    +    def __init__(self, cleaners) -> None:
    +        self.cleaners = cleaners
    +
    +    def clean(self, data: pd.Series) -> pd.Series:
    +        data_cleaned = data.copy()
    +        for cleaner in self.cleaners:
    +        ...
      +
    • Modify the notebook to use the CleanerWorkflow instead of looping over the cleaners
    • +
    • Consider what type of validation you would want CleanerWorkflow to have? Is it better check validity up front or to just go ahead and handle problems afterwards?
    • +
    • Consider whether it would be better to create a base class BaseCleaner - write down your considerations as a comment in the pull request, refer to specific lines of code
    • +
    • e.g. how would you handle e.g. common plotting functionality in the cleaner classes?
    • Create pull request in GitHub and “request review” from your reviewers
    • Get feedback, Adjust code until approval, then merge (and delete branch)
    • +
  • Back to course project overview

    diff --git a/search.json b/search.json index 66ffd96..92c5cea 100644 --- a/search.json +++ b/search.json @@ -305,14 +305,14 @@ "href": "projects/data_cleaning/Project_module_02.html", "title": "Python package development", "section": "", - "text": "After last module, your script now uses functions clean_spikes, clean_outofrange, clean_flat, plot_timeseries and has a nice home on GitHub. In this module, you will improve the functions, move them to separate modules and then refactor your code to use classes. Finally, you will check that it all works by running a notebook.\n\nCreate new branch “modules-classes” (Make sure changes from last module have been merged, and that you start from the main branch)\n2.1 Function arguments\n\nAdd default arguments to the functions. Commit.\nMake sure that you only use positional arguments where there is only one argument. Use keyword arguments everywhere else. Commit.\nConsider modifying the cleaning functions if they modify the input (remember that inputs are passed as reference, not a copy), e.g.  python data_cleaned = data.copy() ... return data_cleaned\n\n2.2 Modules\n\nMove cleaner functions into a separate module cleaning.py. Commit.\nMove the plotting function into a separate module plotting.py. Commit.\nRename clean_project_data_v4_final2.py to main.py and execute the cleaning and plotting.\n\nfrom cleaning import ...\nfrom plotting import ...\n\nCheck that it runs! Commit.\n\n2.3 Classes\n\nOrganize the cleaning functions into classes that all have the same structure (an init method and a clean method)\n\ne.g. for SpikeCleaner\n\ncreate and init method: def __init__(max_jump)\nand a clean method: def clean(data)\n\nmodify main.py and check that it runs\n\ncleaners = [\n SpikeCleaner(max_jump=10),\n OutOfRangeCleaner(min_val=0, max_val=50),\n FlatPeriodCleaner(flat_period=5),\n]\nfor cleaner in cleaners:\n data = cleaner.clean(data)\n\ncommit\n\nDownload notebook_A.ipynb and csv file example_data1.csv and make sure it runs. (remove any remaining print statements)\n\nCreate pull request in GitHub and “request review” from your reviewers\nGet feedback, Adjust code until approval, then merge (and delete branch)\n\nBack to course project overview" + "text": "After last module, your script now uses functions clean_spikes, clean_outofrange, clean_flat, plot_timeseries and has a nice home on GitHub. In this module, you will improve the functions, move them to separate modules and then refactor your code to use classes. Finally, you will check that it all works by running a notebook.\n\nCreate new branch “modules-classes” (Make sure changes from last module have been merged, and that you start from the main branch)\n2.1 Function arguments\n\nAdd default arguments to the functions. Commit.\nMake sure that you only use positional arguments where there is only one argument. Use keyword arguments everywhere else. Commit.\nConsider modifying the cleaning functions if they modify the input (remember that inputs are passed as reference, not a copy), e.g. \n\ndata_cleaned = data.copy()\n...\nreturn data_cleaned\n2.2 Modules\n\nMove cleaner functions into a separate module cleaning.py. Commit.\nMove the plotting function into a separate module plotting.py. Commit.\nRename clean_project_data_v4_final2.py to main.py and execute the cleaning and plotting.\n\nfrom cleaning import ...\nfrom plotting import ...\n\nCheck that it runs! Commit.\n\n2.3 Classes\n\nOrganize the cleaning functions into classes that all have the same structure (an init method and a clean method)\n\ne.g. for SpikeCleaner\n\ncreate and init method: def __init__(max_jump)\nand a clean method: def clean(data)\n\nmodify main.py and check that it runs\n\ncleaners = [\n SpikeCleaner(max_jump=10),\n OutOfRangeCleaner(min_val=0, max_val=50),\n FlatPeriodCleaner(flat_period=5),\n]\nfor cleaner in cleaners:\n data = cleaner.clean(data)\n\ncommit\n\nDownload notebook_A.ipynb and csv file example_data1.csv and make sure it runs. (remove any remaining print statements)\n\nCreate pull request in GitHub and “request review” from your reviewers\nGet feedback, Adjust code until approval, then merge (and delete branch)\n\nBack to course project overview" }, { "objectID": "projects/data_cleaning/Project_module_02.html#module-2-modules-and-classes", "href": "projects/data_cleaning/Project_module_02.html#module-2-modules-and-classes", "title": "Python package development", "section": "", - "text": "After last module, your script now uses functions clean_spikes, clean_outofrange, clean_flat, plot_timeseries and has a nice home on GitHub. In this module, you will improve the functions, move them to separate modules and then refactor your code to use classes. Finally, you will check that it all works by running a notebook.\n\nCreate new branch “modules-classes” (Make sure changes from last module have been merged, and that you start from the main branch)\n2.1 Function arguments\n\nAdd default arguments to the functions. Commit.\nMake sure that you only use positional arguments where there is only one argument. Use keyword arguments everywhere else. Commit.\nConsider modifying the cleaning functions if they modify the input (remember that inputs are passed as reference, not a copy), e.g.  python data_cleaned = data.copy() ... return data_cleaned\n\n2.2 Modules\n\nMove cleaner functions into a separate module cleaning.py. Commit.\nMove the plotting function into a separate module plotting.py. Commit.\nRename clean_project_data_v4_final2.py to main.py and execute the cleaning and plotting.\n\nfrom cleaning import ...\nfrom plotting import ...\n\nCheck that it runs! Commit.\n\n2.3 Classes\n\nOrganize the cleaning functions into classes that all have the same structure (an init method and a clean method)\n\ne.g. for SpikeCleaner\n\ncreate and init method: def __init__(max_jump)\nand a clean method: def clean(data)\n\nmodify main.py and check that it runs\n\ncleaners = [\n SpikeCleaner(max_jump=10),\n OutOfRangeCleaner(min_val=0, max_val=50),\n FlatPeriodCleaner(flat_period=5),\n]\nfor cleaner in cleaners:\n data = cleaner.clean(data)\n\ncommit\n\nDownload notebook_A.ipynb and csv file example_data1.csv and make sure it runs. (remove any remaining print statements)\n\nCreate pull request in GitHub and “request review” from your reviewers\nGet feedback, Adjust code until approval, then merge (and delete branch)\n\nBack to course project overview" + "text": "After last module, your script now uses functions clean_spikes, clean_outofrange, clean_flat, plot_timeseries and has a nice home on GitHub. In this module, you will improve the functions, move them to separate modules and then refactor your code to use classes. Finally, you will check that it all works by running a notebook.\n\nCreate new branch “modules-classes” (Make sure changes from last module have been merged, and that you start from the main branch)\n2.1 Function arguments\n\nAdd default arguments to the functions. Commit.\nMake sure that you only use positional arguments where there is only one argument. Use keyword arguments everywhere else. Commit.\nConsider modifying the cleaning functions if they modify the input (remember that inputs are passed as reference, not a copy), e.g. \n\ndata_cleaned = data.copy()\n...\nreturn data_cleaned\n2.2 Modules\n\nMove cleaner functions into a separate module cleaning.py. Commit.\nMove the plotting function into a separate module plotting.py. Commit.\nRename clean_project_data_v4_final2.py to main.py and execute the cleaning and plotting.\n\nfrom cleaning import ...\nfrom plotting import ...\n\nCheck that it runs! Commit.\n\n2.3 Classes\n\nOrganize the cleaning functions into classes that all have the same structure (an init method and a clean method)\n\ne.g. for SpikeCleaner\n\ncreate and init method: def __init__(max_jump)\nand a clean method: def clean(data)\n\nmodify main.py and check that it runs\n\ncleaners = [\n SpikeCleaner(max_jump=10),\n OutOfRangeCleaner(min_val=0, max_val=50),\n FlatPeriodCleaner(flat_period=5),\n]\nfor cleaner in cleaners:\n data = cleaner.clean(data)\n\ncommit\n\nDownload notebook_A.ipynb and csv file example_data1.csv and make sure it runs. (remove any remaining print statements)\n\nCreate pull request in GitHub and “request review” from your reviewers\nGet feedback, Adjust code until approval, then merge (and delete branch)\n\nBack to course project overview" }, { "objectID": "projects/data_cleaning/Project_module_03.html", @@ -1187,14 +1187,14 @@ "href": "projects/data_cleaning/Project_module_05.html", "title": "Python package development", "section": "", - "text": "In this module you will benefit from the automatic testing that you have added in the last module. Let’s explore some other object-oriented designs for our code base…\n\nCreate new branch “oop-dataclasses” (Make sure changes from last module have been merged, and that you start from the main branch)\n5.1 Type Hints\n\nAdd type hints to all functions and methods. Commit\n\n5.2 Data class\n\nMake all the cleaner classes dataclasses. e.g.: ```python from dataclasses import dataclass\n\n\n@dataclass class SpikeCleaner:\n - remove the `__init__` method (not needed anymore)\n - Check that the notebook still runs and that the classes indeed work as data classes (e.g. have a string representation and support equality testing etc)\n - Commit\n- 5.3 Module level function\n - Make a private module function `_print_stats()` that prints the number of cleaned values\n - call the function from each of the clean methods (note: inheritance is not required to obtain common functionality)\n- 5.4 Composition or inheritance\n - Create a new cleaner class called CleanerWorkflow that takes a list of cleaners when constructed and has a clean method that run all the cleaners' clean methods. \n```python\nclass CleanerWorkflow:\n def __init__(self, cleaners) -> None:\n self.cleaners = cleaners\n\n def clean(self, data: pd.Series) -> pd.Series:\n data_cleaned = data.copy()\n for cleaner in self.cleaners:\n ...\n- Modify the notebook to use the CleanerWorkflow instead of looping over the cleaners\n- Consider what type of validation you would want CleanerWorkflow to have? Is it better check validity up front or to just go ahead and handle problems afterwards? \n- Consider whether it would be better to create a base class BaseCleaner - write down your considerations as a comment in the pull request, refer to specific lines of code\n - e.g. how would you handle e.g. common plotting functionality in the cleaner classes? \n\nCreate pull request in GitHub and “request review” from your reviewers\nGet feedback, Adjust code until approval, then merge (and delete branch)\n\nBack to course project overview" + "text": "In this module you will benefit from the automatic testing that you have added in the last module. Let’s explore some other object-oriented designs for our code base…\n\nCreate new branch “oop-dataclasses” (Make sure changes from last module have been merged, and that you start from the main branch)\n5.1 Type Hints\n\nAdd type hints to all functions and methods. Commit\n\n5.2 Data class\n\nMake all the cleaner classes dataclasses.\n\nfrom dataclasses import dataclass\n\n@dataclass\nclass SpikeCleaner:\n ...\n\nremove the __init__ method (not needed anymore)\nCheck that the notebook still runs and that the classes indeed work as data classes (e.g. have a string representation and support equality testing etc)\nCommit\n\n5.3 Module level function\n\nMake a private module function _print_stats() that prints the number of cleaned values\ncall the function from each of the clean methods (note: inheritance is not required to obtain common functionality)\n\n5.4 Composition or inheritance\n\nCreate a new cleaner class called CleanerWorkflow that takes a list of cleaners when constructed and has a clean method that run all the cleaners’ clean methods.\n\nclass CleanerWorkflow:\n def __init__(self, cleaners) -> None:\n self.cleaners = cleaners\n\n def clean(self, data: pd.Series) -> pd.Series:\n data_cleaned = data.copy()\n for cleaner in self.cleaners:\n ...\n\nModify the notebook to use the CleanerWorkflow instead of looping over the cleaners\nConsider what type of validation you would want CleanerWorkflow to have? Is it better check validity up front or to just go ahead and handle problems afterwards?\nConsider whether it would be better to create a base class BaseCleaner - write down your considerations as a comment in the pull request, refer to specific lines of code\ne.g. how would you handle e.g. common plotting functionality in the cleaner classes?\nCreate pull request in GitHub and “request review” from your reviewers\nGet feedback, Adjust code until approval, then merge (and delete branch)\n\n\nBack to course project overview" }, { "objectID": "projects/data_cleaning/Project_module_05.html#module-5-object-oriented-design", "href": "projects/data_cleaning/Project_module_05.html#module-5-object-oriented-design", "title": "Python package development", "section": "", - "text": "In this module you will benefit from the automatic testing that you have added in the last module. Let’s explore some other object-oriented designs for our code base…\n\nCreate new branch “oop-dataclasses” (Make sure changes from last module have been merged, and that you start from the main branch)\n5.1 Type Hints\n\nAdd type hints to all functions and methods. Commit\n\n5.2 Data class\n\nMake all the cleaner classes dataclasses. e.g.: ```python from dataclasses import dataclass\n\n\n@dataclass class SpikeCleaner:\n - remove the `__init__` method (not needed anymore)\n - Check that the notebook still runs and that the classes indeed work as data classes (e.g. have a string representation and support equality testing etc)\n - Commit\n- 5.3 Module level function\n - Make a private module function `_print_stats()` that prints the number of cleaned values\n - call the function from each of the clean methods (note: inheritance is not required to obtain common functionality)\n- 5.4 Composition or inheritance\n - Create a new cleaner class called CleanerWorkflow that takes a list of cleaners when constructed and has a clean method that run all the cleaners' clean methods. \n```python\nclass CleanerWorkflow:\n def __init__(self, cleaners) -> None:\n self.cleaners = cleaners\n\n def clean(self, data: pd.Series) -> pd.Series:\n data_cleaned = data.copy()\n for cleaner in self.cleaners:\n ...\n- Modify the notebook to use the CleanerWorkflow instead of looping over the cleaners\n- Consider what type of validation you would want CleanerWorkflow to have? Is it better check validity up front or to just go ahead and handle problems afterwards? \n- Consider whether it would be better to create a base class BaseCleaner - write down your considerations as a comment in the pull request, refer to specific lines of code\n - e.g. how would you handle e.g. common plotting functionality in the cleaner classes? \n\nCreate pull request in GitHub and “request review” from your reviewers\nGet feedback, Adjust code until approval, then merge (and delete branch)\n\nBack to course project overview" + "text": "In this module you will benefit from the automatic testing that you have added in the last module. Let’s explore some other object-oriented designs for our code base…\n\nCreate new branch “oop-dataclasses” (Make sure changes from last module have been merged, and that you start from the main branch)\n5.1 Type Hints\n\nAdd type hints to all functions and methods. Commit\n\n5.2 Data class\n\nMake all the cleaner classes dataclasses.\n\nfrom dataclasses import dataclass\n\n@dataclass\nclass SpikeCleaner:\n ...\n\nremove the __init__ method (not needed anymore)\nCheck that the notebook still runs and that the classes indeed work as data classes (e.g. have a string representation and support equality testing etc)\nCommit\n\n5.3 Module level function\n\nMake a private module function _print_stats() that prints the number of cleaned values\ncall the function from each of the clean methods (note: inheritance is not required to obtain common functionality)\n\n5.4 Composition or inheritance\n\nCreate a new cleaner class called CleanerWorkflow that takes a list of cleaners when constructed and has a clean method that run all the cleaners’ clean methods.\n\nclass CleanerWorkflow:\n def __init__(self, cleaners) -> None:\n self.cleaners = cleaners\n\n def clean(self, data: pd.Series) -> pd.Series:\n data_cleaned = data.copy()\n for cleaner in self.cleaners:\n ...\n\nModify the notebook to use the CleanerWorkflow instead of looping over the cleaners\nConsider what type of validation you would want CleanerWorkflow to have? Is it better check validity up front or to just go ahead and handle problems afterwards?\nConsider whether it would be better to create a base class BaseCleaner - write down your considerations as a comment in the pull request, refer to specific lines of code\ne.g. how would you handle e.g. common plotting functionality in the cleaner classes?\nCreate pull request in GitHub and “request review” from your reviewers\nGet feedback, Adjust code until approval, then merge (and delete branch)\n\n\nBack to course project overview" }, { "objectID": "projects/data_cleaning/notebook_A.html", diff --git a/sitemap.xml b/sitemap.xml index 13c14b5..2196d96 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -2,102 +2,102 @@ https://github.com/DHI/python-package-development/course_structure.html - 2023-11-06T10:07:49.686Z + 2023-11-06T10:20:25.507Z https://github.com/DHI/python-package-development/00_introduction.html - 2023-11-06T10:07:48.074Z + 2023-11-06T10:20:24.079Z https://github.com/DHI/python-package-development/03_testing.html - 2023-11-06T10:07:46.754Z + 2023-11-06T10:20:22.795Z https://github.com/DHI/python-package-development/projects/data_cleaning/Project_module_04.html - 2023-11-06T10:07:45.458Z + 2023-11-06T10:20:21.587Z https://github.com/DHI/python-package-development/projects/data_cleaning/Project_module_07.html - 2023-11-06T10:07:44.470Z + 2023-11-06T10:20:20.695Z https://github.com/DHI/python-package-development/projects/data_cleaning/clean_project_data_v4_final2.html - 2023-11-06T10:07:43.762Z + 2023-11-06T10:20:19.955Z https://github.com/DHI/python-package-development/projects/data_cleaning/Project_module_02.html - 2023-11-06T10:07:42.922Z + 2023-11-06T10:20:19.199Z https://github.com/DHI/python-package-development/projects/data_cleaning/Project_module_03.html - 2023-11-06T10:07:42.014Z + 2023-11-06T10:20:18.407Z https://github.com/DHI/python-package-development/01_version_control.html - 2023-11-06T10:07:41.098Z + 2023-11-06T10:20:17.615Z https://github.com/DHI/python-package-development/02_function_classes.html - 2023-11-06T10:07:39.522Z + 2023-11-06T10:20:16.275Z https://github.com/DHI/python-package-development/group_work/module_03.html - 2023-11-06T10:07:38.226Z + 2023-11-06T10:20:15.111Z https://github.com/DHI/python-package-development/group_work/module_01.html - 2023-11-06T10:07:37.530Z + 2023-11-06T10:20:14.471Z https://github.com/DHI/python-package-development/06_documentation.html - 2023-11-06T10:07:35.298Z + 2023-11-06T10:20:12.407Z https://github.com/DHI/python-package-development/group_work/module_02.html - 2023-11-06T10:07:37.138Z + 2023-11-06T10:20:14.127Z https://github.com/DHI/python-package-development/group_work/module_04.html - 2023-11-06T10:07:37.870Z + 2023-11-06T10:20:14.775Z https://github.com/DHI/python-package-development/group_work/index.html - 2023-11-06T10:07:38.558Z + 2023-11-06T10:20:15.407Z https://github.com/DHI/python-package-development/05_oop.html - 2023-11-06T10:07:40.438Z + 2023-11-06T10:20:17.023Z https://github.com/DHI/python-package-development/projects/data_cleaning/Project_module_06.html - 2023-11-06T10:07:41.566Z + 2023-11-06T10:20:18.007Z https://github.com/DHI/python-package-development/projects/data_cleaning/Project_module_01.html - 2023-11-06T10:07:42.462Z + 2023-11-06T10:20:18.803Z https://github.com/DHI/python-package-development/projects/data_cleaning/index.html - 2023-11-06T10:07:43.338Z + 2023-11-06T10:20:19.559Z https://github.com/DHI/python-package-development/projects/data_cleaning/Project_module_05.html - 2023-11-06T10:07:44.146Z + 2023-11-06T10:20:20.355Z https://github.com/DHI/python-package-development/projects/data_cleaning/notebook_A.html - 2023-11-06T10:07:45.010Z + 2023-11-06T10:20:21.155Z https://github.com/DHI/python-package-development/index.html - 2023-11-06T10:07:45.926Z + 2023-11-06T10:20:22.011Z https://github.com/DHI/python-package-development/07_packaging.html - 2023-11-06T10:07:47.694Z + 2023-11-06T10:20:23.687Z https://github.com/DHI/python-package-development/04_dependencies_ci.html - 2023-11-06T10:07:49.110Z + 2023-11-06T10:20:24.943Z