{"id":26477589,"url":"https://github.com/splware/esproc_analytics","last_synced_at":"2026-01-04T07:35:09.033Z","repository":{"id":269408398,"uuid":"907314391","full_name":"SPLWare/esProc_Analytics","owner":"SPLWare","description":"The most  Excel-user-friendly and the most interactive programming language for data analytics.","archived":false,"fork":false,"pushed_at":"2025-02-18T09:10:14.000Z","size":11,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-18T10:24:53.695Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://www.esproc.com/langding-page-spl-data-analysis/","language":null,"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/SPLWare.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":"2024-12-23T10:01:07.000Z","updated_at":"2025-02-18T09:10:17.000Z","dependencies_parsed_at":"2025-02-07T04:15:10.786Z","dependency_job_id":null,"html_url":"https://github.com/SPLWare/esProc_Analytics","commit_stats":null,"previous_names":["splware/esproc_anlytics","splware/esproc-analytics","splware/esproc_analytics"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SPLWare%2FesProc_Analytics","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SPLWare%2FesProc_Analytics/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SPLWare%2FesProc_Analytics/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SPLWare%2FesProc_Analytics/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SPLWare","download_url":"https://codeload.github.com/SPLWare/esProc_Analytics/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244530998,"owners_count":20467388,"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":[],"created_at":"2025-03-20T00:47:47.528Z","updated_at":"2026-01-04T07:35:08.912Z","avatar_url":"https://github.com/SPLWare.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=center\u003e\r\n\u003ca href=\"http://www.esproc.com\" target=\"_blank\" \u003e\u003cimg src=\"https://img.shields.io/badge/-esProc-red?style=social\u0026logo=data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMi4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0i5Zu+5bGCXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNDMuNCA2NCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDMuNCA2NDsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCgkuc3Qwe2ZpbGw6IzI4ODFFRTt9DQo8L3N0eWxlPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPGc+DQoJCQkJPGc+DQoJCQkJCTxnPg0KCQkJCQkJPHBhdGggY2xhc3M9InN0MCIgZD0iTTE4LDQxLjhsLTUuNCwxLjVDMy41LDQ1LjYtMS45LDU1LDAuNiw2NGwwLDBMMjIsNTguM2wwLjctMC4yYzMuOS0xLjMsNi4zLTQuOSw1LjgtOC45DQoJCQkJCQkJYy0wLjEtMC45LTAuMS0xLjEtMC4yLTEuNkMyNyw0My4xLDIyLjQsNDAuNiwxOCw0MS44eiIvPg0KCQkJCQk8L2c+DQoJCQkJPC9nPg0KCQkJPC9nPg0KCQkJPHBhdGggY2xhc3M9InN0MCIgZD0iTTI4LDI1LjRsLTcuNS0xLjZjLTIuNS0xLTUuOS0yLjEtNy4zLTcuMmMtMS0zLjcsMC4yLTcuNCwyLjctOS45QzguOSw5LDQuNCwxNS40LDQuNCwyMi44DQoJCQkJYzAsNy41LDQuOCwxMy42LDExLjksMTUuN2MwLDAsNS4yLDEuNCw2LjcsMS45YzEuOSwwLjYsNS42LDIuMyw3LDYuOGMwLjEsMC4yLDAuMywxLjMsMC4zLDEuOGMwLjIsMi45LTAuNyw1LjYtMi40LDcuNg0KCQkJCWM2LjgtMi41LDExLjMtOC45LDExLjItMTYuMkMzOC44LDMzLjIsMzUuMiwyNy42LDI4LDI1LjR6Ii8+DQoJCTwvZz4NCgk8L2c+DQoJPGc+DQoJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0zMS41LDEyLjlMMzEuNSwxMi45YzAtMC4yLTAuMy0xLjYtMC41LTEuOGwxMS45LTMuMmMwLjEtMC42LDAuMi0xLjMsMC4yLTEuOWwtMTYuOCw0LjQNCgkJCWMwLjcsMC42LDEuMywxLjQsMS41LDIuM2MwLjEsMC4yLDAuMSwwLjMsMC4yLDAuN2MwLDAsMCwwLjEsMCwwLjJjMC4yLDIuMy0xLjEsNC40LTMuNCw1LjFsLTAuNSwwLjFjLTIuNSwwLjYtNS4xLTEtNS44LTMuNQ0KCQkJczAuNi01LDIuOS01LjhjMC4xLDAsMC4yLTAuMSwwLjMtMC4xbDIxLjQtNS43YzAuMSwwLDAuMSwwLDAuMiwwYy0wLjEtMS4xLTAuMi0yLjQtMC42LTMuN2wwLDBMMjEuNCw1LjdsLTAuNywwLjINCgkJCWMtMy45LDEuMy02LjMsNC45LTUuOCw4LjljMC4xLDAuNSwwLDAuNiwwLjEsMC44YzAsMCwwLTAuMSwwLjEsMC44YzEuMyw0LjQsNS44LDcsMTAuMyw1LjhsNS40LTEuNWMzLjctMSw2LjYtMy4xLDguOC01LjgNCgkJCUwzMSwxNy4yYzAuMy0wLjgsMC42LTEuNiwwLjYtMi40bDkuNy0yLjZjMC4zLTAuNywwLjctMS40LDAuOS0yLjFMMzEuNSwxMi45QzMxLjUsMTMuMSwzMS41LDEzLDMxLjUsMTIuOXoiLz4NCgk8L2c+DQo8L2c+DQo8L3N2Zz4NCg==\" style=\" margin: 0 10px 0 0; height:25px; width: auto;\"/\u003e\u003c/a\u003e \r\n\u003ca href=\"http://c.esproc.com\" target=\"_blank\" \u003e\u003cimg src=\"https://img.shields.io/badge/-Community-red?style=social\u0026logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAXNJREFUWEftlitLRUEURtdVEVExWUx2qxgNVouoXYtNDP4Tw20WtftAsItZrHaTYBJREZ98MAc248wcZxi4CGfSeezHmm/23kyPAa/egPPTAXQK/FsFBP7ldVDRZoqcgO9I+2bHy3ZIJBfTCPCZM1tqAxwBmzUBrNQNbEx+5b0B5oEN4NCBrAMnMaiUAuPAs3HU82TLEZwBqwGbaJ4UgKQ8CFR6SoEl4LIWwCJwZQCegKkWBWLHVKSActvdzgG3DqitDf3/VQBskBDALrDnAKXUo3ueAF5KinAf2DKOmnzD7l214bdbA6hC1XHZNQa8hSBC0hwDa57xDHDvvvWB7ciOZoE79+8CWPbsBGc769eFxJdWIKcuyIdRoG3W7AAC1dJkHDIOo8B78+4rEBo8r4AkLFk6Jk3HaeDBBTgHVmIAfpJUz+cAFXVBreQCvQYW/lqEjV1NAMUMqpAaxQMHyDnjYtuS+0BxstwaqJooFqxToFPgB5FuPCEB6XK2AAAAAElFTkSuQmCC\" style=\" margin: 0 10px 0 0; height:25px; width: auto;\"/\u003e\u003c/a\u003e\r\n\u003ca href=\"https://www.esproc.com/download-desktop/\" target=\"_blank\" \u003e\u003cimg src=\"https://img.shields.io/badge/-Download-red?style=social\u0026logo=data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMi4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0i5Zu+5bGCXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMTYgMTYiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDE2IDE2OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMEY5RTAyO3N0cm9rZS13aWR0aDowLjc1O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDt9DQoJLnN0MXtmaWxsOiMwRjlFMDI7c3Ryb2tlOiMwRjlFMDI7c3Ryb2tlLXdpZHRoOjAuNzU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30NCgkuc3Qye2ZpbGw6bm9uZTtzdHJva2U6I0ZGRkZGRjtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7fQ0KPC9zdHlsZT4NCjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xMy44LDMuOWwtMS43LTIuMkgzLjlMMi4yLDMuOSIvPg0KPHBhdGggY2xhc3M9InN0MSIgZD0iTTIsNC4zQzIsNCwyLjMsMy43LDIuNywzLjdoMTAuN0MxMy43LDMuNywxNCw0LDE0LDQuM3Y5YzAsMC42LTAuNCwxLTEsMUgzYy0wLjYsMC0xLTAuNC0xLTFWNC4zeiIvPg0KPHBhdGggY2xhc3M9InN0MiIgZD0iTTEwLjcsOUw4LDExLjdMNS4zLDkiLz4NCjxwYXRoIGNsYXNzPSJzdDIiIGQ9Ik04LDYuM3Y1LjMiLz4NCjwvc3ZnPg0K\"  style=\" margin: 0 10px 0 0; height:25px; width: auto;\"/\u003e\u003c/a\u003e\r\n\u003ca href=\"https://twitter.com/esProc_SPL\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/-Twitter-red?style=social\u0026logo=X\" style=\" margin: 0 10px 0 0; height:25px; width: auto;\"/\u003e\u003c/a\u003e\r\n\u003ca href=\"https://discord.gg/2bkGwqTj\" target=\"_blank\" \u003e\u003cimg src=\"https://img.shields.io/badge/-discord-red?style=social\u0026logo=discord\"  style=\" margin: 0 10px 0 0; height:25px; width: auto;\"/\u003e\u003c/a\u003e\r\n\u003ca href=\"https://www.reddit.com/r/esProcSPL\" target=\"_blank\" \u003e\u003cimg src=\"https://img.shields.io/badge/-reddit-red?style=social\u0026logo=reddit\" style=\" margin: 0 10px 0 0; height:25px; width: auto;\"/\u003e\u003c/a\u003e\r\n\u003ca href=\"https://blog.esproc.com\" target=\"_blank\" \u003e\u003cimg src=\"https://img.shields.io/badge/-Blog-red?style=social\u0026logo=data:image/svg+xml;base64,PHN2ZyB0PSIxNzQwMDQ4ODIzMDk1IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjEwMDE1IiB3aWR0aD0iMTMyIiBoZWlnaHQ9IjEzMiI+PHBhdGggZD0iTTg0LjA1ODIxIDk1OS4yNTU4ODRTMjk3LjM4MzI5NSA1Ny42OTEwOTcgOTI4LjY4NjAzMiAwYzAgMC0yMC41MDI5NjMgMzQxLjQ4MDM4OS0yMDEuOTY1OTcyIDQ3OS40ODY1NDIgMCAwLTM0LjAzMDIwNiA0Ni4wOTYzMTggNzMuMzM5MzM1IDMyLjA5Nzc0MyAwIDAtMTIuNzczMTEgMTUzLjUxMjk5Mi0yMDEuOTY1OTcyIDE5MS44MzIzMjMgMCAwLTI4Ljk4Njk0OCAyOC45ODY5NDggNTUuMjQwMTY4IDMxLjkwOTIxIDAgMC04OS4wODE4NDEgMTM3LjUzNDgyMS0zMTIuMjU3Nzc1IDYzLjkxMjY4NSAwIDAgODkuNzQxNzA2LTIxNy40MjU2NzggMTY1LjI5NjMwNS0yODcuNjU0MjE4QTIyMTEuMzk3Nzc3IDIyMTEuMzk3Nzc3IDAgMCAwIDEyMC43Mjc4NzcgOTQzLjEzNjMxM3MtMTUuNjk1MzcyIDM2LjY2OTY2OC0zNi42Njk2NjcgMTYuMTY2NzA0eiIgZmlsbD0iIzNGODVFQiIgcC1pZD0iMTAwMTYiPjwvcGF0aD48L3N2Zz4=\" style=\" margin: 0 10px 0 0; height:25px; width: auto;\"/\u003e\u003c/a\u003e\r\n\u003c/div\u003e\r\n\r\n\r\n\r\n\r\n\r\n![image](https://www.esproc.com/images/data-analysis/0.png)\r\n\r\n\u003cdiv align=\"center\"\u003e\r\n    \u003ch2\u003eNovel grid-style programming\u003c/h2\u003e\r\n\u003c/div\u003e \r\n\r\n\u003cdiv align=\"center\"\u003e\r\n    \u003ch3\u003eExcel-like Grid-style programming\u003c/h3\u003e\r\n\u003c/div\u003e \r\n\r\n![image](https://www.esproc.com/wp-content/themes/scudata-en/images/Langding-Page-SPL-Data-Analysis/1.png)\r\n\r\n---\r\n \r\n\r\n![image](https://www.esproc.com/wp-content/themes/scudata-en/images/Langding-Page-SPL-Data-Analysis/2.gif)\r\n\r\n---\r\n\r\n\u003cdiv align=\"center\"\u003e\r\n    \u003ch3\u003eHigh Interactivity for Exploratory Analysis\u003c/h3\u003e\r\n\u003c/div\u003e  \r\n\r\n![image](https://www.esproc.com/wp-content/themes/scudata-en/images/Langding-Page-SPL-Data-Analysis/4.gif)\r\n\r\n---\r\n\r\n\u003cdiv align=\"center\"\u003e\r\n    \u003ch3\u003eXLL Plugin Helps Excel\u003c/h3\u003e\r\n\u003c/div\u003e  \r\n\r\n\r\nWrite SPL code in Excel directly\r\n\r\n\u003e **Finding periods during which stocks have risen consecutively for more than 5 days**\r\n\r\n```\r\n=spl(\"=E(?1).sort(CODE,DT).group@i(CODE!=CODE[-1]||CL\u003cCL[-1]).select(~.len()\u003e=5).conj()\",A1:D253)\r\n```\r\n \r\n\u003cdiv align=\"center\"\u003e \r\n    \u003cimg src=\"https://www.esproc.com/wp-content/themes/scudata-en/images/Langding-Page-SPL-Data-Analysis/5.png\" width=\"60%\" /\u003e\r\n\u003c/div\u003e\r\n \r\n---\r\n\r\n\u003cdiv align=\"center\"\u003e\r\n    \u003ch2\u003eConcise and Powerful Code\u003c/h2\u003e\r\n\u003c/div\u003e \r\n\r\n\u003cdiv align=\"center\"\u003e\r\n    \u003ch3\u003eComprehensive and Simple Operations\u003c/h3\u003e\r\n\u003c/div\u003e \r\n\r\n![image](https://www.esproc.com/wp-content/themes/scudata-en/images/Langding-Page-SPL-Data-Analysis/6.png)\r\n\r\n---\r\n\r\n\u003cdiv align=\"center\"\u003e\r\n    \u003ch3\u003eUnique Set and Ordered Operations\u003c/h3\u003e\r\n\u003c/div\u003e \r\n\r\n\u003e **calculate the longest consecutive rising days for each stock**\r\n\r\n#### SQL\r\n\r\n```sql\r\nSELECT CODE, MAX(con_rise) AS longest_up_days\r\nFROM (\r\n    SELECT CODE, COUNT(*) AS con_rise\r\n    FROM (\r\n        SELECT CODE, DT,  SUM(updown_flag) OVER (PARTITION BY CODE ORDER BY CODE, DT) AS no_up_days\r\n        FROM (\r\n            SELECT CODE, DT, \r\n                    CASE WHEN CL \u003e LAG(CL) OVER (PARTITION BY CODE ORDER BY CODE, DT)  THEN 0\r\n                    ELSE 1 END AS updown_flag\r\n            FROM stock\r\n        )\r\n    )\r\n    GROUP BY CODE, no_up_days\r\n)\r\nGROUP BY CODE\r\n```\r\n#### Python\r\n```Python\r\nimport pandas as pd\r\nstock_file = \"StockRecords.txt\"\r\nstock_info = pd.read_csv(stock_file,sep=\"\\t\")\r\nstock_info.sort_values(by=['CODE','DT'],inplace=True)\r\nstock_group = stock_info.groupby(by='CODE')\r\nstock_info['label'] = stock_info.groupby('CODE')['CL'].diff().fillna(0).le(0).astype(int).cumsum()\r\nmax_increase_days = {}\r\nfor code, group in stock_info.groupby('CODE'):\r\n    max_increase_days[code] = group.groupby('label').size().max() – 1\r\nmax_rise_df = pd.DataFrame(list(max_increase_days.items()), columns=['CODE', 'max_increase_days'])\r\n```\r\n\r\n#### SPL\r\n \r\n\r\n|   | A |\r\n| --- | --- |\r\n| 1 | StockRecords.xlsx |\r\n| 2 | =T(A1).sort(DT) |\r\n| 3 | =A2.group(CODE;\\~.group@i(CL\u003c CL[-1]).max(~.len()):max_increase_days) |\r\n\r\n**Especially skilled at complex scenarios such as order-related operations, sliding windows, and cross-row computations, much simpler than SQL or Python**\r\n\r\n\r\n[What to use for data analysis programming: SPL,Python or SPL?](https://www.esproc.com/langding-page-scientist/)\r\n\r\n---\r\n\r\n\u003cdiv align=\"center\"\u003e\r\n    \u003ch3\u003eEasy Big Data and Parallel Support\u003c/h3\u003e\r\n\u003c/div\u003e \r\n\r\n![image](https://www.esproc.com/wp-content/themes/scudata-en/images/Langding-Page-SPL-Data-Analysis/8.png)\r\n\r\n\r\n---\r\n\r\n\u003cdiv align=\"center\"\u003e\r\n    \u003ch3\u003eLightweight and Portable\u003c/h3\u003e\r\n\u003c/div\u003e  \r\n\r\n\u003cdiv align=\"center\"\u003e \r\n    \u003cimg src=\"https://www.esproc.com/wp-content/themes/scudata-en/images/Langding-Page-SPL-Data-Analysis/9.png\" width=\"60%\" /\u003e\r\n\u003c/div\u003e\r\n\r\n---\r\n\r\n# Resource \r\n\r\n- [Read the e-book \"SPL Programming\"](https://www.esproc.com/html/SPL-programming-book.html)\r\n- [Watch the video \"SPL video course\"](https://www.esproc.com/html/SPL-programming-course.html)\r\n- [Download esProc Desktop](https://www.esproc.com/download-desktop/)\r\n- [Community - c.esproc.com](https://c.esproc.com/)\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsplware%2Fesproc_analytics","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsplware%2Fesproc_analytics","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsplware%2Fesproc_analytics/lists"}