diff --git a/.gitignore b/.gitignore index f40fbd8b..70c83fa7 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ _site .jekyll-cache .jekyll-metadata vendor +.venv \ No newline at end of file diff --git a/_config.yml b/_config.yml index 441dd9e5..6fcb0995 100644 --- a/_config.yml +++ b/_config.yml @@ -6,5 +6,17 @@ theme: minima baseurl: /plugo/ url: https://captnemo.in timezone: Asia/Kolkata -# mapboxtoken: pk.eyJ1IjoiY2FwdG4zbTAiLCJhIjoiY2wyYmdvNmcxMGYyMDNic2MyY3Rvd28yNiJ9.4IiMK807T05VEE2loTN1Jg -mapboxtoken: pk.eyJ1IjoiY2FwdG4zbTAiLCJhIjoiY2pmanVvdWNkMHNmOTJ3bzNnYXIwcnpwZSJ9.C1N7hcYotH63uQjx5sk7Xg \ No newline at end of file +mapboxtoken: pk.eyJ1IjoiY2FwdG4zbTAiLCJhIjoiY2pmanVvdWNkMHNmOTJ3bzNnYXIwcnpwZSJ9.C1N7hcYotH63uQjx5sk7Xg +exclude: + - x.sh + - .venv + - _site + - .jekyll-cache + - Gemfile + - Gemfile.lock + - .git + - .github + - _config.yml + - 404.html + - CITATION.cff + - "*.py" \ No newline at end of file diff --git a/_layouts/home.html b/_layouts/home.html index 3e1ce597..d89c1911 100644 --- a/_layouts/home.html +++ b/_layouts/home.html @@ -12,6 +12,26 @@ layout: default +
+ Show Number of Locations by Time +
+
+ +
+ Show Number of Powerbanks by Time +
+
+ + + + + {{content}} {% assign zeroPowerBankLocations = 0 %} diff --git a/assets/chart.js b/assets/chart.js new file mode 100644 index 00000000..ceab9d27 --- /dev/null +++ b/assets/chart.js @@ -0,0 +1,99 @@ +// Set the dimensions and margins of the graph +const margin = { top: 20, right: 30, bottom: 50, left: 50 }; +const width = 800 - margin.left - margin.right; +const height = 400 - margin.top - margin.bottom; + +// Append the svg object to the body of the page +const svg1 = d3.select("#chart") + .append("svg") + .attr("width", width + margin.left + margin.right) + .attr("height", height + margin.top + margin.bottom) + .append("g") + .attr("transform", `translate(${margin.left},${margin.top})`); + +const svg2 = d3.select("#chart2") + .append("svg") + .attr("width", width + margin.left + margin.right) + .attr("height", height + margin.top + margin.bottom) + .append("g") + .attr("transform", `translate(${margin.left},${margin.top})`); + +// Parse the date / time +const parseTime = d3.timeParse("%Y-%m-%d"); + +function d3Chart(data, svg) { + // Format the data + data.forEach(d => { + d.date = parseTime(d.date); + d.count = +d.count; + }); + + // Set the ranges + const x = d3.scaleTime().range([0, width]); + const y = d3.scaleLinear().range([height, 0]); + + // Scale the range of the data + x.domain(d3.extent(data, d => d.date)); + y.domain([0, d3.max(data, d => d.count)]); + + // Define the line + const line = d3.line() + .x(d => x(d.date)) + .y(d => y(d.count)); + + // Add the line path + svg.append("path") + .data([data]) + .attr("class", "line") + .attr("d", line); + + // Add the X Axis + svg.append("g") + .attr("transform", `translate(0,${height})`) + .call(d3.axisBottom(x).tickFormat(d3.timeFormat("%b %y"))); + + // Add the Y Axis + svg.append("g") + .call(d3.axisLeft(y)); + + // Tooltip + const tooltip = d3.select("body").append("div") + .attr("class", "tooltip") + .style("opacity", 0) + .style("position", "absolute") + .style("background", "#f9f9f9") + .style("border", "1px solid #d3d3d3") + .style("padding", "8px") + .style("border-radius", "4px") + .style("pointer-events", "none"); + + // Add circles for tooltip functionality + svg.selectAll("dot") + .data(data) + .enter().append("circle") + .attr("r", 3) + .attr("cx", d => x(d.date)) + .attr("cy", d => y(d.count)) + .attr("fill", "steelblue") + .on("mouseover", function(event, d) { + tooltip.transition() + .duration(200) + .style("opacity", .9); + tooltip.html(`Date: ${d3.timeFormat("%b %d, %Y")(d.date)}
Count: ${d.count}`) + .style("left", (event.pageX + 5) + "px") + .style("top", (event.pageY - 28) + "px"); + }) + .on("mouseout", function(d) { + tooltip.transition() + .duration(500) + .style("opacity", 0); + }); +} + +d3.csv("location-count.csv").then(data =>{ + d3Chart(data, svg1) +}); + +d3.csv("powerbank-count.csv").then(data =>{ + d3Chart(data, svg2) +}); \ No newline at end of file diff --git a/count.py b/count.py new file mode 100644 index 00000000..55feaf1a --- /dev/null +++ b/count.py @@ -0,0 +1,85 @@ +import pygit2 +import csv +import concurrent.futures +import msgspec +from datetime import datetime + +# Define the structure of the JSON data using msgspec +class PowerbankData(msgspec.Struct): + totalAvailablePowerbanks: int + +# Function to calculate totalAvailablePowerbanks from JSON data +def calculate_total_powerbanks(file_content): + try: + data = msgspec.json.decode(file_content, type=list[PowerbankData]) + total_powerbanks = sum(item.totalAvailablePowerbanks for item in data) + return total_powerbanks + except msgspec.DecodeError: + return None + +# Function to process a single commit and return results +def process_commit(repo, commit): + try: + tree = commit.tree + if '_data/plugo.json' in tree: + blob = repo[tree['_data/plugo.json'].id] + file_content = blob.data.decode('utf-8') + total_powerbanks = calculate_total_powerbanks(file_content) + if total_powerbanks is not None: + commit_date = datetime.fromtimestamp(commit.commit_time).strftime('%Y-%m-%d') + return commit_date, total_powerbanks + except KeyError: + pass + return None + +# Generator function to iterate through every 5th commit +def iterate_commits(repo): + commit_count = sum(1 for _ in repo.walk(repo.head.target, pygit2.GIT_SORT_TOPOLOGICAL)) + processed_count = 0 + skip_count = 0 + + for commit in repo.walk(repo.head.target, pygit2.GIT_SORT_TOPOLOGICAL): + processed_count += 1 + if processed_count % 5 != 0: + continue + + skip_count += 1 + progress = (skip_count / (commit_count // 5)) * 100 + print(f'Processing commit {skip_count}/{commit_count // 5} ({progress:.2f}%)', end='\r') + + yield commit + +# Main function to process commits using concurrent.futures +def main(): + # Open the repository + repo_path = '.' # Assuming the script is run from the root of the repository + repo = pygit2.Repository(repo_path) + + # Prepare CSV output + output = [['date', 'totalAvailablePowerbanks']] + + # Process every 5th commit in parallel + with concurrent.futures.ThreadPoolExecutor() as executor: + futures = [] + for commit in iterate_commits(repo): + future = executor.submit(process_commit, repo, commit) + futures.append(future) + + for future in concurrent.futures.as_completed(futures): + result = future.result() + if result: + output.append(result) + + # Sort output by date, excluding the header row + output_sorted = sorted(output[1:], key=lambda x: datetime.strptime(x[0], '%Y-%m-%d')) + output_sorted.insert(0, output[0]) # Insert the header row back + + # Write the sorted output to CSV + with open('output.csv', 'w', newline='') as csvfile: + csvwriter = csv.writer(csvfile) + csvwriter.writerows(output_sorted) + + print("\nProcessing complete.") + +if __name__ == "__main__": + main() diff --git a/location-count.csv b/location-count.csv new file mode 100644 index 00000000..62e1907b --- /dev/null +++ b/location-count.csv @@ -0,0 +1,6 @@ +--- +permalink: /location-count.csv +# This generates a count for every date +--- +date,count{%assign count = 0 %}{% assign locations = site.data.plugo | sort:'createdAt' %}{% for l in locations %}{%assign count = count|plus:1 %} +{{l.createdAt|slice:0,10}},{{count}}{% endfor %} diff --git a/powerbank-count.csv b/powerbank-count.csv new file mode 100644 index 00000000..6679a3d2 --- /dev/null +++ b/powerbank-count.csv @@ -0,0 +1,838 @@ +date,count +2022-03-05,2048 +2022-03-06,1969 +2022-03-07,1789 +2022-03-07,1888 +2022-03-08,1933 +2022-03-09,1915 +2022-03-10,1834 +2022-03-11,1610 +2022-03-12,1620 +2022-03-13,1644 +2022-03-14,1649 +2022-03-14,1900 +2022-03-15,1783 +2022-03-16,1827 +2022-03-17,1771 +2022-03-18,1852 +2022-03-19,1842 +2022-03-20,1839 +2022-03-21,1850 +2022-03-22,1865 +2022-03-23,1982 +2022-03-24,1942 +2022-03-25,1969 +2022-03-26,1960 +2022-03-27,1802 +2022-03-28,1879 +2022-03-29,1996 +2022-03-30,1950 +2022-03-31,1878 +2022-04-01,1936 +2022-04-02,1882 +2022-04-03,1856 +2022-04-04,1846 +2022-04-05,1869 +2022-04-06,1940 +2022-04-07,1873 +2022-04-08,1868 +2022-04-09,1841 +2022-04-10,1789 +2022-04-11,1781 +2022-04-12,1842 +2022-04-13,1876 +2022-04-14,1861 +2022-04-15,1924 +2022-04-16,1875 +2022-04-17,1800 +2022-04-18,1879 +2022-04-19,1621 +2022-04-20,1612 +2022-04-21,1594 +2022-04-22,1552 +2022-04-23,1583 +2022-04-23,1995 +2022-04-24,1868 +2022-04-25,1810 +2022-04-26,1888 +2022-04-27,1930 +2022-04-28,1857 +2022-04-29,1966 +2022-04-30,1942 +2022-05-01,1865 +2022-05-02,1912 +2022-05-03,1865 +2022-05-04,1906 +2022-05-05,1867 +2022-05-06,1892 +2022-05-07,1878 +2022-05-08,1870 +2022-05-09,1886 +2022-05-10,1874 +2022-05-11,1851 +2022-05-12,1967 +2022-05-13,1959 +2022-05-14,1967 +2022-05-15,1902 +2022-05-16,1911 +2022-05-17,1941 +2022-05-18,1901 +2022-05-19,2004 +2022-05-20,2053 +2022-05-21,2138 +2022-05-22,2151 +2022-05-23,2206 +2022-05-24,2235 +2022-05-25,2248 +2022-05-26,2286 +2022-05-27,2279 +2022-05-28,2205 +2022-05-29,2148 +2022-05-30,2120 +2022-05-31,2283 +2022-06-01,2296 +2022-06-02,2469 +2022-06-03,2424 +2022-06-04,2455 +2022-06-05,2302 +2022-06-06,2372 +2022-06-07,2378 +2022-06-08,2428 +2022-06-09,2336 +2022-06-10,2324 +2022-06-11,2408 +2022-06-12,2281 +2022-06-13,2281 +2022-06-14,2319 +2022-06-15,2315 +2022-06-16,2306 +2022-06-17,2262 +2022-06-18,2357 +2022-06-19,2282 +2022-06-20,2199 +2022-06-21,2231 +2022-06-22,2381 +2022-06-23,2379 +2022-06-24,2362 +2022-06-25,2342 +2022-06-26,2290 +2022-06-27,2363 +2022-06-28,2218 +2022-06-29,2227 +2022-06-30,2231 +2022-07-01,2197 +2022-07-02,2188 +2022-07-03,2139 +2022-07-04,2131 +2022-07-05,2172 +2022-07-06,2212 +2022-07-07,2122 +2022-07-08,2053 +2022-07-09,2118 +2022-07-10,2155 +2022-07-11,2038 +2022-07-12,2053 +2022-07-13,2088 +2022-07-14,2068 +2022-07-15,2095 +2022-07-16,2205 +2022-07-17,2117 +2022-07-19,2164 +2022-07-20,2144 +2022-07-21,2185 +2022-07-22,2141 +2022-07-23,2140 +2022-07-24,2057 +2022-07-25,2024 +2022-07-26,2156 +2022-07-27,2166 +2022-07-28,2146 +2022-07-29,2155 +2022-07-30,2155 +2022-07-31,2173 +2022-08-01,2137 +2022-08-02,2137 +2022-08-03,2134 +2022-08-04,2136 +2022-08-06,2219 +2022-08-07,2085 +2022-08-08,2163 +2022-08-09,2141 +2022-08-10,2121 +2022-08-11,2154 +2022-08-12,2132 +2022-08-13,2166 +2022-08-14,2053 +2022-08-15,2024 +2022-08-16,2080 +2022-08-17,2024 +2022-08-18,2054 +2022-08-19,1997 +2022-08-20,2045 +2022-08-21,1888 +2022-08-22,1961 +2022-08-23,1977 +2022-08-24,2161 +2022-08-25,2163 +2022-08-26,2191 +2022-08-27,2250 +2022-08-28,2135 +2022-08-29,2206 +2022-08-30,2217 +2022-08-31,2155 +2022-09-01,2240 +2022-09-02,2219 +2022-09-03,2247 +2022-09-04,2188 +2022-09-05,2227 +2022-09-06,2230 +2022-09-07,2347 +2022-09-08,2296 +2022-09-09,2248 +2022-09-10,2366 +2022-09-11,2159 +2022-09-12,2200 +2022-09-13,2272 +2022-09-14,2282 +2022-09-15,2257 +2022-09-16,2238 +2022-09-17,2252 +2022-09-18,2152 +2022-09-19,2182 +2022-09-20,2106 +2022-09-21,2203 +2022-09-22,2290 +2022-09-23,2216 +2022-09-24,2270 +2022-09-25,2212 +2022-09-26,2229 +2022-09-27,2235 +2022-09-28,2242 +2022-09-29,2140 +2022-09-30,2236 +2022-10-01,2213 +2022-10-02,2029 +2022-10-03,2139 +2022-10-04,2164 +2022-10-05,2114 +2022-10-06,2259 +2022-10-07,2185 +2022-10-08,2132 +2022-10-09,2055 +2022-10-10,2114 +2022-10-11,2151 +2022-10-12,2196 +2022-10-13,2198 +2022-10-14,2208 +2022-10-15,2189 +2022-10-16,2108 +2022-10-17,2179 +2022-10-18,2156 +2022-10-19,2138 +2022-10-20,2242 +2022-10-21,2227 +2022-10-22,2247 +2022-10-23,2206 +2022-10-24,2112 +2022-10-25,2138 +2022-10-26,2124 +2022-10-27,2113 +2022-10-28,2219 +2022-10-29,2170 +2022-10-30,2125 +2022-10-31,2198 +2022-11-01,2170 +2022-11-02,2186 +2022-11-03,2242 +2022-11-04,2168 +2022-11-05,2104 +2022-11-06,2107 +2022-11-07,2166 +2022-11-08,2116 +2022-11-09,2097 +2022-11-10,2122 +2022-11-11,2175 +2022-11-12,2024 +2022-11-13,2063 +2022-11-14,2170 +2022-11-15,2088 +2022-11-16,2171 +2022-11-17,2205 +2022-11-18,2235 +2022-11-19,2248 +2022-11-20,2161 +2022-11-21,2182 +2022-11-22,2217 +2022-11-23,2184 +2022-11-24,2228 +2022-11-25,2268 +2022-11-26,2264 +2022-11-27,2209 +2022-11-28,2218 +2022-11-29,2174 +2022-11-30,2259 +2022-12-01,2265 +2022-12-02,2245 +2022-12-03,2230 +2022-12-04,2160 +2022-12-05,2182 +2022-12-06,2199 +2022-12-07,2157 +2022-12-08,2173 +2022-12-09,2158 +2022-12-10,2172 +2022-12-11,2060 +2022-12-12,2086 +2022-12-13,2163 +2022-12-14,2183 +2022-12-15,2175 +2022-12-16,2160 +2022-12-17,2150 +2022-12-18,2036 +2022-12-19,2078 +2022-12-20,2151 +2022-12-21,2140 +2022-12-22,2101 +2022-12-23,2103 +2022-12-24,2110 +2022-12-25,2015 +2022-12-26,2084 +2022-12-27,2091 +2022-12-28,2113 +2022-12-29,2130 +2022-12-30,2137 +2022-12-31,2147 +2023-01-01,2088 +2023-01-02,2141 +2023-01-03,2103 +2023-01-04,2173 +2023-01-05,2139 +2023-01-06,2131 +2023-01-07,2066 +2023-01-08,2021 +2023-01-09,2057 +2023-01-10,2045 +2023-01-11,2025 +2023-01-12,2078 +2023-01-13,2095 +2023-01-14,2092 +2023-01-15,2016 +2023-01-16,2016 +2023-01-17,2010 +2023-01-18,2066 +2023-01-19,1175 +2023-01-20,2043 +2023-01-21,1992 +2023-01-22,2003 +2023-01-23,1975 +2023-01-24,1757 +2023-01-25,1802 +2023-01-26,1802 +2023-01-27,1774 +2023-01-28,1758 +2023-01-29,1695 +2023-01-30,1681 +2023-01-31,1667 +2023-02-01,1743 +2023-02-02,1751 +2023-02-03,1796 +2023-02-04,1781 +2023-02-05,1725 +2023-02-06,1752 +2023-02-07,1690 +2023-02-08,1774 +2023-02-09,1746 +2023-02-10,1691 +2023-02-11,1772 +2023-02-12,1699 +2023-02-13,1794 +2023-02-14,1747 +2023-02-15,1871 +2023-02-16,1777 +2023-02-17,1895 +2023-02-19,1584 +2023-02-20,1627 +2023-02-21,1611 +2023-02-22,1690 +2023-02-23,1627 +2023-02-24,1585 +2023-02-25,1682 +2023-02-26,1623 +2023-02-27,1694 +2023-02-28,1731 +2023-03-01,1684 +2023-03-02,1641 +2023-03-03,1742 +2023-03-04,1722 +2023-03-05,1625 +2023-03-06,1621 +2023-03-07,1641 +2023-03-08,1634 +2023-03-09,1611 +2023-03-10,1668 +2023-03-11,1662 +2023-03-12,1642 +2023-03-13,1715 +2023-03-14,1677 +2023-03-15,1685 +2023-03-16,1675 +2023-03-17,1639 +2023-03-18,1625 +2023-03-19,1572 +2023-03-20,1659 +2023-03-21,1692 +2023-03-22,1677 +2023-03-23,1636 +2023-03-24,1651 +2023-03-25,1669 +2023-03-26,1634 +2023-03-27,1727 +2023-03-28,1694 +2023-03-29,1690 +2023-03-30,1712 +2023-03-31,1710 +2023-04-01,1729 +2023-04-02,1683 +2023-04-03,1759 +2023-04-04,1666 +2023-04-05,1738 +2023-04-06,1784 +2023-04-07,1708 +2023-04-08,1700 +2023-04-09,1679 +2023-04-10,1758 +2023-04-11,1761 +2023-04-12,1770 +2023-04-13,1734 +2023-04-14,1624 +2023-04-15,1658 +2023-04-16,1613 +2023-04-17,1689 +2023-04-18,1663 +2023-04-19,1723 +2023-04-20,1743 +2023-04-21,1667 +2023-04-22,1725 +2023-04-23,1601 +2023-04-24,1649 +2023-04-25,1638 +2023-04-26,1665 +2023-04-27,1662 +2023-04-28,1652 +2023-04-29,1728 +2023-04-30,1719 +2023-05-01,1603 +2023-05-02,1700 +2023-05-03,1676 +2023-05-04,1680 +2023-05-05,1745 +2023-05-06,1796 +2023-05-07,1796 +2023-05-08,1776 +2023-05-09,1789 +2023-05-10,1642 +2023-05-11,1881 +2023-05-12,1878 +2023-05-13,1820 +2023-05-14,1826 +2023-05-15,1822 +2023-05-16,1790 +2023-05-17,1823 +2023-05-18,1814 +2023-05-19,1768 +2023-05-20,1856 +2023-05-21,1784 +2023-05-22,1781 +2023-05-23,1725 +2023-05-24,1764 +2023-05-25,1756 +2023-05-26,1791 +2023-05-27,1725 +2023-05-28,1683 +2023-05-29,1750 +2023-05-30,1770 +2023-05-31,1713 +2023-06-01,1709 +2023-06-02,1723 +2023-06-03,1689 +2023-06-04,1677 +2023-06-05,1594 +2023-06-06,1581 +2023-06-07,1649 +2023-06-08,1740 +2023-06-09,1694 +2023-06-10,1748 +2023-06-11,1726 +2023-06-12,1712 +2023-06-13,1706 +2023-06-14,1710 +2023-06-15,1774 +2023-06-16,1714 +2023-06-17,1651 +2023-06-18,1580 +2023-06-19,1638 +2023-06-20,1600 +2023-06-21,1544 +2023-06-22,1631 +2023-06-23,1620 +2023-06-24,1669 +2023-06-25,1603 +2023-06-26,1620 +2023-06-27,1626 +2023-06-28,1626 +2023-06-29,1588 +2023-06-30,1631 +2023-07-01,1656 +2023-07-02,1601 +2023-07-03,1609 +2023-07-04,1616 +2023-07-05,1594 +2023-07-06,1615 +2023-07-07,1584 +2023-07-08,1572 +2023-07-09,1534 +2023-07-10,1548 +2023-07-11,1532 +2023-07-12,1577 +2023-07-13,1513 +2023-07-14,1546 +2023-07-15,1541 +2023-07-16,1432 +2023-07-17,1468 +2023-07-18,1542 +2023-07-19,1567 +2023-07-20,1562 +2023-07-21,1566 +2023-07-22,1509 +2023-07-23,1506 +2023-07-24,1575 +2023-07-25,1526 +2023-07-26,1590 +2023-07-27,764 +2023-07-28,1631 +2023-07-29,1576 +2023-07-30,1521 +2023-07-31,1521 +2023-08-01,1595 +2023-08-02,1488 +2023-08-03,1530 +2023-08-04,1551 +2023-08-05,1573 +2023-08-06,1514 +2023-08-07,1525 +2023-08-08,1561 +2023-08-09,1557 +2023-08-10,1508 +2023-08-11,1562 +2023-08-12,1520 +2023-08-13,1431 +2023-08-14,1422 +2023-08-15,1388 +2023-08-16,1401 +2023-08-17,1408 +2023-08-18,1396 +2023-08-19,1408 +2023-08-20,1397 +2023-08-21,1430 +2023-08-22,1419 +2023-08-23,1372 +2023-08-24,1392 +2023-08-25,1471 +2023-08-26,1468 +2023-08-27,1456 +2023-08-28,1401 +2023-08-29,1462 +2023-08-30,1434 +2023-08-31,1444 +2023-09-01,1496 +2023-09-02,1499 +2023-09-03,1490 +2023-09-04,1469 +2023-09-05,1473 +2023-09-06,1526 +2023-09-07,1542 +2023-09-08,1510 +2023-09-09,1504 +2023-09-10,1473 +2023-09-11,1562 +2023-09-12,843 +2023-09-13,1573 +2023-09-14,1606 +2023-09-15,1614 +2023-09-16,1627 +2023-09-17,1562 +2023-09-18,1530 +2023-09-19,1559 +2023-09-20,1573 +2023-09-21,1567 +2023-09-22,1565 +2023-09-23,1585 +2023-09-24,1548 +2023-09-25,1513 +2023-09-26,1526 +2023-09-27,1480 +2023-09-28,1516 +2023-09-29,1458 +2023-09-30,1500 +2023-10-01,1500 +2023-10-02,1396 +2023-10-03,1548 +2023-10-04,1466 +2023-10-05,1500 +2023-10-06,1533 +2023-10-07,1491 +2023-10-08,1504 +2023-10-09,1527 +2023-10-10,1546 +2023-10-11,1596 +2023-10-12,1565 +2023-10-13,1604 +2023-10-14,1595 +2023-10-15,1538 +2023-10-16,1546 +2023-10-17,1562 +2023-10-18,1505 +2023-10-19,1541 +2023-10-20,1495 +2023-10-21,1567 +2023-10-22,1519 +2023-10-23,1555 +2023-10-24,1500 +2023-10-25,1526 +2023-10-26,1567 +2023-10-27,1541 +2023-10-28,1507 +2023-10-29,1538 +2023-10-30,1497 +2023-10-31,1536 +2023-11-03,1363 +2023-11-04,1390 +2023-11-05,1261 +2023-11-06,1337 +2023-11-07,1349 +2023-11-08,1366 +2023-11-09,1385 +2023-11-10,1364 +2023-11-11,1403 +2023-11-12,1398 +2023-11-13,1355 +2023-11-14,1356 +2023-11-15,1366 +2023-11-16,1378 +2023-11-17,1407 +2023-11-18,1342 +2023-11-19,1366 +2023-11-20,1364 +2023-11-21,1401 +2023-11-22,1359 +2023-11-23,1455 +2023-11-24,1396 +2023-11-25,1430 +2023-11-26,1375 +2023-11-27,1344 +2023-11-28,1395 +2023-11-29,1371 +2023-11-30,1392 +2023-12-01,1406 +2023-12-02,1390 +2023-12-03,1371 +2023-12-04,1398 +2023-12-05,1341 +2023-12-06,905 +2023-12-07,913 +2023-12-08,898 +2023-12-09,872 +2023-12-10,932 +2023-12-11,865 +2023-12-12,903 +2023-12-13,895 +2023-12-14,866 +2023-12-15,832 +2023-12-16,870 +2023-12-17,865 +2023-12-18,880 +2023-12-19,902 +2023-12-20,857 +2023-12-21,918 +2023-12-22,890 +2023-12-23,854 +2023-12-24,887 +2023-12-25,822 +2023-12-26,827 +2023-12-27,826 +2023-12-28,823 +2023-12-29,801 +2023-12-30,836 +2023-12-31,757 +2024-01-01,780 +2024-01-02,831 +2024-01-03,880 +2024-01-04,851 +2024-01-05,841 +2024-01-06,859 +2024-01-07,826 +2024-01-08,853 +2024-01-09,837 +2024-01-10,957 +2024-01-11,960 +2024-01-12,903 +2024-01-13,917 +2024-01-14,836 +2024-01-15,860 +2024-01-16,905 +2024-01-17,912 +2024-01-18,882 +2024-01-19,840 +2024-01-20,844 +2024-01-21,818 +2024-01-22,976 +2024-01-23,965 +2024-01-24,898 +2024-01-25,888 +2024-01-26,849 +2024-01-27,815 +2024-01-28,833 +2024-01-29,899 +2024-01-30,879 +2024-01-31,904 +2024-02-01,894 +2024-02-02,916 +2024-02-03,902 +2024-02-04,878 +2024-02-05,878 +2024-02-06,899 +2024-02-07,917 +2024-02-08,939 +2024-02-09,910 +2024-02-10,953 +2024-02-11,910 +2024-02-12,896 +2024-02-13,848 +2024-02-14,801 +2024-02-15,862 +2024-02-16,814 +2024-02-17,860 +2024-02-18,792 +2024-02-19,838 +2024-02-20,877 +2024-02-21,880 +2024-02-22,862 +2024-02-23,836 +2024-02-24,859 +2024-02-25,818 +2024-02-26,821 +2024-02-27,786 +2024-02-28,827 +2024-02-29,825 +2024-03-01,851 +2024-03-02,894 +2024-03-03,832 +2024-03-04,848 +2024-03-05,849 +2024-03-06,849 +2024-03-07,813 +2024-03-08,800 +2024-03-09,762 +2024-03-10,778 +2024-03-11,830 +2024-03-12,849 +2024-03-13,840 +2024-03-14,835 +2024-03-15,798 +2024-03-16,762 +2024-03-17,739 +2024-03-18,760 +2024-03-19,769 +2024-03-20,817 +2024-03-21,788 +2024-03-22,768 +2024-03-23,764 +2024-03-24,739 +2024-03-25,732 +2024-03-26,784 +2024-03-27,808 +2024-03-28,819 +2024-03-29,746 +2024-03-30,779 +2024-03-31,735 +2024-04-01,751 +2024-04-02,773 +2024-04-03,800 +2024-04-04,801 +2024-04-05,763 +2024-04-06,749 +2024-04-07,730 +2024-04-08,766 +2024-04-09,747 +2024-04-10,747 +2024-04-11,714 +2024-04-12,724 +2024-04-13,718 +2024-04-14,701 +2024-04-15,734 +2024-04-16,758 +2024-04-17,745 +2024-04-18,788 +2024-04-19,749 +2024-04-20,696 +2024-04-21,671 +2024-04-22,752 +2024-04-23,728 +2024-04-24,723 +2024-04-25,678 +2024-04-26,691 +2024-04-27,678 +2024-04-28,700 +2024-04-29,703 +2024-04-30,730 +2024-05-01,726 +2024-05-02,752 +2024-05-03,705 +2024-05-04,658 +2024-05-05,655 +2024-05-06,677 +2024-05-07,646 +2024-05-08,662 +2024-05-09,653 +2024-05-10,684 +2024-05-11,616 +2024-05-12,608 +2024-05-13,618 +2024-05-14,637 +2024-05-15,632 +2024-05-16,618 +2024-05-17,599 +2024-05-18,623 +2024-05-19,586 +2024-05-20,565 +2024-05-21,616 +2024-05-22,598 +2024-05-23,609 +2024-05-24,628 +2024-05-25,592 +2024-05-26,583 +2024-05-27,648 +2024-05-28,613 +2024-05-29,567 +2024-05-30,588 +2024-05-31,585 +2024-06-01,588 +2024-06-02,590 +2024-06-03,552 +2024-06-04,570 +2024-06-05,551 +2024-06-06,589 +2024-06-07,570 +2024-06-08,607 +2024-06-09,540 +2024-06-10,552 +2024-06-11,526 +2024-06-12,553 +2024-06-13,560 +2024-06-14,586 +2024-06-15,573 +2024-06-16,573 +2024-06-17,560 +2024-06-18,603 +2024-06-19,571 +2024-06-20,624