Current section
Files
Jump to
Current section
Files
lib/mix/tasks/examples.ex
# credo:disable-for-this-file Credo.Check.Readability.Specs
defmodule GGity.Examples do
@moduledoc false
def diamonds do
file_name = Path.join([:code.priv_dir(:ggity), "diamonds.csv"])
headers =
File.stream!(file_name)
|> NimbleCSV.RFC4180.parse_stream(skip_headers: false)
|> Enum.take(1)
|> hd()
|> Enum.drop(1)
File.stream!(file_name)
|> NimbleCSV.RFC4180.parse_stream()
|> Stream.map(fn line -> Enum.drop(line, 1) end)
|> Stream.map(fn [carat, clarity, color, cut, depth, price, table, x, y, z] ->
[
elem(Float.parse(carat), 0),
clarity,
color,
cut,
elem(Float.parse(depth), 0),
elem(Float.parse(price), 0),
elem(Float.parse(table), 0),
elem(Float.parse(x), 0),
elem(Float.parse(y), 0),
elem(Float.parse(z), 0)
]
end)
|> Stream.map(fn line -> Enum.zip(headers, line) end)
|> Enum.map(fn list -> Enum.into(list, %{}) end)
end
def economics do
file_name = Path.join([:code.priv_dir(:ggity), "economics.csv"])
headers =
File.stream!(file_name)
|> NimbleCSV.RFC4180.parse_stream(skip_headers: false)
|> Enum.take(1)
|> hd()
File.stream!(file_name)
|> NimbleCSV.RFC4180.parse_stream()
|> Stream.map(fn [date, pce, pop, psavert, unempmed, unemploy] ->
[
Date.from_iso8601!(date),
elem(Float.parse(pce), 0),
elem(Integer.parse(pop), 0),
elem(Float.parse(psavert), 0),
elem(Float.parse(unempmed), 0),
elem(Integer.parse(unemploy), 0)
]
end)
|> Stream.map(fn line -> Enum.zip(headers, line) end)
|> Enum.map(fn list -> Enum.into(list, %{}) end)
end
def economics_long do
file_name = Path.join([:code.priv_dir(:ggity), "economics_long.csv"])
["" | headers] =
File.stream!(file_name)
|> NimbleCSV.RFC4180.parse_stream(skip_headers: false)
|> Enum.take(1)
|> hd()
File.stream!(file_name)
|> NimbleCSV.RFC4180.parse_stream()
|> Stream.map(fn [_row_num, date, variable, value, value01] ->
[
Date.from_iso8601!(date),
variable,
elem(Float.parse(value), 0),
elem(Float.parse(value01), 0)
]
end)
|> Stream.map(fn line -> Enum.zip(headers, line) end)
|> Enum.map(fn list -> Enum.into(list, %{}) end)
end
def mtcars do
headers = [:model, :mpg, :cyl, :disp, :hp, :drat, :wt, :qsec, :vs, :am, :gear, :carb]
[
["Mazda RX4", 21, 6, 160, 110, 3.9, 2.62, 16.46, 0, 1, 4, 4],
["Mazda RX4 Wag", 21, 6, 160, 110, 3.9, 2.875, 17.02, 0, 1, 4, 4],
["Datsun 710", 22.8, 4, 108, 93, 3.85, 2.32, 18.61, 1, 1, 4, 1],
["Hornet 4 Drive", 21.4, 6, 258, 110, 3.08, 3.215, 19.44, 1, 0, 3, 1],
["Hornet Sportabout", 18.7, 8, 360, 175, 3.15, 3.44, 17.02, 0, 0, 3, 2],
["Valiant", 18.1, 6, 225, 105, 2.76, 3.46, 20.22, 1, 0, 3, 1],
["Duster 360", 14.3, 8, 360, 245, 3.21, 3.57, 15.84, 0, 0, 3, 4],
["Merc 240D", 24.4, 4, 146.7, 62, 3.69, 3.19, 20, 1, 0, 4, 2],
["Merc 230", 22.8, 4, 140.8, 95, 3.92, 3.15, 22.9, 1, 0, 4, 2],
["Merc 280", 19.2, 6, 167.6, 123, 3.92, 3.44, 18.3, 1, 0, 4, 4],
["Merc 280C", 17.8, 6, 167.6, 123, 3.92, 3.44, 18.9, 1, 0, 4, 4],
["Merc 450SE", 16.4, 8, 275.8, 180, 3.07, 4.07, 17.4, 0, 0, 3, 3],
["Merc 450SL", 17.3, 8, 275.8, 180, 3.07, 3.73, 17.6, 0, 0, 3, 3],
["Merc 450SLC", 15.2, 8, 275.8, 180, 3.07, 3.78, 18, 0, 0, 3, 3],
["Cadillac Fleetwood", 10.4, 8, 472, 205, 2.93, 5.25, 17.98, 0, 0, 3, 4],
["Lincoln Continental", 10.4, 8, 460, 215, 3, 5.424, 17.82, 0, 0, 3, 4],
["Chrysler Imperial", 14.7, 8, 440, 230, 3.23, 5.345, 17.42, 0, 0, 3, 4],
["Fiat 128", 32.4, 4, 78.7, 66, 4.08, 2.2, 19.47, 1, 1, 4, 1],
["Honda Civic", 30.4, 4, 75.7, 52, 4.93, 1.615, 18.52, 1, 1, 4, 2],
["Toyota Corolla", 33.9, 4, 71.1, 65, 4.22, 1.835, 19.9, 1, 1, 4, 1],
["Toyota Corona", 21.5, 4, 120.1, 97, 3.7, 2.465, 20.01, 1, 0, 3, 1],
["Dodge Challenger", 15.5, 8, 318, 150, 2.76, 3.52, 16.87, 0, 0, 3, 2],
["AMC Javelin", 15.2, 8, 304, 150, 3.15, 3.435, 17.3, 0, 0, 3, 2],
["Camaro Z28", 13.3, 8, 350, 245, 3.73, 3.84, 15.41, 0, 0, 3, 4],
["Pontiac Firebird", 19.2, 8, 400, 175, 3.08, 3.845, 17.05, 0, 0, 3, 2],
["Fiat X1-9", 27.3, 4, 79, 66, 4.08, 1.935, 18.9, 1, 1, 4, 1],
["Porsche 914-2", 26, 4, 120.3, 91, 4.43, 2.14, 16.7, 0, 1, 5, 2],
["Lotus Europa", 30.4, 4, 95.1, 113, 3.77, 1.513, 16.9, 1, 1, 5, 2],
["Ford Pantera L", 15.8, 8, 351, 264, 4.22, 3.17, 14.5, 0, 1, 5, 4],
["Ferrari Dino", 19.7, 6, 145, 175, 3.62, 2.77, 15.5, 0, 1, 5, 6],
["Maserati Bora", 15, 8, 301, 335, 3.54, 3.57, 14.6, 0, 1, 5, 8],
["Volvo 142E", 21.4, 4, 121, 109, 4.11, 2.78, 18.6, 1, 1, 4, 2]
]
|> Enum.map(fn row -> Enum.zip([headers, row]) |> Enum.into(%{}) end)
end
def mpg do
file_name = Path.join([:code.priv_dir(:ggity), "mpg.csv"])
headers =
File.stream!(file_name)
|> NimbleCSV.RFC4180.parse_stream(skip_headers: false)
|> Enum.take(1)
|> hd()
File.stream!(file_name)
|> NimbleCSV.RFC4180.parse_stream()
|> Stream.map(fn [manufacturer, model, displ, year, cyl, trans, drv, cty, hwy, fl, class] ->
[
manufacturer,
model,
elem(Float.parse(displ), 0),
elem(Integer.parse(year), 0),
elem(Integer.parse(cyl), 0),
trans,
drv,
elem(Integer.parse(cty), 0),
elem(Integer.parse(hwy), 0),
fl,
class
]
end)
|> Stream.map(fn line -> Enum.zip(headers, line) end)
|> Enum.map(fn list -> Enum.into(list, %{}) end)
end
def tx_housing do
file_name = Path.join([:code.priv_dir(:ggity), "tx_housing.csv"])
headers =
File.stream!(file_name)
|> NimbleCSV.RFC4180.parse_stream(skip_headers: false)
|> Enum.take(1)
|> hd()
get_maybe_integer = fn value ->
if Integer.parse(value) == :error do
value
else
elem(Integer.parse(value), 0)
end
end
get_maybe_float = fn value ->
if Float.parse(value) == :error do
value
else
elem(Float.parse(value), 0)
end
end
File.stream!(file_name)
|> NimbleCSV.RFC4180.parse_stream()
|> Stream.map(fn [city, year, month, sales, volume, median, listings, inventory, date] ->
[
city,
elem(Integer.parse(year), 0),
elem(Integer.parse(month), 0),
get_maybe_integer.(sales),
get_maybe_integer.(volume),
get_maybe_integer.(median),
get_maybe_integer.(listings),
get_maybe_float.(inventory),
get_maybe_float.(date)
]
end)
|> Stream.map(fn line -> Enum.zip(headers, line) end)
|> Enum.map(fn list -> Enum.into(list, %{}) end)
end
end