Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

Lab5

lab5.livemd

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