Ahmetr commited on
Commit
ae6569e
·
verified ·
1 Parent(s): ede8b18

Upload 3 files

Browse files
Files changed (3) hide show
  1. Trendyol_Products60_Sayfa.xlsx +0 -0
  2. app.py +113 -0
  3. requirements.txt +4 -0
Trendyol_Products60_Sayfa.xlsx ADDED
Binary file (144 kB). View file
 
app.py ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import pandas as pd
3
+ from sklearn.preprocessing import MinMaxScaler
4
+ from sklearn.metrics.pairwise import cosine_similarity
5
+
6
+ # Başlık
7
+ st.title("Laptop Öneri Sistemi")
8
+
9
+ # Excel dosyasını yükleme
10
+ uploaded_file = 'C:/Users/AHMET K/Desktop/Proje_Trendyol/Trendyol_Products60_Sayfa.xlsx'
11
+
12
+ if uploaded_file:
13
+ # Excel dosyasını okuma
14
+ df = pd.read_excel(uploaded_file)
15
+
16
+ # Sütun adlarını temizleme
17
+ df.columns = df.columns.str.strip()
18
+
19
+ # 'Urun Fiyati' sütununu temizleme
20
+ def clean_price(value):
21
+ if isinstance(value, str):
22
+ value = value.replace('+', '').replace(' TL', '').replace('.', '').replace(',', '.').strip()
23
+ try:
24
+ return float(value)
25
+ except ValueError:
26
+ return 0
27
+ return value
28
+
29
+ df['Urun Fiyati'] = df['Urun Fiyati'].apply(clean_price)
30
+
31
+ # Fiyat aralığı seçimi
32
+ st.sidebar.header("Fiyat Aralığı Seçimi")
33
+ min_price = st.sidebar.number_input("Minimum Fiyat", value=float(df['Urun Fiyati'].min()), min_value=0.0, max_value=float(df['Urun Fiyati'].max()))
34
+ max_price = st.sidebar.number_input("Maksimum Fiyat", value=float(df['Urun Fiyati'].max()), min_value=0.0, max_value=float(df['Urun Fiyati'].max()))
35
+
36
+ # İşlemci tipi seçimi
37
+ st.sidebar.header("İşlemci Tipi Seçimi")
38
+ processor_options = df['İşlemci Tipi'].unique()
39
+ selected_processor = st.sidebar.selectbox("İşlemci Tipi Seçin", options=processor_options)
40
+
41
+ # Seçilen işlemci tipine göre ekran kartı seçeneklerini güncelleme
42
+ filtered_gpu_options = df[df['İşlemci Tipi'] == selected_processor]['Ekran Kartı'].unique()
43
+
44
+ # Ekran kartı seçimi
45
+ st.sidebar.header("Ekran Kartı Seçimi")
46
+ selected_gpu = st.sidebar.selectbox("Ekran Kartı Seçin", options=filtered_gpu_options)
47
+
48
+ # Kullanıcının belirlediği fiyat aralığında ürünleri filtreleme
49
+ filtered_df = df[(df['Urun Fiyati'] >= min_price) & (df['Urun Fiyati'] <= max_price) &
50
+ (df['İşlemci Tipi'] == selected_processor) &
51
+ (df['Ekran Kartı'] == selected_gpu)]
52
+
53
+ # Eğer filtrelenmiş veri boş değilse, benzerlik hesaplayalım
54
+ if not filtered_df.empty:
55
+ # Fiyat verilerini normalleştirme
56
+ scaler = MinMaxScaler()
57
+ df_scaled = pd.DataFrame(scaler.fit_transform(filtered_df[['Urun Fiyati']]), columns=['Urun Fiyati'])
58
+
59
+ # Kullanıcı verisini normalleştirme (ortalama fiyatı olarak)
60
+ user_price = (min_price + max_price) / 2
61
+ user_data_scaled = scaler.transform([[user_price]])
62
+
63
+ # Cosine benzerliğini hesaplama
64
+ similarities = cosine_similarity(df_scaled, user_data_scaled)
65
+
66
+ # Benzerlik skorunu DataFrame'e ekleme ve sıralama
67
+ filtered_df['Benzerlik'] = similarities.flatten()
68
+ similar_laptops = filtered_df.sort_values(by='Benzerlik', ascending=False).head(10) # En benzer 10 laptopu göster
69
+
70
+ # Yüksek fiyatlı ve düşük PUAN'lı ürünleri bulma
71
+ high_price_laptops = similar_laptops.nlargest(5, 'Urun Fiyati')
72
+
73
+ # Eşsiz Ram ve SSD kombinasyonlarını elde etme
74
+ min_puan_laptops = high_price_laptops.groupby(['Ram (Sistem Belleği)', 'SSD Kapasitesi']).apply(lambda x: x.nsmallest(1, 'PUAN')).reset_index(drop=True)
75
+
76
+ # Sonuçları gösterme
77
+ st.subheader("Önerilen Laptoplar")
78
+ st.write("Aşağıda belirtilen fiyat aralığında en benzer laptoplar listelenmiştir:")
79
+
80
+ # DataFrame için stil uygulama
81
+ def highlight_rows(row):
82
+ # Min puan laptopların isimlerini bir listeye al
83
+ min_puan_names = min_puan_laptops['Urun Ismi'].values
84
+
85
+ # Rastgele 3 tane laptop seçme
86
+ if row['Urun Ismi'] in min_puan_names:
87
+ return ['background-color: turquoise'] * len(row) # Turkuaz rengi
88
+ return [''] * len(row)
89
+
90
+ # DataFrame'i gösterme
91
+ # 1. Verileri oluşturma
92
+ display_df = similar_laptops[['Urun Ismi', 'Urun Fiyati', 'Tahmin Edilen Fiyat', 'Marka',
93
+ 'SSD Kapasitesi', 'Ram (Sistem Belleği)',
94
+ 'PUAN', 'SATICI', 'İşlemci Tipi', 'Ekran Kartı']]
95
+
96
+ # 2. Fiyatları iki ondalık haneli olarak yuvarlama
97
+ display_df['Urun Fiyati'] = display_df['Urun Fiyati'].round(2)
98
+ display_df['Tahmin Edilen Fiyat'] = display_df['Tahmin Edilen Fiyat'].round(2)
99
+
100
+ # 3. Eğer en az 10 laptop varsa stil uygulama
101
+ if len(similar_laptops) >= 10:
102
+ styled_df = display_df.style.apply(highlight_rows, axis=1)
103
+ else:
104
+ styled_df = display_df.style # Highlighting won't apply if fewer than 10 laptops
105
+
106
+ # 4. Sonuçları Streamlit'e gönderme
107
+ st.dataframe(styled_df)
108
+
109
+ else:
110
+ st.write("Belirtilen fiyat aralığında ürün bulunmamaktadır. Lütfen fiyat aralığını genişletin veya farklı bir arama yapın.")
111
+
112
+ else:
113
+ st.write("Lütfen bir Excel dosyası yükleyin.")
requirements.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ streamlit
2
+ pandas
3
+ scikit-learn
4
+ openpyxl