SQL in R transformierbar

... zu anderer statistischer Software, zu Datenbanken und Programmiersprachen.

Moderatoren: EDi, jogo

Antworten
hummeale
Beiträge: 3
Registriert: Do Apr 09, 2020 12:32 pm

SQL in R transformierbar

Beitrag von hummeale »

Hallo zusammen,
leider bin ich gezwungen einen Code den ich in SQL geschrieben hatte in R zu übernehmen, falls dies möglich ist. In R habe ich leider wenig Erfahrungen und weiß nicht sicher ob der Code ähnlich simple funktioniert
Den entsprechenden SQL Code findet ihr im Anhang. Anhand dieses Codes konnte ich über die Zeit hinweg(Reporting_dt) Deltas für die Var ECL_AMT bestimmen. Je nachdem konnte ich dies für 1 Periode machen oder in der 12 MOnate SIcht. Falls es keine Variable im letzten Monat gab wurde dafür eine Null gesetzt. Unterteilt war dies in Business_partner_id und reporting_dt.
Ich bin leider relativ ratlos und hoffe das es vielleicht hier jemanden gibt der sowohl mit R als auch SQL Erfahrung hat und mir hierbei weiterhelfen kann.
Vielen Dank im Voraus!
Codesql.PNG
Codesql.PNG (8.79 KiB) 3892 mal betrachtet
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: SQL in R transformierbar

Beitrag von jogo »

Hallo hummeale,

willkommen im Forum!
Es gibt verschiedene gangbare Wege:
1. Die Datenbankabfrage aus R heraus erledigen. Dafür gibt es für R entsprechende bindings - mehr oder weniger speziell für die jeweilige SQL-Datenbank.
2. Das Paket sqldf stellt SQL für die Arbeit mit Dataframes zur Verfügung.
3. Das Paket data.table stellt eine Syntax für den Umgang mit den Datenobjekten zur Verfügung, die strukturell ähnlich zu SQL ist.

Was für eine Datenbank liegt bei Dir vor?
Mit welchen Datenmengen soll jongliert werden?

Gruß, Jörg
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: SQL in R transformierbar

Beitrag von EDi »

Ich würde aus performanzgründen immer soviel wie möglich auf der Datenbank rechnen.
Geht auch wunderbar entweder mit SQL direkt oder auch in R Syntax die zu SQL umgeschrieben wird.

Hier ein Beispiel von jogos vorschlägen (+dplyr Beispiel) welche eine in-memory SQLite nutzt...

Code: Alles auswählen

library(dplyr)
library(DBI)

# spin up a SQLite in memory
con <- DBI::dbConnect(RSQLite::SQLite(), dbname = ":memory:")

# add some example data
copy_to(con, 
        iris, 
        "iris",
        temporary = FALSE, 
        indexes = list(
          "Species"
        )
)


# 1 Query SQL directly. Send Query directly to DB

dbGetQuery(con, 'SELECT AVG("Sepal.Length") as mean_sepal_length FROM iris GROUP BY Species')

# 2 create SQL in R/dplyr Syntax, then send to DB
tbl(con, "iris") %>%
  group_by(Species) %>%
  summarise(mean_sepal_length = mean(Sepal.Length, na.rm = TRUE))

# here is the created query
tbl(con, "iris") %>%
  group_by(Species) %>%
  summarise(mean_sepal_length = mean(Sepal.Length, na.rm = TRUE)) %>%
  show_query()


# 3 Fetch all data and compute in R (less performant for bigger data)

df <- dbGetQuery(con, "SELECT * FROM iris") 

df %>%
  group_by(Species) %>%
  summarise(mean_sepal_length = mean(Sepal.Length, na.rm = TRUE)) 

# or
tapply(df$Sepal.Length, df$Species, mean)
# or many others

# 4 Fetch all data and compute in R using SQL Syntax (less performant for bigger data)
require(sqldf)
mydata <- iris
sqldf('SELECT AVG("Sepal.Length") as mean_sepal_length FROM mydata GROUP BY Species')
Oder willst du nur die Logik der Abfrage nach R portieren? Dann solltest du uns aber ein reproduzierbares Beispiel lieferen!
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
hummeale
Beiträge: 3
Registriert: Do Apr 09, 2020 12:32 pm

Re: SQL in R transformierbar

Beitrag von hummeale »

Danke für deine Antwort. Ja ich würde auch gerne so viel wie möglich über SQL machen. Ist es denn möglich meine Abfrageergebnisse aus SQL einfach in R zu exportieren ? Das wäre mir am allerliebsten.
Ansonsten werd ich mal deinen Ansatz ausprobieren.
Besten Dank nochmal!
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: SQL in R transformierbar

Beitrag von jogo »

hummeale hat geschrieben: Mi Apr 15, 2020 1:43 pm Danke für deine Antwort. Ja ich würde auch gerne so viel wie möglich über SQL machen. Ist es denn möglich meine Abfrageergebnisse aus SQL einfach in R zu exportieren ?
Wenn Du so ein binding an eine Datenbank verwendest, liefern die SQL-Queries ein Dataframe-Objekt in R.

Kannst Du mir trotzdem meine Fragen beantworten?
Was für eine Datenbank liegt bei Dir vor?
Mit welchen Datenmengen soll jongliert werden?


Gruß, Jörg
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: SQL in R transformierbar

Beitrag von EDi »

Ist es denn möglich meine Abfrageergebnisse aus SQL einfach in R zu exportieren ?
Kann, siehe mein dbGetQuery Beispiel. R kann mit fast alles Datenbanken umgehen, sofern man die Treiber ordentlich installiert hat...
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
schubbiaschwilli
Beiträge: 253
Registriert: Di Jun 27, 2017 12:09 pm

Re: SQL in R transformierbar

Beitrag von schubbiaschwilli »

Gude!

Vielleicht off-topic, wenn ja würde ich einen neuen Thread eröffnen:
Kennst du eine Möglichkeit, über Ubuntu auf .acccdb (MS Access) zuzugreifen? Ich nutzte in der MS-Welt odbc, kenne aber keinen ODBC-Treiber für ubuntu (bin aber auch kein ITler).

Dank&Gruß
schubbiaschwilli
Antworten