-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmlcode.py
112 lines (96 loc) · 3.02 KB
/
mlcode.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# -*- coding: utf-8 -*-
"""Untitled0.ipynb
Automatically generated by Colaboratory.
Original file is located at
https://colab.research.google.com/drive/1EzHFwThOmluL-YuLg_Wmnkcx1X2Pu-G3
"""
import firebase_admin
from firebase_admin import credentials
from firebase_admin import firestore
cred=credentials.Certificate("ninenine-c873e-firebase-adminsdk-2il1d-02ba5247e1.json")
firebase_admin.initialize_app(cred)
def getData():
db=firestore.client()
user_ref=db.collection('users')
users=user_ref.stream()
theUsers={}
theFoodItems={}
for user in users:
day_ref=user_ref.document(user.id).collection('daily')
days=day_ref.stream()
theUsers[user.id]=[]
for day in days:
doc_ref=day_ref.document(day.id).collection('FoodItems')
docs=doc_ref.stream()
for doc in docs:
mydict=doc.to_dict()
theFoodItems[doc.id]={}
theUsers[user.id].append(doc.id)
theFoodItems[doc.id]["calories"]=(mydict['calories'])
theFoodItems[doc.id]["food_Name"]=(mydict['food_Name'])
return theUsers,theFoodItems
from math import sqrt
def sim_pearson(prefs,p1,p2):
si={}
for item in prefs[p1]:
if item in prefs[p2]:
si[item]=1
n=len(si)
if n==0: return 0
sum1=sum([prefs[p1][it] for it in si])
sum2=sum([prefs[p2][it] for it in si])
sum1Sq=sum([pow(prefs[p1][it],2) for it in si])
sum2Sq=sum([pow(prefs[p2][it],2) for it in si])
pSum=sum([prefs[p1][it]*prefs[p2][it] for it in si])
num=pSum-(sum1*sum2/n)
den=sqrt((sum1Sq-pow(sum1,2)/n)*(sum2Sq-pow(sum2,2)/n))
if den==0:return 0
r=num/den
return r
def topMatches(prefs,person,n=5,similarity=sim_pearson):
scores=[(similarity(prefs,person,other),other) for other in prefs if other!=person]
scores.sort()
scores.reverse()
return scores[0:n]
def getRecomendations(prefs,person,n=5,similarity=sim_pearson):
totals={}
simSums={}
for other in prefs:
if other==person: continue
sim=similarity(prefs,person,other)
if sim<=0:continue
for item in prefs[other]:
if item not in prefs[person] or prefs[person][item]==0:
totals.setdefault(item,0)
totals[item]+=prefs[other][item]*sim
simSums.setdefault(item,0)
simSums[item]+=sim
rankings=[(total/simSums[item],item) for item,total in totals.items()]
rankings.sort()
rankings.reverse()
recom=[]
for a in rankings[0:n]:
recom.append(a[1])
return recom
def transfromPrefs(prefs):
result={}
for person in prefs:
for item in prefs[person]:
result.setdefault(item,{})
result[item][person]=prefs[person][item]
return result
import pandas as pd
data1,data2=getData()
df=pd.DataFrame(0,index=data2.keys(),columns=data1.keys())
print(data1)
for users in data1:
for dat in data1[users]:
df.loc[dat,users]=1.0
df=df.to_dict()
USER="STsHPz3Gb7SWJqK9ChgD0yidaq52"
db=firestore.client()
recom=getRecomendations(df,USER,1)
print(recom)
for item in recom:
recomend=data2[item]
db.collection('users').document(USER).collection('Recomendation').document(item).set(recomend)