High-efficiency engine turns waste hot water into electricity

Energy news from Ireland
New engine technology that generates electricity from an often overlooked source – waste hot water – could reduce energy consumption for thousands of homes and businesses in Ireland, while also cutting harmful carbon emissions.
High-efficiency engine turns waste hot water into electricity © EXERGYN
Factories, power plants, data centres and cargo ships release waste heat that could be a useful source of energy. Finding an efficient and cost-effective way to capture and use this waste heat can lead to both significant fuel savings and reduced CO2 emissions. There are methods to harvest both high-grade and low-grade waste heat (below 100 ºC) but efficiency drops and cost increases as temperatures dip.

Read more…

Fingridin taajuusdata

Lähde: Fingridin nettisivut
Suomen sähkönkulutus on kaikkien verkkoon kytkettyjen kuormien summa, joten se vaihtelee jatkuvasti. Lisäksi kulutuksen taso muuttuu pidemmällä aikavälillä, tunneittain, vuorokausittain ja vuodenajoittain. Myös tuotannossa tapahtuu muutoksia lyhyellä ja pitkällä aikavälillä.
Kulutuksen ja tuotannon hetkellinen tasapaino ilmenee sähköverkon taajuudesta. Taajuus laskee alle 50 Hz nimellisarvon, kun kulutus on tuotantoa suurempi. Vastaavasti taajuus ylittää 50 Hz:n arvon, kun tuotanto on kulutusta suurempi. Taajuuden sallitaan vaihdella 49,9 ja 50,1 Hz välillä.

Tein r-ohjelmalla yhteenvetoja viime vuoden loka, marras ja joulukuun taajuusvaihteluista. Tulokset ja koodi alla.

#C:\Users\exl.marko.ekqvist\Dropbox\kuvat\home\Marko\Doctoralstudent\R\data\fingridtaajuus\2017\12
in17put1201 <- read.table("C:/.../data/fingridtaajuus/2017/12/2017-12-01.csv", header=TRUE, sep=",", na.strings="NA", dec=".", strip.white=TRUE) in17put1101 <- read.table("C:/.../data/fingridtaajuus/2017/11/2017-11-01.csv", header=TRUE, sep=",", na.strings="NA", dec=".", strip.white=TRUE) in17put1001 <- read.table("C:/.../data/fingridtaajuus/2017/10/2017-10-01.csv", header=TRUE, sep=",", na.strings="NA", dec=".", strip.white=TRUE) #yhdistetään total <- rbind( in17put1201, in17put1101, in17put1001 ) total$Month <- month(total$Time) head(total, 10) newdata <- total[c(2,3)] names(newdata) tmp <- do.call(data.frame, list(mean = apply(newdata, 2, mean), sd = apply(newdata, 2, sd), median = apply(newdata, 2, median), min = apply(newdata, 2, min), max = apply(newdata, 2, max), n = apply(newdata, 2, length))) tmp summary(newdata)

Value Month
Min. :49.83 Min. :10
1st Qu.:49.97 1st Qu.:10
Median :50.00 Median :11
Mean :50.00 Mean :11
3rd Qu.:50.03 3rd Qu.:12
Max. :50.17 Max. :12

Tämän mukaan tuotanto on kulutusta suurempi loppuvuonna, kun taas lokakuussa näyttäisi kulutuksen olevan suurempi kuin tuotanto. Tarkkaavainen lukija huomasi myös, että em. laskenta kohdistui vain tarkastelukuukausien ensimmäisiin päiviin.

Mitä tällä tarkastelulla haetaan?
Tarkoitus on linkittää päiväkohtainen (tai kuukausikohtainen) data ympäristössä tapahtuneisiin muutoksiin. Näitä muutoksia voivat olla uudet laitokset, tehtaiden ylösajot, huoltoseisokit, tuulivoimaloiden käyttöönotto tai niiden kytkeminen valtakunnan verkkoon. Tarkastelun avulla voidaan indikoida sellaisia muutoksia tässä kehysympäristössä, jotka saattavat olla riskejä sähköverkon toimivuuden kannalta. Tämän tarkastelun ulkopuolelle rajataan (tai pyritään rajaamaan) sellaiset laitteiden vikaantumiset, joihin ei eri toimilla pystytä vaikuttamaan tai mikäli mahdollista, niin pyritään tuomaan näistä tekijöistä johtuvat korjaavat toimenpiteet ja niihin liittyvät riskit esille.

Some R tips

Splitting a column to many columns / Text-to-Columns
Package tibble.
mtcars %>%
tibble::rownames_to_column('Car') %>%
slice(1:3)

mtcars %>% tibble::rownames_to_column('Car') %>%
tidyr::separate('Car',c('Brand','Model'), remove = F) %>%
slice(1:5)

Source: datascience: An online community for showcasing R & Python tutorials. It operates as a networking platform for data scientists to promote their talent and get hired. Our mission is to empower data scientists by bridging the gap between talent and opportunity.

R tips part1

GitHub repository (source: https://rstudio.github.io/shiny/tutorial/#deployment-local)
If your project is stored in a git repository on GitHub, then others can download and run your app directly. An example repository is at https://github.com/rstudio/shiny_example. The following command will download and run the application:

shiny::runGitHub('shiny_example', 'rstudio')
In this example, the GitHub account is ‘rstudio’ and the repository is ‘shiny_example’; you will need to replace them with your account and repository name.

Pros
Source code is easily visible by recipient (if desired)
Easy to run (for R users)
Very easy to update if you already use GitHub for your project
Git-savvy users can clone and fork your repository
Cons
Developer must know how to use git and GitHub
Code is hosted by a third-party server

Shiny

Pääsin kokeilemaan r-ohjelman shiny-ohjelmaa. Ensin asennettaan paketti:

install.packages(“rsconnect”)
install.packages(“RCurl”)

install.packages(“shiny”)

Installing package into ‘/home/marko/R/i686-pc-linux-gnu-library/3.4’
(as ‘lib’ is unspecified)
also installing the dependencies ‘httpuv’, ‘xtable’, ‘R6’, ‘sourcetools’

Sitten ajetaan ohjelma:
library(shiny)

runExample(“01_hello”)
Esimerkki löytyy täältä shiny sivuiltani.

Tässä koodia:

> #initialize
> library(datasets)
> library(ggplot2)
>
> #helper function (convert vector to named list)
> namel<-function (vec){
+ tmp<-as.list(vec)
+ names(tmp)<-as.character(unlist(vec)) + tmp + } > # shiny server side code for each call
> shinyServer(function(input, output, session){
+ #update variable and group based on dataset
+ output$variable <- renderUI({
+ obj<-switch(input$dataset,
+ “iris” = iris,
+ “mtcars” = mtcars)
+ var.opts<-namel(colnames(obj))
+ selectInput(“variable”,”Variable:”, var.opts) # uddate UI
+ })
+
+ output$group <- renderUI({
+ obj<-switch(input$dataset,
+ “iris” = iris,
+ “mtcars” = mtcars)
+ var.opts<-namel(colnames(obj))
+ selectInput(“group”,”Groups:”, var.opts) # uddate UI
+ })
+
+ output$caption<-renderText({
+ switch(input$plot.type,
+ “boxplot” = “Boxplot”,
+ “histogram” = “Histogram”,
+ “density” = “Density plot”,
+ “bar” = “Bar graph”)
+ })
+
+
+ output$plot <- renderUI({
+ plotOutput(“p”)
+ })
+
+ #plotting function using ggplot2
+ output$p <- renderPlot({
+
+ plot.obj<<-list() # not sure why input$X can not be used directly?
+ plot.obj$data<<-get(input$dataset)
+ plot.obj$variable<<-with(plot.obj$data,get(input$variable))
+ plot.obj$group<<-with(plot.obj$data,get(input$group))
+
+ #dynamic plotting options
+ plot.type<-switch(input$plot.type,
+ “boxplot” = geom_boxplot(),
+ “histogram” = geom_histogram(alpha=0.5,position=”identity”),
+ “density” = geom_density(alpha=.75),
+ “bar” = geom_bar(position=”dodge”)
+ )
+
+ require(ggplot2)
+ #plotting theme
+ .theme<- theme(
+ axis.line = element_line(colour = ‘gray’, size = .75),
+ panel.background = element_blank(),
+ plot.background = element_blank()
+ )
+ if(input$plot.type==”boxplot”) { #control for 1D or 2D graphs
+ p<-ggplot(plot.obj$data,
+ aes(
+ x = plot.obj$group,
+ y = plot.obj$variable,
+ fill = as.factor(plot.obj$group)
+ )
+ ) + plot.type
+
+ if(input$show.points==TRUE)
+ {
+ p<-p+ geom_point(color=’black’,alpha=0.5, position = ‘jitter’)
+ }
+
+ } else {
+
+ p<-ggplot(plot.obj$data,
+ aes(
+ x = plot.obj$variable,
+ fill = as.factor(plot.obj$group),
+ group = as.factor(plot.obj$group),
+ #color = as.factor(plot.obj$group)
+ )
+ ) + plot.type
+ }
+
+ p<-p+labs(
+ fill = input$group,
+ x = “”,
+ y = input$variable
+ ) +
+ .theme
+ print(p)
+ })
+ })

My -SciBlog- start today!

Welcome to MySci -page. Here I introduce some innovative and most interesting things about my trip into doctoral carreer. Now Im doctoral student in LUt and I wonder every day how amazing things you could do nowadays with your laptop. Data mining, AI and IoT will be in some role in my SciBlog. So… if you dare, just follow these pages!

Copyright MySci 2018
Tech Nerd theme designed by Siteturner