Fix Histogram Binning#2086
Conversation
beets
left a comment
There was a problem hiding this comment.
thanks for this! now that we have a bit of a breather, we can make this more robust.
| data_found = False | ||
|
|
||
| # Get the latest month we have data for | ||
| latest_date = series[-1].get('date', '') |
There was a problem hiding this comment.
check for the length of series first (it could be empty)
There was a problem hiding this comment.
good point! This section got removed in the revamp, but will keep in mind for the future.
| latest_month = 12 | ||
| if latest_date[:4] == year and len(latest_date) >= 7: | ||
| latest_month = int(latest_date[5:7]) |
There was a problem hiding this comment.
nit: try to avoid "magic numbers", even if it's for something like date parsing.
There was a problem hiding this comment.
Thanks for the pointer, removed magic numbers.
| months_to_fill = [ | ||
| f"{year}-{str(mm).zfill(2)}" for mm in range(1, latest_month + 1) | ||
| ] |
There was a problem hiding this comment.
let's get this working for cross-year boundaries (which will kick in next week :))
| if (!histogramData || _.isEmpty(histogramData.dataPoints)) { | ||
| return null; | ||
| } | ||
| const rs: ReplacementStrings = { |
There was a problem hiding this comment.
perhaps only add the ChartTileContainer when there is data to plot (otherwise the empty frame with no chart is a little awkward).
There was a problem hiding this comment.
added this check in the new version as well.
chejennifer
left a comment
There was a problem hiding this comment.
the updated histogram looks good!
|
|
||
| useEffect(() => { | ||
| if (histogramData) { | ||
| if (histogramData && !_.isEmpty(histogramData.dataPoints)) { |
There was a problem hiding this comment.
nit: maybe make a function shouldShowHistogram() & use it both here and in line 77
|
Following offline conversation, the histogram tile has now been revamped:
Further changes that will come in future PRs are:
|
chejennifer
left a comment
There was a problem hiding this comment.
nice, thanks for the update!
| replacementStrings={rs} | ||
| className={"histogram-chart"} | ||
| allowEmbed={false} | ||
| getDataCsv={() => dataPointsToCsv(histogramData)} |
There was a problem hiding this comment.
nit: since allowEmbed is set to false, setting this getDataCsv field is unnecessary
There was a problem hiding this comment.
Thanks for the pointer, removed getDataCsv.
| processData(props, rawData, setHistogramData); | ||
| } | ||
| }, [props, rawData]); | ||
| // specify months if dateSetting is just a year |
There was a problem hiding this comment.
nit: looks like we're specifying dates, not months?
There was a problem hiding this comment.
Good catch, updated this comment line to clarify we're specifying dates
| } | ||
| }, [props, rawData]); | ||
| // specify months if dateSetting is just a year | ||
| if (dateSetting.length == "YYYY".length) { |
There was a problem hiding this comment.
this is assuming that if dateSetting length is YYYY, then getDateRange will return a date range that is also YYYY. That is true right now, but I think it would be better to check the lengths of startDate and endDate instead.
There was a problem hiding this comment.
Good idea, switched to checking lengths of startDate and endDate
| // imputing 0s for dates the source(s) may not yet have data for. | ||
| if (!_.isEmpty(disasterEventPoints)) { | ||
| const lastDate = | ||
| disasterEventPoints[disasterEventPoints.length - 1].startDate; |
There was a problem hiding this comment.
are you taking a sorted list of disasterEventPoints? If so, please mention it in the function comments that disasterEventPoints should be sorted by date
There was a problem hiding this comment.
Added to function comments!
There was a problem hiding this comment.
but it doesn't look like you're sorting the data before passing it into this function?
There was a problem hiding this comment.
Apologies, I misinterpreted your original comment. I've added sorting inside the function.
| // Fill in months between start and end dates | ||
| const months = new Array<string>(); | ||
| for ( | ||
| let date = new Date(startDate); |
There was a problem hiding this comment.
nit: because new Date() creates a date in local time and .toIsoString() gets the ISO string of the UTC date, we would want to create a UTC date here by doing new Date(startDate + "Z") like this: https://github.com/datacommonsorg/website/blob/master/static/js/utils/disaster_event_map_utils.tsx#L164-L168
There was a problem hiding this comment.
Thanks for the pointer! Added + "Z".
| props.statVarSpec[0].unit | ||
| ); | ||
| function shouldShowHistogram(histogramData: DataPoint[]): boolean { | ||
| return histogramData && !_.isEmpty(histogramData); |
There was a problem hiding this comment.
nit: _.isEmpty will check for nulls and undefined too, so really only need to keep the ~_.isEmpty check here
There was a problem hiding this comment.
thanks, kept only the !_.isEmpty. Leaving the function despite its simplicity because "shouldShowHistogram" is more readable to me.
| # stat_var_key: "fire_count" | ||
| # } | ||
| tiles { | ||
| # TODO: Need to specify P1Y |
There was a problem hiding this comment.
you can delete this comment if it doesn't apply anymore (ditto for the rest)
| } | ||
|
|
||
| message HistogramTileSpec { | ||
| string event_type_key = 1; |
There was a problem hiding this comment.
super nit: please check indent spacing
There was a problem hiding this comment.
Good eye! Fixed spacing
| disasterEventData[tile.histogramTileSpec.eventTypeKey] || { | ||
| eventPoints: [], | ||
| provenanceInfo: {}, |
There was a problem hiding this comment.
we should be handling these default values before this (i.e. disasterEventData should have reasonable defaults for all event types). or the component should handle the case where disasterEventData is null. of these, i might choose (2)
There was a problem hiding this comment.
Went with (2). Added handling so that histogram just doesn't render if disasterEventData is null instead of breaking the entire component.
| } | ||
| }, [props, rawData]); | ||
| // specify full dates if start and end dates are just YYYY | ||
| if (startDate.length == "YYYY".length && endDate.length == "YYYY".length) { |
There was a problem hiding this comment.
what if the range is specified YYYY-MM?
There was a problem hiding this comment.
Added YYYY-MM case handling.
| const eventMonth = event.startDate.slice(0, "YYYY-MM".length); | ||
|
|
||
| // Increment count in corresponding bin | ||
| if (bins.has(eventMonth)) { |
There was a problem hiding this comment.
perhaps add a log warning if we're skipping events.
There was a problem hiding this comment.
added a log message if we skip events
|
|
||
| for (const event of disasterEventPoints) { | ||
| // Get start time in YYYY-MM | ||
| const eventMonth = event.startDate.slice(0, "YYYY-MM".length); |
There was a problem hiding this comment.
check that all events have at least YYYY-MM granularity
| function shouldShowHistogram(histogramData: DataPoint[]): boolean { | ||
| return !_.isEmpty(histogramData); |
There was a problem hiding this comment.
this is ok to keep, but for future reference, might be too little to have as a helper.
There was a problem hiding this comment.
thanks for the pointer! noted.
chejennifer
left a comment
There was a problem hiding this comment.
thanks for the updates!
This is a followup PR to #2086 which makes the histograms use the color of the event types instead of default red. Because this is a followup, diffs currently include all changes made in #2086. I'll message out when #2086 is merged and the diffs are easier to read. Screenshots: <img width="1024" alt="Screenshot 2023-02-09 at 10 02 21 AM" src="https://user-images.githubusercontent.com/4034366/217902251-e962cddb-43df-429d-a15f-3df9d092ab65.png"> <img width="1026" alt="Screenshot 2023-02-09 at 10 02 40 AM" src="https://user-images.githubusercontent.com/4034366/217902271-71e6ac0e-f95f-4da6-8e09-3f857e96a1cb.png"> <img width="1025" alt="Screenshot 2023-02-09 at 10 02 58 AM" src="https://user-images.githubusercontent.com/4034366/217902288-b08c2cd7-93db-43b7-9342-b82f3409d9d5.png"> <img width="1021" alt="Screenshot 2023-02-09 at 10 03 23 AM" src="https://user-images.githubusercontent.com/4034366/217902317-fe4207b9-b789-40a3-95d2-696e025e3126.png"> <img width="1023" alt="Screenshot 2023-02-09 at 10 03 12 AM" src="https://user-images.githubusercontent.com/4034366/217903076-d5c1d6de-a6a7-49a2-9c53-a0c94ed1754e.png"> <img width="1029" alt="Screenshot 2023-02-09 at 10 03 34 AM" src="https://user-images.githubusercontent.com/4034366/217902337-0928c6ca-6815-4f18-990d-f5ff1dc64af0.png"> <img width="1026" alt="Screenshot 2023-02-09 at 10 03 53 AM" src="https://user-images.githubusercontent.com/4034366/217902366-861d6daa-d218-42fc-aa1d-6bf21bf2fb67.png">
Bumps [redis](https://github.com/redis/redis-py) from 3.5.3 to 4.5.3. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/redis/redis-py/releases">redis's releases</a>.</em></p> <blockquote> <h2>4.5.3</h2> <h1>Changes</h1> <p>Update urgency: HIGH: There is a critical bug that may affect a subset of users. Upgrade!</p> <h2>🐛 Bug Fixes</h2> <ul> <li><a href="https://cwe.mitre.org/data/definitions/404.html">CWE-404</a> AsyncIO Race Condition Fix (<a href="https://redirect.github.com/redis/redis-py/issues/2624">#2624</a>, <a href="https://redirect.github.com/redis/redis-py/issues/2579">#2579</a>)</li> </ul> <h2>4.5.2</h2> <h1>Changes</h1> <h2>🚀 New Features</h2> <ul> <li>Introduce AbstractConnection so that UnixDomainSocketConnection can call super().<strong>init</strong> (<a href="https://redirect.github.com/redis/redis-py/issues/2588">#2588</a>)</li> <li>Added queue_class to REDIS_ALLOWED_KEYS (<a href="https://redirect.github.com/redis/redis-py/issues/2577">#2577</a>)</li> <li>Made search document subscriptable (<a href="https://redirect.github.com/redis/redis-py/issues/2615">#2615</a>)</li> <li>Sped up the protocol parsing (<a href="https://redirect.github.com/redis/redis-py/issues/2596">#2596</a>)</li> </ul> <h2>🐛 Bug Fixes</h2> <ul> <li>Fix behaviour of async PythonParser to match RedisParser as for issue <a href="https://redirect.github.com/redis/redis-py/issues/2349">#2349</a> (<a href="https://redirect.github.com/redis/redis-py/issues/2582">#2582</a>)</li> <li>Replace async_timeout by asyncio.timeout (<a href="https://redirect.github.com/redis/redis-py/issues/2602">#2602</a>)</li> <li>Update json().arrindex() default values (<a href="https://redirect.github.com/redis/redis-py/issues/2611">#2611</a>)</li> </ul> <h2>🧰 Maintenance</h2> <ul> <li>Coverage for pypy-3.9 (<a href="https://redirect.github.com/redis/redis-py/issues/2608">#2608</a>)</li> <li>Developer Experience: Adding redis version compatibility details to the README (<a href="https://redirect.github.com/redis/redis-py/issues/2621">#2621</a>)</li> <li>Remove redundant assignment to RedisCluster.nodes_manager. (<a href="https://redirect.github.com/redis/redis-py/issues/2620">#2620</a>)</li> <li>Developer Experience: [types] update return type of smismember to list[int] (<a href="https://redirect.github.com/redis/redis-py/issues/2617">#2617</a>)</li> <li>Developer Experience: [docs] ConnectionPool SSL example (<a href="https://redirect.github.com/redis/redis-py/issues/2605">#2605</a>)</li> <li>Developer Experience: Fixed CredentialsProvider examples (<a href="https://redirect.github.com/redis/redis-py/issues/2587">#2587</a>)</li> <li>Developer Experience: Update README to make pip install copy-pastable on zsh (<a href="https://redirect.github.com/redis/redis-py/issues/2584">#2584</a>)</li> <li>Developer Experience: Fix for <code>lpop</code> and <code>rpop</code> return typing (<a href="https://redirect.github.com/redis/redis-py/issues/2590">#2590</a>)</li> </ul> <h2>Contributors</h2> <p>We'd like to thank all the contributors who worked on this release!</p> <p><a href="https://github.com/CrimsonGlory"><code>@CrimsonGlory</code></a>, <a href="https://github.com/Galtozzy"><code>@Galtozzy</code></a>, <a href="https://github.com/aksinha334"><code>@aksinha334</code></a>, <a href="https://github.com/barshaul"><code>@barshaul</code></a>, <a href="https://github.com/chayim"><code>@chayim</code></a>, <a href="https://github.com/davemcphee"><code>@davemcphee</code></a>, <a href="https://github.com/dvora-h"><code>@dvora-h</code></a>, <a href="https://github.com/kristjanvalur"><code>@kristjanvalur</code></a>, <a href="https://github.com/ryin1"><code>@ryin1</code></a>, <a href="https://github.com/sileht"><code>@sileht</code></a>, <a href="https://github.com/thebarbershop"><code>@thebarbershop</code></a>, <a href="https://github.com/uglide"><code>@uglide</code></a>, <a href="https://github.com/woutdenolf"><code>@woutdenolf</code></a> and <a href="https://github.com/zakaf"><code>@zakaf</code></a></p> <h2>4.5.1</h2> <h1>Changes</h1> <h2>🐛 Bug Fixes</h2> <ul> <li>Fix <a href="https://redirect.github.com/redis/redis-py/issues/2581">#2581</a> <code>UnixDomainSocketConnection</code> object has no attribute <code>_command_packer</code> (<a href="https://redirect.github.com/redis/redis-py/issues/2583">#2583</a>)</li> </ul> <h2>Contributors</h2> <p>We'd like to thank all the contributors who worked on this release!</p> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/redis/redis-py/blob/master/CHANGES">redis's changelog</a>.</em></p> <blockquote> <pre><code>* Allow data to drain from async PythonParser when reading during a disconnect() * Use asyncio.timeout() instead of async_timeout.timeout() for python >= 3.11 ([#2602](redis/redis-py#2602)) * Add test and fix async HiredisParser when reading during a disconnect() ([#2349](redis/redis-py#2349)) * Use hiredis-py pack_command if available. * Support `.unlink()` in ClusterPipeline * Simplify synchronous SocketBuffer state management * Fix string cleanse in Redis Graph * Make PythonParser resumable in case of error ([#2510](redis/redis-py#2510)) * Add `timeout=None` in `SentinelConnectionManager.read_response` * Documentation fix: password protected socket connection ([#2374](redis/redis-py#2374)) * Allow `timeout=None` in `PubSub.get_message()` to wait forever * add `nowait` flag to `asyncio.Connection.disconnect()` * Update README.md links * Fix timezone handling for datetime to unixtime conversions * Fix start_id type for XAUTOCLAIM * Remove verbose logging from cluster.py * Add retry mechanism to async version of Connection * Compare commands case-insensitively in the asyncio command parser * Allow negative `retries` for `Retry` class to retry forever * Add `items` parameter to `hset` signature * Create codeql-analysis.yml ([#1988](redis/redis-py#1988)). Thanks @chayim * Add limited support for Lua scripting with RedisCluster * Implement `.lock()` method on RedisCluster * Fix cursor returned by SCAN for RedisCluster & change default target to PRIMARIES * Fix scan_iter for RedisCluster * Remove verbose logging when initializing ClusterPubSub, ClusterPipeline or RedisCluster * Fix broken connection writer lock-up for asyncio ([#2065](redis/redis-py#2065)) * Fix auth bug when provided with no username ([#2086](redis/redis-py#2086)) * Fix missing ClusterPipeline._lock ([#2189](redis/redis-py#2189)) * Added dynaminc_startup_nodes configuration to RedisCluster * Fix reusing the old nodes' connections when cluster topology refresh is being done * Fix RedisCluster to immediately raise AuthenticationError without a retry * ClusterPipeline Doesn't Handle ConnectionError for Dead Hosts ([#2225](redis/redis-py#2225)) * Remove compatibility code for old versions of Hiredis, drop Packaging dependency * The `deprecated` library is no longer a dependency * Failover handling improvements for RedisCluster and Async RedisCluster ([#2377](redis/redis-py#2377)) * Fixed "cannot pickle '_thread.lock' object" bug ([#2354](redis/redis-py#2354), [#2297](redis/redis-py#2297)) * Added CredentialsProvider class to support password rotation * Enable Lock for asyncio cluster mode * Fix Sentinel.execute_command doesn't execute across the entire sentinel cluster bug ([#2458](redis/redis-py#2458)) * Added a replacement for the default cluster node in the event of failure ([#2463](redis/redis-py#2463)) * Fix for Unhandled exception related to self.host with unix socket ([#2496](redis/redis-py#2496)) </code></pre> <ul> <li>4.1.3 (Feb 8, 2022) <ul> <li>Fix flushdb and flushall (<a href="https://redirect.github.com/redis/redis-py/issues/1926">#1926</a>)</li> <li>Add redis5 and redis4 dockers (<a href="https://redirect.github.com/redis/redis-py/issues/1871">#1871</a>)</li> <li>Change json.clear test multi to be up to date with redisjson (<a href="https://redirect.github.com/redis/redis-py/issues/1922">#1922</a>)</li> <li>Fixing volume for unstable_cluster docker (<a href="https://redirect.github.com/redis/redis-py/issues/1914">#1914</a>)</li> <li>Update changes file with changes since 4.0.0-beta2 (<a href="https://redirect.github.com/redis/redis-py/issues/1915">#1915</a>)</li> </ul> </li> <li>4.1.2 (Jan 27, 2022)</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/redis/redis-py/commit/66a4d6b2a493dd3a20cc299ab5fef3c14baad965"><code>66a4d6b</code></a> AsyncIO Race Condition Fix (<a href="https://redirect.github.com/redis/redis-py/issues/2641">#2641</a>)</li> <li><a href="https://github.com/redis/redis-py/commit/318b114f4da9846a2a7c150e1fb702e9bebd9fdf"><code>318b114</code></a> Version 4.5.2 (<a href="https://redirect.github.com/redis/redis-py/issues/2627">#2627</a>)</li> <li><a href="https://github.com/redis/redis-py/commit/1b2f408259405d412d7530291902f9e0c8bd34b3"><code>1b2f408</code></a> Fix behaviour of async PythonParser to match RedisParser as for issue <a href="https://redirect.github.com/redis/redis-py/issues/2349">#2349</a> (...</li> <li><a href="https://github.com/redis/redis-py/commit/7d474f90453c7b90bd06c94e0250b618120a599d"><code>7d474f9</code></a> introduce AbstractConnection so that UnixDomainSocketConnection can call supe...</li> <li><a href="https://github.com/redis/redis-py/commit/c87172347584301f453c601c483126e4800257b7"><code>c871723</code></a> pypy-3.9 CI (<a href="https://redirect.github.com/redis/redis-py/issues/2608">#2608</a>)</li> <li><a href="https://github.com/redis/redis-py/commit/d63313bf6080acaf18d61e072c78303adc0d4166"><code>d63313b</code></a> add queue_class to REDIS_ALLOWED_KEYS (<a href="https://redirect.github.com/redis/redis-py/issues/2577">#2577</a>)</li> <li><a href="https://github.com/redis/redis-py/commit/c61eeb2e3b5dff1f01eb1e665f424c7e75354f56"><code>c61eeb2</code></a> Adding supported redis/library details (<a href="https://redirect.github.com/redis/redis-py/issues/2621">#2621</a>)</li> <li><a href="https://github.com/redis/redis-py/commit/25e85e51e57b7aae9eb8fc77cfb0a45a07a501a7"><code>25e85e5</code></a> fix: replace async_timeout by asyncio.timeout (<a href="https://redirect.github.com/redis/redis-py/issues/2602">#2602</a>)</li> <li><a href="https://github.com/redis/redis-py/commit/91ab12a0f1bdf0e433131e1a51578e9fa2f89718"><code>91ab12a</code></a> Remove redundant assignment. (<a href="https://redirect.github.com/redis/redis-py/issues/2620">#2620</a>)</li> <li><a href="https://github.com/redis/redis-py/commit/8bfd492240fd33489a86cd3d353e3ece1fc94c10"><code>8bfd492</code></a> Making search document subscriptable (<a href="https://redirect.github.com/redis/redis-py/issues/2615">#2615</a>)</li> <li>Additional commits viewable in <a href="https://github.com/redis/redis-py/compare/3.5.3...v4.5.3">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/datacommonsorg/website/network/alerts). </details> Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Bo Xu <[email protected]>


Makes the following changes to the histogram tile:
Before:

After:

Before:

After:
