Upload 14 files
Browse files- README.md +47 -12
- data/customer_reviews.csv +501 -0
- data/sales_data.csv +0 -0
- data/web_logs.json +0 -0
- requirements.txt +14 -3
- src/__pycache__/models.cpython-311.pyc +0 -0
- src/__pycache__/processor.cpython-311.pyc +0 -0
- src/__pycache__/rag_engine.cpython-311.pyc +0 -0
- src/dashboard.py +241 -0
- src/data_gen.py +137 -0
- src/models.py +82 -0
- src/processor.py +52 -0
- src/rag_engine.py +97 -0
- src/test_mining.py +23 -0
README.md
CHANGED
|
@@ -1,19 +1,54 @@
|
|
| 1 |
---
|
| 2 |
title: Business Analytics Dashboard
|
| 3 |
-
emoji:
|
| 4 |
-
colorFrom:
|
| 5 |
-
colorTo:
|
| 6 |
-
sdk:
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
- streamlit
|
| 10 |
pinned: false
|
| 11 |
-
short_description: Streamlit template space
|
| 12 |
---
|
| 13 |
|
| 14 |
-
#
|
| 15 |
|
| 16 |
-
|
| 17 |
|
| 18 |
-
|
| 19 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
---
|
| 2 |
title: Business Analytics Dashboard
|
| 3 |
+
emoji: 📊
|
| 4 |
+
colorFrom: blue
|
| 5 |
+
colorTo: indigo
|
| 6 |
+
sdk: streamlit
|
| 7 |
+
sdk_version: 1.38.0
|
| 8 |
+
app_file: src/dashboard.py
|
|
|
|
| 9 |
pinned: false
|
|
|
|
| 10 |
---
|
| 11 |
|
| 12 |
+
# Integrated Business Analytics Dashboard
|
| 13 |
|
| 14 |
+
This is a comprehensive Business Analytics tool that combines traditional data analytics with AI-powered insights.
|
| 15 |
|
| 16 |
+
## Features
|
| 17 |
+
|
| 18 |
+
- **📊 Overview**: Real-time KPIs and recent activity tracking.
|
| 19 |
+
- **📈 Sales Performance**: Interactive charts for revenue trends, category performance, and top products.
|
| 20 |
+
- **👥 Customer Segmentation**: RFM (Recency, Frequency, Monetary) analysis using K-Means clustering.
|
| 21 |
+
- **🔮 Forecasting**: Sales forecasting using Linear Regression.
|
| 22 |
+
- **💬 Feedback Analysis**: Sentiment analysis of customer reviews.
|
| 23 |
+
- **🤖 Business Q&A**: AI-powered RAG (Retrieval-Augmented Generation) system to answer questions about your data.
|
| 24 |
+
|
| 25 |
+
## Tech Stack
|
| 26 |
+
|
| 27 |
+
- **Frontend**: Streamlit
|
| 28 |
+
- **Visualization**: Plotly
|
| 29 |
+
- **Machine Learning**: Scikit-learn, TextBlob
|
| 30 |
+
- **AI/RAG**: LangChain, FAISS, Hugging Face Transformers (Flan-T5)
|
| 31 |
+
|
| 32 |
+
## Local Installation
|
| 33 |
+
|
| 34 |
+
1. Clone the repository.
|
| 35 |
+
2. Install dependencies:
|
| 36 |
+
```bash
|
| 37 |
+
pip install -r requirements.txt
|
| 38 |
+
```
|
| 39 |
+
3. Run the application:
|
| 40 |
+
```bash
|
| 41 |
+
streamlit run src/dashboard.py
|
| 42 |
+
```
|
| 43 |
+
|
| 44 |
+
## Data
|
| 45 |
+
|
| 46 |
+
The application uses synthetic data located in the `data/` directory:
|
| 47 |
+
- `sales_data.csv`: Transaction records.
|
| 48 |
+
- `customer_reviews.csv`: User feedback and ratings.
|
| 49 |
+
- `web_logs.json`: Web traffic logs.
|
| 50 |
+
|
| 51 |
+
To regenerate data, run:
|
| 52 |
+
```bash
|
| 53 |
+
python src/data_gen.py
|
| 54 |
+
```
|
data/customer_reviews.csv
ADDED
|
@@ -0,0 +1,501 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
ReviewID,CustomerID,Product,Rating,ReviewText,Date
|
| 2 |
+
6f535f89-e401-4e0f-8939-ef9bead7bec5,1154,Headphones,1,Broken on arrival. Very disappointed.,2026-01-01
|
| 3 |
+
5ed73ae0-fc41-4175-8ff2-51cf06269f70,1108,Desk Chair,1,Broken on arrival. Very disappointed.,2026-01-01
|
| 4 |
+
0d4fc743-d57d-4102-b716-d7619179703b,1030,Headphones,3,"The Headphones is okay, but could be better.",2026-01-03
|
| 5 |
+
9f23403a-42f5-410a-a544-29c630137a80,1095,Monitor,2,Customer service was unhelpful.,2026-01-03
|
| 6 |
+
905d6a69-e879-47ac-97f4-f88cddfe9121,1056,Headphones,5,Good value for money. The Headphones exceeded my expectations.,2026-01-02
|
| 7 |
+
f8187871-a730-4128-932a-b0f60cc7754d,1001,Coffee Maker,1,The Coffee Maker stopped working after two days.,2026-01-01
|
| 8 |
+
4ab1ab59-54f0-4ec2-a61f-c0611bb85112,1101,Headphones,5,Good value for money. The Headphones exceeded my expectations.,2026-01-01
|
| 9 |
+
e64e2b2d-c97e-4828-9850-a65279a6470c,1136,Laptop,5,Fast shipping and great service.,2026-01-03
|
| 10 |
+
a46c9460-b55f-4e5d-a502-fd39b0e0565a,1016,Headphones,1,Customer service was unhelpful.,2026-01-02
|
| 11 |
+
f39fe641-377c-45a4-8c7d-5796e0b5ddd0,1135,Coffee Maker,3,"The Coffee Maker is okay, but could be better.",2026-01-03
|
| 12 |
+
c1e08486-a390-49f4-93bb-52ab8273400c,1187,Smartphone,2,Customer service was unhelpful.,2026-01-03
|
| 13 |
+
a357ba67-415a-46b4-892c-e47f09251906,1018,Coffee Maker,1,Customer service was unhelpful.,2026-01-01
|
| 14 |
+
3df31349-459d-4fb5-8fba-42444827075f,1017,Smartphone,1,Terrible experience with this Smartphone.,2026-01-02
|
| 15 |
+
824bef98-e4c4-4882-a28c-dff867d9c8e4,1088,Smartphone,3,"The Smartphone is okay, but could be better.",2026-01-01
|
| 16 |
+
5486334b-d569-4a38-b6ac-f970afe6052b,1049,Laptop,4,Good value for money. The Laptop exceeded my expectations.,2026-01-02
|
| 17 |
+
4641baf6-1a60-4807-a78f-49f2a261d6dc,1132,Keyboard,5,Fast shipping and great service.,2026-01-02
|
| 18 |
+
7544d3e6-4f6f-427a-ba31-1b7e379d2349,1082,Laptop,5,"The Laptop is amazing, 5 stars!",2026-01-02
|
| 19 |
+
0ac4a07c-3274-4991-8cc8-c8078174a096,1160,Smartphone,4,"The Smartphone is amazing, 5 stars!",2026-01-02
|
| 20 |
+
673fb5b0-ec13-4f07-9a65-5ef60313e3ef,1133,Monitor,5,"The Monitor is amazing, 5 stars!",2026-01-03
|
| 21 |
+
728768d1-4826-4846-a1a5-9adc5158cb86,1029,Keyboard,5,"Excellent quality, highly recommended.",2026-01-02
|
| 22 |
+
8c85af35-7367-42c7-90cd-e5c3d73e5632,1068,Keyboard,4,"The Keyboard is amazing, 5 stars!",2026-01-01
|
| 23 |
+
9bb2e446-ed59-4398-b649-ff09175991ea,1010,Mouse,2,Not worth the money. Analyzing the Mouse shows poor build quality.,2026-01-01
|
| 24 |
+
e9721813-ca51-4e9e-b66c-46ebe379cc86,1169,Headphones,1,Customer service was unhelpful.,2026-01-01
|
| 25 |
+
86f106d9-9b37-46cf-a5bf-ca3367a0deec,1178,Monitor,2,Terrible experience with this Monitor.,2026-01-02
|
| 26 |
+
7bd5ea4d-3446-4700-b40a-6f51a555a445,1180,Keyboard,1,Terrible experience with this Keyboard.,2026-01-01
|
| 27 |
+
5da5f675-1b50-44d6-97e9-a4136f993420,1133,Coffee Maker,5,Fast shipping and great service.,2026-01-03
|
| 28 |
+
cc80543a-fb1f-45e8-ac9e-7b8763a6b06f,1133,Mouse,3,"The Mouse is okay, but could be better.",2026-01-03
|
| 29 |
+
91999d5f-15ce-4849-9ce1-f3af6c22167b,1147,Coffee Maker,4,I love this Coffee Maker! It works great.,2026-01-02
|
| 30 |
+
70443480-62a8-4555-94e4-085ed39c2bfc,1092,Mouse,3,"The Mouse is okay, but could be better.",2026-01-02
|
| 31 |
+
33b3f445-8574-4b9c-b67a-8172bc603788,1170,Laptop,3,"The Laptop is okay, but could be better.",2026-01-01
|
| 32 |
+
79fb464e-10cf-403f-a9f0-517b28eab54a,1011,Smartphone,3,"The Smartphone is okay, but could be better.",2026-01-03
|
| 33 |
+
5534f77d-0730-4155-9d65-fdf25223111f,1138,Keyboard,1,Not worth the money. Analyzing the Keyboard shows poor build quality.,2026-01-01
|
| 34 |
+
5b460364-416d-4a26-b089-0e765ffb0456,1165,Coffee Maker,2,The Coffee Maker stopped working after two days.,2026-01-02
|
| 35 |
+
6c070379-5907-4268-968b-42cc112532b3,1084,Desk Chair,3,"The Desk Chair is okay, but could be better.",2026-01-02
|
| 36 |
+
5e9f40f8-8ba1-4407-a663-3334b4a17f7a,1064,Desk Chair,1,Customer service was unhelpful.,2026-01-02
|
| 37 |
+
3f59dfa0-fcc5-44be-bd4a-5466f3acca68,1149,Coffee Maker,3,"The Coffee Maker is okay, but could be better.",2026-01-02
|
| 38 |
+
82599c87-c2d6-4063-853d-1c4697e058b9,1042,Monitor,1,The Monitor stopped working after two days.,2026-01-01
|
| 39 |
+
a8d23fe2-6672-4dfa-a34d-2c5028c2cbfc,1037,Mouse,3,"The Mouse is okay, but could be better.",2026-01-01
|
| 40 |
+
b34d5ab6-c6da-479b-a7c9-b4b377d70311,1124,Laptop,2,Broken on arrival. Very disappointed.,2026-01-02
|
| 41 |
+
ae6af388-1108-4e17-8b16-a65d8f3f329b,1085,Desk Chair,4,"The Desk Chair is amazing, 5 stars!",2026-01-02
|
| 42 |
+
6ce1edee-edd4-4209-8486-fb1bd07b7724,1110,Laptop,4,Good value for money. The Laptop exceeded my expectations.,2026-01-02
|
| 43 |
+
3540a26d-de77-4d4f-9ad1-0cac7c20ecf5,1002,Coffee Maker,5,Good value for money. The Coffee Maker exceeded my expectations.,2026-01-03
|
| 44 |
+
01a75e0a-33d0-43fd-86c0-0a8adffe2dbc,1039,Mouse,4,Fast shipping and great service.,2026-01-03
|
| 45 |
+
2857d66d-345a-4c28-9749-f77e83f3c616,1119,Headphones,2,The Headphones stopped working after two days.,2026-01-01
|
| 46 |
+
6e1450f9-625e-4ea8-8102-da6e7a9f143b,1152,Monitor,2,The Monitor stopped working after two days.,2026-01-02
|
| 47 |
+
414ab65f-38d3-4674-a5b8-a9eccfa57f25,1082,Desk Chair,3,"The Desk Chair is okay, but could be better.",2026-01-01
|
| 48 |
+
bd185220-cf9e-48eb-9ef8-3d15a3521701,1182,Coffee Maker,2,Customer service was unhelpful.,2026-01-01
|
| 49 |
+
dff21807-2033-4e81-91e7-45ff2a23a71c,1133,Monitor,2,Terrible experience with this Monitor.,2026-01-02
|
| 50 |
+
1b434750-6d2d-4441-8cc1-47aff181dd0c,1062,Headphones,3,"The Headphones is okay, but could be better.",2026-01-01
|
| 51 |
+
d1748912-7794-458e-8b5b-bbfdcdc54cae,1049,Headphones,4,"Excellent quality, highly recommended.",2026-01-03
|
| 52 |
+
ea855d66-8900-4547-81f5-9debea4ee2dd,1145,Desk Chair,3,"The Desk Chair is okay, but could be better.",2026-01-03
|
| 53 |
+
b8d8f1ab-e2d0-4788-a004-0a2678ce872d,1003,Smartphone,5,Fast shipping and great service.,2026-01-02
|
| 54 |
+
39485a8a-d422-4f59-83f9-7e6074e8fa93,1143,Keyboard,3,"The Keyboard is okay, but could be better.",2026-01-03
|
| 55 |
+
f33bc9d7-2abb-4647-9838-6f30b70bda21,1124,Smartphone,2,Terrible experience with this Smartphone.,2026-01-03
|
| 56 |
+
eb7b8ad8-74b4-4650-b819-bc8179a130ba,1192,Smartphone,4,Good value for money. The Smartphone exceeded my expectations.,2026-01-03
|
| 57 |
+
e0fa546a-1ef1-4fc1-9daf-231bc1737ba6,1195,Headphones,2,Not worth the money. Analyzing the Headphones shows poor build quality.,2026-01-02
|
| 58 |
+
20d6697c-51ac-4149-a3e4-b52d4ae09629,1178,Coffee Maker,3,"The Coffee Maker is okay, but could be better.",2026-01-03
|
| 59 |
+
ebea2850-8103-465e-a708-7c377b1137b3,1100,Mouse,2,Not worth the money. Analyzing the Mouse shows poor build quality.,2026-01-01
|
| 60 |
+
0fbd0e7f-9a40-413b-87bd-55950047dfb9,1003,Laptop,4,Good value for money. The Laptop exceeded my expectations.,2026-01-02
|
| 61 |
+
12bc2507-257c-4b02-953b-d49ae84b5e24,1013,Laptop,4,I love this Laptop! It works great.,2026-01-03
|
| 62 |
+
4756228e-db88-4d27-b761-4545243d0405,1037,Coffee Maker,3,"The Coffee Maker is okay, but could be better.",2026-01-01
|
| 63 |
+
7d25eadb-4a4e-46c1-acd5-b1384b927128,1056,Laptop,4,I love this Laptop! It works great.,2026-01-03
|
| 64 |
+
594ae000-0d44-4b64-b6dd-2650ad84fd1a,1190,Desk Chair,2,The Desk Chair stopped working after two days.,2026-01-02
|
| 65 |
+
b115d7e2-d257-449c-9948-bf577bc1f7cb,1170,Headphones,3,"The Headphones is okay, but could be better.",2026-01-02
|
| 66 |
+
c1e464fb-180c-4ae3-b83b-0d47fc46d1b7,1159,Coffee Maker,1,The Coffee Maker stopped working after two days.,2026-01-03
|
| 67 |
+
e73e153d-b639-4107-88a0-c691ed8c24b2,1110,Coffee Maker,3,"The Coffee Maker is okay, but could be better.",2026-01-03
|
| 68 |
+
9522eda1-9462-49de-ad87-f3d71ecc9af6,1162,Monitor,4,"The Monitor is amazing, 5 stars!",2026-01-02
|
| 69 |
+
b5b3ecb5-5d61-462d-a04e-86b11bbbefac,1157,Keyboard,2,Not worth the money. Analyzing the Keyboard shows poor build quality.,2026-01-02
|
| 70 |
+
6713250d-6615-42bb-8599-f9ca5990e243,1198,Headphones,4,Fast shipping and great service.,2026-01-02
|
| 71 |
+
9b751b4f-0a6a-4930-8bc6-5ea5681ec744,1157,Mouse,3,"The Mouse is okay, but could be better.",2026-01-03
|
| 72 |
+
dacd40ba-8625-4bc0-a0ac-34f2ae672648,1061,Smartphone,3,"The Smartphone is okay, but could be better.",2026-01-01
|
| 73 |
+
041dac52-4419-42d6-876b-25ad499e52b5,1005,Coffee Maker,5,Good value for money. The Coffee Maker exceeded my expectations.,2026-01-02
|
| 74 |
+
29568c67-26ff-42a1-9ddc-7abbb6a16061,1073,Coffee Maker,2,Customer service was unhelpful.,2026-01-03
|
| 75 |
+
613ea092-aca9-4f9e-bc85-9916236ed0d0,1175,Mouse,5,"Excellent quality, highly recommended.",2026-01-03
|
| 76 |
+
757a0380-c7c3-4b29-b23f-2ffd5d51ca84,1160,Mouse,4,"The Mouse is amazing, 5 stars!",2026-01-01
|
| 77 |
+
208f2390-2eab-453e-b1ce-8621f50a455f,1023,Laptop,3,"The Laptop is okay, but could be better.",2026-01-02
|
| 78 |
+
3e6ebd2c-4224-470e-829f-06c71370b983,1160,Smartphone,3,"The Smartphone is okay, but could be better.",2026-01-03
|
| 79 |
+
5ca1eca4-0570-47f6-b56a-64f90366a89e,1178,Smartphone,3,"The Smartphone is okay, but could be better.",2026-01-01
|
| 80 |
+
6bdc8206-3e45-49c1-abf8-96587a6dfc6d,1013,Monitor,3,"The Monitor is okay, but could be better.",2026-01-03
|
| 81 |
+
c9e116b9-7e2a-40da-95a6-b3ef1d3042ee,1164,Monitor,3,"The Monitor is okay, but could be better.",2026-01-02
|
| 82 |
+
f1d6d202-e86a-4ba5-9526-52ea1d4211f8,1085,Coffee Maker,3,"The Coffee Maker is okay, but could be better.",2026-01-01
|
| 83 |
+
0b3a2953-189f-4e7e-b3bc-c2dabec6d834,1018,Mouse,4,Good value for money. The Mouse exceeded my expectations.,2026-01-02
|
| 84 |
+
26c1a108-e8d6-4cf7-942c-80a2b5767c1a,1108,Monitor,1,Customer service was unhelpful.,2026-01-01
|
| 85 |
+
2271e3be-085e-4fbc-8100-dc0807ddebf3,1103,Smartphone,3,"The Smartphone is okay, but could be better.",2026-01-02
|
| 86 |
+
357cc20c-b7bf-4181-9262-d5ac8f7e91de,1172,Keyboard,5,Fast shipping and great service.,2026-01-01
|
| 87 |
+
56156797-e8e4-45ae-b7fe-7355d83df6ae,1154,Smartphone,4,Good value for money. The Smartphone exceeded my expectations.,2026-01-02
|
| 88 |
+
da98948d-eb23-4938-8e6a-0b5edd0f73e8,1053,Laptop,3,"The Laptop is okay, but could be better.",2026-01-01
|
| 89 |
+
8019cce7-81f2-4460-89fd-5ee55192afa7,1183,Laptop,4,Good value for money. The Laptop exceeded my expectations.,2026-01-01
|
| 90 |
+
16d9aa91-e4f9-4c65-bdf3-7d455bb0273f,1154,Laptop,1,Customer service was unhelpful.,2026-01-01
|
| 91 |
+
6725be25-9209-4726-889f-c7771b9894c5,1121,Laptop,3,"The Laptop is okay, but could be better.",2026-01-02
|
| 92 |
+
62684b43-408c-480d-9175-b167175ec2b5,1063,Keyboard,3,"The Keyboard is okay, but could be better.",2026-01-03
|
| 93 |
+
ec93993b-815f-4816-b5fc-4489e5706947,1106,Desk Chair,3,"The Desk Chair is okay, but could be better.",2026-01-03
|
| 94 |
+
489c0d72-da62-4326-a328-9f93a231a9d9,1174,Headphones,1,The Headphones stopped working after two days.,2026-01-03
|
| 95 |
+
05dfc5bb-27e0-4d66-8ff3-bf723d74e8cc,1054,Desk Chair,3,"The Desk Chair is okay, but could be better.",2026-01-01
|
| 96 |
+
7eaed43c-f320-494e-beb2-b833f141dd13,1178,Headphones,4,Good value for money. The Headphones exceeded my expectations.,2026-01-01
|
| 97 |
+
6c5c3ffe-685c-40b7-a84b-588ed139b53f,1094,Coffee Maker,3,"The Coffee Maker is okay, but could be better.",2026-01-01
|
| 98 |
+
4f74edc2-2459-42f9-84b8-fcb2c75795ba,1101,Headphones,1,Customer service was unhelpful.,2026-01-02
|
| 99 |
+
e393a344-dbba-4c4f-838c-f5de55443efb,1152,Smartphone,5,Good value for money. The Smartphone exceeded my expectations.,2026-01-03
|
| 100 |
+
7f80dbce-b879-44be-bd0e-6b7b2a9c37e3,1172,Mouse,4,Good value for money. The Mouse exceeded my expectations.,2026-01-01
|
| 101 |
+
cf937908-0a15-479a-80ab-4b074a43e10c,1009,Desk Chair,3,"The Desk Chair is okay, but could be better.",2026-01-03
|
| 102 |
+
a8677ad1-ace0-4b86-bc11-330ae16dac5b,1037,Desk Chair,3,"The Desk Chair is okay, but could be better.",2026-01-01
|
| 103 |
+
0cb484d4-aa00-4ba5-a420-a2868bcd7eb4,1023,Keyboard,5,"The Keyboard is amazing, 5 stars!",2026-01-01
|
| 104 |
+
ca37973b-6082-4fe9-bf0c-6693aaa25864,1005,Keyboard,3,"The Keyboard is okay, but could be better.",2026-01-01
|
| 105 |
+
8f39f8f3-062a-4d31-96d7-aa0116052cda,1197,Mouse,2,Customer service was unhelpful.,2026-01-02
|
| 106 |
+
24ab6f4d-d2eb-45a1-b55e-632947a13168,1127,Smartphone,5,I love this Smartphone! It works great.,2026-01-03
|
| 107 |
+
a6d5f800-f450-466c-a690-a17c1d529926,1052,Monitor,3,"The Monitor is okay, but could be better.",2026-01-03
|
| 108 |
+
b231e7d7-a51c-47a2-a10d-3cfd0e98ddb8,1186,Mouse,4,Good value for money. The Mouse exceeded my expectations.,2026-01-01
|
| 109 |
+
e60aada1-51fd-498f-bc06-57a9fd04a25c,1108,Laptop,3,"The Laptop is okay, but could be better.",2026-01-03
|
| 110 |
+
61a2bcaa-3791-4d72-a8d9-fd15a7cbe0b3,1154,Coffee Maker,5,Fast shipping and great service.,2026-01-03
|
| 111 |
+
3365d25b-e592-4f7a-9525-aa88c33b88b0,1004,Desk Chair,4,"The Desk Chair is amazing, 5 stars!",2026-01-01
|
| 112 |
+
b8ee0531-0e8e-4ab3-8ee7-0218e83608fe,1010,Coffee Maker,4,"The Coffee Maker is amazing, 5 stars!",2026-01-02
|
| 113 |
+
985e4886-d21d-4696-86bd-20ac0d6b15ec,1151,Monitor,2,Broken on arrival. Very disappointed.,2026-01-01
|
| 114 |
+
8562f3ab-7180-4487-8d94-508a10e32e3b,1030,Headphones,3,"The Headphones is okay, but could be better.",2026-01-03
|
| 115 |
+
4f49fa99-f0c5-4bf8-8f3e-297f00e8c059,1137,Headphones,2,Not worth the money. Analyzing the Headphones shows poor build quality.,2026-01-03
|
| 116 |
+
a4c956c8-86d7-4a32-ac69-da1d0b7b9c01,1060,Keyboard,3,"The Keyboard is okay, but could be better.",2026-01-02
|
| 117 |
+
108109b5-4757-4291-b3ab-bd8bb2f2feb7,1086,Monitor,3,"The Monitor is okay, but could be better.",2026-01-02
|
| 118 |
+
c18918c6-99a2-4e9a-b17d-c180e17adfd9,1047,Smartphone,3,"The Smartphone is okay, but could be better.",2026-01-02
|
| 119 |
+
bd561a8e-9f23-4324-8cf2-4f5aaed55726,1059,Laptop,3,"The Laptop is okay, but could be better.",2026-01-01
|
| 120 |
+
387ae2d2-b4ce-43c1-8333-fe5aec6808bc,1163,Laptop,3,"The Laptop is okay, but could be better.",2026-01-02
|
| 121 |
+
3e10a57c-16a9-46ed-acb8-fa646acaefa5,1198,Mouse,3,"The Mouse is okay, but could be better.",2026-01-02
|
| 122 |
+
ea8b6d73-88a6-4f33-ab9e-ebab64d72967,1165,Keyboard,3,"The Keyboard is okay, but could be better.",2026-01-01
|
| 123 |
+
1514b88a-cf8e-4af3-89f3-5c9d8308450e,1036,Smartphone,4,Fast shipping and great service.,2026-01-03
|
| 124 |
+
6dd8cccc-a29b-4628-aca4-1c10231956a8,1134,Desk Chair,1,Customer service was unhelpful.,2026-01-01
|
| 125 |
+
dd7edcf9-fbf0-4c30-9a61-73ed594a4f2e,1195,Coffee Maker,5,"Excellent quality, highly recommended.",2026-01-02
|
| 126 |
+
e4e5ab2a-7578-4b4d-87a1-9d754d97f351,1179,Laptop,3,"The Laptop is okay, but could be better.",2026-01-03
|
| 127 |
+
d8c828ac-753f-4434-84e3-f86241a5b2f0,1001,Keyboard,4,"The Keyboard is amazing, 5 stars!",2026-01-03
|
| 128 |
+
3864cb10-b7c2-4f92-a94e-ed3f58f49e90,1019,Monitor,4,I love this Monitor! It works great.,2026-01-03
|
| 129 |
+
094d4ebd-1699-417f-bf74-1b09dcf85347,1090,Coffee Maker,1,Broken on arrival. Very disappointed.,2026-01-03
|
| 130 |
+
aca1c130-364b-479f-b266-92f68c6931d9,1200,Mouse,5,I love this Mouse! It works great.,2026-01-03
|
| 131 |
+
9ce53da9-dcad-457e-8224-56cb3e9800fb,1111,Smartphone,4,"Excellent quality, highly recommended.",2026-01-02
|
| 132 |
+
72a7410e-9acb-4437-b3ea-e5b5ee0bde13,1159,Smartphone,2,Terrible experience with this Smartphone.,2026-01-02
|
| 133 |
+
183bee9b-23b6-4e8c-ba8e-2dec4a4b970c,1143,Laptop,3,"The Laptop is okay, but could be better.",2026-01-02
|
| 134 |
+
4ef4ec7e-bf3b-41fb-9ff2-5e0dfcc8919e,1036,Monitor,3,"The Monitor is okay, but could be better.",2026-01-03
|
| 135 |
+
79705db6-3b97-410d-9b3d-4cfa6c14b13e,1105,Desk Chair,1,The Desk Chair stopped working after two days.,2026-01-03
|
| 136 |
+
075e3b87-a5cb-486d-9b21-6412dd0f46d4,1194,Laptop,3,"The Laptop is okay, but could be better.",2026-01-03
|
| 137 |
+
7c5ed0a2-cff2-47e1-a7d1-35ce1a95a394,1110,Mouse,2,Customer service was unhelpful.,2026-01-02
|
| 138 |
+
82538874-1929-452f-9de4-e5a0b0a9065c,1127,Headphones,1,Broken on arrival. Very disappointed.,2026-01-02
|
| 139 |
+
201162af-e5df-4633-9ea6-d2a865ebbf76,1169,Laptop,5,Good value for money. The Laptop exceeded my expectations.,2026-01-02
|
| 140 |
+
377c88a0-f54b-4abb-8f7c-5ca08aedea8a,1105,Monitor,5,"Excellent quality, highly recommended.",2026-01-03
|
| 141 |
+
86a59dc3-8b74-4936-aeb4-88283c76c902,1171,Mouse,1,Customer service was unhelpful.,2026-01-03
|
| 142 |
+
ba8cb85a-1678-4aa2-864a-88a65b876aa9,1168,Laptop,2,The Laptop stopped working after two days.,2026-01-02
|
| 143 |
+
a3cf31f8-c845-49ef-86a3-cbf1e10c8e36,1042,Headphones,2,Customer service was unhelpful.,2026-01-02
|
| 144 |
+
9795795d-2c01-4a94-a6c9-e45feca021c6,1041,Desk Chair,4,"Excellent quality, highly recommended.",2026-01-01
|
| 145 |
+
71a05d6c-6f5a-4ff3-aea8-4a386cd44902,1132,Desk Chair,2,The Desk Chair stopped working after two days.,2026-01-03
|
| 146 |
+
91e3644d-02dd-4c6b-83cf-176eb0ede2f5,1180,Laptop,2,Terrible experience with this Laptop.,2026-01-03
|
| 147 |
+
65a72b5f-a4c1-4f91-b292-645931d8ec57,1022,Keyboard,3,"The Keyboard is okay, but could be better.",2026-01-03
|
| 148 |
+
532a547f-d128-4916-bd50-8f47652a176a,1044,Smartphone,5,Good value for money. The Smartphone exceeded my expectations.,2026-01-01
|
| 149 |
+
9a2b8246-a40d-480d-aab1-e0a98ce04298,1174,Laptop,3,"The Laptop is okay, but could be better.",2026-01-03
|
| 150 |
+
9bf447c3-f7ab-4171-89ab-aadcb6d0f0ef,1001,Headphones,1,Customer service was unhelpful.,2026-01-02
|
| 151 |
+
3de90fd9-956f-469b-94ae-02444a9b69e3,1082,Coffee Maker,3,"The Coffee Maker is okay, but could be better.",2026-01-02
|
| 152 |
+
52ce32e8-22b5-4f37-9b2e-1e898913f2f0,1088,Laptop,3,"The Laptop is okay, but could be better.",2026-01-02
|
| 153 |
+
26fcbc1d-7700-4e43-baf3-1f447a03d8a0,1112,Laptop,2,Customer service was unhelpful.,2026-01-01
|
| 154 |
+
7efa38a5-d600-4c5a-9a6f-5a60f97ae55a,1098,Smartphone,2,Not worth the money. Analyzing the Smartphone shows poor build quality.,2026-01-01
|
| 155 |
+
301e35cb-d6ae-4adf-8c8e-302106624e64,1143,Headphones,5,Good value for money. The Headphones exceeded my expectations.,2026-01-02
|
| 156 |
+
064e97f5-883e-44a9-bdf7-1fc7f5a7d23e,1082,Desk Chair,3,"The Desk Chair is okay, but could be better.",2026-01-01
|
| 157 |
+
b5e8bbd4-eb1f-4ef5-928b-6ad3ec9d7658,1075,Monitor,4,"Excellent quality, highly recommended.",2026-01-01
|
| 158 |
+
e4564927-1bff-4bcd-b0d9-5dd6c5f0dfb3,1200,Laptop,4,I love this Laptop! It works great.,2026-01-02
|
| 159 |
+
952ca2d1-8d2a-49c0-bb9b-cabf5464b135,1049,Mouse,3,"The Mouse is okay, but could be better.",2026-01-02
|
| 160 |
+
239a6d42-d2ad-42a6-b411-d9d111e99ec4,1152,Coffee Maker,2,Customer service was unhelpful.,2026-01-03
|
| 161 |
+
de0e1824-5a3c-4a65-9ceb-bf94f2f1feb0,1102,Keyboard,3,"The Keyboard is okay, but could be better.",2026-01-02
|
| 162 |
+
886a9dcb-88cd-465c-97c2-9048cd2aac5b,1113,Monitor,3,"The Monitor is okay, but could be better.",2026-01-01
|
| 163 |
+
fa1c6272-d76d-4de7-9d38-fbc5a5f625dd,1079,Keyboard,4,"The Keyboard is amazing, 5 stars!",2026-01-02
|
| 164 |
+
df7f6207-0e5b-4b91-8a14-a9f16db42d26,1167,Keyboard,1,Customer service was unhelpful.,2026-01-02
|
| 165 |
+
b7e90497-011d-4b99-8b28-82a5c61c3397,1155,Keyboard,5,I love this Keyboard! It works great.,2026-01-01
|
| 166 |
+
b439bcc8-9828-4c33-850f-a0b1430b3d76,1164,Smartphone,4,Good value for money. The Smartphone exceeded my expectations.,2026-01-01
|
| 167 |
+
8fa95ec3-727c-4301-b2a9-30fe85d9b1ba,1126,Desk Chair,3,"The Desk Chair is okay, but could be better.",2026-01-02
|
| 168 |
+
0cbf00ca-fe0f-4bc9-b68a-ceb7a3b3207c,1161,Mouse,3,"The Mouse is okay, but could be better.",2026-01-01
|
| 169 |
+
242bf7bf-c621-468e-8443-d9a8a47ed76e,1151,Mouse,3,"The Mouse is okay, but could be better.",2026-01-01
|
| 170 |
+
bb287a6d-1a07-457b-9f9d-1e74049cd160,1039,Laptop,3,"The Laptop is okay, but could be better.",2026-01-02
|
| 171 |
+
a4cc89db-1055-463c-8360-99c9a234ed21,1130,Mouse,3,"The Mouse is okay, but could be better.",2026-01-02
|
| 172 |
+
7e4ff60d-093f-4ebc-a024-f779d5eabe9a,1071,Coffee Maker,1,Terrible experience with this Coffee Maker.,2026-01-01
|
| 173 |
+
05e08ea8-f812-4394-8115-90b79255bb41,1103,Keyboard,1,Terrible experience with this Keyboard.,2026-01-03
|
| 174 |
+
26344184-5839-4477-99c9-3a43a4a408f5,1047,Desk Chair,5,"The Desk Chair is amazing, 5 stars!",2026-01-01
|
| 175 |
+
68778ecb-3064-4094-99d9-f6103a20bb07,1155,Smartphone,2,Customer service was unhelpful.,2026-01-01
|
| 176 |
+
8f902934-a24d-484d-9e7b-1fddd2228ef8,1005,Mouse,4,I love this Mouse! It works great.,2026-01-02
|
| 177 |
+
037dea9d-0ab6-4866-a2ed-70132b0bc27a,1128,Monitor,3,"The Monitor is okay, but could be better.",2026-01-02
|
| 178 |
+
22d78c4f-f0bf-4023-8512-765632109614,1067,Desk Chair,4,"The Desk Chair is amazing, 5 stars!",2026-01-03
|
| 179 |
+
a6b595be-6288-45b8-a79a-52b22c3a11e7,1182,Desk Chair,3,"The Desk Chair is okay, but could be better.",2026-01-02
|
| 180 |
+
ce0fe7af-b3a5-42cb-8272-adf3238e7ae4,1147,Mouse,1,Not worth the money. Analyzing the Mouse shows poor build quality.,2026-01-02
|
| 181 |
+
f1f8049a-7835-4883-bd3d-64725d0d072e,1189,Laptop,5,I love this Laptop! It works great.,2026-01-02
|
| 182 |
+
b28158f0-065e-44e1-be80-1c8449ccbdfb,1084,Desk Chair,3,"The Desk Chair is okay, but could be better.",2026-01-02
|
| 183 |
+
178ebbc2-b0bc-46e5-882a-3eb4e25650f9,1165,Coffee Maker,1,Not worth the money. Analyzing the Coffee Maker shows poor build quality.,2026-01-03
|
| 184 |
+
f22f7c79-641a-4d82-8e19-6e1946ef5599,1170,Desk Chair,1,Not worth the money. Analyzing the Desk Chair shows poor build quality.,2026-01-03
|
| 185 |
+
6873214f-e6bb-497f-9e13-13b798f9ca92,1174,Mouse,1,Not worth the money. Analyzing the Mouse shows poor build quality.,2026-01-03
|
| 186 |
+
0cb91e87-4176-4a5e-befc-557fe8877987,1185,Laptop,5,I love this Laptop! It works great.,2026-01-02
|
| 187 |
+
c9faf9b7-7e31-435f-a739-4d6e8af1ac83,1054,Headphones,3,"The Headphones is okay, but could be better.",2026-01-02
|
| 188 |
+
f09314cb-40ce-422c-8dce-488da55c67bd,1096,Mouse,2,Customer service was unhelpful.,2026-01-01
|
| 189 |
+
10ca1429-b97c-4829-948e-f512411f6fa2,1072,Mouse,5,I love this Mouse! It works great.,2026-01-02
|
| 190 |
+
8c897fe4-e575-441f-addb-f278a7c2d086,1138,Keyboard,1,Not worth the money. Analyzing the Keyboard shows poor build quality.,2026-01-03
|
| 191 |
+
ed6f3a74-5a9b-49dc-ab38-a504d29ddc56,1132,Desk Chair,2,The Desk Chair stopped working after two days.,2026-01-01
|
| 192 |
+
4485e362-df61-466a-bf5e-abf2aa8fd309,1130,Mouse,1,Customer service was unhelpful.,2026-01-01
|
| 193 |
+
bdcd00a9-8fc2-4e2d-8bf2-cc01c95b44d8,1059,Laptop,3,"The Laptop is okay, but could be better.",2026-01-03
|
| 194 |
+
a7a873e5-5a69-47ad-ad44-ab9df095562e,1141,Keyboard,3,"The Keyboard is okay, but could be better.",2026-01-03
|
| 195 |
+
dacc0bfc-28f7-44f6-a146-704d6dd04a83,1107,Coffee Maker,2,Terrible experience with this Coffee Maker.,2026-01-03
|
| 196 |
+
fa87fb09-6f26-424b-b740-eaf17e991651,1101,Monitor,2,The Monitor stopped working after two days.,2026-01-03
|
| 197 |
+
3d86c367-502d-4593-8480-76ab4cba06ed,1040,Keyboard,3,"The Keyboard is okay, but could be better.",2026-01-01
|
| 198 |
+
75f1f413-cfb8-4cef-a9ba-1163dc554e9c,1122,Laptop,2,Terrible experience with this Laptop.,2026-01-02
|
| 199 |
+
ec9fb045-012b-4ad5-b893-6d2d864743c7,1131,Desk Chair,1,The Desk Chair stopped working after two days.,2026-01-03
|
| 200 |
+
28b8afe2-3e63-4507-8a6d-21579be400f8,1198,Keyboard,1,Not worth the money. Analyzing the Keyboard shows poor build quality.,2026-01-03
|
| 201 |
+
cddedd24-c57d-4a49-a894-520aa68385d8,1157,Desk Chair,1,Not worth the money. Analyzing the Desk Chair shows poor build quality.,2026-01-02
|
| 202 |
+
a61995de-d441-41d4-a829-c2ae37ebe27f,1065,Desk Chair,3,"The Desk Chair is okay, but could be better.",2026-01-01
|
| 203 |
+
ba92a64a-f9b3-4a02-9f0b-63633e6d48ce,1111,Keyboard,3,"The Keyboard is okay, but could be better.",2026-01-02
|
| 204 |
+
891b3e6a-ddd4-4b03-9653-d1b3b0c52fa8,1009,Laptop,3,"The Laptop is okay, but could be better.",2026-01-02
|
| 205 |
+
ca5aa416-b95b-4a5c-835e-62d8061664a3,1079,Mouse,4,Good value for money. The Mouse exceeded my expectations.,2026-01-01
|
| 206 |
+
fe994342-5c76-4bd6-8f40-3393ccb9c92d,1185,Desk Chair,5,"Excellent quality, highly recommended.",2026-01-01
|
| 207 |
+
44e65aaa-8831-4ab3-acc4-2de6988ba37a,1103,Desk Chair,4,"Excellent quality, highly recommended.",2026-01-02
|
| 208 |
+
0218c6a9-d29e-4c00-bb99-da582a498fca,1014,Coffee Maker,4,I love this Coffee Maker! It works great.,2026-01-02
|
| 209 |
+
eaf2b5ee-2c16-4dc4-87c5-f0aa32736c91,1195,Mouse,4,I love this Mouse! It works great.,2026-01-02
|
| 210 |
+
0bb19467-9130-42ca-b236-f41dc22c384c,1179,Laptop,2,Broken on arrival. Very disappointed.,2026-01-02
|
| 211 |
+
bd017e57-ea28-4bde-ba2e-cb547263e1e0,1126,Headphones,3,"The Headphones is okay, but could be better.",2026-01-03
|
| 212 |
+
971d4716-f8dc-4be1-9833-88942452260d,1081,Headphones,2,The Headphones stopped working after two days.,2026-01-01
|
| 213 |
+
58697ca2-ec0d-41ff-89d9-1a56a28b2e14,1171,Coffee Maker,5,I love this Coffee Maker! It works great.,2026-01-02
|
| 214 |
+
3ddf5688-0139-4b86-af85-203cf830bea5,1144,Coffee Maker,4,Good value for money. The Coffee Maker exceeded my expectations.,2026-01-03
|
| 215 |
+
2340c896-6bf5-41f9-903d-51750750d866,1086,Headphones,3,"The Headphones is okay, but could be better.",2026-01-02
|
| 216 |
+
5ab68220-1c24-4102-99e5-e402fe2895ad,1010,Laptop,4,"Excellent quality, highly recommended.",2026-01-03
|
| 217 |
+
a2d295db-b27b-4350-b06a-ab8f21f5b1e8,1002,Coffee Maker,1,Broken on arrival. Very disappointed.,2026-01-01
|
| 218 |
+
a86e5687-05ed-4a30-97ef-661efe11ac4f,1048,Desk Chair,1,The Desk Chair stopped working after two days.,2026-01-03
|
| 219 |
+
35b00f9f-4fc8-4ae9-981e-5c688ff4a938,1088,Monitor,2,Customer service was unhelpful.,2026-01-01
|
| 220 |
+
e8aac4a5-23a7-44e7-9092-285ee27ce6ea,1119,Smartphone,5,I love this Smartphone! It works great.,2026-01-02
|
| 221 |
+
afc93fac-af0c-463b-8593-49d143cb74f5,1173,Headphones,4,"The Headphones is amazing, 5 stars!",2026-01-03
|
| 222 |
+
c0271c77-394a-412b-9309-87b53b87c3eb,1126,Headphones,2,The Headphones stopped working after two days.,2026-01-02
|
| 223 |
+
54a2f8bd-c228-40e7-951a-8247dbc4da67,1049,Coffee Maker,5,Good value for money. The Coffee Maker exceeded my expectations.,2026-01-01
|
| 224 |
+
e7d88614-b991-45ea-b8b7-8c4acc281fa0,1026,Desk Chair,4,Good value for money. The Desk Chair exceeded my expectations.,2026-01-01
|
| 225 |
+
5a438639-a825-410c-bd2f-24d32469980a,1148,Desk Chair,5,Good value for money. The Desk Chair exceeded my expectations.,2026-01-01
|
| 226 |
+
2ab7fb10-de72-4c23-be66-f86146576837,1103,Laptop,5,Fast shipping and great service.,2026-01-02
|
| 227 |
+
d12e73a1-75f1-4fb8-a28a-11d12f45428a,1068,Headphones,5,"Excellent quality, highly recommended.",2026-01-01
|
| 228 |
+
acf70176-d72a-48c4-af23-37c18d25f8e1,1098,Laptop,4,Fast shipping and great service.,2026-01-03
|
| 229 |
+
580cd898-aaf7-4d3b-8e5e-2a7e2ee4cbbd,1029,Smartphone,3,"The Smartphone is okay, but could be better.",2026-01-03
|
| 230 |
+
7ef3f84e-5d0c-4a73-8608-da420d15b670,1058,Coffee Maker,2,Broken on arrival. Very disappointed.,2026-01-02
|
| 231 |
+
ad49207a-b704-4f41-8dd3-6a903143ac24,1090,Desk Chair,5,Fast shipping and great service.,2026-01-02
|
| 232 |
+
148b119e-f45e-4a21-979b-d4244ae4eca0,1067,Headphones,2,Terrible experience with this Headphones.,2026-01-02
|
| 233 |
+
0a7d8551-fa0f-423a-ae6f-8060c1b07882,1155,Coffee Maker,1,The Coffee Maker stopped working after two days.,2026-01-03
|
| 234 |
+
95a85dc0-14b0-4ab5-a035-0f66e8aadb20,1060,Smartphone,5,I love this Smartphone! It works great.,2026-01-01
|
| 235 |
+
aa6248e0-7a04-48fc-9411-876018011cfb,1078,Mouse,1,The Mouse stopped working after two days.,2026-01-02
|
| 236 |
+
c17c0907-500a-47b5-9b83-c0a6d42c0ff9,1176,Laptop,3,"The Laptop is okay, but could be better.",2026-01-01
|
| 237 |
+
08000a94-b2d3-4cb1-b429-5188b04a908e,1196,Smartphone,3,"The Smartphone is okay, but could be better.",2026-01-02
|
| 238 |
+
8b378aed-2fbc-4484-b951-ec7b22be0d3b,1028,Monitor,3,"The Monitor is okay, but could be better.",2026-01-02
|
| 239 |
+
713812b7-3f58-4e69-b325-da6074a40131,1065,Keyboard,5,I love this Keyboard! It works great.,2026-01-02
|
| 240 |
+
23f1127b-d7eb-400b-bf68-728e18709d0d,1023,Keyboard,3,"The Keyboard is okay, but could be better.",2026-01-03
|
| 241 |
+
5fe2a075-79c2-4cb5-9498-b88b51451785,1109,Keyboard,2,Not worth the money. Analyzing the Keyboard shows poor build quality.,2026-01-03
|
| 242 |
+
bf461cbe-de96-43f4-8332-f820b8cf55d4,1043,Smartphone,4,"The Smartphone is amazing, 5 stars!",2026-01-03
|
| 243 |
+
19fc2491-e20a-4582-81e0-41666ce724f7,1045,Desk Chair,3,"The Desk Chair is okay, but could be better.",2026-01-03
|
| 244 |
+
41ee0c23-8381-4bda-875b-fc906c9fe79b,1135,Keyboard,3,"The Keyboard is okay, but could be better.",2026-01-01
|
| 245 |
+
a7ae4221-c895-4289-b9c7-ec6e82dba4db,1114,Laptop,5,"The Laptop is amazing, 5 stars!",2026-01-02
|
| 246 |
+
9f16723f-96d2-4428-839d-148b28e796b2,1016,Headphones,5,I love this Headphones! It works great.,2026-01-02
|
| 247 |
+
9a7f7500-1576-4b3e-bbea-22db922e5cc6,1111,Monitor,1,Broken on arrival. Very disappointed.,2026-01-01
|
| 248 |
+
3c2087bf-d815-481b-8a43-f7c5052a5c27,1159,Headphones,3,"The Headphones is okay, but could be better.",2026-01-02
|
| 249 |
+
6f9254fd-12e1-44ce-b327-6dbb5605dfb3,1191,Monitor,2,Broken on arrival. Very disappointed.,2026-01-02
|
| 250 |
+
55e904e1-4f8e-45e6-8f2f-5a82f0e7025c,1009,Mouse,1,Not worth the money. Analyzing the Mouse shows poor build quality.,2026-01-03
|
| 251 |
+
d24e387a-9d94-401b-b89a-3e7c54764d30,1152,Monitor,1,Broken on arrival. Very disappointed.,2026-01-02
|
| 252 |
+
2002cc5a-d225-47f3-aaed-6c602491132d,1174,Smartphone,5,Fast shipping and great service.,2026-01-03
|
| 253 |
+
3a41a2bc-70d2-44b7-ab34-b535b93c3567,1174,Monitor,3,"The Monitor is okay, but could be better.",2026-01-03
|
| 254 |
+
f3c7da4a-2c59-4dbb-b298-b8b01996dcaf,1195,Desk Chair,5,Good value for money. The Desk Chair exceeded my expectations.,2026-01-01
|
| 255 |
+
d3e9b1f3-3aa9-402b-8819-dcb447c8195c,1199,Monitor,3,"The Monitor is okay, but could be better.",2026-01-02
|
| 256 |
+
f50fa11b-87d4-4b62-8e59-8494eb753fd7,1010,Smartphone,3,"The Smartphone is okay, but could be better.",2026-01-01
|
| 257 |
+
ef8df74d-d9a7-4d36-981a-a08580886f1a,1024,Headphones,3,"The Headphones is okay, but could be better.",2026-01-02
|
| 258 |
+
0ea3a189-26fa-4827-a674-5a3f4ab047e0,1038,Laptop,2,Broken on arrival. Very disappointed.,2026-01-02
|
| 259 |
+
6696c1a6-3e06-424c-90df-7ce39b993874,1077,Headphones,1,The Headphones stopped working after two days.,2026-01-02
|
| 260 |
+
250e83ee-adf5-4580-9be8-cd0d0bd3a0c5,1142,Keyboard,1,The Keyboard stopped working after two days.,2026-01-01
|
| 261 |
+
1b68bdbb-3ccf-47d2-b8ec-0c1dc912280e,1064,Monitor,3,"The Monitor is okay, but could be better.",2026-01-01
|
| 262 |
+
c4613bbc-5c9f-442d-b8ac-671d21ec7a71,1095,Headphones,3,"The Headphones is okay, but could be better.",2026-01-02
|
| 263 |
+
9b3b9f88-2f4f-4761-b770-5cdc60ebb712,1157,Headphones,1,Broken on arrival. Very disappointed.,2026-01-01
|
| 264 |
+
4af53dfe-54cb-4831-b7e4-d6981c360249,1152,Desk Chair,3,"The Desk Chair is okay, but could be better.",2026-01-01
|
| 265 |
+
423e25ce-a0f3-40b4-8905-5447bf9cd75c,1050,Laptop,3,"The Laptop is okay, but could be better.",2026-01-03
|
| 266 |
+
b50e33d7-d9d0-4e8b-8576-5c2a15c7dc6e,1052,Laptop,3,"The Laptop is okay, but could be better.",2026-01-02
|
| 267 |
+
e207dbb6-6f95-4e22-bfac-dfa64c956585,1158,Monitor,5,Fast shipping and great service.,2026-01-02
|
| 268 |
+
15a57d60-cba8-4d6e-aa54-79f2399b29fc,1010,Keyboard,3,"The Keyboard is okay, but could be better.",2026-01-03
|
| 269 |
+
aa1adda7-2822-40a9-9b12-ad2ea7366835,1150,Mouse,5,Good value for money. The Mouse exceeded my expectations.,2026-01-02
|
| 270 |
+
a47bfb9a-ad9e-4165-9e63-46ad7bd01a0c,1028,Coffee Maker,3,"The Coffee Maker is okay, but could be better.",2026-01-01
|
| 271 |
+
aeee0e2c-25a6-4cf8-a872-b415040b7232,1150,Smartphone,1,Not worth the money. Analyzing the Smartphone shows poor build quality.,2026-01-01
|
| 272 |
+
77bb271a-efa6-4f91-ac53-55e0f2df8f17,1155,Laptop,1,Terrible experience with this Laptop.,2026-01-01
|
| 273 |
+
f5beee1a-c842-4488-a73b-63f363cbb148,1087,Mouse,4,"The Mouse is amazing, 5 stars!",2026-01-03
|
| 274 |
+
36b06ba7-73b0-4af0-a8e2-3a61107175c2,1042,Mouse,2,The Mouse stopped working after two days.,2026-01-02
|
| 275 |
+
242942a1-6d67-431d-9783-ac0d1c8e1029,1176,Coffee Maker,3,"The Coffee Maker is okay, but could be better.",2026-01-02
|
| 276 |
+
bb2ced3f-0db7-4a95-be5f-24a3155878da,1129,Keyboard,4,Fast shipping and great service.,2026-01-02
|
| 277 |
+
27d6b2e2-9e59-4f5d-91f1-df713a84be76,1041,Mouse,3,"The Mouse is okay, but could be better.",2026-01-01
|
| 278 |
+
65a664a2-3f06-451f-8cc9-308797fcfb3a,1146,Desk Chair,5,I love this Desk Chair! It works great.,2026-01-03
|
| 279 |
+
7151bed7-527f-4409-896e-c14913550472,1056,Desk Chair,3,"The Desk Chair is okay, but could be better.",2026-01-03
|
| 280 |
+
7bea76c1-c72b-4da0-af65-f4bd75e3f1d0,1030,Smartphone,2,Broken on arrival. Very disappointed.,2026-01-03
|
| 281 |
+
909bfa8d-230c-47f1-9be6-6e9e06e33f44,1132,Laptop,5,"The Laptop is amazing, 5 stars!",2026-01-03
|
| 282 |
+
712b8f43-0040-45e1-bcc1-425173833649,1165,Headphones,2,Not worth the money. Analyzing the Headphones shows poor build quality.,2026-01-01
|
| 283 |
+
bd906e59-9848-49f0-99b6-9c3f58a44e03,1159,Desk Chair,5,"Excellent quality, highly recommended.",2026-01-03
|
| 284 |
+
dd070b9d-5f87-4ba1-94ba-c9b7ba9f75d6,1051,Keyboard,4,I love this Keyboard! It works great.,2026-01-01
|
| 285 |
+
0d16192b-515b-4487-862f-9d6e41198320,1003,Keyboard,1,The Keyboard stopped working after two days.,2026-01-03
|
| 286 |
+
2184c4e8-0181-4f3f-ad75-fd4ffcfa2369,1199,Headphones,2,Not worth the money. Analyzing the Headphones shows poor build quality.,2026-01-02
|
| 287 |
+
854f6ac0-ce92-464c-be0e-023b6095aa9f,1063,Monitor,3,"The Monitor is okay, but could be better.",2026-01-02
|
| 288 |
+
08c252d6-9ce8-4e82-8e11-4e0d7e8eda3e,1055,Monitor,3,"The Monitor is okay, but could be better.",2026-01-03
|
| 289 |
+
58a1e189-a350-4524-8f47-188bf0ac7edc,1015,Smartphone,1,Not worth the money. Analyzing the Smartphone shows poor build quality.,2026-01-01
|
| 290 |
+
665700be-80c4-4989-90f3-0807982d91ca,1116,Mouse,2,The Mouse stopped working after two days.,2026-01-03
|
| 291 |
+
a608f248-3cdc-4271-8c17-52fd6587a1af,1200,Headphones,5,"The Headphones is amazing, 5 stars!",2026-01-01
|
| 292 |
+
c7e72b71-9ac6-4645-822d-a24e45aef092,1185,Mouse,1,Customer service was unhelpful.,2026-01-03
|
| 293 |
+
af51f151-6878-42c4-85ec-aad134a9c479,1177,Smartphone,5,Fast shipping and great service.,2026-01-02
|
| 294 |
+
a01c6ce5-4c2f-489c-9915-96e2adee77ed,1018,Headphones,2,Terrible experience with this Headphones.,2026-01-02
|
| 295 |
+
3d76c659-256d-4405-b93d-f0b6b60301aa,1109,Laptop,3,"The Laptop is okay, but could be better.",2026-01-02
|
| 296 |
+
13551496-0b6e-4982-98a4-61ca8146ef20,1063,Keyboard,3,"The Keyboard is okay, but could be better.",2026-01-03
|
| 297 |
+
7247be4a-21d5-463b-aa3f-75218ca9724a,1045,Mouse,1,Broken on arrival. Very disappointed.,2026-01-01
|
| 298 |
+
5046427f-c016-4336-9f10-a1ff0c686931,1026,Smartphone,5,Fast shipping and great service.,2026-01-01
|
| 299 |
+
0f6322ae-6013-461a-87e3-a4293e9bf492,1026,Coffee Maker,5,"The Coffee Maker is amazing, 5 stars!",2026-01-02
|
| 300 |
+
00bf7f2f-261e-417f-a8e0-fd9e4f7d3715,1026,Desk Chair,5,"Excellent quality, highly recommended.",2026-01-01
|
| 301 |
+
2b4772f4-8c01-45cd-a854-24dd891119e8,1093,Desk Chair,4,"Excellent quality, highly recommended.",2026-01-03
|
| 302 |
+
c55cdd19-0812-4b35-ac7e-fbe23c6d8133,1141,Smartphone,2,Customer service was unhelpful.,2026-01-03
|
| 303 |
+
13a8fde4-bb30-40c3-af65-6bef326dbb01,1193,Monitor,1,The Monitor stopped working after two days.,2026-01-03
|
| 304 |
+
b942190f-1f1e-44f5-85e1-7c3c63011a73,1200,Monitor,1,The Monitor stopped working after two days.,2026-01-02
|
| 305 |
+
d752133c-6a53-447a-b8e6-44d9693c3019,1003,Headphones,2,Not worth the money. Analyzing the Headphones shows poor build quality.,2026-01-01
|
| 306 |
+
aae58054-ad3e-4fa2-90ba-24118997b384,1175,Keyboard,2,The Keyboard stopped working after two days.,2026-01-01
|
| 307 |
+
7a982635-b38f-4a15-b03b-bd44a604efc6,1063,Coffee Maker,4,I love this Coffee Maker! It works great.,2026-01-03
|
| 308 |
+
7742614d-033b-4e59-99a8-d90461604bd6,1192,Coffee Maker,1,Broken on arrival. Very disappointed.,2026-01-02
|
| 309 |
+
a5e46132-4e66-4424-b4d8-a6c397aecc61,1125,Mouse,3,"The Mouse is okay, but could be better.",2026-01-02
|
| 310 |
+
0af11f9e-0bd1-4e08-af26-e55a7b6db4c4,1006,Coffee Maker,4,"Excellent quality, highly recommended.",2026-01-02
|
| 311 |
+
b2e13d23-41c9-42f2-94ae-d155212075d1,1184,Keyboard,1,Not worth the money. Analyzing the Keyboard shows poor build quality.,2026-01-01
|
| 312 |
+
7950cd1f-f76e-473b-8ce4-01aac7d1b01b,1003,Monitor,4,Fast shipping and great service.,2026-01-02
|
| 313 |
+
44dccebd-3dcf-494c-af07-11811d3845db,1144,Headphones,4,"Excellent quality, highly recommended.",2026-01-02
|
| 314 |
+
cb61756c-070f-47e9-8b55-bdafdf118c67,1168,Keyboard,3,"The Keyboard is okay, but could be better.",2026-01-03
|
| 315 |
+
52158776-9b4d-412a-9683-e1f4887b6650,1027,Keyboard,2,Terrible experience with this Keyboard.,2026-01-01
|
| 316 |
+
87723389-01a4-49bd-b572-765a37791983,1096,Keyboard,2,Broken on arrival. Very disappointed.,2026-01-01
|
| 317 |
+
c7f4e7c7-e1d4-4e55-9c31-6d04c3c68354,1150,Monitor,4,I love this Monitor! It works great.,2026-01-03
|
| 318 |
+
cc6d9c71-43cb-4d81-9f49-889b149bdd63,1165,Mouse,1,Terrible experience with this Mouse.,2026-01-01
|
| 319 |
+
5d05b9f2-ef4b-4109-8271-534a5c9f6380,1108,Coffee Maker,2,Not worth the money. Analyzing the Coffee Maker shows poor build quality.,2026-01-02
|
| 320 |
+
653ac312-9de8-4ab0-a44a-e9f078fd07ff,1089,Desk Chair,5,"Excellent quality, highly recommended.",2026-01-02
|
| 321 |
+
999c35a0-1d69-447d-929c-a30763b54f04,1048,Desk Chair,4,"Excellent quality, highly recommended.",2026-01-02
|
| 322 |
+
3c7ff37d-1408-449b-bf9e-c3a06d8363da,1113,Coffee Maker,5,Fast shipping and great service.,2026-01-02
|
| 323 |
+
1dc7bd19-cf95-4764-af31-e92dbbff1e4b,1177,Coffee Maker,3,"The Coffee Maker is okay, but could be better.",2026-01-03
|
| 324 |
+
6a4f6052-801f-40df-8043-3a6aacfc9e2f,1193,Monitor,5,Good value for money. The Monitor exceeded my expectations.,2026-01-01
|
| 325 |
+
95abe7ae-3d92-40f0-acf7-dc55d8b16dcc,1091,Laptop,4,Good value for money. The Laptop exceeded my expectations.,2026-01-02
|
| 326 |
+
66d77338-bdff-49c6-a26c-c1ec1b46f9d7,1196,Headphones,1,Terrible experience with this Headphones.,2026-01-03
|
| 327 |
+
70cc6d61-c6bf-4d33-ac75-6a2a61b5f657,1140,Mouse,3,"The Mouse is okay, but could be better.",2026-01-01
|
| 328 |
+
5d0b7acc-5f4c-4f41-8677-6680f0a0eebb,1127,Keyboard,2,Customer service was unhelpful.,2026-01-01
|
| 329 |
+
8b626ce4-3212-483b-9933-bad67571b6d7,1135,Laptop,2,Customer service was unhelpful.,2026-01-02
|
| 330 |
+
fe250f62-d2ba-451d-8957-c530bf58359f,1012,Laptop,5,"Excellent quality, highly recommended.",2026-01-01
|
| 331 |
+
aff8d43e-37a8-4934-a3c9-44abbabc7d4b,1168,Laptop,1,Broken on arrival. Very disappointed.,2026-01-03
|
| 332 |
+
49e7929b-f492-40d2-82ec-bc97b7a6beb2,1171,Monitor,3,"The Monitor is okay, but could be better.",2026-01-02
|
| 333 |
+
4c1003df-4d4b-4444-919f-fe03f61f4793,1101,Keyboard,3,"The Keyboard is okay, but could be better.",2026-01-03
|
| 334 |
+
6c9c7ebd-7e86-43bf-ad08-5b30619a77cd,1053,Coffee Maker,1,Not worth the money. Analyzing the Coffee Maker shows poor build quality.,2026-01-03
|
| 335 |
+
f390ca5d-4bfe-4fa6-8037-9b0c37e9df35,1175,Keyboard,2,Customer service was unhelpful.,2026-01-01
|
| 336 |
+
6a8543a7-7503-4dcf-8e37-9bbb125594f0,1200,Laptop,2,Customer service was unhelpful.,2026-01-01
|
| 337 |
+
a04f4370-2c92-4a23-8c56-32d4af27966d,1172,Mouse,3,"The Mouse is okay, but could be better.",2026-01-01
|
| 338 |
+
82e86755-4ba7-4d82-af81-70515fe5581d,1059,Smartphone,2,Customer service was unhelpful.,2026-01-01
|
| 339 |
+
8828418d-fd87-4360-a593-837999d8dfd2,1189,Keyboard,3,"The Keyboard is okay, but could be better.",2026-01-02
|
| 340 |
+
6a68934d-ec4f-46ec-a31d-e8bd350ba522,1068,Smartphone,2,Broken on arrival. Very disappointed.,2026-01-02
|
| 341 |
+
636781d0-4010-42a2-977a-e41906f770ff,1081,Desk Chair,4,Fast shipping and great service.,2026-01-02
|
| 342 |
+
6333257a-90bc-450e-ba19-e10d89e4d2f0,1152,Keyboard,3,"The Keyboard is okay, but could be better.",2026-01-02
|
| 343 |
+
0597cbff-ed4e-449f-bba8-43a3e7034c12,1056,Mouse,3,"The Mouse is okay, but could be better.",2026-01-02
|
| 344 |
+
f6172de1-c787-44de-8f09-1ace8d1bde2f,1060,Monitor,4,Fast shipping and great service.,2026-01-01
|
| 345 |
+
384aaaa9-8a91-419e-873e-ed62073f1d91,1125,Mouse,3,"The Mouse is okay, but could be better.",2026-01-03
|
| 346 |
+
3a538c4c-a404-4eeb-aba8-1faf9a753c81,1103,Headphones,3,"The Headphones is okay, but could be better.",2026-01-03
|
| 347 |
+
14297ac2-d7ca-4eaf-b0aa-15033a1d8916,1196,Mouse,1,The Mouse stopped working after two days.,2026-01-02
|
| 348 |
+
bf2f97f3-2e5e-44f0-b9bc-4e90939f8a27,1038,Mouse,5,"The Mouse is amazing, 5 stars!",2026-01-03
|
| 349 |
+
f2b2c021-fce2-4232-b4fa-785bf477649b,1153,Monitor,5,I love this Monitor! It works great.,2026-01-01
|
| 350 |
+
7b88ace4-2aec-4c2b-a4d3-4b17a94c4f2f,1015,Smartphone,1,Terrible experience with this Smartphone.,2026-01-02
|
| 351 |
+
47b88951-391a-4488-992a-da0b546fc668,1017,Smartphone,4,I love this Smartphone! It works great.,2026-01-01
|
| 352 |
+
608af5ee-0cc4-4865-83a4-14a2e8686363,1191,Keyboard,3,"The Keyboard is okay, but could be better.",2026-01-03
|
| 353 |
+
181cb16f-9439-463e-a528-cf08af82e87c,1021,Keyboard,3,"The Keyboard is okay, but could be better.",2026-01-02
|
| 354 |
+
8378dd18-20d7-4ec8-ab9b-541c73a0294a,1041,Desk Chair,4,I love this Desk Chair! It works great.,2026-01-01
|
| 355 |
+
314ce4b2-84c2-41a6-9fc3-86097ad51b22,1006,Smartphone,1,Customer service was unhelpful.,2026-01-01
|
| 356 |
+
b24f59f9-7243-4ed5-9d3d-0b4a895654d7,1150,Smartphone,3,"The Smartphone is okay, but could be better.",2026-01-03
|
| 357 |
+
a6e9b5ae-6685-4327-b22d-1294fd28a4d7,1014,Coffee Maker,3,"The Coffee Maker is okay, but could be better.",2026-01-03
|
| 358 |
+
ad596310-55ac-4899-baff-5380d3cf6541,1115,Keyboard,1,Broken on arrival. Very disappointed.,2026-01-02
|
| 359 |
+
d62598ba-ca41-48af-baa6-302f9ce1e6a5,1187,Monitor,4,"Excellent quality, highly recommended.",2026-01-02
|
| 360 |
+
9398daad-d527-4a01-8085-fa43a7faaf3a,1123,Desk Chair,1,Customer service was unhelpful.,2026-01-03
|
| 361 |
+
72e44643-9d42-4ad0-94e6-0ced48ec8cc6,1160,Keyboard,1,Broken on arrival. Very disappointed.,2026-01-02
|
| 362 |
+
ee0b349c-2946-4d29-90d3-46e80e8fb3d4,1035,Monitor,3,"The Monitor is okay, but could be better.",2026-01-01
|
| 363 |
+
4776fcba-1c41-49cf-9fce-1d867d866eaa,1140,Laptop,3,"The Laptop is okay, but could be better.",2026-01-03
|
| 364 |
+
fce364dd-55f3-41e7-8a60-019068c29304,1107,Keyboard,1,Customer service was unhelpful.,2026-01-02
|
| 365 |
+
8d8a5399-184c-4b24-bcde-7407844bf02f,1159,Mouse,2,Terrible experience with this Mouse.,2026-01-02
|
| 366 |
+
f0c3ad82-feb1-4313-9a1d-07eca9b4715f,1003,Coffee Maker,5,"Excellent quality, highly recommended.",2026-01-02
|
| 367 |
+
a1c06f17-3615-4724-be15-878913b445ba,1176,Desk Chair,3,"The Desk Chair is okay, but could be better.",2026-01-03
|
| 368 |
+
5039df9a-b4e1-4029-9d81-81b2f5233ab5,1105,Monitor,1,Not worth the money. Analyzing the Monitor shows poor build quality.,2026-01-03
|
| 369 |
+
686e677b-fe3f-4d89-983f-1aa93e45e4a5,1052,Headphones,4,I love this Headphones! It works great.,2026-01-03
|
| 370 |
+
7603fce3-98ac-452b-ab0c-ba4118182465,1094,Mouse,3,"The Mouse is okay, but could be better.",2026-01-03
|
| 371 |
+
2d91f696-d166-41b4-b2d9-80c15a36d3df,1191,Coffee Maker,1,Customer service was unhelpful.,2026-01-03
|
| 372 |
+
6b264020-1a75-45b5-aa17-47f5c0d7e804,1153,Monitor,3,"The Monitor is okay, but could be better.",2026-01-01
|
| 373 |
+
7cedcd0c-37c9-4360-a917-e2e29bda79cc,1144,Headphones,5,Fast shipping and great service.,2026-01-02
|
| 374 |
+
d6d4836b-92ee-45bb-96b3-bada122f0f94,1055,Coffee Maker,3,"The Coffee Maker is okay, but could be better.",2026-01-02
|
| 375 |
+
9708c2c6-b5e5-4eb5-b092-e5d3da5aa48c,1166,Mouse,5,Fast shipping and great service.,2026-01-02
|
| 376 |
+
6457be65-0db5-44ff-95d2-c673e3165417,1136,Coffee Maker,1,Broken on arrival. Very disappointed.,2026-01-03
|
| 377 |
+
0c1fdc0a-b29c-4d64-aaac-2c7ff2a05e81,1030,Desk Chair,1,Customer service was unhelpful.,2026-01-03
|
| 378 |
+
0351dfd7-d2c3-4b9b-a49b-c6793509d895,1128,Desk Chair,3,"The Desk Chair is okay, but could be better.",2026-01-01
|
| 379 |
+
591a6550-7e66-41b7-bdb9-43886d0f8812,1049,Smartphone,3,"The Smartphone is okay, but could be better.",2026-01-03
|
| 380 |
+
1d6b5978-2bf7-4025-b213-52aeaeeaa345,1100,Monitor,3,"The Monitor is okay, but could be better.",2026-01-01
|
| 381 |
+
31c8c87f-b0e8-4b62-bbd1-c5ffcd6f0c98,1108,Laptop,3,"The Laptop is okay, but could be better.",2026-01-03
|
| 382 |
+
3df8c0c9-d66b-4c9e-8d65-86ee1edb568b,1020,Keyboard,3,"The Keyboard is okay, but could be better.",2026-01-02
|
| 383 |
+
54550f94-86e1-44b3-9c69-5efe9d29e050,1069,Monitor,3,"The Monitor is okay, but could be better.",2026-01-02
|
| 384 |
+
0b9fec78-d90e-4921-811a-a7ba0960a59c,1080,Coffee Maker,3,"The Coffee Maker is okay, but could be better.",2026-01-03
|
| 385 |
+
3e1fcad1-0e68-44d6-95b5-0c219a200881,1122,Keyboard,5,Fast shipping and great service.,2026-01-03
|
| 386 |
+
bfeea37a-5b75-4440-99f3-d11d29d0cb45,1076,Smartphone,2,Broken on arrival. Very disappointed.,2026-01-02
|
| 387 |
+
80e6d3de-5539-4a02-86ca-565f84114531,1058,Headphones,2,Broken on arrival. Very disappointed.,2026-01-02
|
| 388 |
+
f7ba4319-e75f-49d8-abcd-1399b1e155ce,1061,Keyboard,5,"Excellent quality, highly recommended.",2026-01-03
|
| 389 |
+
8c542108-9603-4f79-aac5-0d4b9902fea3,1195,Smartphone,2,Not worth the money. Analyzing the Smartphone shows poor build quality.,2026-01-03
|
| 390 |
+
d9c1ab2d-7b59-46b1-a734-bf111fa85609,1072,Headphones,1,The Headphones stopped working after two days.,2026-01-03
|
| 391 |
+
2774e089-a1d2-4505-9a8f-cb9237c386e5,1038,Mouse,2,Customer service was unhelpful.,2026-01-03
|
| 392 |
+
e4588c5e-f608-437b-86f6-4c515278db82,1088,Headphones,3,"The Headphones is okay, but could be better.",2026-01-01
|
| 393 |
+
11da787e-45b7-4b82-8f08-6740701d2fe4,1154,Laptop,1,The Laptop stopped working after two days.,2026-01-03
|
| 394 |
+
8ec23f07-529a-4573-af2b-68babd61592e,1018,Monitor,3,"The Monitor is okay, but could be better.",2026-01-02
|
| 395 |
+
e739fc11-fb40-4faf-97d1-a5fcbd32a40a,1066,Keyboard,4,"Excellent quality, highly recommended.",2026-01-03
|
| 396 |
+
e5e55049-6bc4-4f7b-9e1e-119b7e580c89,1046,Keyboard,4,"Excellent quality, highly recommended.",2026-01-03
|
| 397 |
+
b405e657-d1a3-4650-9b36-101def5ffb6e,1047,Headphones,2,The Headphones stopped working after two days.,2026-01-03
|
| 398 |
+
098dfa47-cfa4-4ffa-a7e3-8fcd30183922,1032,Monitor,3,"The Monitor is okay, but could be better.",2026-01-03
|
| 399 |
+
924a6fea-3bb7-4577-a529-880c8ac08318,1154,Keyboard,3,"The Keyboard is okay, but could be better.",2026-01-01
|
| 400 |
+
d3270cc0-1900-4321-8219-eb725ba6612b,1054,Monitor,3,"The Monitor is okay, but could be better.",2026-01-03
|
| 401 |
+
517eaaa6-406e-42c6-8e0b-38abc5c68438,1060,Smartphone,3,"The Smartphone is okay, but could be better.",2026-01-01
|
| 402 |
+
c6a6aeb4-37b6-48c4-a3bd-994c505f1c4d,1014,Keyboard,2,Customer service was unhelpful.,2026-01-02
|
| 403 |
+
c595806e-e50e-4faf-8238-a72d3e0b6622,1121,Headphones,3,"The Headphones is okay, but could be better.",2026-01-02
|
| 404 |
+
bca40fc2-a956-4750-8574-fe6d6662a715,1087,Monitor,1,Not worth the money. Analyzing the Monitor shows poor build quality.,2026-01-03
|
| 405 |
+
a68e851a-0bcf-4d34-9f2b-d1def53b1b90,1151,Monitor,5,"The Monitor is amazing, 5 stars!",2026-01-02
|
| 406 |
+
5cc3c950-4e4c-4008-a95e-bce8b21d8ed2,1149,Headphones,2,Not worth the money. Analyzing the Headphones shows poor build quality.,2026-01-02
|
| 407 |
+
470e81b5-a12f-409f-a2b7-6d0e76fe0b48,1187,Mouse,2,The Mouse stopped working after two days.,2026-01-01
|
| 408 |
+
9c7cc702-bfcf-448c-bc3a-c0878ff9aa6c,1155,Laptop,3,"The Laptop is okay, but could be better.",2026-01-03
|
| 409 |
+
75fdb0a0-1b8c-474a-b3de-c96d2d03fb11,1124,Smartphone,4,"The Smartphone is amazing, 5 stars!",2026-01-02
|
| 410 |
+
542092e1-302c-4a2f-a45c-6d39c6c2236c,1167,Mouse,3,"The Mouse is okay, but could be better.",2026-01-03
|
| 411 |
+
6b253e7b-17cb-4af4-acfc-9822c2abd8e0,1103,Mouse,2,Customer service was unhelpful.,2026-01-02
|
| 412 |
+
34c93ebf-e099-4b65-9108-eec8107aad8b,1056,Keyboard,2,Terrible experience with this Keyboard.,2026-01-03
|
| 413 |
+
ef2ea5e6-312e-4608-b870-a04c9f27bc06,1110,Monitor,3,"The Monitor is okay, but could be better.",2026-01-02
|
| 414 |
+
22d67eca-b141-41f0-ba6c-9048075e5026,1031,Laptop,5,Good value for money. The Laptop exceeded my expectations.,2026-01-02
|
| 415 |
+
4b322b05-b4e4-4d56-b9f2-eb71a828211d,1003,Laptop,4,Fast shipping and great service.,2026-01-03
|
| 416 |
+
21f257f2-4e3d-431a-ae25-7feeeb7d5cef,1167,Keyboard,5,Fast shipping and great service.,2026-01-01
|
| 417 |
+
d9da15e6-bc27-4719-abb5-5ac9a5767e70,1070,Laptop,3,"The Laptop is okay, but could be better.",2026-01-01
|
| 418 |
+
e12ac803-8674-42ec-9de1-f9efb0376816,1185,Desk Chair,3,"The Desk Chair is okay, but could be better.",2026-01-01
|
| 419 |
+
696b6093-0fb3-41e9-8f33-671ccf8ddcd6,1173,Keyboard,1,Broken on arrival. Very disappointed.,2026-01-03
|
| 420 |
+
3c148b57-bbc7-419e-af50-dacb3ee1d728,1112,Smartphone,4,"The Smartphone is amazing, 5 stars!",2026-01-01
|
| 421 |
+
1819db76-03b0-44c0-a6db-8a5b4efc8d6d,1140,Desk Chair,3,"The Desk Chair is okay, but could be better.",2026-01-01
|
| 422 |
+
4a49d83b-4f5c-4a32-8a78-98e6a618a46b,1069,Coffee Maker,5,Good value for money. The Coffee Maker exceeded my expectations.,2026-01-01
|
| 423 |
+
8d80d237-f8d6-40af-82c2-6d9f4be972b5,1070,Coffee Maker,3,"The Coffee Maker is okay, but could be better.",2026-01-01
|
| 424 |
+
07e3a513-ab0c-46dd-bc39-53ebab5deee3,1041,Monitor,3,"The Monitor is okay, but could be better.",2026-01-03
|
| 425 |
+
d6377a84-cefa-4037-bea1-6e1d478e018e,1194,Keyboard,2,Terrible experience with this Keyboard.,2026-01-02
|
| 426 |
+
4ec22c2a-99d6-468d-b29c-e74001dfe951,1113,Mouse,1,Broken on arrival. Very disappointed.,2026-01-02
|
| 427 |
+
f01f7382-e4fa-42c2-b398-e4fc59dd9452,1024,Headphones,3,"The Headphones is okay, but could be better.",2026-01-01
|
| 428 |
+
6d0102f9-83c6-486c-bc5f-eb6aab1635f0,1169,Mouse,5,Fast shipping and great service.,2026-01-01
|
| 429 |
+
fd5c8bcd-6aa1-4b75-961b-e345fad911e5,1071,Smartphone,4,Good value for money. The Smartphone exceeded my expectations.,2026-01-01
|
| 430 |
+
48f63a9e-9371-4e14-8d7e-2e139cd928ef,1027,Desk Chair,5,Good value for money. The Desk Chair exceeded my expectations.,2026-01-01
|
| 431 |
+
9ef9ab9a-3141-4cc0-99ff-60d67eb7d909,1139,Smartphone,3,"The Smartphone is okay, but could be better.",2026-01-02
|
| 432 |
+
31490475-e5b2-4ed0-90a0-cd0fb4e91064,1120,Keyboard,3,"The Keyboard is okay, but could be better.",2026-01-01
|
| 433 |
+
a2e3bca4-d4b0-4d7e-8fa0-b71651e63610,1035,Coffee Maker,2,The Coffee Maker stopped working after two days.,2026-01-01
|
| 434 |
+
17e50b8d-fd78-4451-9325-4d59d6b9ad4a,1176,Mouse,2,Terrible experience with this Mouse.,2026-01-02
|
| 435 |
+
e8c7c867-8231-435c-8e49-13539fa38a92,1046,Monitor,2,The Monitor stopped working after two days.,2026-01-02
|
| 436 |
+
e6dd8969-aada-4ba0-937a-d987dc2e10f5,1200,Headphones,3,"The Headphones is okay, but could be better.",2026-01-01
|
| 437 |
+
517c8165-331b-46c7-a49b-ed7b06f40c1e,1099,Smartphone,3,"The Smartphone is okay, but could be better.",2026-01-01
|
| 438 |
+
bfd554ff-2e65-471f-8465-1be59dd3225e,1148,Smartphone,2,The Smartphone stopped working after two days.,2026-01-02
|
| 439 |
+
a2592eb5-0905-41a0-ace8-e005fd75a89a,1045,Mouse,3,"The Mouse is okay, but could be better.",2026-01-01
|
| 440 |
+
61b0d81f-b60c-498a-a1d9-e4fe7af3f398,1111,Smartphone,3,"The Smartphone is okay, but could be better.",2026-01-02
|
| 441 |
+
6c65ae6b-ffbd-44fd-afc1-2e17a9f99d4f,1154,Laptop,1,Broken on arrival. Very disappointed.,2026-01-01
|
| 442 |
+
58d34b8c-91e1-44e2-aafa-3f05c67e7ffb,1060,Laptop,5,Fast shipping and great service.,2026-01-01
|
| 443 |
+
9195164c-17e0-43ca-a23b-b1c68989d605,1065,Monitor,4,Good value for money. The Monitor exceeded my expectations.,2026-01-01
|
| 444 |
+
d29dc973-a007-4f86-90bf-b144d5b31d9a,1139,Headphones,2,Not worth the money. Analyzing the Headphones shows poor build quality.,2026-01-03
|
| 445 |
+
ad433e2d-9bdc-44e5-b11e-b154c12690a1,1005,Smartphone,3,"The Smartphone is okay, but could be better.",2026-01-03
|
| 446 |
+
c88fa1b8-3b01-4d8e-8b05-4b749f012883,1079,Headphones,5,Fast shipping and great service.,2026-01-01
|
| 447 |
+
dbd141b4-a184-4f6d-a759-361d47cb1782,1039,Mouse,2,Not worth the money. Analyzing the Mouse shows poor build quality.,2026-01-01
|
| 448 |
+
ac608144-6cb5-4299-a0e8-6fd500903816,1046,Mouse,4,I love this Mouse! It works great.,2026-01-02
|
| 449 |
+
68fd116b-4529-4253-b015-03eebea35692,1049,Laptop,3,"The Laptop is okay, but could be better.",2026-01-01
|
| 450 |
+
8473d2d6-acaf-48fb-8cc6-c4d9ce52f6b3,1138,Headphones,1,Terrible experience with this Headphones.,2026-01-02
|
| 451 |
+
41e1f836-3cf6-4621-b3c8-18b73ae60248,1054,Coffee Maker,2,The Coffee Maker stopped working after two days.,2026-01-02
|
| 452 |
+
f5024acd-f066-427a-9a3f-3ff25ef512bb,1189,Smartphone,1,Terrible experience with this Smartphone.,2026-01-02
|
| 453 |
+
9cbf4d7d-e70c-4280-afa9-7de7619987c0,1066,Keyboard,2,Customer service was unhelpful.,2026-01-03
|
| 454 |
+
c6aaf4fc-6f45-4ada-81fa-9da6098b5863,1093,Laptop,5,"The Laptop is amazing, 5 stars!",2026-01-03
|
| 455 |
+
3fc4520b-48c6-4ec3-acfc-807549b868c2,1187,Coffee Maker,1,The Coffee Maker stopped working after two days.,2026-01-02
|
| 456 |
+
9ec6e137-f19b-483f-a23b-69012d355557,1035,Headphones,4,"The Headphones is amazing, 5 stars!",2026-01-02
|
| 457 |
+
7323eab3-0554-4144-97f1-480a546bc509,1069,Desk Chair,4,"Excellent quality, highly recommended.",2026-01-01
|
| 458 |
+
058eb663-d536-40b0-9239-abdf570bee97,1148,Mouse,4,Good value for money. The Mouse exceeded my expectations.,2026-01-03
|
| 459 |
+
c2559353-f95d-42ff-a9c0-36fc58eef3cf,1144,Keyboard,4,Good value for money. The Keyboard exceeded my expectations.,2026-01-02
|
| 460 |
+
ce94f92b-85e7-4074-af9a-354ae7468a52,1160,Desk Chair,1,The Desk Chair stopped working after two days.,2026-01-03
|
| 461 |
+
e10f2f09-45a0-4117-9bd8-ea385f8b3066,1123,Monitor,5,Fast shipping and great service.,2026-01-03
|
| 462 |
+
3fad566f-021d-4d13-9d99-d991a1ad9b2e,1146,Laptop,2,Terrible experience with this Laptop.,2026-01-02
|
| 463 |
+
dfa5db11-9ae4-4021-a780-ac62ce81d541,1109,Headphones,1,Not worth the money. Analyzing the Headphones shows poor build quality.,2026-01-01
|
| 464 |
+
99d72f60-529d-42f8-b5a3-b60453a67d03,1025,Smartphone,4,Good value for money. The Smartphone exceeded my expectations.,2026-01-03
|
| 465 |
+
5400ceae-67a4-4f73-b867-2905dca4a1c9,1012,Mouse,5,Fast shipping and great service.,2026-01-01
|
| 466 |
+
8ca89e63-cd75-44b1-9fe5-d69e753961bc,1134,Coffee Maker,1,Not worth the money. Analyzing the Coffee Maker shows poor build quality.,2026-01-01
|
| 467 |
+
9787edf2-c313-41be-89a2-7c560128e485,1151,Smartphone,4,"Excellent quality, highly recommended.",2026-01-02
|
| 468 |
+
82377592-8cec-4d07-a2e9-6c154622d06e,1117,Smartphone,5,I love this Smartphone! It works great.,2026-01-01
|
| 469 |
+
48e8c79a-fc67-4db7-8657-6feeef3f6b9a,1190,Headphones,4,"The Headphones is amazing, 5 stars!",2026-01-03
|
| 470 |
+
aabe05a3-66e7-403c-a522-67569c4b1428,1097,Desk Chair,3,"The Desk Chair is okay, but could be better.",2026-01-02
|
| 471 |
+
73317cff-6e00-490c-af02-eb0df67ebec9,1151,Headphones,4,Fast shipping and great service.,2026-01-02
|
| 472 |
+
74fcfa93-421a-41df-9452-f39a9c7d8944,1005,Coffee Maker,3,"The Coffee Maker is okay, but could be better.",2026-01-02
|
| 473 |
+
b3458e14-7523-44be-9b43-0a8ab367618f,1165,Headphones,4,I love this Headphones! It works great.,2026-01-01
|
| 474 |
+
dae8d1a7-ddd5-4c3c-9d00-992fdf475b94,1111,Desk Chair,1,Terrible experience with this Desk Chair.,2026-01-02
|
| 475 |
+
42c7de49-d8a5-4329-95c2-ca8c0d2e773e,1160,Smartphone,1,Terrible experience with this Smartphone.,2026-01-02
|
| 476 |
+
06bcb3c0-14ae-434d-9500-46e3e87ed008,1195,Coffee Maker,1,Customer service was unhelpful.,2026-01-01
|
| 477 |
+
cbce5f02-42bd-434a-860a-9d63cc654e5f,1184,Laptop,5,Good value for money. The Laptop exceeded my expectations.,2026-01-03
|
| 478 |
+
56336f85-1a45-4565-b2b2-26eef2011d1d,1101,Mouse,2,Not worth the money. Analyzing the Mouse shows poor build quality.,2026-01-02
|
| 479 |
+
6ea0682e-6b38-47b0-9bc6-6ea4d44afdde,1187,Desk Chair,4,I love this Desk Chair! It works great.,2026-01-01
|
| 480 |
+
139a538c-56b5-483d-a712-0dfe00036056,1139,Desk Chair,1,Broken on arrival. Very disappointed.,2026-01-03
|
| 481 |
+
051ee74a-f195-421d-ac20-ee708153af6c,1176,Mouse,3,"The Mouse is okay, but could be better.",2026-01-01
|
| 482 |
+
4ae352b6-a985-4bd9-bdcc-0c666265617a,1067,Headphones,3,"The Headphones is okay, but could be better.",2026-01-02
|
| 483 |
+
2e427c4b-aedf-46a1-b923-ee23e3068822,1053,Laptop,3,"The Laptop is okay, but could be better.",2026-01-01
|
| 484 |
+
f72e5937-f83b-4c67-b51d-e11bb1bd449c,1095,Smartphone,2,Broken on arrival. Very disappointed.,2026-01-02
|
| 485 |
+
6f580d82-fbbe-486b-a3c0-d6dee3393838,1148,Laptop,3,"The Laptop is okay, but could be better.",2026-01-02
|
| 486 |
+
f9f5abe4-e208-445f-84c6-050953e1eeef,1072,Keyboard,1,The Keyboard stopped working after two days.,2026-01-01
|
| 487 |
+
a54d72ab-0442-4173-a8c9-ec24c26c8bb3,1086,Coffee Maker,3,"The Coffee Maker is okay, but could be better.",2026-01-03
|
| 488 |
+
b518c9e1-db5b-48d9-a895-52a768b1a6e5,1148,Desk Chair,5,"Excellent quality, highly recommended.",2026-01-03
|
| 489 |
+
57d90d12-7c06-44aa-bab5-1e50f2c9cc0f,1080,Mouse,4,"Excellent quality, highly recommended.",2026-01-01
|
| 490 |
+
bfd80514-b641-4eda-9327-aa9722be2e23,1068,Coffee Maker,1,Broken on arrival. Very disappointed.,2026-01-03
|
| 491 |
+
6f442446-8f9d-4bb5-8b9f-a5ec2d8dfa8e,1019,Smartphone,1,Terrible experience with this Smartphone.,2026-01-02
|
| 492 |
+
967bdaf2-897c-4965-b3f8-5398d4d92be8,1043,Desk Chair,3,"The Desk Chair is okay, but could be better.",2026-01-03
|
| 493 |
+
1fd6d1df-7219-40e8-8d31-8c5354c5237b,1077,Laptop,3,"The Laptop is okay, but could be better.",2026-01-03
|
| 494 |
+
54979c9e-214b-486f-9830-22250885dbcf,1015,Monitor,2,Terrible experience with this Monitor.,2026-01-03
|
| 495 |
+
3d9fa8db-dbf8-4c3c-aeb7-976fdcb96c70,1138,Coffee Maker,5,Good value for money. The Coffee Maker exceeded my expectations.,2026-01-01
|
| 496 |
+
7d918fcb-ffbd-4fdc-b4aa-6acedf0d13ac,1110,Headphones,3,"The Headphones is okay, but could be better.",2026-01-03
|
| 497 |
+
dfe223fd-605b-4b1b-816d-074a2c2459bf,1078,Keyboard,1,Customer service was unhelpful.,2026-01-02
|
| 498 |
+
a11244cb-1243-47d7-8a22-46d5fe22a8c3,1106,Smartphone,5,Good value for money. The Smartphone exceeded my expectations.,2026-01-03
|
| 499 |
+
a5965343-846d-441e-bfd6-9772c18119a6,1074,Smartphone,3,"The Smartphone is okay, but could be better.",2026-01-02
|
| 500 |
+
683e83b7-bfa7-4b26-823c-d8793e972573,1144,Coffee Maker,5,Fast shipping and great service.,2026-01-03
|
| 501 |
+
322408fd-62a7-4fd7-abd2-01970d40d7ac,1083,Headphones,3,"The Headphones is okay, but could be better.",2026-01-02
|
data/sales_data.csv
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
data/web_logs.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
requirements.txt
CHANGED
|
@@ -1,3 +1,14 @@
|
|
| 1 |
-
|
| 2 |
-
pandas
|
| 3 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
streamlit
|
| 2 |
+
pandas
|
| 3 |
+
numpy
|
| 4 |
+
plotly
|
| 5 |
+
scikit-learn
|
| 6 |
+
textblob
|
| 7 |
+
langchain-community
|
| 8 |
+
langchain-huggingface
|
| 9 |
+
langchain-text-splitters
|
| 10 |
+
langchain-core
|
| 11 |
+
transformers
|
| 12 |
+
faiss-cpu
|
| 13 |
+
torch
|
| 14 |
+
sentence-transformers
|
src/__pycache__/models.cpython-311.pyc
ADDED
|
Binary file (4.64 kB). View file
|
|
|
src/__pycache__/processor.cpython-311.pyc
ADDED
|
Binary file (3.27 kB). View file
|
|
|
src/__pycache__/rag_engine.cpython-311.pyc
ADDED
|
Binary file (6.93 kB). View file
|
|
|
src/dashboard.py
ADDED
|
@@ -0,0 +1,241 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import streamlit as st
|
| 2 |
+
import plotly.express as px
|
| 3 |
+
import plotly.graph_objects as go
|
| 4 |
+
import pandas as pd
|
| 5 |
+
import os
|
| 6 |
+
from processor import get_integrated_data, clean_sales_data
|
| 7 |
+
from models import perform_customer_segmentation, forecast_sales, analyze_sentiment
|
| 8 |
+
from rag_engine import RAGSystem
|
| 9 |
+
|
| 10 |
+
# Page Config
|
| 11 |
+
st.set_page_config(page_title="Business Analytics System",
|
| 12 |
+
layout="wide", page_icon="📊")
|
| 13 |
+
|
| 14 |
+
# Custom CSS
|
| 15 |
+
st.markdown("""
|
| 16 |
+
<style>
|
| 17 |
+
.metric-card {
|
| 18 |
+
background-color: #f0f2f6;
|
| 19 |
+
padding: 20px;
|
| 20 |
+
border-radius: 10px;
|
| 21 |
+
text-align: center;
|
| 22 |
+
}
|
| 23 |
+
.metric-title {
|
| 24 |
+
font-size: 16px;
|
| 25 |
+
color: #555;
|
| 26 |
+
}
|
| 27 |
+
.metric-value {
|
| 28 |
+
font-size: 32px;
|
| 29 |
+
font-weight: bold;
|
| 30 |
+
color: #000;
|
| 31 |
+
}
|
| 32 |
+
</style>
|
| 33 |
+
""", unsafe_allow_html=True)
|
| 34 |
+
|
| 35 |
+
|
| 36 |
+
@st.cache_data
|
| 37 |
+
def load_all_data():
|
| 38 |
+
data = get_integrated_data()
|
| 39 |
+
sales = clean_sales_data(data['sales'])
|
| 40 |
+
reviews = analyze_sentiment(data['reviews'])
|
| 41 |
+
logs = data['logs']
|
| 42 |
+
rfm = perform_customer_segmentation(sales)
|
| 43 |
+
return sales, reviews, logs, rfm
|
| 44 |
+
|
| 45 |
+
@st.cache_resource
|
| 46 |
+
def get_rag_system():
|
| 47 |
+
# Construct absolute path to data directory
|
| 48 |
+
data_dir = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'data')
|
| 49 |
+
rag = RAGSystem(data_dir)
|
| 50 |
+
return rag
|
| 51 |
+
|
| 52 |
+
|
| 53 |
+
|
| 54 |
+
try:
|
| 55 |
+
sales_df, reviews_df, logs_df, rfm_df = load_all_data()
|
| 56 |
+
except FileNotFoundError:
|
| 57 |
+
st.error("Data files not found. Please run data generation first.")
|
| 58 |
+
st.stop()
|
| 59 |
+
|
| 60 |
+
# Sidebar
|
| 61 |
+
st.sidebar.title("Analytics Portal")
|
| 62 |
+
st.sidebar.image(
|
| 63 |
+
"https://img.icons8.com/color/96/000000/monitor--v1.png", width=50)
|
| 64 |
+
page = st.sidebar.radio("Navigate", ["Overview", "Sales Performance",
|
| 65 |
+
"Customer Segments", "Forecasting", "Feedback Analysis", "Business Q&A"])
|
| 66 |
+
|
| 67 |
+
st.sidebar.markdown("---")
|
| 68 |
+
st.sidebar.info("Integrated Business Analytics System v1.0")
|
| 69 |
+
|
| 70 |
+
# --- Overview ---
|
| 71 |
+
if page == "Overview":
|
| 72 |
+
st.title("📊 Integrated Business Analytics Dashboard")
|
| 73 |
+
st.markdown("Real-time insights on Sales, Customers, and Operations.")
|
| 74 |
+
|
| 75 |
+
# KPI Row
|
| 76 |
+
col1, col2, col3, col4 = st.columns(4)
|
| 77 |
+
|
| 78 |
+
total_revenue = sales_df['TotalPrice'].sum()
|
| 79 |
+
total_orders = len(sales_df)
|
| 80 |
+
avg_order_value = total_revenue / total_orders
|
| 81 |
+
avg_sentiment = reviews_df['Sentiment_Score'].mean()
|
| 82 |
+
|
| 83 |
+
with col1:
|
| 84 |
+
st.metric("Total Revenue", f"${total_revenue:,.2f}")
|
| 85 |
+
with col2:
|
| 86 |
+
st.metric("Total Orders", f"{total_orders}")
|
| 87 |
+
with col3:
|
| 88 |
+
st.metric("Avg Order Value", f"${avg_order_value:,.2f}")
|
| 89 |
+
with col4:
|
| 90 |
+
st.metric("Avg Sentiment",
|
| 91 |
+
f"{avg_sentiment:.2f}", delta_color="normal")
|
| 92 |
+
|
| 93 |
+
st.markdown("### Recent Activity")
|
| 94 |
+
c1, c2 = st.columns(2)
|
| 95 |
+
with c1:
|
| 96 |
+
st.subheader("Recent Sales")
|
| 97 |
+
st.dataframe(sales_df.sort_values('Date', ascending=False).head(5)[
|
| 98 |
+
['Date', 'Product', 'TotalPrice', 'Region']])
|
| 99 |
+
with c2:
|
| 100 |
+
st.subheader("Recent Reviews")
|
| 101 |
+
st.dataframe(reviews_df.sort_values('Date', ascending=False).head(5)[
|
| 102 |
+
['Date', 'Product', 'Sentiment_Label', 'ReviewText']])
|
| 103 |
+
|
| 104 |
+
# --- Sales Performance ---
|
| 105 |
+
elif page == "Sales Performance":
|
| 106 |
+
st.title("📈 Sales Performance")
|
| 107 |
+
|
| 108 |
+
# Filters
|
| 109 |
+
region = st.selectbox(
|
| 110 |
+
"Select Region", ["All"] + list(sales_df['Region'].unique()))
|
| 111 |
+
if region != "All":
|
| 112 |
+
filtered_sales = sales_df[sales_df['Region'] == region]
|
| 113 |
+
else:
|
| 114 |
+
filtered_sales = sales_df
|
| 115 |
+
|
| 116 |
+
# Charts
|
| 117 |
+
col1, col2 = st.columns(2)
|
| 118 |
+
|
| 119 |
+
with col1:
|
| 120 |
+
# Time series
|
| 121 |
+
daily = filtered_sales.set_index('Date').resample(
|
| 122 |
+
'D')['TotalPrice'].sum().reset_index()
|
| 123 |
+
fig_line = px.line(daily, x='Date', y='TotalPrice',
|
| 124 |
+
title='Daily Revenue Trend')
|
| 125 |
+
st.plotly_chart(fig_line, use_container_width=True)
|
| 126 |
+
|
| 127 |
+
with col2:
|
| 128 |
+
# Category Bar
|
| 129 |
+
cat_sales = filtered_sales.groupby(
|
| 130 |
+
'Category')['TotalPrice'].sum().reset_index()
|
| 131 |
+
fig_bar = px.bar(cat_sales, x='Category', y='TotalPrice',
|
| 132 |
+
title='Revenue by Category', color='Category')
|
| 133 |
+
st.plotly_chart(fig_bar, use_container_width=True)
|
| 134 |
+
|
| 135 |
+
# Product drilldown
|
| 136 |
+
st.subheader("Top Selling Products")
|
| 137 |
+
top_prods = filtered_sales.groupby('Product').agg(
|
| 138 |
+
{'TotalPrice': 'sum', 'Quantity': 'sum'}).sort_values('TotalPrice', ascending=False).reset_index()
|
| 139 |
+
st.dataframe(top_prods)
|
| 140 |
+
|
| 141 |
+
# --- Customer Segments ---
|
| 142 |
+
elif page == "Customer Segments":
|
| 143 |
+
st.title("👥 Customer Segmentation (RFM)")
|
| 144 |
+
st.markdown(
|
| 145 |
+
"Using K-Means clustering on Recency, Frequency, and Monetary value.")
|
| 146 |
+
|
| 147 |
+
col1, col2 = st.columns([3, 1])
|
| 148 |
+
|
| 149 |
+
with col1:
|
| 150 |
+
# 3D Scatter works best, or 2D pair
|
| 151 |
+
fig_clust = px.scatter_3d(rfm_df.reset_index(), x='Recency', y='Frequency', z='Monetary', color='Cluster',
|
| 152 |
+
title="Customer Clusters (RFM)", opacity=0.7)
|
| 153 |
+
st.plotly_chart(fig_clust, use_container_width=True)
|
| 154 |
+
|
| 155 |
+
with col2:
|
| 156 |
+
st.subheader("Cluster Stats")
|
| 157 |
+
cluster_stats = rfm_df.groupby('Cluster').mean().reset_index()
|
| 158 |
+
st.dataframe(cluster_stats.round(2))
|
| 159 |
+
|
| 160 |
+
st.markdown("### Insights")
|
| 161 |
+
st.info("Clusters allow identifying loyal customers (High Frequency/Monetary) vs Churn risk (High Recency).")
|
| 162 |
+
|
| 163 |
+
# --- Forecasting ---
|
| 164 |
+
elif page == "Forecasting":
|
| 165 |
+
st.title("🔮 Sales Forecasting")
|
| 166 |
+
|
| 167 |
+
days = st.slider("Forecast Days", 7, 90, 30)
|
| 168 |
+
|
| 169 |
+
hist_df, pred_df = forecast_sales(sales_df, days)
|
| 170 |
+
|
| 171 |
+
# Combine for plot
|
| 172 |
+
hist_df['Type'] = 'Historical'
|
| 173 |
+
pred_df['Type'] = 'Predicted'
|
| 174 |
+
pred_df.rename(columns={'Predicted_Sales': 'TotalPrice'}, inplace=True)
|
| 175 |
+
|
| 176 |
+
combined = pd.concat([hist_df, pred_df])
|
| 177 |
+
|
| 178 |
+
fig = px.line(combined, x='Date', y='TotalPrice', color='Type',
|
| 179 |
+
title=f"Sales Forecast (Next {days} Days)")
|
| 180 |
+
fig.add_vline(x=hist_df['Date'].max(), line_dash="dash", line_color="gray")
|
| 181 |
+
st.plotly_chart(fig, use_container_width=True)
|
| 182 |
+
|
| 183 |
+
# --- Feedback Analysis ---
|
| 184 |
+
elif page == "Feedback Analysis":
|
| 185 |
+
st.title("💬 Sentiment Analysis")
|
| 186 |
+
|
| 187 |
+
# Sentiment Distribution
|
| 188 |
+
col1, col2 = st.columns(2)
|
| 189 |
+
|
| 190 |
+
with col1:
|
| 191 |
+
counts = reviews_df['Sentiment_Label'].value_counts()
|
| 192 |
+
fig_pie = px.pie(names=counts.index, values=counts.values, title='Sentiment Distribution',
|
| 193 |
+
color_discrete_map={'Positive': 'green', 'Negative': 'red', 'Neutral': 'gray'})
|
| 194 |
+
st.plotly_chart(fig_pie, use_container_width=True)
|
| 195 |
+
|
| 196 |
+
with col2:
|
| 197 |
+
avg_by_prod = reviews_df.groupby(
|
| 198 |
+
'Product')['Sentiment_Score'].mean().sort_values().reset_index()
|
| 199 |
+
fig_bar = px.bar(avg_by_prod, x='Sentiment_Score', y='Product', orientation='h',
|
| 200 |
+
title='Avg Sentiment by Product', color='Sentiment_Score', color_continuous_scale='RdYlGn')
|
| 201 |
+
st.plotly_chart(fig_bar, use_container_width=True)
|
| 202 |
+
|
| 203 |
+
st.subheader("Review Explorer")
|
| 204 |
+
sentiment_filter = st.multiselect(
|
| 205 |
+
"Filter Sentiment", ['Positive', 'Neutral', 'Negative'], default=['Negative'])
|
| 206 |
+
st.dataframe(reviews_df[reviews_df['Sentiment_Label'].isin(
|
| 207 |
+
sentiment_filter)][['Date', 'Product', 'Rating', 'ReviewText']])
|
| 208 |
+
|
| 209 |
+
# --- Business Q&A ---
|
| 210 |
+
elif page == "Business Q&A":
|
| 211 |
+
st.title("🤖 Business Q&A")
|
| 212 |
+
rag = get_rag_system()
|
| 213 |
+
|
| 214 |
+
# Initialize index if not ready
|
| 215 |
+
if rag.vector_store is None:
|
| 216 |
+
with st.spinner("Initializing Knowledge Base (this may take a moment)..."):
|
| 217 |
+
success = rag.build_index()
|
| 218 |
+
if success:
|
| 219 |
+
rag.init_llm()
|
| 220 |
+
st.success("Knowledge Base Ready!")
|
| 221 |
+
else:
|
| 222 |
+
st.error("Could not build index. Please check if data files exist in the 'data' directory.")
|
| 223 |
+
|
| 224 |
+
query = st.text_input("Ask a question:", placeholder="e.g., What are customers saying about the Pro Laptop?")
|
| 225 |
+
|
| 226 |
+
if query:
|
| 227 |
+
with st.spinner("Thinking..."):
|
| 228 |
+
try:
|
| 229 |
+
result = rag.query(query)
|
| 230 |
+
st.markdown("### Answer")
|
| 231 |
+
st.write(result['answer'])
|
| 232 |
+
|
| 233 |
+
with st.expander("View Retrieved Context"):
|
| 234 |
+
if result['context']:
|
| 235 |
+
for i, doc in enumerate(result['context']):
|
| 236 |
+
st.markdown(f"**Source {i+1} ({doc.metadata.get('source', 'unknown')}):**")
|
| 237 |
+
st.text(doc.page_content)
|
| 238 |
+
else:
|
| 239 |
+
st.text("No context retrieved.")
|
| 240 |
+
except Exception as e:
|
| 241 |
+
st.error(f"An error occurred: {e}")
|
src/data_gen.py
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import pandas as pd
|
| 2 |
+
import numpy as np
|
| 3 |
+
import json
|
| 4 |
+
import random
|
| 5 |
+
from faker import Faker
|
| 6 |
+
from datetime import datetime, timedelta
|
| 7 |
+
import os
|
| 8 |
+
|
| 9 |
+
fake = Faker()
|
| 10 |
+
Faker.seed(42)
|
| 11 |
+
np.random.seed(42)
|
| 12 |
+
|
| 13 |
+
DATA_DIR = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'data')
|
| 14 |
+
os.makedirs(DATA_DIR, exist_ok=True)
|
| 15 |
+
|
| 16 |
+
def generate_sales_data(num_records=1000):
|
| 17 |
+
print("Generating Sales Data...")
|
| 18 |
+
products = {
|
| 19 |
+
'Laptop': {'category': 'Electronics', 'price_range': (800, 2500)},
|
| 20 |
+
'Smartphone': {'category': 'Electronics', 'price_range': (400, 1200)},
|
| 21 |
+
'Headphones': {'category': 'Accessories', 'price_range': (50, 300)},
|
| 22 |
+
'Monitor': {'category': 'Electronics', 'price_range': (150, 600)},
|
| 23 |
+
'Mouse': {'category': 'Accessories', 'price_range': (20, 100)},
|
| 24 |
+
'Keyboard': {'category': 'Accessories', 'price_range': (30, 150)},
|
| 25 |
+
'Desk Chair': {'category': 'Furniture', 'price_range': (100, 500)},
|
| 26 |
+
'Coffee Maker': {'category': 'Appliances', 'price_range': (40, 200)}
|
| 27 |
+
}
|
| 28 |
+
|
| 29 |
+
data = []
|
| 30 |
+
start_date = datetime.now() - timedelta(days=365)
|
| 31 |
+
|
| 32 |
+
for _ in range(num_records):
|
| 33 |
+
product_name = random.choice(list(products.keys()))
|
| 34 |
+
info = products[product_name]
|
| 35 |
+
|
| 36 |
+
date = start_date + timedelta(days=random.randint(0, 365), hours=random.randint(0, 23))
|
| 37 |
+
quantity = random.randint(1, 5)
|
| 38 |
+
price_unit = round(random.uniform(*info['price_range']), 2)
|
| 39 |
+
total_price = quantity * price_unit
|
| 40 |
+
|
| 41 |
+
data.append({
|
| 42 |
+
'TransactionID': fake.uuid4(),
|
| 43 |
+
'Date': date.strftime('%Y-%m-%d %H:%M:%S'),
|
| 44 |
+
'CustomerID': fake.random_int(min=1001, max=1200),
|
| 45 |
+
'Product': product_name,
|
| 46 |
+
'Category': info['category'],
|
| 47 |
+
'Quantity': quantity,
|
| 48 |
+
'UnitPrice': price_unit,
|
| 49 |
+
'TotalPrice': round(total_price, 2),
|
| 50 |
+
'Region': random.choice(['North', 'South', 'East', 'West']),
|
| 51 |
+
'PaymentMethod': random.choice(['Credit Card', 'PayPal', 'Debit Card', 'Bank Transfer'])
|
| 52 |
+
})
|
| 53 |
+
|
| 54 |
+
df = pd.DataFrame(data)
|
| 55 |
+
df.to_csv(os.path.join(DATA_DIR, 'sales_data.csv'), index=False)
|
| 56 |
+
print(f"Saved {num_records} sales records.")
|
| 57 |
+
|
| 58 |
+
def generate_web_logs(num_records=500):
|
| 59 |
+
print("Generating Web Logs...")
|
| 60 |
+
logs = []
|
| 61 |
+
start_date = datetime.now() - timedelta(days=7)
|
| 62 |
+
|
| 63 |
+
endpoints = ['/home', '/products', '/cart', '/checkout', '/login', '/support', '/search']
|
| 64 |
+
status_codes = [200, 200, 200, 201, 302, 404, 500]
|
| 65 |
+
|
| 66 |
+
for _ in range(num_records):
|
| 67 |
+
timestamp = start_date + timedelta(minutes=random.randint(0, 7*24*60))
|
| 68 |
+
|
| 69 |
+
log = {
|
| 70 |
+
'timestamp': timestamp.isoformat(),
|
| 71 |
+
'ip_address': fake.ipv4(),
|
| 72 |
+
'request_method': random.choice(['GET', 'POST']),
|
| 73 |
+
'endpoint': random.choice(endpoints),
|
| 74 |
+
'status_code': random.choices(status_codes, weights=[60, 10, 5, 5, 10, 8, 2])[0],
|
| 75 |
+
'user_agent': fake.user_agent(),
|
| 76 |
+
'response_time_ms': random.randint(20, 1500)
|
| 77 |
+
}
|
| 78 |
+
logs.append(log)
|
| 79 |
+
|
| 80 |
+
with open(os.path.join(DATA_DIR, 'web_logs.json'), 'w') as f:
|
| 81 |
+
json.dump(logs, f, indent=4)
|
| 82 |
+
print(f"Saved {num_records} web logs.")
|
| 83 |
+
|
| 84 |
+
def generate_reviews(num_records=300):
|
| 85 |
+
print("Generating Customer Reviews...")
|
| 86 |
+
reviews = []
|
| 87 |
+
|
| 88 |
+
# Simple templates for negative/positive reviews
|
| 89 |
+
positive_templates = [
|
| 90 |
+
"I love this {product}! It works great.",
|
| 91 |
+
"Excellent quality, highly recommended.",
|
| 92 |
+
"Good value for money. The {product} exceeded my expectations.",
|
| 93 |
+
"Fast shipping and great service.",
|
| 94 |
+
"The {product} is amazing, 5 stars!"
|
| 95 |
+
]
|
| 96 |
+
|
| 97 |
+
negative_templates = [
|
| 98 |
+
"Terrible experience with this {product}.",
|
| 99 |
+
"Broken on arrival. Very disappointed.",
|
| 100 |
+
"Not worth the money. Analyzing the {product} shows poor build quality.",
|
| 101 |
+
"Customer service was unhelpful.",
|
| 102 |
+
"The {product} stopped working after two days."
|
| 103 |
+
]
|
| 104 |
+
|
| 105 |
+
products = ['Laptop', 'Smartphone', 'Headphones', 'Monitor', 'Mouse', 'Keyboard', 'Desk Chair', 'Coffee Maker']
|
| 106 |
+
|
| 107 |
+
for _ in range(num_records):
|
| 108 |
+
product = random.choice(products)
|
| 109 |
+
sentiment = random.choice(['positive', 'negative', 'neutral'])
|
| 110 |
+
|
| 111 |
+
if sentiment == 'positive':
|
| 112 |
+
rating = random.randint(4, 5)
|
| 113 |
+
text = random.choice(positive_templates).format(product=product)
|
| 114 |
+
elif sentiment == 'negative':
|
| 115 |
+
rating = random.randint(1, 2)
|
| 116 |
+
text = random.choice(negative_templates).format(product=product)
|
| 117 |
+
else:
|
| 118 |
+
rating = 3
|
| 119 |
+
text = f"The {product} is okay, but could be better."
|
| 120 |
+
|
| 121 |
+
reviews.append({
|
| 122 |
+
'ReviewID': fake.uuid4(),
|
| 123 |
+
'CustomerID': fake.random_int(min=1001, max=1200),
|
| 124 |
+
'Product': product,
|
| 125 |
+
'Rating': rating,
|
| 126 |
+
'ReviewText': text,
|
| 127 |
+
'Date': fake.date_this_year().strftime('%Y-%m-%d')
|
| 128 |
+
})
|
| 129 |
+
|
| 130 |
+
df = pd.DataFrame(reviews)
|
| 131 |
+
df.to_csv(os.path.join(DATA_DIR, 'customer_reviews.csv'), index=False)
|
| 132 |
+
print(f"Saved {num_records} reviews.")
|
| 133 |
+
|
| 134 |
+
if __name__ == "__main__":
|
| 135 |
+
generate_sales_data(2000)
|
| 136 |
+
generate_web_logs(1000)
|
| 137 |
+
generate_reviews(500)
|
src/models.py
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import pandas as pd
|
| 2 |
+
import numpy as np
|
| 3 |
+
from sklearn.cluster import KMeans
|
| 4 |
+
from sklearn.preprocessing import StandardScaler
|
| 5 |
+
from textblob import TextBlob
|
| 6 |
+
from sklearn.linear_model import LinearRegression
|
| 7 |
+
|
| 8 |
+
def perform_customer_segmentation(sales_df, n_clusters=4):
|
| 9 |
+
"""
|
| 10 |
+
RFM (Recency, Frequency, Monetary) Clustering
|
| 11 |
+
"""
|
| 12 |
+
# Calculate RFM metrics
|
| 13 |
+
current_date = sales_df['Date'].max()
|
| 14 |
+
|
| 15 |
+
rfm = sales_df.groupby('CustomerID').agg({
|
| 16 |
+
'Date': lambda x: (current_date - x.max()).days, # Recency
|
| 17 |
+
'TransactionID': 'count', # Frequency
|
| 18 |
+
'TotalPrice': 'sum' # Monetary
|
| 19 |
+
}).rename(columns={
|
| 20 |
+
'Date': 'Recency',
|
| 21 |
+
'TransactionID': 'Frequency',
|
| 22 |
+
'TotalPrice': 'Monetary'
|
| 23 |
+
})
|
| 24 |
+
|
| 25 |
+
# Normalize
|
| 26 |
+
scaler = StandardScaler()
|
| 27 |
+
rfm_scaled = scaler.fit_transform(rfm)
|
| 28 |
+
|
| 29 |
+
# KMeans
|
| 30 |
+
kmeans = KMeans(n_clusters=n_clusters, random_state=42, n_init=10)
|
| 31 |
+
rfm['Cluster'] = kmeans.fit_predict(rfm_scaled)
|
| 32 |
+
|
| 33 |
+
# Label mapping (rough approximation based on centroids could be better, but simple is fine)
|
| 34 |
+
# We just return the dataframe with Cluster ID
|
| 35 |
+
return rfm
|
| 36 |
+
|
| 37 |
+
def forecast_sales(sales_df, days_to_forecast=30):
|
| 38 |
+
"""
|
| 39 |
+
Simple Linear Regression on daily sales
|
| 40 |
+
"""
|
| 41 |
+
daily_sales = sales_df.set_index('Date').resample('D')['TotalPrice'].sum().reset_index()
|
| 42 |
+
daily_sales['DayIndex'] = np.arange(len(daily_sales))
|
| 43 |
+
|
| 44 |
+
X = daily_sales[['DayIndex']]
|
| 45 |
+
y = daily_sales['TotalPrice']
|
| 46 |
+
|
| 47 |
+
model = LinearRegression()
|
| 48 |
+
model.fit(X, y)
|
| 49 |
+
|
| 50 |
+
# Future dates
|
| 51 |
+
first_future_idx = int(daily_sales['DayIndex'].max()) + 1
|
| 52 |
+
future_indices = np.arange(first_future_idx, first_future_idx + days_to_forecast).reshape(-1, 1)
|
| 53 |
+
future_df = pd.DataFrame(future_indices, columns=['DayIndex'])
|
| 54 |
+
predictions = model.predict(future_df)
|
| 55 |
+
|
| 56 |
+
last_date = daily_sales['Date'].max()
|
| 57 |
+
future_dates = [last_date + pd.Timedelta(days=i) for i in range(1, days_to_forecast + 1)]
|
| 58 |
+
|
| 59 |
+
forecast_df = pd.DataFrame({
|
| 60 |
+
'Date': future_dates,
|
| 61 |
+
'Predicted_Sales': predictions
|
| 62 |
+
})
|
| 63 |
+
|
| 64 |
+
return daily_sales, forecast_df
|
| 65 |
+
|
| 66 |
+
def analyze_sentiment(reviews_df):
|
| 67 |
+
"""
|
| 68 |
+
Apply TextBlob to get polarity
|
| 69 |
+
"""
|
| 70 |
+
def get_polarity(text):
|
| 71 |
+
return TextBlob(str(text)).sentiment.polarity
|
| 72 |
+
|
| 73 |
+
reviews_df['Sentiment_Score'] = reviews_df['ReviewText'].apply(get_polarity)
|
| 74 |
+
|
| 75 |
+
# Categorize
|
| 76 |
+
def label_sentiment(score):
|
| 77 |
+
if score > 0.1: return 'Positive'
|
| 78 |
+
if score < -0.1: return 'Negative'
|
| 79 |
+
return 'Neutral'
|
| 80 |
+
|
| 81 |
+
reviews_df['Sentiment_Label'] = reviews_df['Sentiment_Score'].apply(label_sentiment)
|
| 82 |
+
return reviews_df
|
src/processor.py
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import pandas as pd
|
| 2 |
+
import json
|
| 3 |
+
import os
|
| 4 |
+
|
| 5 |
+
DATA_DIR = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'data')
|
| 6 |
+
|
| 7 |
+
def load_sales_data():
|
| 8 |
+
path = os.path.join(DATA_DIR, 'sales_data.csv')
|
| 9 |
+
if not os.path.exists(path):
|
| 10 |
+
raise FileNotFoundError(f"{path} not found.")
|
| 11 |
+
df = pd.read_csv(path)
|
| 12 |
+
df['Date'] = pd.to_datetime(df['Date'])
|
| 13 |
+
return df
|
| 14 |
+
|
| 15 |
+
def load_web_logs():
|
| 16 |
+
path = os.path.join(DATA_DIR, 'web_logs.json')
|
| 17 |
+
if not os.path.exists(path):
|
| 18 |
+
raise FileNotFoundError(f"{path} not found.")
|
| 19 |
+
with open(path, 'r') as f:
|
| 20 |
+
data = json.load(f)
|
| 21 |
+
df = pd.DataFrame(data)
|
| 22 |
+
df['timestamp'] = pd.to_datetime(df['timestamp'])
|
| 23 |
+
return df
|
| 24 |
+
|
| 25 |
+
def load_reviews():
|
| 26 |
+
path = os.path.join(DATA_DIR, 'customer_reviews.csv')
|
| 27 |
+
if not os.path.exists(path):
|
| 28 |
+
raise FileNotFoundError(f"{path} not found.")
|
| 29 |
+
df = pd.read_csv(path)
|
| 30 |
+
df['Date'] = pd.to_datetime(df['Date'])
|
| 31 |
+
return df
|
| 32 |
+
|
| 33 |
+
def get_integrated_data():
|
| 34 |
+
"""
|
| 35 |
+
Simulates integration by merging Sales and Reviews on Product?
|
| 36 |
+
Or mostly just providing a unified access point.
|
| 37 |
+
Returns a dictionary of dataframes.
|
| 38 |
+
"""
|
| 39 |
+
sales = load_sales_data()
|
| 40 |
+
logs = load_web_logs()
|
| 41 |
+
reviews = load_reviews()
|
| 42 |
+
|
| 43 |
+
return {
|
| 44 |
+
'sales': sales,
|
| 45 |
+
'logs': logs,
|
| 46 |
+
'reviews': reviews
|
| 47 |
+
}
|
| 48 |
+
|
| 49 |
+
def clean_sales_data(df):
|
| 50 |
+
# Example cleaning: Remove transactions with 0 or negative quantity/price (not expected in synthetic but good for "Real" scenario)
|
| 51 |
+
df = df[(df['Quantity'] > 0) & (df['UnitPrice'] > 0)]
|
| 52 |
+
return df
|
src/rag_engine.py
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import os
|
| 2 |
+
import pandas as pd
|
| 3 |
+
import json
|
| 4 |
+
from langchain_community.vectorstores import FAISS
|
| 5 |
+
from langchain_huggingface import HuggingFaceEmbeddings
|
| 6 |
+
from langchain_text_splitters import RecursiveCharacterTextSplitter
|
| 7 |
+
from langchain_core.documents import Document
|
| 8 |
+
from transformers import pipeline
|
| 9 |
+
|
| 10 |
+
class RAGSystem:
|
| 11 |
+
def __init__(self, data_dir):
|
| 12 |
+
self.data_dir = data_dir
|
| 13 |
+
self.vector_store = None
|
| 14 |
+
self.embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")
|
| 15 |
+
self.llm_pipeline = None
|
| 16 |
+
|
| 17 |
+
def load_documents(self):
|
| 18 |
+
docs = []
|
| 19 |
+
|
| 20 |
+
# 1. Load Reviews (Unstructured)
|
| 21 |
+
reviews_path = os.path.join(self.data_dir, 'customer_reviews.csv')
|
| 22 |
+
if os.path.exists(reviews_path):
|
| 23 |
+
df_reviews = pd.read_csv(reviews_path)
|
| 24 |
+
for _, row in df_reviews.iterrows():
|
| 25 |
+
content = f"Product: {row.get('Product', 'Unknown')}\nDate: {row.get('Date', '')}\nRating: {row.get('Rating', '')}\nReview: {row.get('ReviewText', '')}"
|
| 26 |
+
metadata = {"source": "customer_reviews", "product": row.get('Product', 'Unknown')}
|
| 27 |
+
docs.append(Document(page_content=content, metadata=metadata))
|
| 28 |
+
|
| 29 |
+
# 2. Load Web Logs (Semi-structured)
|
| 30 |
+
logs_path = os.path.join(self.data_dir, 'web_logs.json')
|
| 31 |
+
if os.path.exists(logs_path):
|
| 32 |
+
with open(logs_path, 'r') as f:
|
| 33 |
+
logs_data = json.load(f)
|
| 34 |
+
for log in logs_data:
|
| 35 |
+
content = f"Log Timestamp: {log.get('timestamp', '')}\nAction: {log.get('action', '')}\nPage: {log.get('page', '')}\nUser: {log.get('user_id', '')}"
|
| 36 |
+
metadata = {"source": "web_logs"}
|
| 37 |
+
docs.append(Document(page_content=content, metadata=metadata))
|
| 38 |
+
|
| 39 |
+
# 3. Load Sales Summary (Structured -> Text)
|
| 40 |
+
sales_path = os.path.join(self.data_dir, 'sales_data.csv')
|
| 41 |
+
if os.path.exists(sales_path):
|
| 42 |
+
df_sales = pd.read_csv(sales_path)
|
| 43 |
+
# Create a summary per product/region instead of every row to save tokens/index size
|
| 44 |
+
summary = df_sales.groupby(['Product', 'Region'])['TotalPrice'].sum().reset_index()
|
| 45 |
+
for _, row in summary.iterrows():
|
| 46 |
+
content = f"Sales Summary:\nProduct: {row['Product']}\nRegion: {row['Region']}\nTotal Revenue: ${row['TotalPrice']:.2f}"
|
| 47 |
+
metadata = {"source": "sales_summary"}
|
| 48 |
+
docs.append(Document(page_content=content, metadata=metadata))
|
| 49 |
+
|
| 50 |
+
return docs
|
| 51 |
+
|
| 52 |
+
def build_index(self):
|
| 53 |
+
docs = self.load_documents()
|
| 54 |
+
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
|
| 55 |
+
splits = text_splitter.split_documents(docs)
|
| 56 |
+
|
| 57 |
+
if splits:
|
| 58 |
+
self.vector_store = FAISS.from_documents(splits, self.embeddings)
|
| 59 |
+
return True
|
| 60 |
+
return False
|
| 61 |
+
|
| 62 |
+
def init_llm(self):
|
| 63 |
+
# Initialize a small local model for generation
|
| 64 |
+
# Using flan-t5-small as it is lightweight
|
| 65 |
+
try:
|
| 66 |
+
self.llm_pipeline = pipeline("text2text-generation", model="google/flan-t5-small")
|
| 67 |
+
except Exception as e:
|
| 68 |
+
print(f"Error loading LLM: {e}")
|
| 69 |
+
self.llm_pipeline = None
|
| 70 |
+
|
| 71 |
+
def query(self, user_query, k=3):
|
| 72 |
+
if not self.vector_store:
|
| 73 |
+
return {
|
| 74 |
+
"answer": "System not initialized. Please build the index first.",
|
| 75 |
+
"context": []
|
| 76 |
+
}
|
| 77 |
+
|
| 78 |
+
# Retrieve
|
| 79 |
+
docs = self.vector_store.similarity_search(user_query, k=k)
|
| 80 |
+
context_text = "\n\n".join([d.page_content for d in docs])
|
| 81 |
+
|
| 82 |
+
# Generate
|
| 83 |
+
if self.llm_pipeline:
|
| 84 |
+
prompt = f"Summarize the following context to answer the question. \n\nContext:\n{context_text}\n\nQuestion: {user_query}\n\nAnswer:"
|
| 85 |
+
# Truncate prompt if too long (simple heuristic)
|
| 86 |
+
if len(prompt) > 2048:
|
| 87 |
+
prompt = prompt[:2048]
|
| 88 |
+
|
| 89 |
+
result = self.llm_pipeline(prompt, max_length=200, do_sample=False)
|
| 90 |
+
answer = result[0]['generated_text']
|
| 91 |
+
else:
|
| 92 |
+
answer = "LLM not loaded. Displaying retrieved context only."
|
| 93 |
+
|
| 94 |
+
return {
|
| 95 |
+
"answer": answer,
|
| 96 |
+
"context": docs
|
| 97 |
+
}
|
src/test_mining.py
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from processor import get_integrated_data, clean_sales_data
|
| 2 |
+
from models import perform_customer_segmentation, forecast_sales, analyze_sentiment
|
| 3 |
+
|
| 4 |
+
print("Loading Data...")
|
| 5 |
+
data = get_integrated_data()
|
| 6 |
+
sales = clean_sales_data(data['sales'])
|
| 7 |
+
reviews = data['reviews']
|
| 8 |
+
|
| 9 |
+
print("Running Customer Segmentation...")
|
| 10 |
+
rfm = perform_customer_segmentation(sales)
|
| 11 |
+
print(f"Segmentation Shape: {rfm.shape}")
|
| 12 |
+
print(rfm.head())
|
| 13 |
+
|
| 14 |
+
print("\nRunning Sales Forecasting...")
|
| 15 |
+
hist, pred = forecast_sales(sales)
|
| 16 |
+
print(f"Historical Days: {len(hist)}, Predicted Days: {len(pred)}")
|
| 17 |
+
print(pred.head())
|
| 18 |
+
|
| 19 |
+
print("\nRunning Sentiment Analysis...")
|
| 20 |
+
sent = analyze_sentiment(reviews)
|
| 21 |
+
print(sent[['ReviewText', 'Sentiment_Label']].head())
|
| 22 |
+
|
| 23 |
+
print("\nTest Complete.")
|