Published
Edited
Aug 12, 2019
Insert cell
Insert cell
Insert cell
OwnerBizId = 42
Insert cell
Allmessages = [
{sender: 1, recipient: 42, messageId: 1},
{sender: 42, recipient: 1, messageId: 1},
{sender: 2, recipient: 42, messageId: 2},
{sender: 2, recipient: 42, messageId: 2},
{sender: 3, recipient: 88, messageId: 3},
{sender: 3, recipient: 42, messageId: 4}]
Insert cell
noMessages = []
Insert cell
/* Exemple output: 33 (Business owner 42 received three conversations total (1, 2, and 4), but only responded to one conversation (conversation ID 1)).*/

function BuzOwnerinfo(ownerId, messages) {
var rate = 0
var ownerResponse = 0
var ownerResponseID = []
var senderID = []
var onwerInbox = []
var conversationTotal = 0
// Return 0 if user doesn't have any messages
if (messages === undefined || messages.length == 0) {
return 0
}
// loop through user messages
for (var i = 0; i < messages.length; i++) {
var sender = messages[i]["sender"]
var receiver = messages[i]["recipient"]
var message = messages[i]["messageId"]
//Check if Owner responded to any messages and store the message id
if (sender == ownerId) {
ownerResponse += 1
ownerResponseID.push(message)
}
// Check if the owner has received any messages and store message id
if (receiver == ownerId) {
conversationTotal += 1
onwerInbox.push(message)
}
}
// Sum all the unique messagesID
var sumOfReceivedMessageId = onwerInbox.reduce((a, b) => a + b, 0)
// subtratct ownerId - total inbox from unique users.
var result = ownerId - sumOfReceivedMessageId

// var result = "Business owner " + ownerId + " received " + conversationTotal + " conversation total, but only responded to " + ownerResponse + " (conversation ID " + ownerResponseID + ")."
return result
}
Insert cell
BuzOwnerinfo(OwnerBizId, Allmessages)
Insert cell
Insert cell
input = [
['ads', 7, 3],
['ads', 8, 2],
['ads', 5, 1],
['page_views', 11, 2],
['page_views', 12, 3],
['photo_views', 10, 3],
['reviews', 17, 2],
]

//[2, 3]
Insert cell

function FindAvg(event) {
var adsOcc = []
var adsBizId = []
var pageViewsOcc = []
var pageViewsBizId = []
var photoViewsOcc = []
var photoViewsBizId = []
var reviewsOcc = []
var reviewsBizId = []


for (var i = 0; i < event.length; i++) {
var eventType = event[i][0]
var occ = event[i][1]
var bizId = event[i][2]
if (eventType == 'ads') {
adsOcc.push(occ)
adsBizId.push(bizId)
}
if (eventType == 'page_views') {
pageViewsOcc.push(occ)
pageViewsBizId.push(bizId)
}
if (eventType == 'photo_views') {
photoViewsOcc.push(occ)
photoViewsBizId.push(bizId)
}
if (eventType == 'reviews') {
reviewsOcc.push(occ)
reviewsBizId.push(bizId)
}
}
var totalAds = adsOcc.reduce((a, b) => a + b, 0)
var adsAvg = totalAds/adsOcc.length
var totalpageViews= pageViewsOcc.reduce((a, b) => a + b, 0)
var pageViewsAvg = totalpageViews/pageViewsOcc.length
var totalphotoView = photoViewsOcc.reduce((a, b) => a + b, 0)
var photoViewAvg = totalphotoView/photoViewsOcc.length
var totalReviews = reviewsOcc.reduce((a, b) => a + b, 0)
var reviewsAvg = totalReviews/reviewsOcc.length
var testArr = []
testArr.push(adsBizId, pageViewsBizId)
var testArr2 = []
testArr2.push(photoViewsBizId + reviewsBizId)
// 2 event occurences and occ.length >= 1
var res = reviewsBizId.filter(value => -1 !== photoViewsBizId.indexOf(value)).sort()
var res1 = adsBizId.filter(value => -1 !== pageViewsBizId.indexOf(value)).sort()
var finalResult = [res + res1]
return finalResult
}

Insert cell
FindAvg(input)
Insert cell
Insert cell
Insert cell
businessArr = [
{
"name": "Whole Foods",
"location" : "Seattle",
"id": 123
},
{
"name": "Walmart",
"location": "Tampa",
"id": 122
},
{
"name": "HEB",
"location": "Texas",
"id": 1234
},
{
"name": "Peets",
"location": "San Francisco",
"id": 12344
},
{
"name": "HEB",
"location": "Texas",
"id": 1234
}
]
Insert cell
// Runtime: O(n^2)
function findBiz(business, location) {
var bizDict = {}
// Loop through the business and create a dictionary with number
// of occurances for each business name
for (var i = 0; i < business.length; i++) {
var biz = business[i].name
// if it's already in the dict add 1
if (biz in bizDict) {
bizDict[biz] += 1
}
// if it's not in the dict set it to 1
else {
bizDict[biz] = 1
}
}
var bizArr = []
// Loop through bizDict and create sorted array
for (var key in bizDict) {
var value = bizDict[key]
// if array is empty add item
if (bizArr.length == 0) {
bizArr.push([key, value])
} else {
//Iterate through array and insert the item at the right index
for (var x = 0; x < bizArr.length; x++) {
let item = bizArr[x]
// Sort bussiness by occurances
if (item[1] < value) {
bizArr.splice(x, 0, [key, value])
break
// Sort bussiness by name
} else if (value == item[1] && item[0] > key) {
bizArr.splice(x, 0, [key, value])
break
// if we reach the end of the array push the business
} else if (x == bizArr.length) {
bizArr.push([key, value])
}
}
}
}
return bizArr
}
Insert cell
findBiz(businessArr, "Texas")
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more