@@ -9,11 +9,48 @@ const OPENINGS_URL = "https://backend.econjobmarket.org/data/zz_public/json/Ads"
9
9
"""
10
10
const CATEGORIES_URL = " https://backend.econjobmarket.org/data/zz_public/json/Categories"
11
11
"""
12
- CATEGORIES::Vector{Symbol }
12
+ CATEGORIES::Vector{String }
13
13
Job opening advertisements categories.
14
+ ```jldoctest
15
+ julia> EconJobMarket.CATEGORIES
16
+ 34-element Array{String,1}:
17
+ "Development; Growth"
18
+ "Econometrics"
19
+ "Economic History"
20
+ "Environmental; Ag. Econ."
21
+ "Experimental Economics"
22
+ "Finance"
23
+ "Industrial Organization"
24
+ "International Finance/Macro"
25
+ "International Trade"
26
+ "Labor; Demographic Economics"
27
+ "Law and Economics"
28
+ "Macroeconomics; Monetary"
29
+ "Microeconomics"
30
+ "Public Economics"
31
+ "Theory"
32
+ "Behavioral Economics"
33
+ ⋮
34
+ "Urban; Rural; Regional Economics"
35
+ "Health; Education; Welfare"
36
+ "Business Economics"
37
+ "Computational Economics"
38
+ "Political Economy"
39
+ "Accounting"
40
+ "Decision Sciences"
41
+ "Insurance"
42
+ "Management, General"
43
+ "Management, Health Care"
44
+ "Management, Information Technology"
45
+ "Marketing"
46
+ "Operations Research"
47
+ "Organizational Behavior"
48
+ "Real Estate"
49
+ "Statistics"
50
+ ```
14
51
"""
15
52
const CATEGORIES = JSON3. read (read (joinpath (dirname (@__DIR__ ), " data" , " Categories.json" ))) |>
16
- (obj -> Symbol .( getproperty .(obj, :name ) ))
53
+ (obj -> getproperty .(obj, :name ))
17
54
"""
18
55
categories_indicator(obj::AbstractString)::BitVector
19
56
Given a string, it provides indicators for whether the job ad listed each opening category.
@@ -71,8 +108,9 @@ function parse_opening(node)
71
108
latitude = isnothing (node. latitude) ? missing : parse (Float64, node. latitude)
72
109
name = isnothing (node. name) ? missing : node. shortname
73
110
cats = isnothing (node. categories) ? missing : categories_indicator (node. categories)
74
- (; zip (Tuple (Symbol (clean_name (elem)) for elem ∈ propertynames (node)
75
- if clean_name (elem) ≠ " categories" ),
111
+ (; zip (Tuple (append! ([ Symbol (clean_name (elem)) for elem ∈ propertynames (node)
112
+ if clean_name (elem) ≠ :categories ],
113
+ clean_name .(CATEGORIES))),
76
114
(posid, oid, adtitle, position_type_id, position_type,
77
115
adtext, startdate, enddate, country_code, position_country,
78
116
department, shortname, address, longitude, latitude, name,
@@ -90,23 +128,36 @@ julia> data = joinpath(dirname(@__DIR__), "data", "ads.tsv") |>
90
128
91
129
julia> Tables.schema(data)
92
130
Tables.Schema:
93
- :posid Int64
94
- :oid Int64
95
- :adtitle String
96
- :position_type_id Int64
97
- :position_type String
98
- :adtext String
99
- :categories Date
100
- :startdate Date
101
- :enddate Union{Missing, String}
102
- :country_code Union{Missing, String}
103
- :position_country String
104
- :department String
105
- :shortname Union{Missing, String}
106
- :address Union{Missing, Float64}
107
- :longitude Union{Missing, Float64}
108
- :latitude String
109
- :name Bool
131
+ :posid Int64
132
+ :oid Int64
133
+ :adtitle String
134
+ :position_type_id String
135
+ :position_type String
136
+ :adtext String
137
+ :startdate Date
138
+ :enddate Date
139
+ :country_code String
140
+ :position_country String
141
+ :department String
142
+ :shortname String
143
+ :address Missing
144
+ :longitude Float64
145
+ :latitude Float64
146
+ ⋮
147
+ :business_economics Bool
148
+ :computational_economics Bool
149
+ :political_economy Bool
150
+ :accounting Bool
151
+ :decision_sciences Bool
152
+ :insurance Bool
153
+ :management_general Bool
154
+ :management_health_care Bool
155
+ :management_information_technology Bool
156
+ :marketing Bool
157
+ :operations_research Bool
158
+ :organizational_behavior Bool
159
+ :real_estate Bool
160
+ :statistics Bool
110
161
```
111
162
"""
112
163
fetch_ads (filepath:: AbstractString ; delim:: Union{Char,AbstractString} = ' \t ' ) =
0 commit comments