From f5fee9b499a68c66176e2aabd076a307cccd7e5b Mon Sep 17 00:00:00 2001 From: Norm Rasmussen Date: Tue, 7 Feb 2023 18:07:54 -0500 Subject: [PATCH] Walmart snafu with too much data. Some notes and other small changes. --- SKO.md | 42 ++++++++++++++- Scripts/GoogleScripts/Artera_wowprog/Code.js | 4 +- Scripts/WalmartExcel/walmart.py | 50 ++++++++++++------ Timetagger/_timetagger/users/norm~bm9ybQ==.db | Bin 356352 -> 364544 bytes 4 files changed, 76 insertions(+), 20 deletions(-) diff --git a/SKO.md b/SKO.md index 542b2550..9a1861be 100644 --- a/SKO.md +++ b/SKO.md @@ -15,11 +15,42 @@ Develop a 3-5 minute “Shark Tank Style” elevator pitch for Northpass. Your p ### Response +Sharks, I am seeking from you a $300,000 investment and a 2% in our next generation customer education SaaS company. + +You're probably rolling your eyes right now, knowing there's no money in education. If people want information, they +will just google it, right? Sure, they could, but then you'd be relying on Marketing to do the heavy lifting of +SEO - basically, a glorified word search game for kids. + +You may also be thinking back to days in college classrooms with horrible scan-trons and final exams. All these types of +educational environments are conducive to only one thing: secrecy and negative competition. Unless you're the NSO and +selling Pegasus 2.01, why would you want your clients to be secretive and combative with their learning? + +Northpass is so much more than learning. It is an invaluable tool to deepen brand loyalty, increase market share, and +strengthen the bonds between your internal and external stakeholders. + +Take a look at your own companies, Sharks. Where does "learning" fall in your tech stack? If you run your companies +anything like my clients, where over 60% have admitted to having lukewarm executive buy-in, you have placed an integral +part of your customer experience at the bottom of the stack. But you know what? That's okay if Customer Education is +sitting at the bottom of the stack. That's because it is my firm believe that customer education is the cornerstone of +any well-adjusted growing tech company. + +As tech-entrepreneurs we have put all the value on educating ourselves on how to run companies and grow teams, but +except our clients to just understand our app and technology. + +From the most technical of companies, like Recast Software, educating their clients on Microsoft Endpoint Solutions and +Server Management, or Skuid, a code-less solution for data connecting workflows, to Big Ideas Learning, a Saas solution +for the-always-busy public school teacher, customer education is the current that flows underneath all your other +systems. + +The value is simple. Give your customers right-on-time experiences with your brand and product in an asynchronous +format so that when + ## Why Now? ### Instructions -Develop a 3-5 minute “Shark Tank Style” elevator pitch for investing in Northpass and digital customer education now. Your pitch should: +Develop a 3-5 minute “Shark Tank Style” elevator pitch for investing in Northpass and digital customer education now. +Your pitch should: * Detail the investment you’re seeking for Northpass * Identify the problem Northpass is solving @@ -28,11 +59,18 @@ Develop a 3-5 minute “Shark Tank Style” elevator pitch for investing in Nort ### Response +Sharks, you've learned a lot about Customer Education and the learning +management system ecosystem today. There are a ton of competitors in the market + ## AI & LI ### Instructions -Use OpenAI’s ChatGPT, develop 20 topics for a customer education Linkedin post. Then, pick a topic and use ChatGPT to craft your first social-selling Linkedin post. Make sure that you use the OpenAI output as a basis, but then they truly make it your own with your words and personality. It needs to be something that, when you read it out loud, you would feel very natural with and happy about. +Use OpenAI’s ChatGPT, develop 20 topics for a customer education Linkedin post. +Then, pick a topic and use ChatGPT to craft your first social-selling Linkedin +post. Make sure that you use the OpenAI output as a basis, but then they truly +make it your own with your words and personality. It needs to be something that, +when you read it out loud, you would feel very natural with and happy about. ## Customer Success Stories diff --git a/Scripts/GoogleScripts/Artera_wowprog/Code.js b/Scripts/GoogleScripts/Artera_wowprog/Code.js index b8438f93..eb67be50 100644 --- a/Scripts/GoogleScripts/Artera_wowprog/Code.js +++ b/Scripts/GoogleScripts/Artera_wowprog/Code.js @@ -49,7 +49,7 @@ function findRow(course, avgProgress, lastColumn) { } } writeSheet.getRange(numRows, 1).setValue("Average Progress across all Courses"); - writeSheet.getRange(numRows, lastColumn+1).setValue(avgProgress(progArray)); + writeSheet.getRange(numRows, lastColumn+1).setValue(averageProgress(progArray)); } function percentDiff(prevVal, avgProgress){ @@ -71,7 +71,7 @@ function percentDiff(prevVal, avgProgress){ return percentChange } -function avgProgress(progArray) { +function averageProgress(progArray) { var progCalc = progArray => progArray.reduce((a,b) => a + b, 0) / progArray.length return progCalc } diff --git a/Scripts/WalmartExcel/walmart.py b/Scripts/WalmartExcel/walmart.py index f4a29352..9280f7d1 100644 --- a/Scripts/WalmartExcel/walmart.py +++ b/Scripts/WalmartExcel/walmart.py @@ -1,6 +1,7 @@ import os from datetime import date import glob +import re import shutil import pandas as pd @@ -12,26 +13,31 @@ basefile = "Walmart_Weekly_Base.xlsx" def copytemplate(rootdir, basefile): + segments = ["Group1", "Group2", "Group3", "Group4", "Group5"] today = date.today() today = today.strftime("%m.%d.%Y") template = rootdir + basefile - # todayFile = f"Walmart-{today}.xlsx" - todayFile = "Walmart-Chris-Template.xlsx" + listfiles = glob.glob(downloadir + "WeeklyMCA*.csv") + if os.path.exists(rootdir): - shutil.copy2(template, rootdir + todayFile) - # dirfiles = os.listdir(rootdir) - # print(dirfiles) - # currentDash = rootdir + f"Walmart-{today}.xlsx" - currentDash = rootdir + "Walmart-Chris-Template.xlsx" - # print(currentDash) - findlatestExport(currentDash) - - -def findlatestExport(currentDash): - listfiles = glob.glob(downloadir + "*.csv") - latestdownload = max(listfiles, key=os.path.getctime) - # print(latestdownload) - copytoDash(latestdownload, currentDash) + for segment in segments: + todayFile = f"Walmart-{segment}-{today}.xlsx" + shutil.copy2(template, rootdir + todayFile) + currentDash = rootdir + f"Walmart-{segment}-{today}.xlsx" + for latestdownload in listfiles: + if re.search('(?:Group1)', currentDash) and re.search('(?:Group1)', latestdownload): + copytoDash(latestdownload, currentDash) + elif re.search('(?:Group2)', currentDash) and re.search('(?:Group2)', latestdownload): + copytoDash(latestdownload, currentDash) + elif re.search('(?:Group3)', currentDash) and re.search('(?:Group3)', latestdownload): + copytoDash(latestdownload, currentDash) + elif re.search('(?:Group4)', currentDash) and re.search('(?:Group4)', latestdownload): + copytoDash(latestdownload, currentDash) + elif re.search('(?:Group5)', currentDash) and re.search('(?:Group5)', latestdownload): + copytoDash(latestdownload, currentDash) + else: + print("No matching Looker Pulls or Templates Found!") +# TODO: Update these if statements to loop through the groups in a better fashion def copytoDash(latestdownload, currentDash): @@ -76,3 +82,15 @@ def cleanitUp(currentDash): if __name__ == "__main__": copytemplate(rootdir, basefile) + +# TODO: Dataset is too large. Add the math from the excel into the script so that the dataset references the final data and a much smaller set. Commented below is the math as far as I can tell. +""" +Math: + Courses: + Enrolled: For each unique course name, count number of "Enrolled" (Col. C) fields if != null. + Started: For each unique course name, count number of "Attempt Start" (Col. D) fields if != null. + Completed: For each unique course name, count number of "Progress" (Col. G) fields if == 100% + Activity Completions: + Started first activity == Started number above in Course + Activity >= 1 Completions: +""" diff --git a/Timetagger/_timetagger/users/norm~bm9ybQ==.db b/Timetagger/_timetagger/users/norm~bm9ybQ==.db index 939bd2fc03de610a7e6cc79b9c25ef2f4b8838ad..f0550d7a1701878d205156b0917d3ca4fc1aa3a9 100644 GIT binary patch delta 7082 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 E0_cB7g#Z8m