<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: RB9744</title>
    <description>The latest articles on DEV Community by RB9744 (@rb9744).</description>
    <link>https://dev.to/rb9744</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4228330%2Fe32fa08c-aa22-49ad-9e64-987db1d89b10.png</url>
      <title>DEV Community: RB9744</title>
      <link>https://dev.to/rb9744</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rb9744"/>
    <language>en</language>
    <item>
      <title>School holidays of Lower Saxony 2025-2030 as JSON, CSV and ICS (from the official Ferienordnung)</title>
      <dc:creator>RB9744</dc:creator>
      <pubDate>Thu, 05 Nov 2026 11:04:06 +0000</pubDate>
      <link>https://dev.to/rb9744/school-holidays-of-lower-saxony-2025-2030-as-json-csv-and-ics-from-the-official-ferienordnung-13fn</link>
      <guid>https://dev.to/rb9744/school-holidays-of-lower-saxony-2025-2030-as-json-csv-and-ics-from-the-official-ferienordnung-13fn</guid>
      <description>&lt;p&gt;Germany has 16 states and 16 different school holiday calendars. Each ministry publishes its own "Ferienordnung", usually as a PDF, and the dates for the free single days (the Friday after Ascension, Whit Tuesday, the odd day before 1 May) are easy to miss because they sit in a footnote.&lt;/p&gt;

&lt;p&gt;For Lower Saxony (Niedersachsen) we typed the whole thing out, checked every row against the ministry's Ferienordnung for 2024/25 to 2029/30, and published it as JSON, CSV and an ICS calendar: &lt;a href="https://github.com/RB9744/schulferien-niedersachsen" rel="noopener noreferrer"&gt;https://github.com/RB9744/schulferien-niedersachsen&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What is in it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;45 entries from February 2025 to the summer holidays of 2030&lt;/li&gt;
&lt;li&gt;columns: school_year, type (herbst, weihnachten, winter, ostern, brueckentag, pfingsten, sommer, extra), name_de, name_en, start, end, days&lt;/li&gt;
&lt;li&gt;start and end are the first and last free day the way the ministry counts them (Saturdays included)&lt;/li&gt;
&lt;li&gt;one .ics file you can subscribe to in Google Calendar, Outlook or Apple Calendar&lt;/li&gt;
&lt;li&gt;CC BY 4.0, source link to the ministry PDF in the file&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Things worth knowing if you build anything for parents or schools in Lower Saxony:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the summer break is always 42 days (six weeks of Mon-Sat), but it moves a lot: it starts 2 July in 2026, 8 July in 2027 and 20 July in 2028, because the 16 states rotate the summer slots&lt;/li&gt;
&lt;li&gt;every year has two single free days that are not public holidays: the Friday after Ascension Day and Whit Tuesday (7 and 18 May in 2027)&lt;/li&gt;
&lt;li&gt;some years get an extra day, for example 2 October 2028, the Monday before German Unity Day&lt;/li&gt;
&lt;li&gt;public holidays (Good Friday, Reformation Day and so on) are not in this file; they come from a different law&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Quick start:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://raw.githubusercontent.com/RB9744/schulferien-niedersachsen/main/data/schulferien-niedersachsen-2025-2030.json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sommer2027&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;holidays&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;sommer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;startsWith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2027&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="c1"&gt;// { start: "2027-07-08", end: "2027-08-18", days: 42 }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The same data is on Kaggle (&lt;a href="https://www.kaggle.com/datasets/rbkhanni/schulferien-niedersachsen-2025-2030" rel="noopener noreferrer"&gt;https://www.kaggle.com/datasets/rbkhanni/schulferien-niedersachsen-2025-2030&lt;/a&gt;) and Hugging Face (&lt;a href="https://huggingface.co/datasets/Rbkhanni/schulferien-niedersachsen" rel="noopener noreferrer"&gt;https://huggingface.co/datasets/Rbkhanni/schulferien-niedersachsen&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;It was built for ferien-nds.de (&lt;a href="https://ferien-nds.de/" rel="noopener noreferrer"&gt;https://ferien-nds.de/&lt;/a&gt;), a German site for parents in Lower Saxony with the dates per holiday, printable calendars and the bridge days for each year. If another state's Ferienordnung is something you need in this format, say so in the issues; we will add the ones people ask for first.&lt;/p&gt;

</description>
      <category>dataset</category>
      <category>opensource</category>
      <category>javascript</category>
      <category>germany</category>
    </item>
    <item>
      <title>spain-holidays: all 2027 public holidays of Spain, per region, as an npm package</title>
      <dc:creator>RB9744</dc:creator>
      <pubDate>Thu, 05 Nov 2026 11:00:05 +0000</pubDate>
      <link>https://dev.to/rb9744/spain-holidays-all-2027-public-holidays-of-spain-per-region-as-an-npm-package-3bk1</link>
      <guid>https://dev.to/rb9744/spain-holidays-all-2027-public-holidays-of-spain-per-region-as-an-npm-package-3bk1</guid>
      <description>&lt;p&gt;If your app shows dates to users in Spain, "is today a holiday" has 17 different answers, one per autonomous community, and the official lists come out region by region in 17 different bulletins between March and October of the year before. For 2027 we read all of them (BOE for the national dates, then BOA, BOC, BON, DOCM, DOGC and the rest) and packed the result into one npm package:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;spain-holidays
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sh&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;spain-holidays&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;sh&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;holidays&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ES-MD&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;                   &lt;span class="c1"&gt;// the 12 holidays of Madrid, sorted&lt;/span&gt;
&lt;span class="nx"&gt;sh&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isHoliday&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2027-03-19&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;galicia&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// San José in Galicia, or null&lt;/span&gt;
&lt;span class="nx"&gt;sh&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;nextHoliday&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ES-CT&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;                &lt;span class="c1"&gt;// next holiday in Catalonia from today&lt;/span&gt;
&lt;span class="nx"&gt;sh&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;source&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ES-NC&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;                     &lt;span class="c1"&gt;// the BON resolution Navarra's list comes from&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Region codes are ISO 3166-2 (ES-AN, ES-CT, ES-PV and so on); plain names work too, with or without accents. Zero dependencies, 5.6 kB packed, TypeScript types included, and every region object carries the label and URL of the bulletin it was taken from, so you can check any date yourself.&lt;/p&gt;

&lt;p&gt;Things the data makes visible for 2027:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;15 August is a Sunday. Six regions moved it to Monday 16 August (Andalucía, Aragón, Asturias, Canarias, Castilla y León, Madrid), Extremadura used the slot for 11 October, Castilla-La Mancha for 31 May, and the others simply lose the day&lt;/li&gt;
&lt;li&gt;1 May and 25 December fall on Saturdays and are not moved anywhere&lt;/li&gt;
&lt;li&gt;Easter Monday (29 March) is a holiday in six regions, San José (19 March) in five&lt;/li&gt;
&lt;li&gt;Navarra is the only region with 13 dates, because 3 December is a holiday for the whole community&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The same data is on GitHub as JSON, CSV and one ICS calendar per region (&lt;a href="https://github.com/RB9744/spain-public-holidays" rel="noopener noreferrer"&gt;https://github.com/RB9744/spain-public-holidays&lt;/a&gt;), and on Kaggle (&lt;a href="https://www.kaggle.com/datasets/rbkhanni/spain-public-holidays-2027-by-region" rel="noopener noreferrer"&gt;https://www.kaggle.com/datasets/rbkhanni/spain-public-holidays-2027-by-region&lt;/a&gt;) and Hugging Face (&lt;a href="https://huggingface.co/datasets/Rbkhanni/spain-public-holidays-2027" rel="noopener noreferrer"&gt;https://huggingface.co/datasets/Rbkhanni/spain-public-holidays-2027&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Local holidays (two per town) are not in the package; they are published municipality by municipality during the autumn and we keep them on the SueldoClaro region pages (&lt;a href="https://sueldoclaro.es/calendario-laboral-2027/" rel="noopener noreferrer"&gt;https://sueldoclaro.es/calendario-laboral-2027/&lt;/a&gt;), which is the site the data was built for.&lt;/p&gt;

&lt;p&gt;License CC BY 4.0. Ceuta and Melilla are missing for now; if you have the official 2027 text for either, open an issue.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>npm</category>
      <category>opensource</category>
      <category>dataset</category>
    </item>
    <item>
      <title>How many school days does each US state require? All 51 rules in one CSV</title>
      <dc:creator>RB9744</dc:creator>
      <pubDate>Thu, 05 Nov 2026 10:57:25 +0000</pubDate>
      <link>https://dev.to/rb9744/how-many-school-days-does-each-us-state-require-all-51-rules-in-one-csv-ad8</link>
      <guid>https://dev.to/rb9744/how-many-school-days-does-each-us-state-require-all-51-rules-in-one-csv-ad8</guid>
      <description>&lt;p&gt;Most people assume every US state requires 180 school days. The statutes say otherwise. We opened the current law or state board rule for all 50 states and DC in October 2026 and put the result in one CSV: &lt;a href="https://github.com/RB9744/us-school-days-by-state" rel="noopener noreferrer"&gt;https://github.com/RB9744/us-school-days-by-state&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What is in it (51 rows):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;state, min_days, min_hours_per_year (by grade band where the law splits them), rule (days, hours, or districts may pick), start_date_rule, changed_since_2023, law (the section to look up)&lt;/li&gt;
&lt;li&gt;CSV and JSON, CC BY 4.0, no dependencies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A few things that surprised us:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;only 28 states actually write "180 days" into the rule; 12 states set no statewide day count and count hours instead (Ohio, Oregon, Texas, Missouri, Wisconsin among them)&lt;/li&gt;
&lt;li&gt;Colorado has the lowest day minimum at 160, Kansas the highest at 186 for grades K-11&lt;/li&gt;
&lt;li&gt;Texas does not count days or hours but minutes: 75,600 per year&lt;/li&gt;
&lt;li&gt;12 states let districts choose between days and hours, 12 require both&lt;/li&gt;
&lt;li&gt;eleven states changed their rule since 2023, for example Oklahoma (181 days or 1,086 hours, 2025) and South Carolina (added a 1,080-hour rule in 2024)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Quick start:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;
&lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://raw.githubusercontent.com/RB9744/us-school-days-by-state/main/data/school-days-by-state-2026.csv&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rule&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;contains&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;hours&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;case&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)][[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;state&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;min_hours_per_year&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two caveats from the research: Oregon is rewriting its instructional time rules after an April 2026 order from the governor, and West Virginia's 900-hour rule only starts on 1 July 2027.&lt;/p&gt;

&lt;p&gt;The same files are on Kaggle (&lt;a href="https://www.kaggle.com/datasets/rbkhanni/us-school-days-per-year-by-state-2026" rel="noopener noreferrer"&gt;https://www.kaggle.com/datasets/rbkhanni/us-school-days-per-year-by-state-2026&lt;/a&gt;) and Hugging Face (&lt;a href="https://huggingface.co/datasets/Rbkhanni/us-school-days-by-state" rel="noopener noreferrer"&gt;https://huggingface.co/datasets/Rbkhanni/us-school-days-by-state&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;The live table with a link to every statute is on GradeKind (&lt;a href="https://gradekind.com/school-days-by-state.html" rel="noopener noreferrer"&gt;https://gradekind.com/school-days-by-state.html&lt;/a&gt;), next to a school-days-left counter for teachers. That page is why the dataset exists: teachers kept asking how many days their state really requires, and the answer was spread across 51 different websites.&lt;/p&gt;

&lt;p&gt;If a state changes its rule, open an issue with the statute link and we will update the row.&lt;/p&gt;

</description>
      <category>dataset</category>
      <category>opensource</category>
      <category>python</category>
      <category>education</category>
    </item>
    <item>
      <title>Every Express Entry draw since 2015 as one CSV (454 rounds, CC BY 4.0)</title>
      <dc:creator>RB9744</dc:creator>
      <pubDate>Thu, 05 Nov 2026 10:51:00 +0000</pubDate>
      <link>https://dev.to/rb9744/every-express-entry-draw-since-2015-as-one-csv-454-rounds-cc-by-40-2g8h</link>
      <guid>https://dev.to/rb9744/every-express-entry-draw-since-2015-as-one-csv-454-rounds-cc-by-40-2g8h</guid>
      <description>&lt;p&gt;IRCC publishes its invitation rounds on canada.ca, but only as a web table and a large JSON feed with 18 pool-distribution columns per round. If you want to plot the CRS cut-off over ten years, or check how many French-language draws there were, you end up writing the same cleanup script every time.&lt;/p&gt;

&lt;p&gt;So we cleaned it once and put it on GitHub: &lt;a href="https://github.com/RB9744/express-entry-draws" rel="noopener noreferrer"&gt;https://github.com/RB9744/express-entry-draws&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What is in it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;one row per round, from round 1 (31 January 2015, cut-off 886) to round 453 (28 October 2026)&lt;/li&gt;
&lt;li&gt;columns: draw_number, draw_date, draw_name, invitations, crs_cutoff, tie_break_rule, distribution_as_of&lt;/li&gt;
&lt;li&gt;the raw IRCC feed is included too (data/ircc_rounds_raw.json), so you can check any value against the source&lt;/li&gt;
&lt;li&gt;CSV and JSON, no dependencies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A few things the data shows straight away:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the lowest cut-off ever was 75, on 13 February 2021, when IRCC invited 27,332 Canadian Experience Class candidates in a single round&lt;/li&gt;
&lt;li&gt;the highest was 902, a Provincial Nominee Program round in May 2018 (PNP candidates carry 600 extra points, which is why PNP rounds sit far above the rest)&lt;/li&gt;
&lt;li&gt;2026 has had 65 rounds so far with 149,409 invitations, more than any earlier year&lt;/li&gt;
&lt;li&gt;38 rounds have been French-language category draws, with cut-offs as low as 336&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Quick start:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;
&lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://raw.githubusercontent.com/RB9744/express-entry-draws/main/data/express-entry-draws.csv&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;parse_dates&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;draw_date&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;draw_name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;contains&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;French&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)].&lt;/span&gt;&lt;span class="nf"&gt;plot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;draw_date&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;crs_cutoff&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The same files are on Kaggle (&lt;a href="https://www.kaggle.com/datasets/rbkhanni/canada-express-entry-draws-2015-2026" rel="noopener noreferrer"&gt;https://www.kaggle.com/datasets/rbkhanni/canada-express-entry-draws-2015-2026&lt;/a&gt;) and Hugging Face (&lt;a href="https://huggingface.co/datasets/Rbkhanni/canada-express-entry-draws" rel="noopener noreferrer"&gt;https://huggingface.co/datasets/Rbkhanni/canada-express-entry-draws&lt;/a&gt;) if you prefer those.&lt;/p&gt;

&lt;p&gt;We refresh it after each round. It powers the draw history page on CRS Calculators (&lt;a href="https://crscalculators.com/express-entry-draws/" rel="noopener noreferrer"&gt;https://crscalculators.com/express-entry-draws/&lt;/a&gt;), which is where the idea came from: we needed the history to show people which past rounds their score would have cleared.&lt;/p&gt;

&lt;p&gt;License is CC BY 4.0. If you find a wrong value, open an issue with the round number and we will fix it.&lt;/p&gt;

</description>
      <category>dataset</category>
      <category>opensource</category>
      <category>python</category>
      <category>canada</category>
    </item>
  </channel>
</rss>
