hawke84 commited on
Commit
ed76b91
·
1 Parent(s): 8b3feac

Initial checkin

Browse files
Files changed (5) hide show
  1. .gitignore +3 -0
  2. app.py +91 -0
  3. app_desktop.py +90 -0
  4. cattle_log.json +1004 -0
  5. requirements.txt +3 -0
.gitignore ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ .DS_Store
2
+ .env
3
+
app.py ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import numpy as np
3
+ from sklearn.ensemble import IsolationForest
4
+ import matplotlib.pyplot as plt
5
+ from mpl_toolkits.mplot3d import Axes3D # This import is necessary for 3D plotting, even if it seems unused
6
+ import json
7
+
8
+ # Title for Streamlit app
9
+ st.title('Isolation Forest Anomaly Detection')
10
+
11
+ # Upload log to parse
12
+ json_content = None
13
+ uploaded_file = st.file_uploader("Upload logfile", type="json")
14
+
15
+ if uploaded_file:
16
+ # Get the JSON content
17
+ log_content = json.loads(uploaded_file.getvalue())['logs']
18
+
19
+ # Select dimensions
20
+ num_dimensions = st.selectbox('Select number of dimensions:', [1, 2, 3], index=2)
21
+
22
+ X = []
23
+
24
+ # Iterate over each log entry in the log_content
25
+ for log_entry in log_content:
26
+ # Extract and convert the necessary attributes
27
+ total_today_str = log_entry['distanceTraveled']['totalToday'].rstrip('m')
28
+ heart_rate = int(log_entry['healthData']['heartRate']) # Assuming heart rate is always an integer
29
+ weight_str = log_entry['healthData']['weight'].rstrip('kg')
30
+
31
+ # Convert the distance and weight to floating-point values
32
+ total_today = float(total_today_str) # Convert distance to float
33
+ weight = float(weight_str) # Convert weight to float
34
+
35
+ # Create a 3D vector for the current log entry and append it to the list of vectors
36
+ vector_3d = [total_today, heart_rate, weight]
37
+ X.append(vector_3d)
38
+
39
+ # Convert X into a NumPy array for easier slicing
40
+ X = np.array(X)
41
+
42
+ # Generating synthetic data
43
+ rng = np.random.RandomState(42)
44
+
45
+ # Fit the model
46
+ clf = IsolationForest(max_samples=100, random_state=rng)
47
+ clf.fit(X)
48
+ y_pred = clf.predict(X)
49
+
50
+ # Plotting based on the selected number of dimensions
51
+ if num_dimensions == 3:
52
+ fig = plt.figure(figsize=(10, 7))
53
+ ax = fig.add_subplot(111, projection='3d')
54
+ ax.scatter(X[:, 0], X[:, 1], X[:, 2], color=['red' if pred == -1 else 'blue' for pred in y_pred], s=50)
55
+ ax.set_title("Isolation Forest Anomaly Detection (3D)")
56
+ ax.set_xlabel("Distance travelled")
57
+ ax.set_ylabel("Heartrate")
58
+ ax.set_zlabel("Weight")
59
+ st.pyplot(fig)
60
+ elif num_dimensions == 1:
61
+ fig, ax = plt.subplots()
62
+ # For 1D, ensure to select one dimension (e.g., X[:, 0] for distance travelled)
63
+ ax.scatter(X[:, 0], np.zeros_like(X[:, 0]), color=['red' if pred == -1 else 'blue' for pred in y_pred], s=50)
64
+ ax.set_title("Isolation Forest Anomaly Detection (1D)")
65
+ ax.set_xlabel("Distance travelled")
66
+ st.pyplot(fig)
67
+ else: # Default to 2D plotting
68
+ fig, ax = plt.subplots()
69
+ ax.scatter(X[:, 0], X[:, 1], color=['red' if pred == -1 else 'blue' for pred in y_pred], s=50)
70
+ ax.set_title("Isolation Forest Anomaly Detection (2D)")
71
+ ax.set_xlabel("Distance travelled")
72
+ ax.set_ylabel("Heartrate")
73
+ st.pyplot(fig)
74
+
75
+
76
+
77
+
78
+ # Random data
79
+ # Generating a dataset with points. 95 points are generated from a Gaussian distribution,
80
+ # and 5 points are anomalies added manually.
81
+ # X = 0.3 * rng.randn(95, num_dimensions)
82
+ # X = np.r_[X + 2, X - 2]
83
+ # X_outliers = rng.uniform(low=-4, high=4, size=(5, num_dimensions))
84
+ # X = np.r_[X, X_outliers]
85
+
86
+ # # # Fit the model
87
+ # clf = IsolationForest(max_samples=100, random_state=rng)
88
+ # clf.fit(X)
89
+
90
+ # Predictions
91
+ # y_pred = clf.predict(X)
app_desktop.py ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+ from sklearn.ensemble import IsolationForest
3
+ import matplotlib.pyplot as plt
4
+ from mpl_toolkits.mplot3d import Axes3D
5
+ import json
6
+
7
+ def get_data_from_json():
8
+ with open('cattle_log.json', 'r') as file:
9
+ log_content = json.load(file)['logs']
10
+
11
+ X = []
12
+
13
+ # Iterate over each log entry in the log_content
14
+ for log_entry in log_content:
15
+ # Extract and convert the necessary attributes
16
+ total_today_str = log_entry['distanceTraveled']['totalToday'].rstrip('m')
17
+ heart_rate = int(log_entry['healthData']['heartRate']) # Assuming heart rate is always an integer
18
+ weight_str = log_entry['healthData']['weight'].rstrip('kg')
19
+
20
+ # Convert the distance and weight to floating-point values
21
+ total_today = float(total_today_str) # Convert distance to float
22
+ weight = float(weight_str) # Convert weight to float
23
+
24
+ # Create a 3D vector for the current log entry and append it to the list of vectors
25
+ vector_3d = [total_today, heart_rate, weight]
26
+ X.append(vector_3d)
27
+
28
+ # Convert X into a NumPy array for easier slicing
29
+ X = np.array(X)
30
+ return X
31
+
32
+
33
+ def generate_random_data(num_dimensions, rng):
34
+ # Generating a dataset with 100 points. 95 points are generated from a Gaussian distribution,
35
+ # and 5 points are anomalies added manually.
36
+ X = 0.3 * rng.randn(95, num_dimensions)
37
+ X = np.r_[X + 2, X - 2]
38
+ X_outliers = rng.uniform(low=-4, high=4, size=(5, num_dimensions))
39
+ X = np.r_[X, X_outliers]
40
+ return X
41
+
42
+
43
+
44
+ # Generating synthetic data
45
+ rng = np.random.RandomState(42)
46
+
47
+ # Ask the user for the number of dimensions
48
+ num_dimensions = int(input("Select number of dimensions (1, 2, or 3): "))
49
+
50
+ # Input data
51
+ X = get_data_from_json()
52
+ # X = generate_random_data(num_dimensions, rng)
53
+
54
+ # Fit the model
55
+ clf = IsolationForest(max_samples=100, random_state=rng)
56
+ clf.fit(X)
57
+
58
+ # # Predictions
59
+ y_pred = clf.predict(X)
60
+
61
+ if num_dimensions == 3:
62
+ # Plotting in 3D
63
+ fig = plt.figure(figsize=(10, 7))
64
+ ax = fig.add_subplot(111, projection='3d') # Create a 3D subplot
65
+
66
+ # Extracting the three dimensions for plotting
67
+ x_axis = X[:, 0]
68
+ y_axis = X[:, 1]
69
+ z_axis = X[:, 2]
70
+
71
+ # Scatter plot for 3D data
72
+ ax.scatter(x_axis, y_axis, z_axis, color=['red' if pred == -1 else 'blue' for pred in y_pred], s=50)
73
+
74
+ ax.set_title("Isolation Forest Anomaly Detection (3D)")
75
+ ax.set_xlabel("Distance travelled")
76
+ ax.set_ylabel("Heartrate")
77
+ ax.set_zlabel("Weight")
78
+ plt.show()
79
+
80
+ else:
81
+ # Plotting
82
+ plt.figure(figsize=(10, 7))
83
+ x_axis = X if num_dimensions == 1 else X[:, 0]
84
+ y_axis = np.zeros_like(X) if num_dimensions == 1 else X[:, 1]
85
+ plt.scatter(x_axis,y_axis, color=['red' if pred == -1 else 'blue' for pred in y_pred], s=50)
86
+ plt.title("Isolation Forest Anomaly Detection")
87
+ plt.xlabel("Distance travelled")
88
+ plt.ylabel("Heartrate")
89
+ plt.grid(True)
90
+ plt.show()
cattle_log.json ADDED
@@ -0,0 +1,1004 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "logs": [
3
+ {
4
+ "timestamp": "2024-04-10T08:30:00Z",
5
+ "cattleID": "A123",
6
+ "event": "dailyLog",
7
+ "location": {
8
+ "latitude": 35.6895,
9
+ "longitude": 139.6917
10
+ },
11
+ "distanceTraveled": {
12
+ "sinceLastUpdate": "200m",
13
+ "totalToday": "2000m"
14
+ },
15
+ "healthData": {
16
+ "heartRate": 60,
17
+ "temperature": 38.5,
18
+ "activityLevel": "normal",
19
+ "weight": "502.0kg",
20
+ "age": "4 years"
21
+ }
22
+ },
23
+ {
24
+ "timestamp": "2024-04-11T08:30:00Z",
25
+ "cattleID": "A123",
26
+ "event": "dailyLog",
27
+ "location": {
28
+ "latitude": 35.689600000000006,
29
+ "longitude": 139.6918
30
+ },
31
+ "distanceTraveled": {
32
+ "sinceLastUpdate": "200m",
33
+ "totalToday": "2008m"
34
+ },
35
+ "healthData": {
36
+ "heartRate": 60,
37
+ "temperature": 38.5,
38
+ "activityLevel": "normal",
39
+ "weight": "500.6kg",
40
+ "age": "4 years"
41
+ }
42
+ },
43
+ {
44
+ "timestamp": "2024-04-12T08:30:00Z",
45
+ "cattleID": "A123",
46
+ "event": "dailyLog",
47
+ "location": {
48
+ "latitude": 35.6897,
49
+ "longitude": 139.6919
50
+ },
51
+ "distanceTraveled": {
52
+ "sinceLastUpdate": "200m",
53
+ "totalToday": "2006m"
54
+ },
55
+ "healthData": {
56
+ "heartRate": 60,
57
+ "temperature": 38.3,
58
+ "activityLevel": "normal",
59
+ "weight": "503.3kg",
60
+ "age": "4 years"
61
+ }
62
+ },
63
+ {
64
+ "timestamp": "2024-04-13T08:30:00Z",
65
+ "cattleID": "A123",
66
+ "event": "dailyLog",
67
+ "location": {
68
+ "latitude": 35.689800000000005,
69
+ "longitude": 139.692
70
+ },
71
+ "distanceTraveled": {
72
+ "sinceLastUpdate": "200m",
73
+ "totalToday": "1996m"
74
+ },
75
+ "healthData": {
76
+ "heartRate": 60,
77
+ "temperature": 38.8,
78
+ "activityLevel": "normal",
79
+ "weight": "500.8kg",
80
+ "age": "4 years"
81
+ }
82
+ },
83
+ {
84
+ "timestamp": "2024-04-14T08:30:00Z",
85
+ "cattleID": "A123",
86
+ "event": "dailyLog",
87
+ "location": {
88
+ "latitude": 35.6899,
89
+ "longitude": 139.6921
90
+ },
91
+ "distanceTraveled": {
92
+ "sinceLastUpdate": "200m",
93
+ "totalToday": "1994m"
94
+ },
95
+ "healthData": {
96
+ "heartRate": 60,
97
+ "temperature": 38.5,
98
+ "activityLevel": "normal",
99
+ "weight": "500.9kg",
100
+ "age": "4 years"
101
+ }
102
+ },
103
+ {
104
+ "timestamp": "2024-04-15T08:30:00Z",
105
+ "cattleID": "A123",
106
+ "event": "dailyLog",
107
+ "location": {
108
+ "latitude": 35.690000000000005,
109
+ "longitude": 139.69219999999999
110
+ },
111
+ "distanceTraveled": {
112
+ "sinceLastUpdate": "200m",
113
+ "totalToday": "2006m"
114
+ },
115
+ "healthData": {
116
+ "heartRate": 60,
117
+ "temperature": 38.2,
118
+ "activityLevel": "normal",
119
+ "weight": "498.3kg",
120
+ "age": "4 years"
121
+ }
122
+ },
123
+ {
124
+ "timestamp": "2024-04-16T08:30:00Z",
125
+ "cattleID": "A123",
126
+ "event": "dailyLog",
127
+ "location": {
128
+ "latitude": 35.6901,
129
+ "longitude": 139.6923
130
+ },
131
+ "distanceTraveled": {
132
+ "sinceLastUpdate": "200m",
133
+ "totalToday": "1985m"
134
+ },
135
+ "healthData": {
136
+ "heartRate": 60,
137
+ "temperature": 38.3,
138
+ "activityLevel": "normal",
139
+ "weight": "504.9kg",
140
+ "age": "4 years"
141
+ }
142
+ },
143
+ {
144
+ "timestamp": "2024-04-17T08:30:00Z",
145
+ "cattleID": "A123",
146
+ "event": "dailyLog",
147
+ "location": {
148
+ "latitude": 35.690200000000004,
149
+ "longitude": 139.6924
150
+ },
151
+ "distanceTraveled": {
152
+ "sinceLastUpdate": "200m",
153
+ "totalToday": "1995m"
154
+ },
155
+ "healthData": {
156
+ "heartRate": 60,
157
+ "temperature": 38.2,
158
+ "activityLevel": "normal",
159
+ "weight": "503.1kg",
160
+ "age": "4 years"
161
+ }
162
+ },
163
+ {
164
+ "timestamp": "2024-04-18T08:30:00Z",
165
+ "cattleID": "A123",
166
+ "event": "dailyLog",
167
+ "location": {
168
+ "latitude": 35.6903,
169
+ "longitude": 139.6925
170
+ },
171
+ "distanceTraveled": {
172
+ "sinceLastUpdate": "200m",
173
+ "totalToday": "1983m"
174
+ },
175
+ "healthData": {
176
+ "heartRate": 60,
177
+ "temperature": 38.6,
178
+ "activityLevel": "normal",
179
+ "weight": "505.6kg",
180
+ "age": "4 years"
181
+ }
182
+ },
183
+ {
184
+ "timestamp": "2024-04-19T08:30:00Z",
185
+ "cattleID": "A123",
186
+ "event": "dailyLog",
187
+ "location": {
188
+ "latitude": 35.690400000000004,
189
+ "longitude": 139.6926
190
+ },
191
+ "distanceTraveled": {
192
+ "sinceLastUpdate": "200m",
193
+ "totalToday": "1990m"
194
+ },
195
+ "healthData": {
196
+ "heartRate": 60,
197
+ "temperature": 38.6,
198
+ "activityLevel": "normal",
199
+ "weight": "503.1kg",
200
+ "age": "4 years"
201
+ }
202
+ },
203
+ {
204
+ "timestamp": "2024-04-20T08:30:00Z",
205
+ "cattleID": "A123",
206
+ "event": "dailyLog",
207
+ "location": {
208
+ "latitude": 35.6905,
209
+ "longitude": 139.6927
210
+ },
211
+ "distanceTraveled": {
212
+ "sinceLastUpdate": "200m",
213
+ "totalToday": "2002m"
214
+ },
215
+ "healthData": {
216
+ "heartRate": 60,
217
+ "temperature": 38.4,
218
+ "activityLevel": "normal",
219
+ "weight": "501.9kg",
220
+ "age": "4 years"
221
+ }
222
+ },
223
+ {
224
+ "timestamp": "2024-04-21T08:30:00Z",
225
+ "cattleID": "A123",
226
+ "event": "dailyLog",
227
+ "location": {
228
+ "latitude": 35.6906,
229
+ "longitude": 139.6928
230
+ },
231
+ "distanceTraveled": {
232
+ "sinceLastUpdate": "200m",
233
+ "totalToday": "1996m"
234
+ },
235
+ "healthData": {
236
+ "heartRate": 61,
237
+ "temperature": 38.8,
238
+ "activityLevel": "normal",
239
+ "weight": "506.7kg",
240
+ "age": "4 years"
241
+ }
242
+ },
243
+ {
244
+ "timestamp": "2024-04-22T08:30:00Z",
245
+ "cattleID": "A123",
246
+ "event": "dailyLog",
247
+ "location": {
248
+ "latitude": 35.6907,
249
+ "longitude": 139.6929
250
+ },
251
+ "distanceTraveled": {
252
+ "sinceLastUpdate": "200m",
253
+ "totalToday": "1989m"
254
+ },
255
+ "healthData": {
256
+ "heartRate": 63,
257
+ "temperature": 38.5,
258
+ "activityLevel": "normal",
259
+ "weight": "499.1kg",
260
+ "age": "4 years"
261
+ }
262
+ },
263
+ {
264
+ "timestamp": "2024-04-23T08:30:00Z",
265
+ "cattleID": "A123",
266
+ "event": "dailyLog",
267
+ "location": {
268
+ "latitude": 35.6908,
269
+ "longitude": 139.69299999999998
270
+ },
271
+ "distanceTraveled": {
272
+ "sinceLastUpdate": "200m",
273
+ "totalToday": "1981m"
274
+ },
275
+ "healthData": {
276
+ "heartRate": 61,
277
+ "temperature": 38.6,
278
+ "activityLevel": "normal",
279
+ "weight": "505.0kg",
280
+ "age": "4 years"
281
+ }
282
+ },
283
+ {
284
+ "timestamp": "2024-04-24T08:30:00Z",
285
+ "cattleID": "A123",
286
+ "event": "dailyLog",
287
+ "location": {
288
+ "latitude": 35.6909,
289
+ "longitude": 139.6931
290
+ },
291
+ "distanceTraveled": {
292
+ "sinceLastUpdate": "200m",
293
+ "totalToday": "1992m"
294
+ },
295
+ "healthData": {
296
+ "heartRate": 60,
297
+ "temperature": 38.4,
298
+ "activityLevel": "normal",
299
+ "weight": "499.5kg",
300
+ "age": "4 years"
301
+ }
302
+ },
303
+ {
304
+ "timestamp": "2024-04-25T08:30:00Z",
305
+ "cattleID": "A123",
306
+ "event": "dailyLog",
307
+ "location": {
308
+ "latitude": 35.691,
309
+ "longitude": 139.6932
310
+ },
311
+ "distanceTraveled": {
312
+ "sinceLastUpdate": "200m",
313
+ "totalToday": "1990m"
314
+ },
315
+ "healthData": {
316
+ "heartRate": 60,
317
+ "temperature": 38.5,
318
+ "activityLevel": "normal",
319
+ "weight": "506.6kg",
320
+ "age": "4 years"
321
+ }
322
+ },
323
+ {
324
+ "timestamp": "2024-04-26T08:30:00Z",
325
+ "cattleID": "A123",
326
+ "event": "dailyLog",
327
+ "location": {
328
+ "latitude": 35.691100000000006,
329
+ "longitude": 139.6933
330
+ },
331
+ "distanceTraveled": {
332
+ "sinceLastUpdate": "200m",
333
+ "totalToday": "2016m"
334
+ },
335
+ "healthData": {
336
+ "heartRate": 60,
337
+ "temperature": 38.8,
338
+ "activityLevel": "normal",
339
+ "weight": "505.7kg",
340
+ "age": "4 years"
341
+ }
342
+ },
343
+ {
344
+ "timestamp": "2024-04-27T08:30:00Z",
345
+ "cattleID": "A123",
346
+ "event": "dailyLog",
347
+ "location": {
348
+ "latitude": 35.6912,
349
+ "longitude": 139.6934
350
+ },
351
+ "distanceTraveled": {
352
+ "sinceLastUpdate": "200m",
353
+ "totalToday": "2012m"
354
+ },
355
+ "healthData": {
356
+ "heartRate": 60,
357
+ "temperature": 38.4,
358
+ "activityLevel": "normal",
359
+ "weight": "501.3kg",
360
+ "age": "4 years"
361
+ }
362
+ },
363
+ {
364
+ "timestamp": "2024-04-28T08:30:00Z",
365
+ "cattleID": "A123",
366
+ "event": "dailyLog",
367
+ "location": {
368
+ "latitude": 35.691300000000005,
369
+ "longitude": 139.6935
370
+ },
371
+ "distanceTraveled": {
372
+ "sinceLastUpdate": "200m",
373
+ "totalToday": "1981m"
374
+ },
375
+ "healthData": {
376
+ "heartRate": 55,
377
+ "temperature": 38.2,
378
+ "activityLevel": "normal",
379
+ "weight": "501.2kg",
380
+ "age": "4 years"
381
+ }
382
+ },
383
+ {
384
+ "timestamp": "2024-04-29T08:30:00Z",
385
+ "cattleID": "A123",
386
+ "event": "dailyLog",
387
+ "location": {
388
+ "latitude": 35.6914,
389
+ "longitude": 139.6936
390
+ },
391
+ "distanceTraveled": {
392
+ "sinceLastUpdate": "200m",
393
+ "totalToday": "2014m"
394
+ },
395
+ "healthData": {
396
+ "heartRate": 60,
397
+ "temperature": 38.8,
398
+ "activityLevel": "normal",
399
+ "weight": "503.5kg",
400
+ "age": "4 years"
401
+ }
402
+ },
403
+ {
404
+ "timestamp": "2024-04-30T08:30:00Z",
405
+ "cattleID": "A123",
406
+ "event": "dailyLog",
407
+ "location": {
408
+ "latitude": 35.691500000000005,
409
+ "longitude": 139.6937
410
+ },
411
+ "distanceTraveled": {
412
+ "sinceLastUpdate": "200m",
413
+ "totalToday": "2019m"
414
+ },
415
+ "healthData": {
416
+ "heartRate": 60,
417
+ "temperature": 38.5,
418
+ "activityLevel": "normal",
419
+ "weight": "507.0kg",
420
+ "age": "4 years"
421
+ }
422
+ },
423
+ {
424
+ "timestamp": "2024-05-01T08:30:00Z",
425
+ "cattleID": "A123",
426
+ "event": "dailyLog",
427
+ "location": {
428
+ "latitude": 35.6916,
429
+ "longitude": 139.6938
430
+ },
431
+ "distanceTraveled": {
432
+ "sinceLastUpdate": "200m",
433
+ "totalToday": "2011m"
434
+ },
435
+ "healthData": {
436
+ "heartRate": 58,
437
+ "temperature": 38.6,
438
+ "activityLevel": "normal",
439
+ "weight": "500.2kg",
440
+ "age": "4 years"
441
+ }
442
+ },
443
+ {
444
+ "timestamp": "2024-05-02T08:30:00Z",
445
+ "cattleID": "A123",
446
+ "event": "dailyLog",
447
+ "location": {
448
+ "latitude": 35.691700000000004,
449
+ "longitude": 139.69389999999999
450
+ },
451
+ "distanceTraveled": {
452
+ "sinceLastUpdate": "200m",
453
+ "totalToday": "2000m"
454
+ },
455
+ "healthData": {
456
+ "heartRate": 60,
457
+ "temperature": 38.5,
458
+ "activityLevel": "normal",
459
+ "weight": "498.7kg",
460
+ "age": "4 years"
461
+ }
462
+ },
463
+ {
464
+ "timestamp": "2024-05-03T08:30:00Z",
465
+ "cattleID": "A123",
466
+ "event": "dailyLog",
467
+ "location": {
468
+ "latitude": 35.6918,
469
+ "longitude": 139.694
470
+ },
471
+ "distanceTraveled": {
472
+ "sinceLastUpdate": "200m",
473
+ "totalToday": "2013m"
474
+ },
475
+ "healthData": {
476
+ "heartRate": 60,
477
+ "temperature": 38.4,
478
+ "activityLevel": "normal",
479
+ "weight": "503.6kg",
480
+ "age": "4 years"
481
+ }
482
+ },
483
+ {
484
+ "timestamp": "2024-05-04T08:30:00Z",
485
+ "cattleID": "A123",
486
+ "event": "dailyLog",
487
+ "location": {
488
+ "latitude": 35.691900000000004,
489
+ "longitude": 139.6941
490
+ },
491
+ "distanceTraveled": {
492
+ "sinceLastUpdate": "200m",
493
+ "totalToday": "2011m"
494
+ },
495
+ "healthData": {
496
+ "heartRate": 60,
497
+ "temperature": 38.3,
498
+ "activityLevel": "normal",
499
+ "weight": "505.1kg",
500
+ "age": "4 years"
501
+ }
502
+ },
503
+ {
504
+ "timestamp": "2024-05-05T08:30:00Z",
505
+ "cattleID": "A123",
506
+ "event": "dailyLog",
507
+ "location": {
508
+ "latitude": 35.692,
509
+ "longitude": 139.6942
510
+ },
511
+ "distanceTraveled": {
512
+ "sinceLastUpdate": "200m",
513
+ "totalToday": "1983m"
514
+ },
515
+ "healthData": {
516
+ "heartRate": 60,
517
+ "temperature": 38.6,
518
+ "activityLevel": "normal",
519
+ "weight": "505.6kg",
520
+ "age": "4 years"
521
+ }
522
+ },
523
+ {
524
+ "timestamp": "2024-05-06T08:30:00Z",
525
+ "cattleID": "A123",
526
+ "event": "dailyLog",
527
+ "location": {
528
+ "latitude": 35.6921,
529
+ "longitude": 139.6943
530
+ },
531
+ "distanceTraveled": {
532
+ "sinceLastUpdate": "200m",
533
+ "totalToday": "1981m"
534
+ },
535
+ "healthData": {
536
+ "heartRate": 60,
537
+ "temperature": 38.5,
538
+ "activityLevel": "normal",
539
+ "weight": "499.7kg",
540
+ "age": "4 years"
541
+ }
542
+ },
543
+ {
544
+ "timestamp": "2024-05-07T08:30:00Z",
545
+ "cattleID": "A123",
546
+ "event": "dailyLog",
547
+ "location": {
548
+ "latitude": 35.6922,
549
+ "longitude": 139.6944
550
+ },
551
+ "distanceTraveled": {
552
+ "sinceLastUpdate": "200m",
553
+ "totalToday": "2004m"
554
+ },
555
+ "healthData": {
556
+ "heartRate": 60,
557
+ "temperature": 38.6,
558
+ "activityLevel": "normal",
559
+ "weight": "506.3kg",
560
+ "age": "4 years"
561
+ }
562
+ },
563
+ {
564
+ "timestamp": "2024-05-08T08:30:00Z",
565
+ "cattleID": "A123",
566
+ "event": "dailyLog",
567
+ "location": {
568
+ "latitude": 35.6923,
569
+ "longitude": 139.6945
570
+ },
571
+ "distanceTraveled": {
572
+ "sinceLastUpdate": "200m",
573
+ "totalToday": "2017m"
574
+ },
575
+ "healthData": {
576
+ "heartRate": 65,
577
+ "temperature": 38.7,
578
+ "activityLevel": "normal",
579
+ "weight": "498.8kg",
580
+ "age": "4 years"
581
+ }
582
+ },
583
+ {
584
+ "timestamp": "2024-05-09T08:30:00Z",
585
+ "cattleID": "A123",
586
+ "event": "dailyLog",
587
+ "location": {
588
+ "latitude": 35.6924,
589
+ "longitude": 139.6946
590
+ },
591
+ "distanceTraveled": {
592
+ "sinceLastUpdate": "200m",
593
+ "totalToday": "1998m"
594
+ },
595
+ "healthData": {
596
+ "heartRate": 60,
597
+ "temperature": 38.7,
598
+ "activityLevel": "normal",
599
+ "weight": "502.6kg",
600
+ "age": "4 years"
601
+ }
602
+ },
603
+ {
604
+ "timestamp": "2024-05-10T08:30:00Z",
605
+ "cattleID": "A123",
606
+ "event": "dailyLog",
607
+ "location": {
608
+ "latitude": 35.6925,
609
+ "longitude": 139.69469999999998
610
+ },
611
+ "distanceTraveled": {
612
+ "sinceLastUpdate": "200m",
613
+ "totalToday": "1985m"
614
+ },
615
+ "healthData": {
616
+ "heartRate": 60,
617
+ "temperature": 38.5,
618
+ "activityLevel": "normal",
619
+ "weight": "503.1kg",
620
+ "age": "4 years"
621
+ }
622
+ },
623
+ {
624
+ "timestamp": "2024-05-11T08:30:00Z",
625
+ "cattleID": "A123",
626
+ "event": "dailyLog",
627
+ "location": {
628
+ "latitude": 35.692600000000006,
629
+ "longitude": 139.6948
630
+ },
631
+ "distanceTraveled": {
632
+ "sinceLastUpdate": "200m",
633
+ "totalToday": "1988m"
634
+ },
635
+ "healthData": {
636
+ "heartRate": 62,
637
+ "temperature": 38.7,
638
+ "activityLevel": "normal",
639
+ "weight": "500.6kg",
640
+ "age": "4 years"
641
+ }
642
+ },
643
+ {
644
+ "timestamp": "2024-05-12T08:30:00Z",
645
+ "cattleID": "A123",
646
+ "event": "dailyLog",
647
+ "location": {
648
+ "latitude": 35.6927,
649
+ "longitude": 139.6949
650
+ },
651
+ "distanceTraveled": {
652
+ "sinceLastUpdate": "200m",
653
+ "totalToday": "2019m"
654
+ },
655
+ "healthData": {
656
+ "heartRate": 60,
657
+ "temperature": 38.9,
658
+ "activityLevel": "normal",
659
+ "weight": "500.3kg",
660
+ "age": "4 years"
661
+ }
662
+ },
663
+ {
664
+ "timestamp": "2024-05-13T08:30:00Z",
665
+ "cattleID": "A123",
666
+ "event": "dailyLog",
667
+ "location": {
668
+ "latitude": 35.692800000000005,
669
+ "longitude": 139.695
670
+ },
671
+ "distanceTraveled": {
672
+ "sinceLastUpdate": "200m",
673
+ "totalToday": "2017m"
674
+ },
675
+ "healthData": {
676
+ "heartRate": 60,
677
+ "temperature": 38.6,
678
+ "activityLevel": "normal",
679
+ "weight": "502.3kg",
680
+ "age": "4 years"
681
+ }
682
+ },
683
+ {
684
+ "timestamp": "2024-05-14T08:30:00Z",
685
+ "cattleID": "A123",
686
+ "event": "dailyLog",
687
+ "location": {
688
+ "latitude": 35.6929,
689
+ "longitude": 139.6951
690
+ },
691
+ "distanceTraveled": {
692
+ "sinceLastUpdate": "200m",
693
+ "totalToday": "1998m"
694
+ },
695
+ "healthData": {
696
+ "heartRate": 60,
697
+ "temperature": 38.5,
698
+ "activityLevel": "normal",
699
+ "weight": "497.4kg",
700
+ "age": "4 years"
701
+ }
702
+ },
703
+ {
704
+ "timestamp": "2024-05-15T08:30:00Z",
705
+ "cattleID": "A123",
706
+ "event": "dailyLog",
707
+ "location": {
708
+ "latitude": 35.693000000000005,
709
+ "longitude": 139.6952
710
+ },
711
+ "distanceTraveled": {
712
+ "sinceLastUpdate": "200m",
713
+ "totalToday": "1994m"
714
+ },
715
+ "healthData": {
716
+ "heartRate": 61,
717
+ "temperature": 38.6,
718
+ "activityLevel": "normal",
719
+ "weight": "499.5kg",
720
+ "age": "4 years"
721
+ }
722
+ },
723
+ {
724
+ "timestamp": "2024-05-16T08:30:00Z",
725
+ "cattleID": "A123",
726
+ "event": "dailyLog",
727
+ "location": {
728
+ "latitude": 35.6931,
729
+ "longitude": 139.6953
730
+ },
731
+ "distanceTraveled": {
732
+ "sinceLastUpdate": "200m",
733
+ "totalToday": "1993m"
734
+ },
735
+ "healthData": {
736
+ "heartRate": 60,
737
+ "temperature": 38.2,
738
+ "activityLevel": "normal",
739
+ "weight": "501.9kg",
740
+ "age": "4 years"
741
+ }
742
+ },
743
+ {
744
+ "timestamp": "2024-05-17T08:30:00Z",
745
+ "cattleID": "A123",
746
+ "event": "dailyLog",
747
+ "location": {
748
+ "latitude": 35.693200000000004,
749
+ "longitude": 139.6954
750
+ },
751
+ "distanceTraveled": {
752
+ "sinceLastUpdate": "200m",
753
+ "totalToday": "2016m"
754
+ },
755
+ "healthData": {
756
+ "heartRate": 60,
757
+ "temperature": 38.3,
758
+ "activityLevel": "normal",
759
+ "weight": "505.2kg",
760
+ "age": "4 years"
761
+ }
762
+ },
763
+ {
764
+ "timestamp": "2024-05-18T08:30:00Z",
765
+ "cattleID": "A123",
766
+ "event": "dailyLog",
767
+ "location": {
768
+ "latitude": 35.6933,
769
+ "longitude": 139.6955
770
+ },
771
+ "distanceTraveled": {
772
+ "sinceLastUpdate": "200m",
773
+ "totalToday": "2019m"
774
+ },
775
+ "healthData": {
776
+ "heartRate": 60,
777
+ "temperature": 38.2,
778
+ "activityLevel": "normal",
779
+ "weight": "500.9kg",
780
+ "age": "4 years"
781
+ }
782
+ },
783
+ {
784
+ "timestamp": "2024-05-19T08:30:00Z",
785
+ "cattleID": "A123",
786
+ "event": "dailyLog",
787
+ "location": {
788
+ "latitude": 35.693400000000004,
789
+ "longitude": 139.69559999999998
790
+ },
791
+ "distanceTraveled": {
792
+ "sinceLastUpdate": "200m",
793
+ "totalToday": "1998m"
794
+ },
795
+ "healthData": {
796
+ "heartRate": 60,
797
+ "temperature": 38.2,
798
+ "activityLevel": "normal",
799
+ "weight": "498.0kg",
800
+ "age": "4 years"
801
+ }
802
+ },
803
+ {
804
+ "timestamp": "2024-05-20T08:30:00Z",
805
+ "cattleID": "A123",
806
+ "event": "dailyLog",
807
+ "location": {
808
+ "latitude": 35.6935,
809
+ "longitude": 139.6957
810
+ },
811
+ "distanceTraveled": {
812
+ "sinceLastUpdate": "200m",
813
+ "totalToday": "2016m"
814
+ },
815
+ "healthData": {
816
+ "heartRate": 60,
817
+ "temperature": 38.7,
818
+ "activityLevel": "normal",
819
+ "weight": "503.4kg",
820
+ "age": "4 years"
821
+ }
822
+ },
823
+ {
824
+ "timestamp": "2024-05-21T08:30:00Z",
825
+ "cattleID": "A123",
826
+ "event": "dailyLog",
827
+ "location": {
828
+ "latitude": 35.6936,
829
+ "longitude": 139.6958
830
+ },
831
+ "distanceTraveled": {
832
+ "sinceLastUpdate": "200m",
833
+ "totalToday": "2019m"
834
+ },
835
+ "healthData": {
836
+ "heartRate": 60,
837
+ "temperature": 38.2,
838
+ "activityLevel": "normal",
839
+ "weight": "503.6kg",
840
+ "age": "4 years"
841
+ }
842
+ },
843
+ {
844
+ "timestamp": "2024-05-22T08:30:00Z",
845
+ "cattleID": "A123",
846
+ "event": "dailyLog",
847
+ "location": {
848
+ "latitude": 35.6937,
849
+ "longitude": 139.6959
850
+ },
851
+ "distanceTraveled": {
852
+ "sinceLastUpdate": "200m",
853
+ "totalToday": "2005m"
854
+ },
855
+ "healthData": {
856
+ "heartRate": 60,
857
+ "temperature": 38.2,
858
+ "activityLevel": "normal",
859
+ "weight": "506.2kg",
860
+ "age": "4 years"
861
+ }
862
+ },
863
+ {
864
+ "timestamp": "2024-05-23T08:30:00Z",
865
+ "cattleID": "A123",
866
+ "event": "dailyLog",
867
+ "location": {
868
+ "latitude": 35.6938,
869
+ "longitude": 139.696
870
+ },
871
+ "distanceTraveled": {
872
+ "sinceLastUpdate": "200m",
873
+ "totalToday": "1990m"
874
+ },
875
+ "healthData": {
876
+ "heartRate": 60,
877
+ "temperature": 38.3,
878
+ "activityLevel": "normal",
879
+ "weight": "500.3kg",
880
+ "age": "4 years"
881
+ }
882
+ },
883
+ {
884
+ "timestamp": "2024-05-24T08:30:00Z",
885
+ "cattleID": "A123",
886
+ "event": "dailyLog",
887
+ "location": {
888
+ "latitude": 35.6939,
889
+ "longitude": 139.6961
890
+ },
891
+ "distanceTraveled": {
892
+ "sinceLastUpdate": "200m",
893
+ "totalToday": "2009m"
894
+ },
895
+ "healthData": {
896
+ "heartRate": 60,
897
+ "temperature": 38.7,
898
+ "activityLevel": "normal",
899
+ "weight": "498.4kg",
900
+ "age": "4 years"
901
+ }
902
+ },
903
+ {
904
+ "timestamp": "2024-05-25T08:30:00Z",
905
+ "cattleID": "A123",
906
+ "event": "dailyLog",
907
+ "location": {
908
+ "latitude": 35.694,
909
+ "longitude": 139.6962
910
+ },
911
+ "distanceTraveled": {
912
+ "sinceLastUpdate": "200m",
913
+ "totalToday": "1979m"
914
+ },
915
+ "healthData": {
916
+ "heartRate": 60,
917
+ "temperature": 39.1,
918
+ "activityLevel": "normal",
919
+ "weight": "493.4kg",
920
+ "age": "4 years"
921
+ }
922
+ },
923
+ {
924
+ "timestamp": "2024-05-26T08:30:00Z",
925
+ "cattleID": "A123",
926
+ "event": "dailyLog",
927
+ "location": {
928
+ "latitude": 35.694100000000006,
929
+ "longitude": 139.6963
930
+ },
931
+ "distanceTraveled": {
932
+ "sinceLastUpdate": "200m",
933
+ "totalToday": "2026m"
934
+ },
935
+ "healthData": {
936
+ "heartRate": 60,
937
+ "temperature": 37.7,
938
+ "activityLevel": "normal",
939
+ "weight": "486.7kg",
940
+ "age": "4 years"
941
+ }
942
+ },
943
+ {
944
+ "timestamp": "2024-05-27T08:30:00Z",
945
+ "cattleID": "A123",
946
+ "event": "dailyLog",
947
+ "location": {
948
+ "latitude": 35.6942,
949
+ "longitude": 139.6964
950
+ },
951
+ "distanceTraveled": {
952
+ "sinceLastUpdate": "200m",
953
+ "totalToday": "1926m"
954
+ },
955
+ "healthData": {
956
+ "heartRate": 60,
957
+ "temperature": 38.0,
958
+ "activityLevel": "normal",
959
+ "weight": "481.8kg",
960
+ "age": "4 years"
961
+ }
962
+ },
963
+ {
964
+ "timestamp": "2024-05-28T08:30:00Z",
965
+ "cattleID": "A123",
966
+ "event": "dailyLog",
967
+ "location": {
968
+ "latitude": 35.694300000000005,
969
+ "longitude": 139.6965
970
+ },
971
+ "distanceTraveled": {
972
+ "sinceLastUpdate": "200m",
973
+ "totalToday": "2068m"
974
+ },
975
+ "healthData": {
976
+ "heartRate": 60,
977
+ "temperature": 37.3,
978
+ "activityLevel": "normal",
979
+ "weight": "518.2kg",
980
+ "age": "4 years"
981
+ }
982
+ },
983
+ {
984
+ "timestamp": "2024-05-29T08:30:00Z",
985
+ "cattleID": "A123",
986
+ "event": "dailyLog",
987
+ "location": {
988
+ "latitude": 35.6944,
989
+ "longitude": 139.6966
990
+ },
991
+ "distanceTraveled": {
992
+ "sinceLastUpdate": "200m",
993
+ "totalToday": "1917m"
994
+ },
995
+ "healthData": {
996
+ "heartRate": 60,
997
+ "temperature": 36.8,
998
+ "activityLevel": "normal",
999
+ "weight": "518.8kg",
1000
+ "age": "4 years"
1001
+ }
1002
+ }
1003
+ ]
1004
+ }
requirements.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ streamlit
2
+ matplotlib
3
+ scikit-learn