{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.12.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceType":"competition","sourceId":24800,"datasetId":1042002,"databundleVersionId":1831594}],"dockerImageVersionId":31234,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Bölüm 1: Veri Yükleme ve Genel Bakış","metadata":{}},{"cell_type":"markdown","source":"### Soru 1","metadata":{}},{"cell_type":"code","source":"import pandas as pd\nimport seaborn as sns\nimport matplotlib.pyplot as plt","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-24T11:59:52.356738Z","iopub.execute_input":"2025-12-24T11:59:52.357551Z","iopub.status.idle":"2025-12-24T11:59:52.362386Z","shell.execute_reply.started":"2025-12-24T11:59:52.35751Z","shell.execute_reply":"2025-12-24T11:59:52.361574Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_df = pd.read_csv(\"/kaggle/input/vinbigdata-chest-xray-abnormalities-detection/train.csv\")\ntrain_df","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-24T11:59:54.461621Z","iopub.execute_input":"2025-12-24T11:59:54.461981Z","iopub.status.idle":"2025-12-24T11:59:54.635735Z","shell.execute_reply.started":"2025-12-24T11:59:54.46195Z","shell.execute_reply":"2025-12-24T11:59:54.634676Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"hastalik_listesi = train_df['class_name'].value_counts()\nprint(\"Hastalık Dağılımı:\",hastalik_listesi)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-24T13:39:57.376049Z","iopub.execute_input":"2025-12-24T13:39:57.37644Z","iopub.status.idle":"2025-12-24T13:39:57.394286Z","shell.execute_reply.started":"2025-12-24T13:39:57.376409Z","shell.execute_reply":"2025-12-24T13:39:57.392608Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# ID ve İsim eşleşmesi\ncategory= train_df.groupby('class_id')['class_name'].unique().reset_index()\n\nprint(\"Class id ve Class name eşleşmesi:\")\nprint(category)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-24T12:07:31.27296Z","iopub.execute_input":"2025-12-24T12:07:31.273844Z","iopub.status.idle":"2025-12-24T12:07:31.294456Z","shell.execute_reply.started":"2025-12-24T12:07:31.273805Z","shell.execute_reply":"2025-12-24T12:07:31.293154Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# İlk 5 satırın yazdırılması\nprint(\"VinBigData Chest X-ray Veri Seti:\")\ntrain_df.head()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-24T12:08:45.564478Z","iopub.execute_input":"2025-12-24T12:08:45.564868Z","iopub.status.idle":"2025-12-24T12:08:45.578826Z","shell.execute_reply.started":"2025-12-24T12:08:45.564837Z","shell.execute_reply":"2025-12-24T12:08:45.577988Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Soru 2","metadata":{}},{"cell_type":"code","source":"# 1. Satır ve sütunların boyutlarının kontrolü\nprint(f\"Satır: {len(train_df)}, Sütun: {len(train_df.columns)}\")\n\n# 2. Boş değer kontrolü\nprint(train_df.isna().sum())\ntrain_df.info()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-24T12:27:42.135647Z","iopub.execute_input":"2025-12-24T12:27:42.136077Z","iopub.status.idle":"2025-12-24T12:27:42.182674Z","shell.execute_reply.started":"2025-12-24T12:27:42.136037Z","shell.execute_reply":"2025-12-24T12:27:42.181745Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Bölüm 2: Veri Dedektifliği (Filtreleme ve Sorgulama)","metadata":{}},{"cell_type":"markdown","source":"### Soru 3","metadata":{}},{"cell_type":"code","source":"temiz_df = train_df.dropna(subset=['x_min', 'x_max', 'y_min', 'y_max']).copy()\n\n# Alan hesaplama\ntemiz_df['alan'] = (temiz_df['x_max'] - temiz_df['x_min']) * (temiz_df['y_max'] - temiz_df['y_min'])\n\nmaks_bulgu = temiz_df[temiz_df['alan'] == temiz_df['alan'].max()]\nmin_bulgu = temiz_df[temiz_df['alan'] == temiz_df['alan'].min()]\n\nprint(\"--- En Geniş Alanlı Vaka ---\")\nprint(maks_bulgu)\nprint(\"\\n--- En Küçük Alanlı Vaka ---\")\nprint(min_bulgu)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-24T12:44:00.982609Z","iopub.execute_input":"2025-12-24T12:44:00.98308Z","iopub.status.idle":"2025-12-24T12:44:01.009051Z","shell.execute_reply.started":"2025-12-24T12:44:00.983047Z","shell.execute_reply":"2025-12-24T12:44:01.008139Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Soru 4","metadata":{}},{"cell_type":"code","source":"df_temiz = train_df.dropna(subset=['x_min', 'x_max', 'y_min', 'y_max']).copy()\n\ndf_temiz['alan'] = (df_temiz['x_max'] - df_temiz['x_min']) * (df_temiz['y_max'] - df_temiz['y_min'])\n\nen_buyukler = df_temiz[df_temiz['alan'] == df_temiz['alan'].max()]\n\nprint(f\"En Büyük Alan: {df_temiz['alan'].max()}\")\nprint(f\"Kaç tane var: {len(en_buyukler)}\")\nprint(f\"Hangi Hastalıklar: {en_buyukler['class_name'].unique()}\")\nen_buyukler","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-24T12:45:17.611382Z","iopub.execute_input":"2025-12-24T12:45:17.611705Z","iopub.status.idle":"2025-12-24T12:45:17.639988Z","shell.execute_reply.started":"2025-12-24T12:45:17.611677Z","shell.execute_reply":"2025-12-24T12:45:17.639156Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Soru 5","metadata":{}},{"cell_type":"code","source":"# temiz_vakalar = No Finding \ntemiz_vakalar = train_df[train_df['class_name'] == 'No finding']\n\nrad_counts = temiz_vakalar['rad_id'].value_counts()\n\nprint(\"Radyologlara göre sağlıklı(No Finding) rapor dağılımı:\")\nprint(rad_counts)\n\nen_aktif_radyolog = rad_counts.idxmax()\nvaka_adedi = rad_counts.max()\n\nprint(f\"\\nEn çok sağlıklı vaka raporlayan kişi: {en_aktif_radyolog}\")\nprint(f\"Toplam vaka sayısı: {vaka_adedi}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-24T12:48:18.875352Z","iopub.execute_input":"2025-12-24T12:48:18.87651Z","iopub.status.idle":"2025-12-24T12:48:18.896733Z","shell.execute_reply.started":"2025-12-24T12:48:18.876472Z","shell.execute_reply":"2025-12-24T12:48:18.895675Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Soru 6","metadata":{}},{"cell_type":"code","source":"# R10 = Cardiomegaly\nr10_kardiyo = train_df[(train_df['class_name'] == 'Cardiomegaly') & (train_df['rad_id'] == 'R10')]\n\ntoplam = len(r10_kardiyo)\nprint(f\"R10 ve Cardiomegaly kesişiminde {toplam} vaka var.\")\nr10_kardiyo.head()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-24T12:52:31.57705Z","iopub.execute_input":"2025-12-24T12:52:31.577796Z","iopub.status.idle":"2025-12-24T12:52:31.608399Z","shell.execute_reply.started":"2025-12-24T12:52:31.577761Z","shell.execute_reply":"2025-12-24T12:52:31.607451Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Soru 7","metadata":{}},{"cell_type":"code","source":"# Görüntünün tam sol üst köşesine (0,0) dayanan vakaların ayıklanması\nkose_vakalar = train_df[(train_df['x_min'] == 0) & (train_df['y_min'] == 0)]\n\nprint(f\"Köşe koordinatlı (0,0) toplam vaka: {len(kose_vakalar)}\")\nprint(\"\\n Bu vakaların sınıflara göre dağılımı:\")\nprint(kose_vakalar['class_name'].value_counts())\n\nkose_vakalar.head()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-24T12:57:19.791998Z","iopub.execute_input":"2025-12-24T12:57:19.792403Z","iopub.status.idle":"2025-12-24T12:57:19.806268Z","shell.execute_reply.started":"2025-12-24T12:57:19.792372Z","shell.execute_reply":"2025-12-24T12:57:19.805329Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Bölüm 3: Gruplama ve Analiz","metadata":{}},{"cell_type":"markdown","source":"### Soru 8","metadata":{}},{"cell_type":"code","source":"# No finding olanları = sağlıklı \ntrain_df['saglikli'] = (train_df['class_name'] == 'No finding')\n\nrad_skorlari = train_df.groupby('rad_id')['saglikli'].mean().sort_values(ascending=False)\n\nprint(\"Radyologların sağlıklı (No Finding) vaka saptama oranları:\")\nprint(rad_skorlari)\n\nen_iyi = rad_skorlari.idxmax()\nen_yuksek = rad_skorlari.max() * 100\n\nprint(f\"\\nEn yüksek sağlıklı vaka oranı: {en_iyi} (oran: %{en_yuksek:.2f})\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-24T13:06:10.679484Z","iopub.execute_input":"2025-12-24T13:06:10.679828Z","iopub.status.idle":"2025-12-24T13:06:10.706128Z","shell.execute_reply.started":"2025-12-24T13:06:10.679797Z","shell.execute_reply":"2025-12-24T13:06:10.704235Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Soru 9","metadata":{}},{"cell_type":"code","source":"df_alan = train_df.dropna(subset=['x_min', 'x_max', 'y_min', 'y_max']).copy()\ndf_alan['alan'] = (df_alan['x_max'] - df_alan['x_min']) * (df_alan['y_max'] - df_alan['y_min'])\n\nortalama_boyutlar = df_alan.groupby('class_name')['alan'].mean().sort_values(ascending=False)\n\nprint(\"Hastalık Türlerine Göre Ortalama Alan Dağılımı:\")\nprint(ortalama_boyutlar)\n\nen_yaygin = ortalama_boyutlar.idxmax()\nprint(f\"\\n Ortalama en geniş alanı kaplayan hastalık: {en_yaygin}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-24T13:14:13.079699Z","iopub.execute_input":"2025-12-24T13:14:13.080185Z","iopub.status.idle":"2025-12-24T13:14:13.104231Z","shell.execute_reply.started":"2025-12-24T13:14:13.080139Z","shell.execute_reply":"2025-12-24T13:14:13.103386Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Bölüm 4: Veri Görselleştirme (Seaborn)","metadata":{}},{"cell_type":"markdown","source":"### Soru 10","metadata":{}},{"cell_type":"code","source":"# No Finding olanları 1, diğerleri 0\ntrain_df['durum'] = (train_df['class_name'] == 'No finding').astype(int)\n\nplt.figure()\nsns.countplot(data=train_df, x='rad_id', hue='durum', palette='magma')\n\nplt.title('Radyologlar: Sağlıklı (No Finding) (1) vs Hasta (0) Rapor Sayıları')\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-24T13:22:16.300423Z","iopub.execute_input":"2025-12-24T13:22:16.301222Z","iopub.status.idle":"2025-12-24T13:22:16.715615Z","shell.execute_reply.started":"2025-12-24T13:22:16.301177Z","shell.execute_reply":"2025-12-24T13:22:16.714551Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Soru 11","metadata":{}},{"cell_type":"code","source":"df_box = train_df.dropna(subset=['x_min', 'x_max', 'y_min', 'y_max']).copy()\ndf_box['alan'] = (df_box['x_max'] - df_box['x_min']) * (df_box['y_max'] - df_box['y_min'])\n\ntop5 = df_box['class_name'].value_counts().head().index\nplot_data = df_box[df_box['class_name'].isin(top5)]\n\nplt.figure()\nsns.boxplot(data=plot_data, x='alan', y='class_name', palette='pastel')\n\nplt.title('Hastalık Türlerine Göre Boyut Değişkenliği')\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-24T13:26:13.766447Z","iopub.execute_input":"2025-12-24T13:26:13.766796Z","iopub.status.idle":"2025-12-24T13:26:14.030784Z","shell.execute_reply.started":"2025-12-24T13:26:13.766765Z","shell.execute_reply":"2025-12-24T13:26:14.029915Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Soru 12","metadata":{}},{"cell_type":"code","source":"df_n = train_df.dropna(subset=['x_min', 'x_max', 'y_min', 'y_max']).copy()\ndf_n['alan'] = (df_n['x_max'] - df_n['x_min']) * (df_n['y_max'] - df_n['y_min'])\n\n# Sadece sayısal sütunların birbirleriyle olan bağına (korelasyonuna) bakılması\nkorelasyon = df_n.corr(numeric_only=True)\n\nplt.figure()\nsns.heatmap(korelasyon, annot=True, cmap='RdYlGn')\n\nplt.title('Değişkenler Arasındaki Bağlar (Korelasyon)')\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-24T13:31:30.360098Z","iopub.execute_input":"2025-12-24T13:31:30.360521Z","iopub.status.idle":"2025-12-24T13:31:30.674106Z","shell.execute_reply.started":"2025-12-24T13:31:30.360485Z","shell.execute_reply":"2025-12-24T13:31:30.673108Z"}},"outputs":[],"execution_count":null}]}