From 77a78b84f14199663242a1818c4dd918d4c47b78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kerem=20=C3=87a=C4=9Fan=20=C3=9Clver?= Date: Fri, 3 Apr 2026 09:25:12 +0300 Subject: [PATCH 1/9] Add weighted sampling function in weighted_keremcagan_ulver.py --- Week02/weighted_keremcagan_ulver.py | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 Week02/weighted_keremcagan_ulver.py diff --git a/Week02/weighted_keremcagan_ulver.py b/Week02/weighted_keremcagan_ulver.py new file mode 100644 index 00000000..46c26450 --- /dev/null +++ b/Week02/weighted_keremcagan_ulver.py @@ -0,0 +1,5 @@ +import random + +def weighted_srs(data, n, weights, *, with_replacement=False): + w = None if with_replacement else weights + return random.choices(data, weights=w, k=n) From 384773262b655276b670a071c2b83cda19b7b3b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kerem=20=C3=87a=C4=9Fan=20=C3=9Clver?= Date: Fri, 3 Apr 2026 09:30:56 +0300 Subject: [PATCH 2/9] Refactor weighted_srs function for better handling --- Week02/weighted_keremcagan_ulver.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Week02/weighted_keremcagan_ulver.py b/Week02/weighted_keremcagan_ulver.py index 46c26450..44cda493 100644 --- a/Week02/weighted_keremcagan_ulver.py +++ b/Week02/weighted_keremcagan_ulver.py @@ -1,5 +1,6 @@ import random -def weighted_srs(data, n, weights, *, with_replacement=False): - w = None if with_replacement else weights - return random.choices(data, weights=w, k=n) +def weighted_srs(data, n, weights=None, with_replacement=False): + if with_replacement: return random.choices(data, k=n) + if weights is None: return random.sample(data, k=n) + return random.choices(data, weights=weights, k=n) From ae2c4d9fe8a3dd3dc0a96ff21526036efb373feb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kerem=20=C3=87a=C4=9Fan=20=C3=9Clver?= Date: Fri, 3 Apr 2026 09:35:25 +0300 Subject: [PATCH 3/9] Refactor weighted_srs for improved sampling with weights Refactor weighted_srs function to handle weights more effectively and remove sampling without replacement. --- Week02/weighted_keremcagan_ulver.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Week02/weighted_keremcagan_ulver.py b/Week02/weighted_keremcagan_ulver.py index 44cda493..977762f3 100644 --- a/Week02/weighted_keremcagan_ulver.py +++ b/Week02/weighted_keremcagan_ulver.py @@ -1,6 +1,9 @@ import random -def weighted_srs(data, n, weights=None, with_replacement=False): - if with_replacement: return random.choices(data, k=n) - if weights is None: return random.sample(data, k=n) - return random.choices(data, weights=weights, k=n) +def weighted_srs(data, n, weights, with_replacement=False): + if with_replacement: return random.choices(data, weights=weights, k=n) + res, temp_w = [], list(weights) + for _ in range(n): + i = random.choices(range(len(data)), weights=temp_w)[0] + res.append(data[i]); temp_w[i] = 0 + return res From 36109e9961f5897ac4f7894a8c95d33e6a6614e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kerem=20=C3=87a=C4=9Fan=20=C3=9Clver?= Date: Fri, 3 Apr 2026 09:36:59 +0300 Subject: [PATCH 4/9] Refactor weighted sampling function and add shifted function Removed weighted sampling function and added shifted function to calculate the percentage difference between mean and median. --- Week02/weighted_keremcagan_ulver.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/Week02/weighted_keremcagan_ulver.py b/Week02/weighted_keremcagan_ulver.py index 977762f3..984218a9 100644 --- a/Week02/weighted_keremcagan_ulver.py +++ b/Week02/weighted_keremcagan_ulver.py @@ -1,9 +1,6 @@ -import random +import statistics -def weighted_srs(data, n, weights, with_replacement=False): - if with_replacement: return random.choices(data, weights=weights, k=n) - res, temp_w = [], list(weights) - for _ in range(n): - i = random.choices(range(len(data)), weights=temp_w)[0] - res.append(data[i]); temp_w[i] = 0 - return res +def shifted(data): + mean = statistics.mean(data) + median = statistics.median(data) + return abs(mean - median) / abs(mean) * 100 if mean != 0 else 0 From bf8479943b93e862a837dc31515e8e888312a0ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kerem=20=C3=87a=C4=9Fan=20=C3=9Clver?= Date: Fri, 3 Apr 2026 09:38:16 +0300 Subject: [PATCH 5/9] Add weighted sampling function to the script --- Week02/weighted_keremcagan_ulver.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/Week02/weighted_keremcagan_ulver.py b/Week02/weighted_keremcagan_ulver.py index 984218a9..070d9f84 100644 --- a/Week02/weighted_keremcagan_ulver.py +++ b/Week02/weighted_keremcagan_ulver.py @@ -1,6 +1,8 @@ import statistics - -def shifted(data): - mean = statistics.mean(data) - median = statistics.median(data) - return abs(mean - median) / abs(mean) * 100 if mean != 0 else 0 +def weighted_srs(data, n, weights, with_replacement=False): + if weights is None: + return random.choices(data, k=n) if with_replacement else random.sample(data, n) + if with_replacement: + return random.choices(data, weights=weights, k=n) + population = sum([[d]*w for d, w in zip(data, weights)], []) + return random.sample(population, n) From c10aec7098d1442eb6de532bdeec348f0575cb9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kerem=20=C3=87a=C4=9Fan=20=C3=9Clver?= Date: Fri, 3 Apr 2026 09:40:11 +0300 Subject: [PATCH 6/9] Refactor weighted_srs function for sampling Refactor weighted sampling logic for better performance. --- Week02/weighted_keremcagan_ulver.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Week02/weighted_keremcagan_ulver.py b/Week02/weighted_keremcagan_ulver.py index 070d9f84..977762f3 100644 --- a/Week02/weighted_keremcagan_ulver.py +++ b/Week02/weighted_keremcagan_ulver.py @@ -1,8 +1,9 @@ -import statistics +import random + def weighted_srs(data, n, weights, with_replacement=False): - if weights is None: - return random.choices(data, k=n) if with_replacement else random.sample(data, n) - if with_replacement: - return random.choices(data, weights=weights, k=n) - population = sum([[d]*w for d, w in zip(data, weights)], []) - return random.sample(population, n) + if with_replacement: return random.choices(data, weights=weights, k=n) + res, temp_w = [], list(weights) + for _ in range(n): + i = random.choices(range(len(data)), weights=temp_w)[0] + res.append(data[i]); temp_w[i] = 0 + return res From aea16800b7a0297bc4ef20df4776016202a07b15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kerem=20=C3=87a=C4=9Fan=20=C3=9Clver?= Date: Fri, 3 Apr 2026 09:42:29 +0300 Subject: [PATCH 7/9] Refactor weighted_srs function for clarity Fix handling of None weights and improve variable naming. --- Week02/weighted_keremcagan_ulver.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Week02/weighted_keremcagan_ulver.py b/Week02/weighted_keremcagan_ulver.py index 977762f3..76590967 100644 --- a/Week02/weighted_keremcagan_ulver.py +++ b/Week02/weighted_keremcagan_ulver.py @@ -1,9 +1,10 @@ import random def weighted_srs(data, n, weights, with_replacement=False): + if weights is None: return random.choices(data, k=n) if with_replacement else random.sample(data, n) if with_replacement: return random.choices(data, weights=weights, k=n) - res, temp_w = [], list(weights) + res, w = [], list(weights) for _ in range(n): - i = random.choices(range(len(data)), weights=temp_w)[0] - res.append(data[i]); temp_w[i] = 0 + i = random.choices(range(len(data)), weights=w)[0] + res.append(data[i]); w[i] = 0 return res From 5f37a852b2888c1e215961bda7682d5a719f3017 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kerem=20=C3=87a=C4=9Fan=20=C3=9Clver?= Date: Fri, 3 Apr 2026 09:44:02 +0300 Subject: [PATCH 8/9] Refactor weighted_srs function for clarity and efficiency --- Week02/weighted_keremcagan_ulver.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/Week02/weighted_keremcagan_ulver.py b/Week02/weighted_keremcagan_ulver.py index 76590967..c3ad3d73 100644 --- a/Week02/weighted_keremcagan_ulver.py +++ b/Week02/weighted_keremcagan_ulver.py @@ -1,10 +1,8 @@ import random -def weighted_srs(data, n, weights, with_replacement=False): - if weights is None: return random.choices(data, k=n) if with_replacement else random.sample(data, n) - if with_replacement: return random.choices(data, weights=weights, k=n) - res, w = [], list(weights) - for _ in range(n): - i = random.choices(range(len(data)), weights=w)[0] - res.append(data[i]); w[i] = 0 - return res +def weighted_srs(data, n, weights, with_replacement = False): + if not (with_replacement or weights): + sample = random.sample(data, n) + else: + sample = random.choices(data, weights=weights, k=n) + return sample From 577a013c9efe3378c9e7afafa50b637074bc1fb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kerem=20=C3=87a=C4=9Fan=20=C3=9Clver?= Date: Fri, 3 Apr 2026 09:48:27 +0300 Subject: [PATCH 9/9] Add shifted function to calculate percentage difference --- Week03/shifter_keremcagan_ulver.py | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 Week03/shifter_keremcagan_ulver.py diff --git a/Week03/shifter_keremcagan_ulver.py b/Week03/shifter_keremcagan_ulver.py new file mode 100644 index 00000000..984218a9 --- /dev/null +++ b/Week03/shifter_keremcagan_ulver.py @@ -0,0 +1,6 @@ +import statistics + +def shifted(data): + mean = statistics.mean(data) + median = statistics.median(data) + return abs(mean - median) / abs(mean) * 100 if mean != 0 else 0