import streamlit as st import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns import plotly.express as px # Fungsi untuk mengambil data (gunakan @st.cache untuk caching data) @st.cache_data def fetch_data(): df = pd.read_csv("laptop_updated.csv") return df # Fungsi untuk menjalankan aplikasi def run(): # Judul aplikasi st.title('Exploratory Data Analysis') # Ambil data dengan memanggil fetch_data() df = fetch_data() # Tampilkan dataframe st.write(df) # Mendapatkan daftar 20 perusahaan dengan jumlah laptop terbanyak company_list = df['Company'].value_counts().index[:20].tolist() # Membuat figure dan axis untuk plot plt.figure(figsize=(9,5)) # Membuat plot batang menggunakan seaborn untuk menghitung rata-rata harga laptop berdasarkan perusahaan ax = sns.barplot( x='Company', y='price', data=df[df['Company'].isin(company_list)], # Hanya menyertakan perusahaan yang ada dalam daftar company_list order=company_list, # Mengurutkan perusahaan berdasarkan company_list palette='Spectral', # Menggunakan palet warna 'Spectral' errorbar=('ci', False), # Tidak menampilkan error bar edgecolor="black" # Mengatur warna tepi batang menjadi hitam ) plt.xticks(rotation=80) plt.title('Average Price of Laptops by Company') plt.xlabel('') plt.ylabel('Price') st.pyplot(plt) # Membuat plot fig, ax = plt.subplots(figsize=(10,5)) # Membuat plot batang menggunakan seaborn untuk menghitung jumlah laptop berdasarkan perusahaan ax = sns.countplot(x='Company', data=df, palette='mako_r', order=df['Company'].value_counts().index) ax.set_xticklabels(ax.get_xticklabels(), rotation=80) plt.title('Number of Laptops by Company') plt.ylabel('Counts') plt.xlabel('') st.pyplot(plt) # Mendapatkan daftar 5 CPU yang paling umum cpu_list = df['cpu_name'].value_counts()[:5].index.tolist() # Mengelompokkan data berdasarkan CPU dan menghitung rata-rata harga cpu_avg_price = df[df['cpu_name'].isin(cpu_list)].groupby('cpu_name')['price'].mean().sort_values(ascending=False) cpu_avg_price = cpu_avg_price.reset_index() plt.figure(figsize=(8,6)) # Membuat plot batang menggunakan seaborn berdasarkan rata-rata harga CPU ax = sns.barplot(x='cpu_name', y='price', data=cpu_avg_price, palette='viridis') plt.xticks(rotation=80) # Menambahkan label pada setiap batang for container in ax.containers: ax.bar_label(container) plt.title('Average Price of Laptop based on Common CPUs') plt.xlabel('') plt.ylabel('') st.pyplot(plt) # Mendefinisikan warna khusus untuk setiap merek GPU custom_palette = {'Intel': 'blue', 'Nvidia': 'green', 'AMD': 'red', 'ARM': 'yellow'} # Membuat daftar warna berdasarkan nilai gpu_brand colors = [custom_palette.get(brand, 'grey') for brand in df['gpu_brand'].unique()] # Plotting dengan seaborn plt.figure(figsize=(10, 6)) sns.barplot(x=df['gpu_brand'], y=df['price'], estimator=np.mean, palette=colors) plt.xlabel('') # Menghapus label sumbu x plt.ylabel('') # Menghapus label sumbu y plt.title('Average Laptop Price by GPU Brand') # Menambahkan judul plot plt.xticks(rotation='vertical') st.pyplot(plt) # Mengelompokkan data berdasarkan jumlah RAM dan menghitung persentase ram = df.groupby("Ram").size() * 100 / len(df) ram.name = "percentage" ram = ram.reset_index() # Membuat plot pie menggunakan plotly express berdasarkan persentase jumlah RAM fig = px.pie(ram, names="Ram", values="percentage", title="Amount of RAMs is the Most Common in Laptops") fig.update_layout({"legend_title": "RAM (GB)"}) st.plotly_chart(fig) # Membuat subplots fig, ax = plt.subplots(figsize=(6,5)) # Membuat plot count menggunakan seaborn untuk jenis laptop yang paling umum ax = sns.countplot( x='TypeName', # Menggunakan kolom TypeName sebagai sumbu x data=df, # Menggunakan dataframe df palette='tab20c', # Memilih palet warna 'tab20c' order=df['TypeName'].value_counts().index # Mengurutkan berdasarkan jumlah jenis laptop ) ax.set_xticklabels(ax.get_xticklabels(), rotation=80) plt.title('Most Common Laptops Type') plt.xlabel('') plt.ylabel('Counts') st.pyplot(plt) # Menggunakan seaborn untuk membuat bar plot sns.barplot( x=df['TypeName'], # Menggunakan kolom TypeName sebagai sumbu x y=df['price'], # Menggunakan kolom price sebagai sumbu y palette='plasma' # Memilih palet warna 'plasma' ) # Menambahkan label sumbu y, judul, dan menghapus label sumbu x plt.xticks(rotation='vertical') plt.ylabel('Price') plt.title('Average Laptop Price by Types') plt.xlabel('') st.pyplot(plt) # Mengambil daftar enam ukuran layar laptop yang paling umum inches_list = df['Inches'].value_counts().index[:6].tolist() # Membuat DataFrame baru dengan data hanya untuk ukuran layar yang termasuk dalam inches_list df_clean = df[df['Inches'].isin(inches_list)] # Membuat subplot dengan ukuran gambar 6x5 inch fig, ax = plt.subplots(figsize=(6,5)) # Membuat count plot menggunakan seaborn untuk menghitung jumlah laptop berdasarkan ukuran layar ax = sns.countplot(x='Inches', data=df_clean, palette='cool') ax.set_xticklabels(ax.get_xticklabels(), rotation=80) plt.title('Most Common Laptop Screen Size') plt.ylabel('') st.pyplot(plt) # Mengelompokkan data berdasarkan sistem operasi dan menghitung jumlahnya operating_systems = df.groupby("OpSys").size().sort_values(ascending=False) operating_systems.name = "Jumlah laptop" operating_systems = operating_systems.reset_index() # Membuat plot batang menggunakan plotly express fig = px.bar(operating_systems, x="Jumlah laptop", y="OpSys", color="OpSys", title="Most Used Operating Systems in Laptops") fig.update_yaxes(title_text='') fig.update_xaxes(title_text='') fig.update_layout(legend_title_text='Operating Systems') st.plotly_chart(fig) # Mengelompokkan data berdasarkan sistem operasi dan menghitung rata-rata harga operating_systems = df.groupby("OpSys")['price'].mean().sort_values(ascending=False) operating_systems.name = "Rata-rata harga" operating_systems = operating_systems.reset_index() # Membuat plot batang menggunakan plotly express fig = px.bar(operating_systems, x="Rata-rata harga", y="OpSys", color="OpSys", title="Average Price of Laptops based on Operating Systems") fig.update_yaxes(title_text='') fig.update_xaxes(title_text='') fig.update_layout(legend_title_text='Operating Systems')# Mengubah judul legend st.plotly_chart(fig) # Panggil fungsi run() untuk menjalankan aplikasi if __name__ == '__main__': run()