Commit 344a51f

mo khan <mo@mokhan.ca>
2024-05-24 16:17:47
Add script to generate community README from census data
1 parent c93719d
Changed files (3)
bin/community
@@ -0,0 +1,62 @@
+#!/usr/bin/env ruby
+
+require 'bundler/inline'
+
+gemfile do
+  source 'https://rubygems.org'
+
+  gem 'activesupport'
+  gem 'csv'
+end
+
+require 'active_support'
+require 'active_support/core_ext/string'
+require 'csv'
+require 'erb'
+
+class Community
+  # https://data.calgary.ca/Demographics/Census-by-Community-2019/rkfr-buzb/about_data
+  # CLASS,CLASS_CODE,COMM_CODE,NAME,SECTOR,SRG,COMM_STRUCTURE,CNSS_YR,FOIP_IND,RES_CNT,DWELL_CNT,PRSCH_CHLD,ELECT_CNT,EMPLYD_CNT,OWNSHP_CNT,DOG_CNT,CAT_CNT,PUB_SCH,SEP_SCH,PUBSEP_SCH,OTHER_SCH,UNKNWN_SCH,SING_FAMLY,DUPLEX,MULTI_PLEX,APARTMENT,TOWN_HOUSE,MANUF_HOME,CONV_STRUC,COMUNL_HSE,RES_COMM,OTHER_RES,NURSING_HM,OTHER_INST,HOTEL_CNT,OTHER_MISC,APT_NO_RES,APT_OCCPD,APT_OWNED,APT_PERSON,APT_VACANT,APT_UC,APT_NA,CNV_NO_RES,CNV_OCCPD,CNV_OWNED,CNV_PERSON,CNV_VACANT,CNV_UC,CNV_NA,DUP_NO_RES,DUP_OCCPD,DUP_OWNED,DUP_PERSON,DUP_VACANT,DUP_UC,DUP_NA,MFH_NO_RES,MFH_OCCPD,MFH_OWNED,MFH_PERSON,MFH_VACANT,MFH_UC,MFH_NA,MUL_NO_RES,MUL_OCCPD,MUL_OWNED,MUL_PERSON,MUL_VACANT,MUL_UC,MUL_NA,OTH_NO_RES,OTH_OCCPD,OTH_OWNED,OTH_PERSON,OTH_VACANT,OTH_UC,OTH_NA,TWN_NO_RES,TWN_OCCPD,TWN_OWNED,TWN_PERSON,TWN_VACANT,TWN_UC,TWN_NA,SF_NO_RES,SF_OCCPD,SF_OWNED,SF_PERSON,SF_VACANT,SF_UC,SF_NA,OTH_STRTY,DWELSZ_1,DWELSZ_2,DWELSZ_3,DWELSZ_4_5,DWELSZ_6,MALE_CNT,FEMALE_CNT,MALE_0_4,MALE_5_14,MALE_15_19,MALE_20_24,MALE_25_34,MALE_35_44,MALE_45_54,MALE_55_64,MALE_65_74,MALE_75,FEM_0_4,FEM_5_14,FEM_15_19,FEM_20_24,FEM_25_34,FEM_35_44,FEM_45_54,FEM_55_64,FEM_65_74,FEM_75,MF_0_4,MF_5_14,MF_15_19,MF_20_24,MF_25_34,MF_35_44,MF_45_54,MF_55_64,MF_65_74,MF_75,OTHER_CNT,OTHER_0_4,OTHER_5_14,OTHER_15_19,OTHER_20_24,OTHER_25_34,OTHER_35_44,OTHER_45_54,OTHER_55_64,OTHER_65_74,OTHER_75,multipolygon
+  COLUMNS = {
+    classification: 0,
+    classification_code: 1,
+    community_code: 2,
+    community: 3,
+    sector: 4,
+    srg: 5,
+  }.freeze
+  def initialize(row)
+    @row = row
+  end
+
+  def name
+    @row[COLUMNS[:community]]
+  end
+
+  def create_directory_in(root_dir)
+    FileUtils.mkdir_p("#{root_dir}/#{name.parameterize}", verbose: true)
+  end
+
+  def create_readme
+    erb = ERB.new(IO.read("templates/community.md.erb"))
+    IO.write("yyc/#{name.parameterize}/README.md", erb.result(binding))
+  end
+end
+
+class Census
+  def initialize(path)
+    @path = path
+  end
+
+  def each
+    CSV.foreach("data/Census_by_Community_2019_20240524.csv") do |row|
+      yield Community.new(row)
+    end
+  end
+end
+
+Census.new("data/Census_by_Community_2019_20240524.csv").each do |community|
+  community.create_directory_in("yyc")
+  community.create_readme
+end
+
templates/community.md.erb
@@ -0,0 +1,1 @@
+# <%= name %>
README.md
@@ -5,3 +5,9 @@ The aspects that are important to me are:
 
 * Community (Belonging/Kindness)
 * Location (Near university, transit, and nature)
+
+## Community
+
+* Capitol Hill
+* University District
+* Rockland Park