{"id":24995592,"url":"https://github.com/blackmo18/kt-stat","last_synced_at":"2025-07-19T15:06:15.494Z","repository":{"id":124859771,"uuid":"206067566","full_name":"blackmo18/kt-stat","owner":"blackmo18","description":"Data Science in Kotlin","archived":false,"fork":false,"pushed_at":"2020-06-20T07:31:57.000Z","size":22,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"develop","last_synced_at":"2025-03-29T14:44:19.111Z","etag":null,"topics":["csv-parser","data-science","kotlin"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/blackmo18.png","metadata":{"files":{"readme":"README.MD","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-09-03T12:04:43.000Z","updated_at":"2020-06-20T07:43:37.000Z","dependencies_parsed_at":"2023-08-09T07:34:59.846Z","dependency_job_id":null,"html_url":"https://github.com/blackmo18/kt-stat","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/blackmo18/kt-stat","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blackmo18%2Fkt-stat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blackmo18%2Fkt-stat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blackmo18%2Fkt-stat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blackmo18%2Fkt-stat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/blackmo18","download_url":"https://codeload.github.com/blackmo18/kt-stat/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blackmo18%2Fkt-stat/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265950831,"owners_count":23853841,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["csv-parser","data-science","kotlin"],"created_at":"2025-02-04T15:39:03.816Z","updated_at":"2025-07-19T15:06:15.450Z","avatar_url":"https://github.com/blackmo18.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Data Science Project in Kotlin\n* Mutli Linear Regression\n* Simple  Linear Regression\n\n**Libraries Used**\n* [Kotlin-grass](https://github.com/blackmo18/kotlin-grass) - kotlin library for parsing csv file to data class\n* [Kotlin-csv](https://github.com/doyaaaaaken/kotlin-csv) - kotlin library for reading csv file\n* [Koma](https://github.com/kyonifer/koma) - library for scientific computing\n* [Apache Commons Math](http://commons.apache.org/proper/commons-math/) - OLM Multi Linear Regression\n* [Kotlin-Statistics](https://github.com/thomasnield/kotlin-statistics) - Idiomatic math and statistical extensions for Kotlin   \n\n**Flavors**\n* Idiomatic Categorization\n* Annotation Categorization\n\n**Usage:**\n**a.** Idiomatic Appraoch\n1.  *create data class*\n2. *parse csv file with data class*\n3. *categorized using extension function*\n4. *create category keys*\n5. *create array of **doublearray(matrix equation)** for independent variables*\n6. *create array of double for independent variables*\n7. *feed arrays to **OLSML***\n\n**b.** Class Annotation\n1. *create a data class*\n2. *extend data class with **ScientificData class***\n3. *mark class property with **annotation***\n4. *parse csv file with data class*\n5. *categorize and create keys by instantiating and initializing **CategoryKey***\n6. *retrieve category keys, and dependent, indepedent array of:  **doubles, array of doubles***\n7. *feed arrays to **OLSML***\n\n**c.** Annoations\n1. @Category \n    - identifies that the property is a category variable\n\n2. @Dependent \n    - mark the property as dependent variable\n    - make sure that there is only one dependent variable annotated\n\nCreating ScientificData class\n```kotlin\ndata class Company(\n    val rnd: Double?,\n    val admin: Double?,\n    val marketing: Double?,\n    @Category\n    val state: String?,\n    @DependentVar\n    val profit: Double?,\n    @Category\n    val tech: String?\n): ScientificData()\n```\n\nParsing data to ScientificData class from resource Folder\n```kotlin\n    val data = dataClassFromCsv\u003cCompany\u003e(\"/Company.csv\").toList()\n```\n\nusing idiomatic approach\n```kotlin\n    //-- Multi linear regression without ScientificData class and annotation\n    val category1 = CategoryKeys(data)\n        .addCategory(key =\"state\", cat = {it.state!!} )\n    // categorizing data sets\n    val categorizedData = data.categorized(\n        category = {\n            categorizeByVariable { map -\u003e\n                map[\"state\"] = it.state!!\n            }\n        },\n        numeric = {\n            doubleArrayOf(it.rnd!!, it.admin!!, it.marketing!!)\n        }\n    )\n\n    //-- creating array of array of doubles\n    val doubleEQ = DoubleEQ(category1.mappedKeys)\n    val xD = doubleEQ.createEQ(categorizedData) // independent\n    val yD = data.mapNotNull { it.profit }.toDoubleArray() // dependent\n    \n    //-- solving multi linear regression\n    val olsml = OLSML(yD, xD)\n    val summary = olsml.summary()\n```\nusing class annotation\n```kotlin\n    //-- categorizing data sets\n    val category2 = CategoryKeys(data).initCategoryData()\n\n    //-- creating array of array of doubles\n    val doubleEQ2 = DoubleEQ(category2.getCategoryKeys())\n\n    //-- resulting array, array of doubles are arranged alphabetically according to data class property name\n    val xW = doubleEQ2.createEQ(category2.getCategorizedData())\n    val yW = category2.getDependentValues()\n\n    val olsml = OLSML(yW, xW)\n    val summary = olsml.summary()\n```\nremoving columns from double array eg. backward elimination approach\n```kotlin\n    val matProcessed = create(arrayDoubleArray)\n    val removedCol = matProcessed.removeColumns(1,0,3)\n    val arrayVal = removedCol.to2DArray()\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblackmo18%2Fkt-stat","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fblackmo18%2Fkt-stat","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblackmo18%2Fkt-stat/lists"}