From b5f0a12c4d406a4dbe6f92d313be9ae537cb47f8 Mon Sep 17 00:00:00 2001 From: Saman Hushalsadat Date: Wed, 1 May 2024 09:14:53 +0200 Subject: [PATCH] perf: Faster plot_histograms and more reliable plots (#659) ## Fixed problem that histogram get plottet a lot faster ### Summary of Changes - rewrote the entire funtion - reduce numerical bins to a given parameter for more performance (default 10) - Bins are now also sorted - sometimes specific columns had strange plots, these are also now fixed - swaped the images for the test with new ones --------- Co-authored-by: Lars Reimann --- src/safeds/data/tabular/containers/_table.py | 63 +++++++++++++----- ...st_should_match_snapshot[four columns].png | Bin 21323 -> 21847 bytes ...test_should_match_snapshot[one column].png | Bin 5980 -> 6094 bytes ...columns with compressed visualization].png | Bin 0 -> 19559 bytes .../containers/_table/test_plot_histograms.py | 8 ++- 5 files changed, 54 insertions(+), 17 deletions(-) create mode 100644 tests/safeds/data/tabular/containers/_table/__snapshots__/test_plot_histograms/test_should_match_snapshot[two columns with compressed visualization].png diff --git a/src/safeds/data/tabular/containers/_table.py b/src/safeds/data/tabular/containers/_table.py index 9de33b52a..8a0f3e521 100644 --- a/src/safeds/data/tabular/containers/_table.py +++ b/src/safeds/data/tabular/containers/_table.py @@ -2177,13 +2177,18 @@ def plot_boxplots(self) -> Image: buffer.seek(0) return Image.from_bytes(buffer.read()) - def plot_histograms(self) -> Image: + def plot_histograms(self, *, number_of_bins : int = 10) -> Image: """ Plot a histogram for every column. + Parameters + ---------- + number_of_bins: + The number of bins to use in the histogram. Default is 10. + Returns ------- - plot: Image + plot: The plot as an image. Examples @@ -2193,26 +2198,52 @@ def plot_histograms(self) -> Image: >>> image = table.plot_histograms() """ import matplotlib.pyplot as plt + import numpy as np import pandas as pd - import seaborn as sns - col_wrap = min(self.number_of_columns, 3) + n_cols = min(3, self.number_of_columns) + n_rows = 1 + (self.number_of_columns - 1) // n_cols - data = pd.melt(self._data.map(lambda value: str(value)), value_vars=self.column_names) - grid = sns.FacetGrid(data=data, col="variable", col_wrap=col_wrap, sharex=False, sharey=False) - grid.map(sns.histplot, "value") - grid.set_xlabels("") - grid.set_ylabels("") - grid.set_titles("{col_name}") - for axes in grid.axes.flat: - axes.set_xticks(axes.get_xticks()) - axes.set_xticklabels(axes.get_xticklabels(), rotation=45, horizontalalignment="right") - grid.tight_layout() - fig = grid.fig + one_col = n_cols == 1 and n_rows == 1 + fig, axs = plt.subplots(n_rows, n_cols, tight_layout=True, figsize=(n_cols * 3, n_rows * 3)) + + col_names = self.column_names + for col_name, ax in zip(col_names, axs.flatten() if not one_col else [axs]): + np_col = np.array(self.get_column(col_name)) + bins = min(number_of_bins, len(pd.unique(np_col))) + + ax.set_title(col_name) + ax.set_xlabel("") + ax.set_ylabel("") + + if self.get_column(col_name).type.is_numeric(): + np_col = np_col[~np.isnan(np_col)] + + if bins < len(pd.unique(np_col)): + min_val = np.min(np_col) + max_val = np.max(np_col) + hist, bin_edges = np.histogram(self.get_column(col_name), bins, range=(min_val, max_val)) + + bars = np.array([]) + for i in range(len(hist)): + bars = np.append(bars, f'{round(bin_edges[i], 2)}-{round(bin_edges[i+1], 2)}') + + ax.bar(bars, hist, edgecolor='black') + ax.set_xticks(np.arange(len(hist)), bars, rotation=45, horizontalalignment="right") + continue + + np_col = np_col.astype(str) + unique_values = np.unique(np_col) + hist = np.array([np.sum(np_col == value) for value in unique_values]) + ax.bar(unique_values, hist, edgecolor='black') + ax.set_xticks(np.arange(len(unique_values)), unique_values, rotation=45, horizontalalignment="right") + + for i in range(len(col_names), n_rows * n_cols): + fig.delaxes(axs.flatten()[i]) # Remove empty subplots buffer = io.BytesIO() fig.savefig(buffer, format="png") - plt.close() + plt.close() # Prevents the figure from being displayed directly buffer.seek(0) return Image.from_bytes(buffer.read()) diff --git a/tests/safeds/data/tabular/containers/_table/__snapshots__/test_plot_histograms/test_should_match_snapshot[four columns].png b/tests/safeds/data/tabular/containers/_table/__snapshots__/test_plot_histograms/test_should_match_snapshot[four columns].png index 2218cd6a0592d4e63a4006f0f686c035cb859b4e..58d38d3b501c84566bb6e7850e5b1f506c7f5cc0 100644 GIT binary patch literal 21847 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 S`P`O>sPb_o}_t*)`GIlm{mBDSO8X884 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

AInU&j`Vz8KYJPL!B?;OAMFa6;yr<^Bdrdt|v z!b+6YqP^&RxPZNt91Tf-w>Vs%fqmo!Ii0KRwwggvQ?q5!*eVHNw}6XUS^~qr(3}6L z1IRH#-+ei@PyH%mjk;yO_YTLx-I1KZ;m>tSps}c%b$nYU?)SKHEF!MTP}e#@s7*pJ zB&p-9^ySODiQE%%t5$aDu3fv*aGegt$ot{%-@m_;*k-}oZo#{JBpXMKGdp*EzQ8Hd zP6xH!5NOzI5Gs{Ulwfo*Fx}>AS4zeD!l($n}!bu4Uckqf#Gr87WY-~jbXYY${ zFIz1*9g?h7sD~RmStvLg>O9k{0m$fclX9&}xgj~FL{o|W{*HCCZ#_tsGrr%TmFU7c}GYwgy-0~bLSyYSvf#U4Q5pE<$h0T)s{X4;ojoRuA24h)^Wc4 zj2xUZI6{u^60ce8NY%0^Kf|eL?LU>ITs#QsB?K9GI=Z~W>U0|Mwo zPM*|-3SlKWPjd%RX(*J3Pk-&qEMWT0?gBT+X=t+iBp>dx0}6!Ei+WP13{EeY&Yq_m?%y&Hra%y4zbc}p^@^6Wfkl%d-on=xuT0^SxGk61!2RX9j`e*XA(DZQ zFI%^1Q*>?ZxsvSSc3EBB7?0a7%lXWQZZJuH>bIAz>Vf7Xb-VS?x1BP<6DWoMfYALD zgiIc?xp6<^Tg>@eGYqmDxvu13p7Wd&;9v~)hKSXwwG?xzB52^_;}h{Ykk7uOgnkvT z%@0k)ajg%H3oG@!50hL-#I(f}VN(WB07RqvGhPCrj!Y#>_yGtv1a)8j`0xUuRw$~Z z)7By#C|2bKjzMuTq;{si2_tH||Gk4c9EDh6If_Ni*LL^vQbL2E1Bxn*ZygrpDzwd( z18;!|*x8E@((_up?AZF#~=R2&&vBW!k&6jTCP(d?y?$cv#NyGZ|DpJ4+#}7UXL|SeOFN6^^s7X3a zttKR?sipseMI`xQ{}vpv>_^e|*EQ<)XV8>Ypnb23k=aF#T%%_00aehs%<>l@2WeC( zsow)6Z5{d=!een8H>r8kZrc`*K+$h_X?l1Mwj0Y

0cHg9)FPY0*8@ykvAx21yP) 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%0A}=f#g} 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 ZHX0FpV?KXw0M6+V3UaEld3Vg7{ulIsr27B> literal 5980 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 diff --git a/tests/safeds/data/tabular/containers/_table/__snapshots__/test_plot_histograms/test_should_match_snapshot[two columns with compressed visualization].png b/tests/safeds/data/tabular/containers/_table/__snapshots__/test_plot_histograms/test_should_match_snapshot[two columns with compressed visualization].png new file mode 100644 index 0000000000000000000000000000000000000000..c5706b869a9bda20b2a85efd9e035a798a7e8327 GIT binary patch literal 19559 zcmcJ%bzD{Lzby*#VgV{riXaN2NQfYcNEx)!NQV+q0@Bi=qDYDef=WwCBi#m)(xD(> zASK-;cT9hKpS#b#_jB*vXP?VIzAvmb*PPGujqx30JnNB?f;81m#+@W2Bvi685-KDl zTQo^XNV&If#cx8+mX z-laT#`wKj$-+NsCTKJBh=MBG?sCBW9g~gD1l5yrC4&NfSBG!mQhkP5?mbMK?5P6rlt;g zw=WyN^`-rIN0NBi$*tVPUw!zl;g8hE14#YxN15xCn#4tR8vWPaD))4%VogDfGc3=d zv%Vu^kMi*X>%Mc!scNnU3JMBssjA1m6xzh3_9pDD`r1LYXQ(Dg{>9IsX9nTz$%+k~ zX&Q+NQRkAZANk7V_)swTrKP2jJYHLxYAA6Wf919`nd>~IKlJ@q_K&w%y@}FFmO3NL3x0s@$ZfprH7YYvP}( zlVBJ`>Ms`{|KiM}d-v|mkF;Lucb}8TGH}{0E-tE6xV!KP4(~YR%D0u9lkbdG&ykJQ z1)9s3FYiBlD^|DIPO|BxkkMFyZwl>Y8JWjLMQ2^62fcNRZe92ou%Asgju^Lkg^V{ocHJgS(W~&NI9IeG+>!)|TksZ9wg0!|M3?)^4mVnf&+|IQwU9%0DnLaDKeI`9q(wZPFGJRly7Mto!%x|Ni|uEAu&r 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 Ic None: histograms = table.plot_histograms()