Lab5
Section
[a,b] = [1,2]
b
# Reload module
:code.purge(:pollution_gen_server)
:code.delete(:pollution_gen_server)
:code.load_file(:pollution_gen_server)
:application.stop(:rebar_project)
defmodule DataParser do
def parseLine(line) do
[timestamp_s, type_s, val_s, id_s, name_s, coords_s] =
line |> String.split(";")
[date_s, time_s] = String.split(timestamp_s, "T")
date =
date_s
|> String.slice(0, 10)
|> String.split("-")
|> Enum.map(&String.to_integer/1)
|> List.to_tuple()
time =
time_s
|> String.slice(0,8)
|>String.split(":")
|> Enum.map(&String.to_integer/1)
|> List.to_tuple()
location =
coords_s
|> String.split(",")
|> Enum.map(&String.to_float/1)
|> List.to_tuple()
id = id_s |> String.to_integer()
val = val_s |> String.to_float()
%{
value: val,
type: type_s,
date_time: {date, time},
name: name_s,
location: location,
id: id
}
end
end
Code.append_path("C:\\Users\\maste\\OneDrive\\Pulpit\\ErlangElixir\\rebar_project\\_build\\default\\lib\\rebar_project\\ebin")
Application.start(:rebar_project)
full_data = File.read!("C:\\Users\\maste\\OneDrive\\Pulpit\\ErlangElixir\\AirlyData-ALL-50k.csv")
|> String.trim()
|> String.split("\n")
|> Enum.map(&DataParser.parseLine/1);
:pollution_gen_server.reset()
uniq_data = full_data |> Enum.uniq_by(& &1.id)
load_stations = fn ->
Enum.each(uniq_data, fn station ->
station_name = "#{station.id} #{station.name}"
:pollution_gen_server.addStationCast(station_name, station.location)
#IO.puts("Result for station #{station_name}: #{inspect(result)}")
end)
end
filtered_data = Enum.filter(full_data, fn station ->
station.type == "PM10"
end)
load_measurements = fn ->
Enum.each(full_data, fn station ->
:pollution_gen_server.addValueCast("#{station.id} #{station.name}", station.date_time, station.type, station.value)
end)
end
execution_time_stations = load_stations |> :timer.tc() |> elem(0)
execution_time_measurements = load_measurements |> :timer.tc() |> elem(0)
IO.puts("Czas ładowania stacji: #{execution_time_stations / 1_000} ms")
IO.puts("Czas ładowania danych: #{execution_time_measurements / 1_000} ms")
getStationMinTest = fn ->
:pollution_gen_server.getStationMin("9910 Polska, Kraków, Studencka", "PM10")
end
IO.puts("Wartość: #{inspect(getStationMinTest.())}")
execution_time = getStationMinTest |> :timer.tc |> elem(0)
IO.puts("Czas wykonania: #{execution_time / 1_000}")
getDailyMean = fn ->
:pollution_gen_server.getDailyMean("PM25",{2024, 2, 10})
end
IO.puts("Wartość: #{inspect(getDailyMean.())}")
execution_time = getStationMinTest |> :timer.tc |> elem(0)
IO.puts("Czas wykonania: #{execution_time / 1_000}")
defmodule PollutionDataLoader do
def load_data(file_path) do
File.read!(file_path)
|> String.trim()
|> String.split("\n")
|> Enum.map(&DataParser.parse_line/1)
end
def add_stations(data) do
uniq_data = Enum.uniq_by(data, & &1.id)
Enum.each(uniq_data, fn station ->
station_name = "#{station.id} #{station.name}"
result = :pollution_gen_server.addStation(station_name, station.location)
end)
end
def add_measurements(data) do
load_measurements = fn ->
Enum.each(data, fn station ->
:pollution_gen_server.addValue(
"#{station.id} #{station.name}",
station.date_time,
station.type,
station.valu
)
end)
end
end
end