tsam 2.3.7__tar.gz → 2.3.9__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. {tsam-2.3.7/src/tsam.egg-info → tsam-2.3.9}/PKG-INFO +1 -1
  2. {tsam-2.3.7 → tsam-2.3.9}/pyproject.toml +1 -1
  3. {tsam-2.3.7 → tsam-2.3.9}/src/tsam/utils/durationRepresentation.py +41 -38
  4. {tsam-2.3.7 → tsam-2.3.9/src/tsam.egg-info}/PKG-INFO +1 -1
  5. {tsam-2.3.7 → tsam-2.3.9}/LICENSE.txt +0 -0
  6. {tsam-2.3.7 → tsam-2.3.9}/MANIFEST.in +0 -0
  7. {tsam-2.3.7 → tsam-2.3.9}/README.md +0 -0
  8. {tsam-2.3.7 → tsam-2.3.9}/examples/results/paretoOptimalAggregation.csv +0 -0
  9. {tsam-2.3.7 → tsam-2.3.9}/examples/results/preprocessed_wind.csv +0 -0
  10. {tsam-2.3.7 → tsam-2.3.9}/examples/results/testperiods_hierarchical.csv +0 -0
  11. {tsam-2.3.7 → tsam-2.3.9}/examples/results/testperiods_kmeans.csv +0 -0
  12. {tsam-2.3.7 → tsam-2.3.9}/examples/results/testperiods_kmedoids.csv +0 -0
  13. {tsam-2.3.7 → tsam-2.3.9}/examples/results/testperiods_predefClusterOrder.csv +0 -0
  14. {tsam-2.3.7 → tsam-2.3.9}/examples/results/testperiods_predefClusterOrderAndClusterCenters.csv +0 -0
  15. {tsam-2.3.7 → tsam-2.3.9}/examples/results/testperiods_segmentation.csv +0 -0
  16. {tsam-2.3.7 → tsam-2.3.9}/examples/testdata.csv +0 -0
  17. {tsam-2.3.7 → tsam-2.3.9}/requirements.txt +0 -0
  18. {tsam-2.3.7 → tsam-2.3.9}/requirements.yml +0 -0
  19. {tsam-2.3.7 → tsam-2.3.9}/requirements_dev.txt +0 -0
  20. {tsam-2.3.7 → tsam-2.3.9}/setup.cfg +0 -0
  21. {tsam-2.3.7 → tsam-2.3.9}/src/tsam/__init__.py +0 -0
  22. {tsam-2.3.7 → tsam-2.3.9}/src/tsam/hyperparametertuning.py +0 -0
  23. {tsam-2.3.7 → tsam-2.3.9}/src/tsam/periodAggregation.py +0 -0
  24. {tsam-2.3.7 → tsam-2.3.9}/src/tsam/representations.py +0 -0
  25. {tsam-2.3.7 → tsam-2.3.9}/src/tsam/timeseriesaggregation.py +0 -0
  26. {tsam-2.3.7 → tsam-2.3.9}/src/tsam/utils/__init__.py +0 -0
  27. {tsam-2.3.7 → tsam-2.3.9}/src/tsam/utils/k_maxoids.py +0 -0
  28. {tsam-2.3.7 → tsam-2.3.9}/src/tsam/utils/k_medoids_contiguity.py +0 -0
  29. {tsam-2.3.7 → tsam-2.3.9}/src/tsam/utils/k_medoids_exact.py +0 -0
  30. {tsam-2.3.7 → tsam-2.3.9}/src/tsam/utils/segmentation.py +0 -0
  31. {tsam-2.3.7 → tsam-2.3.9}/src/tsam.egg-info/SOURCES.txt +0 -0
  32. {tsam-2.3.7 → tsam-2.3.9}/src/tsam.egg-info/dependency_links.txt +0 -0
  33. {tsam-2.3.7 → tsam-2.3.9}/src/tsam.egg-info/requires.txt +0 -0
  34. {tsam-2.3.7 → tsam-2.3.9}/src/tsam.egg-info/top_level.txt +0 -0
  35. {tsam-2.3.7 → tsam-2.3.9}/test/test_accuracyIndicators.py +0 -0
  36. {tsam-2.3.7 → tsam-2.3.9}/test/test_adjacent_periods.py +0 -0
  37. {tsam-2.3.7 → tsam-2.3.9}/test/test_aggregate_hiearchical.py +0 -0
  38. {tsam-2.3.7 → tsam-2.3.9}/test/test_assert_raises.py +0 -0
  39. {tsam-2.3.7 → tsam-2.3.9}/test/test_averaging.py +0 -0
  40. {tsam-2.3.7 → tsam-2.3.9}/test/test_cluster_order.py +0 -0
  41. {tsam-2.3.7 → tsam-2.3.9}/test/test_durationCurve.py +0 -0
  42. {tsam-2.3.7 → tsam-2.3.9}/test/test_durationRepresentation.py +0 -0
  43. {tsam-2.3.7 → tsam-2.3.9}/test/test_extremePeriods.py +0 -0
  44. {tsam-2.3.7 → tsam-2.3.9}/test/test_hierarchical.py +0 -0
  45. {tsam-2.3.7 → tsam-2.3.9}/test/test_hypertuneAggregation.py +0 -0
  46. {tsam-2.3.7 → tsam-2.3.9}/test/test_k_maxoids.py +0 -0
  47. {tsam-2.3.7 → tsam-2.3.9}/test/test_k_medoids.py +0 -0
  48. {tsam-2.3.7 → tsam-2.3.9}/test/test_k_medoids_contiguity.py +0 -0
  49. {tsam-2.3.7 → tsam-2.3.9}/test/test_minmaxRepresentation.py +0 -0
  50. {tsam-2.3.7 → tsam-2.3.9}/test/test_preprocess.py +0 -0
  51. {tsam-2.3.7 → tsam-2.3.9}/test/test_properties.py +0 -0
  52. {tsam-2.3.7 → tsam-2.3.9}/test/test_samemean.py +0 -0
  53. {tsam-2.3.7 → tsam-2.3.9}/test/test_segmentation.py +0 -0
  54. {tsam-2.3.7 → tsam-2.3.9}/test/test_subhourlyResolution.py +0 -0
  55. {tsam-2.3.7 → tsam-2.3.9}/test/test_subhourly_periods.py +0 -0
  56. {tsam-2.3.7 → tsam-2.3.9}/test/test_weightingFactors.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tsam
3
- Version: 2.3.7
3
+ Version: 2.3.9
4
4
  Summary: Time series aggregation module (tsam) to create typical periods
5
5
  Author-email: Leander Kotzur <leander.kotzur@googlemail.com>, Maximilian Hoffmann <maximilian.hoffmann@julumni.fz-juelich.de>
6
6
  Maintainer-email: Julian Belina <j.belina@fz-juelich.de>
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
5
5
 
6
6
  [project]
7
7
  name = "tsam"
8
- version = "2.3.7"
8
+ version = "2.3.9"
9
9
  description = "Time series aggregation module (tsam) to create typical periods"
10
10
  authors = [
11
11
  { name = "Leander Kotzur", email = "leander.kotzur@googlemail.com" },
@@ -31,10 +31,11 @@ def durationRepresentation(
31
31
  # make pd.DataFrame each row represents a candidate, and the columns are defined by two levels: the attributes and
32
32
  # the time steps inside the candidates.
33
33
  columnTuples = []
34
- for i in range(int(candidates.shape[1] / timeStepsPerPeriod)):
34
+ num_attributes = int(candidates.shape[1] / timeStepsPerPeriod)
35
+ for i in range(num_attributes):
35
36
  for j in range(timeStepsPerPeriod):
36
37
  columnTuples.append((i, j))
37
- candidates = pd.DataFrame(
38
+ candidates_df = pd.DataFrame(
38
39
  candidates, columns=pd.MultiIndex.from_tuples(columnTuples)
39
40
  )
40
41
 
@@ -43,54 +44,56 @@ def durationRepresentation(
43
44
  # inner-cluster variance is smaller and the variance across the typical periods' mean values is higher
44
45
  if distributionPeriodWise:
45
46
  clusterCenters = []
47
+
46
48
  for clusterNum in np.unique(clusterOrder):
47
- indice = np.where(clusterOrder == clusterNum)
48
- noCandidates = len(indice[0])
49
- clean_index = []
50
-
51
- clusterCenter = []
52
- # get a clean index depending on the size
53
- for y in candidates.columns.levels[1]:
54
- for x in range(noCandidates):
55
- clean_index.append((x, y))
56
- for a in candidates.columns.levels[0]:
57
- # get all the values of a certain attribute and cluster
58
- candidateValues = candidates.loc[indice[0], a]
59
- # sort all values
60
- sortedAttr = candidateValues.stack(
61
- future_stack=True,
62
- ).sort_values()
63
- # reindex and arrange such that every sorted segment gets represented by its mean
64
- sortedAttr.index = pd.MultiIndex.from_tuples(clean_index)
65
- representationValues = sortedAttr.unstack(level=0).mean(axis=1)
66
- # respect max and min of the attributes
67
- if representMinMax:
68
- representationValues.loc[0] = sortedAttr.values[0]
69
- representationValues.loc[representationValues.index[-1]] = (
70
- sortedAttr.values[-1]
71
- )
49
+ indice = np.where(clusterOrder == clusterNum)[0]
50
+ noCandidates = len(indice)
72
51
 
73
- # get the order of the representation values such that euclidean distance to the candidates is minimized
74
- order = candidateValues.mean().sort_values().index
75
- # arrange
76
- representationValues.index = order
77
- representationValues.sort_index(inplace=True)
52
+ # Skip empty clusters
53
+ if len(indice) == 0:
54
+ continue
55
+
56
+ # This list will hold the representative values for each attribute
57
+ clusterCenter_parts = []
78
58
 
79
- # add to cluster center
80
- clusterCenter = np.append(clusterCenter, representationValues.values)
59
+ for a in candidates_df.columns.levels[0]:
81
60
 
82
- clusterCenters.append(clusterCenter)
61
+ candidateValues_np = candidates_df.loc[indice, a].values
62
+
63
+ # flatten the 2D array (candidates, timesteps) into a 1D array and sort it.
64
+ sorted_flat_values = np.sort(candidateValues_np.flatten())
65
+
66
+ # reshape the sorted values and calculate the mean for each representative time step.
67
+ representationValues_np = sorted_flat_values.reshape(timeStepsPerPeriod, noCandidates).mean(axis=1)
68
+
69
+ # respect max and min of the attributes
70
+ if representMinMax:
71
+ representationValues_np[0] = sorted_flat_values[0]
72
+ representationValues_np[-1] = sorted_flat_values[-1]
73
+
74
+ # get the order of the representation values such that euclidean distance
75
+ # to the candidates' mean profile is minimized.
76
+ mean_profile_order = np.argsort(candidateValues_np.mean(axis=0))
77
+
78
+ # Create an empty array to place the results in the correct order
79
+ final_representation_for_attr = np.empty_like(representationValues_np)
80
+ final_representation_for_attr[mean_profile_order] = representationValues_np
81
+
82
+ # add to cluster center
83
+ clusterCenter_parts.append(final_representation_for_attr)
83
84
 
85
+ clusterCenters.append(np.concatenate(clusterCenter_parts))
86
+
84
87
  else:
85
88
  clusterCentersList = []
86
- for a in candidates.columns.levels[0]:
89
+ for a in candidates_df.columns.levels[0]:
87
90
  meanVals = []
88
91
  clusterLengths = []
89
92
  for clusterNum in np.unique(clusterOrder):
90
93
  indice = np.where(clusterOrder == clusterNum)
91
94
  noCandidates = len(indice[0])
92
95
  # get all the values of a certain attribute and cluster
93
- candidateValues = candidates.loc[indice[0], a]
96
+ candidateValues = candidates_df.loc[indice[0], a]
94
97
  # calculate centroid of each cluster and append to list
95
98
  meanVals.append(candidateValues.mean())
96
99
  # make a list of weights of each cluster for each time step within the period
@@ -113,7 +116,7 @@ def durationRepresentation(
113
116
  order = meansAndWeightsSorted.index
114
117
  # sort all values of the original time series
115
118
  sortedAttr = (
116
- candidates.loc[:, a]
119
+ candidates_df.loc[:, a]
117
120
  .stack(
118
121
  future_stack=True,
119
122
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tsam
3
- Version: 2.3.7
3
+ Version: 2.3.9
4
4
  Summary: Time series aggregation module (tsam) to create typical periods
5
5
  Author-email: Leander Kotzur <leander.kotzur@googlemail.com>, Maximilian Hoffmann <maximilian.hoffmann@julumni.fz-juelich.de>
6
6
  Maintainer-email: Julian Belina <j.belina@fz-juelich.de>
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes