comparison db/access_db.R @ 0:205974c9568c tip

Initial commit. Predictions not included for lack of space.
author franrodalg <f.rodriguezalgarra@qmul.ac.uk>
date Sat, 29 Jun 2019 18:45:50 +0100
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:205974c9568c
1 library(tidyverse)
2 library(RSQLite)
3
4
5 #
6 get_excerpts <- function(db = "../db/gtzan.db"){
7
8 con <- dbConnect(SQLite(), db)
9
10 res <- dbGetQuery(
11 con, "SELECT ex_id FROM excerpts")
12
13 dbDisconnect(con)
14
15 return(res)
16
17 }
18
19 #
20 get_excerpts_artists <- function(db = "../db/gtzan.db"){
21
22 con <- dbConnect(RSQLite::SQLite(), db)
23
24 res <- dbGetQuery(
25 con,
26 "SELECT ex_id, artist_id FROM
27 recordings_artists AS r INNER JOIN excerpts AS e
28 ON r.rec_id = e.rec_id;")
29
30 dbDisconnect(con)
31
32 return(res)
33
34 }
35
36 .filter_by_class <- function(df,
37 db = "../db/gtzan.db", classes = NULL){
38
39 class_ids <- get_class_names(db = db) %>%
40 filter(class %in% classes) %>%
41 select(class_id) %>%
42 unlist()
43 df %>% filter(class_id %in% class_ids)
44
45 }
46
47 #
48 get_excerpts_classes <- function(db = "../db/gtzan.db",
49 classes = NULL){
50
51 con <- dbConnect(SQLite(), db)
52
53 res <- dbGetQuery(
54 con,
55 "SELECT ex_id, class_id, ex_id_class FROM
56 excerpts_classes;")
57
58 if (!is.null(classes))
59 res <- .filter_by_class(res, db, classes)
60
61 dbDisconnect(con)
62
63 return(res)
64
65 }
66
67 #
68 get_class_names <- function(db = "../db/gtzan.db"){
69
70 con <- dbConnect(SQLite(), db)
71
72 res <- dbGetQuery(
73 con,
74 "SELECT class_id, class FROM
75 classes;")
76
77 dbDisconnect(con)
78
79 return(res)
80
81 }
82
83 #
84 get_artists <- function(excerpts, unique_artists = T,
85 db = "../db/gtzan.db"){
86
87 excerpts_artists <- get_excerpts_artists(db = db)
88
89 res <-
90 excerpts_artists %>%
91 inner_join(data.frame(ex_id = excerpts), by = c('ex_id')) %>%
92 select(artist_id) %>%
93 unlist() %>%
94 unname()
95
96 if(unique_artists)
97 return(unique(res))
98 else
99 return(res)
100
101 }
102
103 #
104 get_classes <- function(excerpts, unique_classes = T,
105 use_names = T,
106 db = "../db/gtzan.db"){
107
108 excerpts_classes <- get_excerpts_classes(db = db)
109 class_names <- get_class_names(db = db)
110
111 res <-
112 excerpts_classes %>%
113 inner_join(data.frame(ex_id = excerpts), by = c('ex_id')) %>%
114 select(class_id)
115
116 if(use_names)
117 res <- res %>%
118 inner_join(class_names, by = c('class_id')) %>%
119 select(class) %>%
120 mutate(class = factor(class,
121 levels = unique(class_names$class)))
122 else
123 res <- res %>%
124 mutate(class_id = factor(class_id,
125 levels = unique(class_names$class_id)))
126
127 res <- res %>% unlist() %>% unname()
128
129 if(unique_classes)
130 return(unique(res))
131 else
132 return(res)
133
134 }