elixir
Section
defmodule Parse do
def parse_lines(lines) do
for line <- lines do
parsed_line = parse_line(line)
end
end
def parse_line(line) do
[datetime, type, value, id, name, coords] = line |> String.split(";")
[date, time] = datetime |> String.split("T")
time = time |> String.slice(0, 8)
%{:id => id,
pollutionLevel: value |> String.to_float(),
coords: coords
|> String.split(",")
|> Enum.map(&String.to_float/1)
|> List.to_tuple(),
pollutionType: type,
stationName: name,
datetime: {
date |> String.split("-") |> Enum.map(&String.to_integer/1) |> List.to_tuple(),
time |> String.split(":") |> Enum.map(&String.to_integer/1) |> List.to_tuple()
}
}
end
end
all_stations = File.read!("C:\\Users\\xpfk0\\studia\\AirlyData-ALL-50k.csv")
|> String.split("\n")
|> Enum.map(&Parse.parse_line/1)
unique_stations = all_stations |> Enum.uniq_by(& &1.id)
# Code.append_path("C:\\Users\\xpfk0\\studia\\erlang\\erlll\\_build\\default\\lib\\erlll\\ebin")
Code.append_path("C:\\Users\\xpfk0\\studia\\erlang\\pollution_app\\_build\\default\\lib\\pollution_app\\ebin")
Application.start(:pollution_app)
Application.stop(:pollution_app)
res = (fn -> (for station <- unique_stations do
:pollution_gen_server.add_station("#{station.id}: #{station.stationName}", station.coords)
end) end |> :timer.tc |> elem(0))
IO.inspect(res / 1000000)
res = (fn -> (
Enum.with_index(all_stations)
|> Enum.each(fn {station, i} ->
:pollution_gen_server.add_value(station.coords, station.datetime, station.pollutionType, station.pollutionLevel)
# if rem(i, 1000) == 0 do IO.puts("Dodano #{i} stacji") end
end)
) end |> :timer.tc |> elem(0))
IO.inspect(res / 1000000)
IO.inspect(:pollution_gen_server.get_station_min("9910: Polska, Kraków, Studencka", "PM10"))
time = (fn -> :pollution_gen_server.get_station_min("9910: Polska, Kraków, Studencka", "PM10") end |> :timer.tc |> elem(0)) / 1000000
IO.inspect(time)
IO.inspect(:pollution_gen_server.get_daily_mean("PM25", {2024, 2, 10}))
time = (fn -> :pollution_gen_server.get_daily_mean("PM25", {2024, 2, 10}) end |> :timer.tc |> elem(0)) / 1000000
IO.inspect(time)