R for the Rest of Us Podcast Episode 9: Meghan Harris
In this episode, I speak with Meghan Harris, a data integration specialist at the Primary Care Research Institute, University of Buffalo. There, she brings together data from multiple sources to create insights that benefit people affected by opioid use disorder. Meghan talks about how she uses R to pull data directly from Google Sheets, and highlights the advantages of this workflow as opposed to working on a manually downloaded Google Sheets file.
Fun fact: When Meghan is not creating data pipelines, she makes cool art using R and posts them on her Twitter timeline.
Connect with Meghan on LinkedIn (Meghan Harris, MPH) and Twitter (@meghansharris).
Learn More
If you want to receive emails when we publish new podcast episodes, sign up for the R for the Rest of Us newsletter. And if you're ready to learn R, check out our courses.
Audio Version
Video Version
The video version has a walkthrough of how to access data stored on Google Sheets using R.
Resources Discussed
Check out draft chapter 11 in my book where I discuss how to Access Data from Google Sheets Using R.
Transcript
[00:00:00]
[00:00:00] David: Well, um, it uploads the, the video and audio. And then, um, when, um, we're done at the end, like I can see mine says 55% uploaded yours, that 41% it'll probably go up. Um, but you just have to leave the tab open
[00:00:26] for a little bit at the end. So it'll finish,
[00:00:29] um, uploading at that point. It usually just takes a few minutes.
[00:00:33] Meghan: sounds
[00:00:33] David: Um, cool. Um, you know what I'm, I'm just gonna actually, I'm just, it's gonna be simpler if I just introduce you with your current
[00:00:46] job. Okay. No worries.
[00:00:49] Um, I think that'll be a lot, a lot simpler,
[00:00:52] so, Why not?
[00:00:53] um, alright. Let's do it. Uh, so I'm gonna switch into podcaster mode even though I'm not really a podcaster.
[00:01:00] Um, and then at the end, at the end.
[00:01:05] Oh, actually, if I were real podcaster, I would've already moved this up, so it's a little closer to me. Um, yeah, at the end then after we like wrap up on the actual questions, we'll just, I'll just wrap up with you as a human being at the
[00:01:21] okay. Sounds good.
[00:01:23] All right.
[00:01:23] Um, well, I'm delighted to be joined today by Meghan Harris.
[00:01:28] Meghan is a data integration specialist at the primary care research Institute at the university of Buffalo. There, she brings together data for multiple sources create insights that benefit people affected by opioid use disorder. And when Meghan's not creating slick data pipeline, she makes art using R which she posts on Twitter at Meghan S.
[00:01:50] Harris and that's M E G H a N S. Harris H a R R I S. Uh, Meghan, thank you for being with me today. I appreciate it.
[00:01:59] Meghan: Thank you for having me super excited to talk about this today.
[00:02:04] David: I just realized I didn't put my phone on, do not disturb. So let me do that.
[00:02:09] Meghan: Ooh.
[00:02:09] David: Uh,
[00:02:12] Meghan: I think she caught it.
[00:02:14] David: yeah. Um, and let me put my computer and didn't have to. Okay.
[00:02:21] Meghan: Okay.
[00:02:22] David: Um,
[00:02:23] so
[00:02:24] So Meghan, just to learn a bit about you, when did you start using R
[00:02:29] so.
[00:02:30] Meghan: The first time or the successful time um, either one? the, sure. So the very first time I started using R was probably in the year 2019. and that was because I had started a position as an evaluation associate. And, um, there was a project that I inherited where someone had used it, but someone was gone already. Um, and I was kind of just like, I don't know what this is. um, so what I found out, like what it was me being as hard headed as I am, I'm just like, I'm gonna make a shiny app without learning how to upload data into it or anything .So, um, clearly I failed and I felt really rejected and dejected from our studio.
[00:03:18] So I kind of just took a few months off. Um, and then. I had some downtime, I think at the beginning of, uh, 20, 20 in January. And that's when I kind of really was just like, okay, let's do this. Right. Let's actually like do piece by piece. So we can say 2019, or we can say 20, 20
[00:03:39] David: I mean, honestly, I think your, your experience is, is actually pretty common. I, I personally did a workshop in 2015 at American evaluation association conference on making data viz Gigi plot, but I had never used our before. And in retrospect it was a terrible way to be introduced to to R because you don't understand the fundamentals making database and ggplot, isn't gonna mean anything to you.
[00:04:06] Um, and it was only later when I went back and similarly said
[00:04:09] like, okay, I I'm
[00:04:10] intrigued by this. Let me sit
[00:04:12] down and go through it step by step that I actually started to figure it out. Um,
[00:04:17] Meghan: I kind of have the same thing. And David, I don't know if you remember this, but you kind of aided in me kind of going back into this really, because I, I wanna say I really took another look at it after I came back from the American value association, uh, conference in 2019. So by that time I had already been trying and like when I saw it flushed out, cuz I think your presentation was on our markdown if I'm remembering correctly.
[00:04:45] David: Yep. so once it was like, I saw someone else doing something cuz you weren't the only one that was doing something in ours, other people too. I
[00:04:54] Yeah, Like hyped and jazzed about it. I was just like, no, this is where I need to be at. So I kind of like used the inspiration from everyone's things at that conference and came back and kind of that's when I went full force and things just started to click for me.
[00:05:09] Meghan: I, I don't know. That's all I can like describe it is just things just started to click.
[00:05:14] David: yeah, yeah, definitely. I mean you do kind of hit that moment and then things make sense. And for me, what that feels like is. Even if I don't know how to do something I know what I need do to
[00:05:26] get to the point where I could understand it. Whereas before that it's like, I don't know how to do anything and I don't know how to get that point.
[00:05:34] So, Exactly.
[00:05:36] um, so I was gonna ask you why
[00:05:38] you switched, but clearly I know the answer, which is were kind of forced to, um, and then wanted to, uh, I'm curious what changed for you then when you actually did, uh, start, you know, really diving into
[00:05:48] R and using it. .Yeah. So what changed for me was the method. All right, because when I first started trying to learn first, it was that I had this code that I completely did not understand. You know, I did not understand what was going on. Um, the person whose project I inherited, they were using it to do regressions and stuff, you know?
[00:06:10] Meghan: So I was just like, oh my gosh, what is this? So it was this piece of needing to understand this, but then it was also kind of like, I felt like you said, I felt like I was forced to try to learn something, to get this project out, you know, to, um, the client. So what changed after I came back from that conference, I had a shift in mindset, honestly.
[00:06:31] And when people asked me this, they, they asked me like, how did you get like, started stuff like that? I ended up ha what I ended up use, like use, what I used to do was I would literally be like, okay, here's to R for data science book, I'm gonna read this covenant cover and have a, I, I used to have like a study schedule, you know?
[00:06:49] And it, felt so just frustrated because I, nothing ever felt like it stuck. So what changed for me was just realizing, huh? I kind of work in this position where like, my role's not really in data, but like I'm an evaluation associate. There's some aspect of data, you know? And there was some flexibility of like, oh, like I can do this evaluation report, but I have this, this, um, opportunity to clean some data or to do a visualization or something like that. So that's kind of where I was just like, okay. I have the data set. I need to clean it so that I can put it in Tableau. I learned how to do Tableau first before I learned R so when it was kind of like breaking it down and like finally understanding, like, okay, I don't need to read a book cover to cover because that just doesn't personally work for me. What I need is to understand what it is I'm trying to do. And then I'll go ahead and spend two weeks Googling how to do it. But at the end of the two weeks, I will have done it. So that's kind of like, it was just like a loop of like constantly new things. I need to Google for a few weeks to figure out, to do my job.
[00:07:55] And then it ended up being like, oh, I, I made a ggplot before I gotta do that again. Oh, okay. I I've cleaned this, I gotta do this again. Um, and that's where things just kind of started sticking for me, just having to do it, know,
[00:08:07] Yeah,
[00:08:08] David: definitely. I mean, I know I've talked to a lot of people who said, know, they tried to take a really similar approach. Like let me read our for data science, you know front cover to back cover. And it's hard cuz even if you read it and it makes sense while you're reading it, when you then go into our studio
[00:08:23] yourself and you're trying to work, it just it
[00:08:25] doesn't quite click until you're
[00:08:27] actually doing
[00:08:27] something Mm-hmm
[00:08:29] So I think that was,
[00:08:31] that was really smart. Um, so.
[00:08:36] That was when you were, um,
[00:08:38] doing, you were working as an evaluation associate at a in a different job,
[00:08:42] you then moved to a position, uh, at the university of Buffalo. Can you just give kind of an overview of what your job is there? What, what types of things you do and how you use
[00:08:53] Meghan: yes. So I have been able to completely create entire pipelines for
[00:09:00] like my local department of, um, uh, opioid. We have like for our local government, like health department, we have an opioid department. So, um, when they created the position, I don't think they really intended someone to kind of come in and like do programming.
[00:09:17] Um, it was just a basic data. I don't wanna say analysis cuz data, um, analysts are not basic, but it was kind of like the posting itself was really vague. You know, there wasn't really a lot of like, oh, you should have like this experience because, um, what I found out the hard way was that there really wasn't any structure.
[00:09:39] There there wasn't any structure. So basically what happened was that I had my interviews, showed them examples of like, you know, processing and analysis I've done in R um, and when I did the interviews is like, no one really understood, you know, I could tell no one really understood, like how powerful, like the R language was.
[00:10:01] All they knew was that I knew how to do something that they didn't know how to do. And it sounded like a good fit. So they hired me. So I always say like, I totally got lucky. I mean, not to discredit the work that I've done to get there being self taught, but like, I got lucky. So basically I came in and they're just like, okay, here's the data. Wow, that's it. So um, so I had to end up starting to like piece together this pipeline, and it took a long time. I mean, I was, uh, in this position, it'll be two years, um, in a few weeks actually, um, where I kind of just came in, started doing like these data landscapes of like, okay, where is all this data coming from?
[00:10:40] Cuz that's essentially what it is. So I am a person wrangles all of this data from different sources, whether it is our local police departments, whether it is surveys that the department of health created theirselves, whether it's census data, it doesn't matter. I'm pulling it in and making it in a central. So what ended up happening through the years was that they needed all these different deliverables. So we have, um, pipelines that go from our, into like Tableau. Um, we have ones that go into shiny dashboards. Um, a part of that one is like an example of the one that I uploaded for you to review, um, where we kind of had this modularized set of pipelines, just doing a whole bunch of stuff to give one output. Um, so I think in a nutshell, that's that kind of embodies everything. I mean, there's a lot packed into that though.
[00:11:32] David: Yeah.
[00:11:33] Yeah. Well, it does seem like data integration. Uh, specialist is a, is a good title for the types of things you're doing.
[00:11:40] Meghan: Definitely.
[00:11:42] David: Um, so
[00:11:44] the reason we're talking today, the reason I reach out to you, or well you shared with me that you had, um, done some work where you brought data in, um, Using Google forms. Is that right?
[00:11:56] Which then, Yep.
[00:11:58] yeah.
[00:12:00] And was it a survey done with Google forms that then went to Google sheets? Or what can you kind of explain, I guess the pro the, the overall, um, process, like what, what the project was, and obviously we're not gonna talk about the, this, that specific project, cause it has private data that we're not gonna, that we can't go into, but we'll talk about it in the context, um, of another example you shared me, but so maybe just start out, this is a very long-winded question.
[00:12:26] Very long-winded way me asking you. If you could just give an overview of what the workflow, um, of this example project
[00:12:33] you shared with me,
[00:12:34] looks like.
[00:12:35] Meghan: Sure. So, I mean, in the actual work that I've done with, you know, UB or with the county, basically what it was was that we had people that were going to Google forms, theirselves, and enter entering data, um, answering our survey questions. So whether you use Google forms or whether you have it just, uh, data just being entered manually into Google spreadsheets, the flow was kind of the same because when you use Google forms, I believe you have that option.
[00:13:06] I'm not sure if that does that automatically, but. In my experience and whenever I have Google forms, data, it's always getting exported into a Google spreadsheet. so basically what was, what I was tasked with was just like, oh, okay. We have like a lot of survey data. That's just kind of sitting there in Google forms, um, do something with it.
[00:13:26] So for the project that I unfortunately can't share, um, but I can give like a high level of what happened was that, okay. We had like hundreds of old Google form datas and we needed to put it into some kind of PDF report. Um, so that's where I kind of started getting this pipeline idea of like having these different sections of like, okay, this is the data coming in. Um, this is how I can check to see if there's differences or new data and just a kind of a step-wise process of what was needed for whatever. So if I need visuals, I have a script for that. If I need, um, processing or cleaning, I have one for that. So it just really was dependent on what was in front of me at the time.
[00:14:09] David: Yeah.
[00:14:09] And I think like the piece that I'm, you know, most interested in for for this conversation is. that way that you used are to connect directly to Google sheets. Um and so if other people have worked with Google sheets, I mean, if, of course you can, like a lot of people do analysis in Google sheets, so they'll have their data, their raw data maybe, they have a separate tab where they're doing their analysis or whatever, making pivot tables.
[00:14:36] I don't know. Um, cuz that's not my world. I don't know exactly what you would do, but I have a, a broad sense Um, other people might like download the data from Google sheets and say work with it Excel or
[00:14:49] something like that, or, or even work with it in R but you actually used, uh, a package Google sheets, four that connected directly to Google sheets.
[00:15:00] Can you talk about,
[00:15:01] um,
[00:15:02] how you did
[00:15:03] like what that package does, how, and kind of how it works
[00:15:06] and what the main advantages to using it are
[00:15:08] Meghan: Sure. So to my understanding, cuz I've honestly only used Google sheets for, for this purpose. I've been meaning to take the time to sit and just like, cuz there's so much more, you can do like interacting with, um, the Google console and platform through our, with it. But for the purpose of this project, um, what it's used for is to kind of like make this API connection between your, our console and the, um, Google server. So when you try to run it the first time, so like, you know, you have to install it, you know, your standard, you know, how you gotta use your packages and R so after you've done that, when you go to use it, the first. um, it's going to kind of go through this authentication process where you, whatever internet browser, you use, Chrome, Firefox, whatever it'll pop up. And it'll be like, Hey, like ours trying to break into your Google stuff. Like, are you cool with this? Um, so then you go ahead and you'll log in. And thankfully that'll be the only time that you have to do that. Um, but after that, and in time you run it, you just have to confirm that like, oh, Hey, we have this email just stayed from last time. Do you wanna use it? Yes. So in doing that, or the advantage of doing that is multiple reasons, depending on like, what's going on. Right. So if you are working for example, like on a team, um, cuz for me, I'm the only person kind of working in this department right now, but there's gonna be a point in where I'm gonna have to transfer things or I'm gonna have to pass them along. Um, so for people that don't know are, but like are interested in learning what I've been realizing is that. get really scared when they have to deal with the directories. And I know because I used to be one of those people you definitely totally can, um, you know, go to Google sheets and download a CSV or whatever you can do that. Um, but taking the time to kind of set up that authentication process of googlesheets4 kind of takes that step out. Um, because if you have a situation where multiple people can edit and add data to, which my situation at my job and my job, I have like a, um, there is one account that is shared by many people and it drives me in saying that is not the best practice, but that's what it is. um, because there's so much uncertainty that can happen. So many changes that can happen. It's really good to be able to pull it from the source. Um, because you can have a saved file somewhere locally on your computer. and you Think that it's updated and it's fine, but if you literally forgot to re-download it, then you're not updating it. So while you can totally do it without it, it's probably really good that you do. I feel like it maintains some type of integrity as well. Um, so you can keep tabs of what's going on in your data. Um, so I hope, I hope I
[00:18:08] David: Yeah. Yeah. Yeah, no, I mean, I think that's, that's helpful. Just thinking about the idea, especially in a situation where multiple people are potentially editing, you don't know the, you know, like say you're doing a survey like were for this uh, in this example, you don't know if more people have submitted survey
[00:18:28] since the last time you ran your
[00:18:29] code So what I, if I heard you correctly, it sounds like what you're saying is one of the advantages is you can always be sure that you're getting the most up to date data because your R code pulls it in directly from Google sheets, as opposed to a manual step of you going onto Google sheets, hitting the, you know, file download, and then working with it.
[00:18:51] Meghan: absolutely.
[00:18:53] David: And
[00:18:54] that's, I mean, you talked about an API connection for folks who aren't familiar. That's just basically an interface that allows one program to
[00:19:01] interact
[00:19:02] with another, in this case, our, our studio
[00:19:04] to interact,
[00:19:05] uh, or are, I guess, to interact with,
[00:19:08] um Google
[00:19:08] sheets to make that, that possible. Um,
[00:19:14] I'm
[00:19:14] just curious.
[00:19:15] So I asked about advantages to using, to this type of workflow. Do you see any disadvantages, any, any negatives that you've ever encountered?
[00:19:23] Meghan: Yeah. Um, I've definitely encountered, I mean, with this little example, one, not so much, but like my bigger one, um, the disadvantages I think, is not related to the use of the package itself. It's honestly like an organization department thing of like, why do we have eight people on one Google account making
[00:19:44] changes? Um, usually it's been pretty solid. I think there might have been, Ugh, like a rare, rare time where like something did not connect properly with the API. Um, and I, I don't remember if it was because, like I was sending the query too much. Like I was like running the code back to back to back because like I was trying to debug something. That's when I kind of like started adding like these little different, um, things in the code is kind of like, well, why is that there? And it's like to make, to make it pause so that we don't lock ourselves out um, or to check for things. I, I realized, like I had to debug a lot and like when you're constantly pulling, pulling, pulling, like, that's why I have, um, in the code, I know we're gonna get into it, but there is, um, well for this example, a really basic data validation of like, oh, the, the number of rows and the data changed since we last pulled it. Um, so something like that will be like, okay, if it's. You know, it'll it'll I think for this one, I have, I had it be that, oh, if it matches the same, like, it doesn't have to go through a processing script or something like that, but you can change it to make it so that it won't like keep calling from it.
[00:21:03] If like you have you need in the session already. Um, honestly I
[00:21:08] think that was the only issue I've ever had. Honestly, I, I personally just have not ran into any issues doing it this way yet.
[00:21:17] David: All
[00:21:17] right. Um, good to know.
[00:21:18] Well, let's go ahead and get started looking at your example code. Um, alright, I'm gonna put my screen up. Um, let me move this over here. Um, let just quite a couple things.
[00:21:34] Meghan: Mm.
[00:21:35] David: Um, so actually I am going to, um, uh, on my other screen, I'm just gonna actually bring it up
[00:21:50] and then I'll pull that over.
[00:21:52] Meghan: Okay.
[00:21:52] David: And actually I realized I might have to have you give me access to one thing,
[00:22:00] Meghan: yeah. Cause I don't think you'll be able to, um, uh, you might not be able to reach like the Google sheets, like the API with, because it's on my email address.
[00:22:15] David: Right?
[00:22:15] exactly.
[00:22:17] Um, Yeah, so, well, we can get to that and, and deal with that in a second. Um, okay.
[00:22:27] Meghan: Um, alright,
[00:22:32] David: so,
[00:22:35] Meghan: um,
[00:22:36] David: I've got the I've, uh, I've pulled in your code from this awesome survey example. Um, I'd love to have you just kind of walk me through the pieces and explain how it all works. And
[00:22:50] actually, maybe before we get into the code, if you can just talk through like, what, what is the ex the awesome survey example that you made?
[00:22:57] Like what's the data that obviously fake data that you put
[00:22:59] together? So, um, what I wanted to do for the example is kind of get as close to. I've been encountering in the wild as possible. Um, so a lot of the Google forms that I had to deal with and process are ones that had different, um, like logic paths on them, like different sections. Um, and I did that intentionally because it makes the data kind of output in a weird way because they're nesting columns and, and different stuff like that. So, um, for this one I kind of just had really basic demographic like, oh, how old are you? Do you like to play video games? I love to play video games. That's why, you know, I put it there. Um, then it kind of just asks you about your favorite video games. And then I think the next one kind of goes into, um, music.
[00:23:49] Meghan: Yeah. The next one goes into music and ju is just asking like, oh, like what's your favorite artist? Um, so I wanted to give a mix of questions that were. Uh, multiple choice where you could only select one option, then questions that were, you know, select all that applied the checkbox questions and then like an open ended, just to kind of give a real example of different things I'd have to encounter in the wild. Um, so I
[00:24:17] David: gotcha. the survey.
[00:24:19] So, um,
[00:24:22] actually, are you able to, um, or here I'll just request
[00:24:27] access, so it'll send you an email.
[00:24:29] Meghan: if I can do it, I will. Let's see. Let me click on, go ahead. Share. Okay. I shared it with you.
[00:24:44] David: Okay, perfect. Yep. Got it. Now.
[00:24:48] All
[00:24:48] right. So
[00:24:49] I'm looking at the data here. Um, and we can imagine that this comes, uh, from a survey done with Google forms, where someone gets asked these questions. So here, let me just, um, make these slightly wider. Okay. So do you like to play video games? How old are you? What kind of games?
[00:25:12] Favorite games, some music genres that you like and who is, uh, your favorite artist?
[00:25:19] Okay.
[00:25:20] Um, just so folks,
[00:25:21] like kind of know, um, what the, the data that we're working with
[00:25:25] is, um,
[00:25:26] so
[00:25:27] why don't you then kind of point me to like how I would, if you were working on this, um,
[00:25:35] where like explain the different parts of it and how
[00:25:38] the, how everything works.
[00:25:40] Meghan: sure. So, um, I see that you're just kind of on the directory. So this is just how I always organize my things. I don't have any, any tips on like the best practices for this. This is just how I do this. So I always have a folder for data, a folder for any kind of reports and for scripts.
[00:25:57] So if we're going to look at the actual code for this, we would be going into the scripts folder.
[00:26:02] David: Okay.
[00:26:03] Meghan: Now the main script that does everything is the docking script, which is that first script listed there.
[00:26:14] David: All right.
[00:26:14] So
[00:26:16] let's
[00:26:16] talk about how, uh,
[00:26:19] this
[00:26:19] works. So looks like first, you're just loading a few packages, Tidyverse, Google sheets, four, and
[00:26:26] then janitor. Um, so we're set, you're setting data updated to be equal to false. I
[00:26:34] assume that's
[00:26:34] gonna be
[00:26:36] related to,
[00:26:37] um,
[00:26:38] this
[00:26:39] down here when we're actually determining
[00:26:40] whether or not to.
[00:26:43] Pull in new data. Is that, is that right?
[00:26:45] Cool. Uh,
[00:26:49] and then here, well, why don't you actually, instead of me walking through it, why don't you kind of talk me through
[00:26:55] the steps? So, um, this is like the most manual part. So when you do set up your scripts to do this, um, know, there's probably some way we can automatically pull this, but I'm not gonna try to figure that out. So basically what you need to do. Um, if you have a spreadsheet that's already live and living on your Google drive somewhere, um, you need to pull the for it.
[00:27:18] Meghan: So, um, cuz we need to feed that into Google sheets. So that's, that's what that main spreadsheet variable is or value is mm-hmm
[00:27:28] David: So that was just, I mean, I can here, if I delete
[00:27:32] that paste in that, that, just to show folks that that was the same exact
[00:27:36] thing. All right. So I'll run that.
[00:27:38] So we have that defined for later.
[00:27:41] Meghan: Mm-hmm So the next line, this is kind of starting to set up that authentication where it's going to say like, Hey, like, can I connect to your Google account? Things like that. And I've wrapped it in, um, some extra things. Um, trying to remember. I feel like for the original script, I had this in, there was an issue where like I had this really long script of a lot of things going on and whenever I hit the source button, it would like skip over things.
[00:28:16] So if, if there was an error
[00:28:18] David: Hm. you know, an address, a, a Gmail address wasn't found or something else, it wasn't giving the user. Time to respond back to it. So, Gotcha. so I put in this read line prompt, um, functions or group of functions to kind of make the console stop and be like, Hey, are you sure this is the address you wanna do?
[00:28:38] Meghan: Whatever. Yeah.
[00:28:41] David: So when I run that, it gives me this thing, this, this prompt here, is it okay to cash, OAuth access credentials? I, I have, of course used Google sheets for, so it's not sending me to the browser to authenticate that way, but it's just gonna ask me that and I'll say, yes. Oh wait. Huh. Did do that. Um, okay. So then it just says authentication, complete closes page and return to R and I see, so you've added this where you have to hit, enter
[00:29:18] to confirm. Okay. So now at this point,
[00:29:22] Meghan: I'm I'm authenticated, which means I can actually
[00:29:25] David: use this data. Um, or I can use the, the Google sheets API or the Google sheets, four package using the API to get that data directly from Google
[00:29:36] sheets. Okay. Um, Um, so it looks like you're next using the read sheet
[00:29:41] function, I'm guessing that comes from
[00:29:44] Google sheets for, um, so let me even just run this to see, okay.
[00:29:54] So if I look at that, ah, I can see, so it's pulled in that exact data here and created a tickle based on
[00:30:02] that. Um,
[00:30:05] cool. So
[00:30:06] Meghan: it
[00:30:06] David: it actually
[00:30:07] looks in many ways, really.
[00:30:09] Meghan: I
[00:30:09] David: I mean, it's same
[00:30:10] idea as like read CSV, read underscore CSV, but the only thing that looks different here is you need to, um, set the sheet. And I assume that is the name here in case you have like multiple
[00:30:23] sheets or something like that. All right. So let me run that cuz then it looks like you just select a few of the variables. So I'll, I'll take a look there. Okay, perfect.
[00:30:34] So
[00:30:36] now that seemed very simple, but that's actually in many ways, like the most kind of profound part of, of this is pulling in data that way, as opposed to, and, and again, it's simple, but it's all it's.
[00:30:50] If you think about the, the opposite approach, which would be to go file, download CSV, then you copy that CSV into your R studio project. Then you run, you know, have code to that opened that CSV. And I don't even, I don't even know what it calls them, I guess it just calls it awesome survey example. I was thinking if
[00:31:11] it calls it something like different, depending on the date,
[00:31:14] Meghan: That it might be different.
[00:31:16] but
[00:31:16] David: But in any case, what you're able to
[00:31:18] do is just have code that is, you know,
[00:31:21] Meghan: automatically.
[00:31:22] David: pulls in whatever data is there. All right. So this is actually something I hadn't seen
[00:31:29] before. So talk me through how you do this kind
[00:31:30] of data validation
[00:31:32] to check if there's any differences between what was there, what you have already previously saved and, and what's on Google sheets
[00:31:39] now. .Yeah. So, um, for this example, this is a really, really simplified, um, version, like in the wild, I have to do more advanced stuff than this, like checking
[00:31:50] Sure. But for this purpose, um, the purpose of this for this, uh, script here is to see like, okay, are there any more rows added?
[00:32:01] Meghan: Right. So in order to do that, when you're setting up and doing all of this for the first time, you kind of have to do this work that you're not gonna reproduce again, um, in a sense of creating a master data file to get it started. so I mean, if you're gonna do this, there's an anticipation that you might already have some data live on Google and you might not.
[00:32:25] Um, but the processing script, that's kind of like under this, a few lines down has it where after, you know, we verify that, okay, we brought in new data, we've done whatever we needed to do. It will save a new master file if there's been any changes. Um, so pretty much you just have one data frame to start with that is gonna act as your master. And then whatever kind of way you choose to check if there's changes, whether there's actual variable value changes, or row column changes, whatever you instill that. And if a change is detected that line number 31 is going to switch, um, the data updated variable that we had at the beginning. And it's gonna switch it to true.
[00:33:10] If there's some change in the number of
[00:33:12] David: Gotcha. this. Yeah.
[00:33:14] So this is saying if NRO of new data, which in this case is four is not equal to NRO of master data, which is also four. So if it's not, this is a, a double negative, if it's not equal to that, which it's, it's not, uh, no, sorry. It is equal to that. So this will be false because they're, they actually are
[00:33:43] equal. And so data updated will actually continue to be
[00:33:48] false.
[00:33:49] Meghan: Right. And I mean, like for that, that logic component, that really just works. However your brain works. So if it's easier,
[00:33:56] David: Sure. it's easier for you to have an equality comparison there instead of a non equality, then totally change that to work
[00:34:02] Yeah.
[00:34:03] Meghan: Yeah. Yeah. Yeah. Um, okay, so then it looks like what you're doing is you're basically saying only if this is the same as saying if data updated equals equals true, then run that. And so if I actually try and run this, it's not gonna run because data updated does not equal. True. It equals false.
[00:34:29] Um, Um, let's
[00:34:30] David: actually just look briefly though, what's in that
[00:34:33] processing script.
[00:34:36] Um,
[00:34:36] so this, yeah.
[00:34:40] Uh, well, yeah. Why don't you talk me through what, what you, uh, what
[00:34:44] you did here. it looks like it's just a cleaning, just cleaning. Okay. So I pulled the data in and, um, listen, I, I I hope no one is gonna make fun of me for like my naming conventions, but this is just kind of how I do it. If I pull, if I'm pulling in
[00:35:00] Yep. a data frame and I'm modifying it, I add underscore mod to the name so that I can kind of keep track of like, okay, all I did was modify things here. I modified it again. And usually I'll have some kind of documentation outside of our that's explaining like, okay, in this data frame, this is the changes that happened or whatever, but we don't have to get into that. But, um, basically what this is doing is pulling the data in as is, and, um, what I was kind of referencing before about having those different sections in Google forms, if you pull it down, like raw, it kind of does this weird, Thing where like, so for your checkbox answers, like your questions where you can select all that apply it, um,
[00:35:45] Mm-hmm them into like one huge string of your string values kind of separated by commas.
[00:35:52] Meghan: Yeah. So in order to kind of work to get to that, there's this whole process of like, oh, I need to clean my names because to make the survey readable to the human eye, they can't be having like underscores and everything in them. Cuz what ends up happening is that the variable names are just essentially the questions. So you're not
[00:36:16] David: Mm-hmm your questions in like an actual readable code format. So there's this process of cleaning that and then renaming it to make that, um, To make that process easier for you on the back end. Like, cuz I don't wanna sit there and be like, oh, do underscore you underscore like, like you'll just go ahead and just rename them. Um, then
[00:36:37] right. some things there just because I'm really like anal about like where my things are have to do that.
[00:36:43] Meghan: Uh
[00:36:43] David: get it. I get it.
[00:36:45] Meghan: um, but like a lot of this is what I'm doing is, um, kind of prepping it for whatever the next stages are. So I see like that last one, online 14, I'm adding a factor because I'm like, oh, like I wanna keep this in a certain order. These are
[00:37:02] David: Right. categories, but they're not, you know, it's this little quirky things, whatever I ran into. That's where I, yeah, that's what's in here. Mm-hmm
[00:37:13] Uh, and so then, well, so then we have new data mod, which isn't actually gonna necessarily look different. Although for example, age is a factor, which it wasn't when we just have new data. So if I just, uh, hover there, you can see that that's a character as opposed to a factor. Um, so then it looks like you're recoding missing values for all factors.
[00:37:44] Um, which doesn't actually, oh, no, there, um, or no, sorry. You're recoding
[00:37:51] where it's not everything. That's not a factor is. Right?
[00:37:57] Um, okay, so then here, you end up with this new data mod two, and this is an example where you have, for example, if you look at like music genres, people could select multiple things and they show up in that kind of format where they're, they're commerce separated with, but within, within a
[00:38:18] single cell, within a single cell
[00:38:22] in that way. and, you know, I you know, I don't want to get like
[00:38:25] too deep into
[00:38:25] tidy data cuz it's not really the, the main topic of what we're discussing, but the main thing you're doing
[00:38:30] then is you're getting this into
[00:38:33] a tidy format. So talk about
[00:38:35] these three lines, how they work and, and what they're
[00:38:38] doing. So I'm just pulling from that last modified data frame, just piping it. And, um, I'm taking out anything that's not music related or anything that I felt that need to be in this, um, data frame. So I just took out anything that contained the word game. So any column, any variable that contained the word or the string game, then that last line, I believe that's from the tidier package. what that does is it will split those, um, comma separated values into their own, um, variable. believe
[00:39:20] all right, so let's go ahead and run that and then I'm gonna open up new data music. So
[00:39:25] now, yeah, I can see, for example, music genres for participant one looks like they listed like nine different things and they're each on their own line, but that, um,
[00:39:38] Meghan: favorite favorite artist, which was only one thing you
[00:39:42] David: can see, it just sh shows up.
[00:39:44] Nine times for them because, uh, they, again, it was only
[00:39:51] one thing. Um,
[00:39:53] so,
[00:39:55] um, actually I'm just looking at one thing, cuz I think let's see top,
[00:40:00] Meghan: I'm I'm guessing that's top
[00:40:01] David: 40. look at you. You caught something. Yes. Yeah. So
[00:40:05] So I'm guessing you
[00:40:07] Meghan: probably
[00:40:07] David: probably wanna add that.
[00:40:11] Meghan: yeah. I think it was separating by, I don't remember what the default is for separate
[00:40:18] David: rows was, I thought the, um,
[00:40:20] space, maybe. comma, one of them.
[00:40:24] Oh, it's some reg X that I
[00:40:27] am terrible at. Me too.
[00:40:29] Uh
[00:40:32] Meghan: Oh my
[00:40:32] David: uh, it looks like it's. I think that's looking for non character or something.
[00:40:41] Meghan: You're better than me.
[00:40:43] David: In any case, like what I, what I do, we, the only reason I'm thinking about this so much is I actually, uh, one of my consultants actually just wrote a blog post about working with this exact tip of data.
[00:40:56] So, um,
[00:40:58] adding like a separator,
[00:40:59] like that is what we'll usually,
[00:41:02] Meghan: um,
[00:41:03] cool.
[00:41:03] David: cool. So I, I actually, I think it's a good point. Like, again, this is a bit farfield from the specific focus today, but like this idea that you take your data and put it into multiple data frames, um, or Tibbles is really helpful to cuz people, I think too often think, okay, this is my data.
[00:41:25] I need to keep it in this exact, you know, one data frame, that's this many rows, this many columns, like no, what you're showing is you can actually, you know, do put it into multiple data frames and I can see you even have one here. With new data games that you create, that's just about like games that they play
[00:41:47] Meghan: and then
[00:41:47] David: and then you, it looks like you, save each of those,
[00:41:50] Meghan: Uh
[00:41:51] David: uh, separately.
[00:41:53] Meghan: Yes I do. And I do this because, um, honestly, so I, I got into the habit of doing this and I'm not gonna sit here and say whether it's best practice or not, but I had ran into so many issues thinking that I had to keep my data together and where that will get you is when you are trying to work with ggplot for different things, you're trying to visualize, it might be, you need things grouped differently.
[00:42:21] Or like, if you're trying to do something fancy and you need to pull something out, it's kind of just like, man, if I just had a separate data frame for this, I would probably have less
[00:42:31] David: Yeah, definitely. Definitely. Yep. . Um, alright. So thinking back to this docking script. So E even though we just showed all that, that actually wouldn't have run
[00:42:44] because, um, data updated was actually not equal to true. So that, that all that here only happens. If there essentially is new data in this Google sheet that differs from the data that you already have saved.
[00:43:02] Um, and so you make
[00:43:05] three different objects. You also
[00:43:08] make a unique artist,
[00:43:09] Meghan: mm-hmm
[00:43:10] David: um, which has all a list of unique
[00:43:13] artists. And then you save those, um, as
[00:43:17] RDS
[00:43:18] files. And then
[00:43:19] And then talk about this, how you're like saving the new copy is the master file. Replacing the old master file. What what's up with
[00:43:26] that? I have started doing that because it'll be that I'll have. What a good few weeks where nothing is broken and then something gets broken. And then I need to revert back to something to try to re kind of like trace my steps. So if you add this, because what's gonna end up happening, is that, um, that next line under there, I think line number 42, what it's doing is that if it gets to that point in the script, and there were no errors thrown. my logic here that I've programmed in, is that okay if you got to this point, we can save this as the new master you've already saved
[00:44:03] Hmm. You're good. This is now your new master. if something ends up happening where like we should not have saved it as a new master, like there's an error.
[00:44:12] Meghan: Like, I don't know, or I don't know what would happen in this specific, specific example, but I've had instances
[00:44:19] David: Yeah. especially like if I'm geo processing something like, and I'm using all of that time to like calculate things. So, you know, I, I have screwed myself. So, um, what this is doing is kind of like giving you a safeguard of like, oh, you messed that up.
[00:44:34] Meghan: Hey, we have this like old master file here. You can revert back to, so this would require you manually going in and like, I don't know, saving, no, no. Opening up the old master data file. And then resaving that as master data, something like that. However, the individual is gonna end up debugging for that.
[00:44:53] Mm-hmm .So,
[00:44:56] David: um, you rename it and then you save the new data that you brought in as that master data. So again, you have the most recent version that you've brought in as master data and old master data is the previous version in case,
[00:45:13] Meghan: whatever. whatever whatever happens. Uh, and then you have a couple things here where you're moving everything that was created, uh, as part of
[00:45:24] David: this script, and then just sending a message.
[00:45:30] Cool. Um, So pretending that new data
[00:45:36] was actually brought in
[00:45:38] then what you actually do. Um, you have a couple other steps in this
[00:45:43] stocking script. You're actually first, and this is interesting. This is a different way than I typically do. And not that it's better or worse, but you have a viz script, um,
[00:45:54] Meghan: Where
[00:45:55] David: Where
[00:45:55] you're actually
[00:45:56] making all of your visualization.
[00:45:59] So
[00:46:00] Meghan: talk talk about how that
[00:46:02] David: works. So, um, I started breaking down my code like this, because what would end up happening was I'd be on top of the world and be like, oh my God, I got like this 4,000 line script and it's doing amazing
[00:46:14] Yeah. But then when something goes wrong, it is a pain and be behind to find what's wrong. So if I have it modularized like this, I at least have a better picture of like, okay, where did my thing fail? What's the problem. So this is just a convenience factor for me because my brain, like, I, if I see too many lines, like my brain just like just dies. I don't know. I have to keep
[00:46:40] Yeah. separate. Yeah. Um,
[00:46:45] Um, so you're actually then reading in the data, the data that you actually had just saved in the processing script. Again, if it's different than what's was
[00:46:55] already saved, and then you are making, uh,
[00:47:00] Meghan: visual a visual
[00:47:02] David: um, wait, is this looks like two of the same thing am.
[00:47:10] Meghan: is it making a visual? Oh yeah, because I because I was, I was trying to like, I was gonna make more, but then I kind of just like, was like, I don't have
[00:47:21] David: Oh, I just
[00:47:23] no, no, that's fine.
[00:47:24] Meghan: So Gotcha. So here. three left
[00:47:29] David: All right, so you make a, you make a, a visualization and I'll just comment that out and like, show, okay, here's the visualization. And then you save it as
[00:47:38] games vis
[00:47:40] Meghan: and.
[00:47:40] David: and then what you do is you actually save games vis that object as an RDS file in reports, plots game vis dot
[00:47:51] RDS. and what
[00:47:53] And what that allows you to do then is it in this last step is where you're actually doing the reporting. Um,
[00:48:01] so, file. Yeah, that RMD
[00:48:06] so you have an R markdown document.
[00:48:09] Um, that brings this
[00:48:11] in. Well, yeah, actually, maybe talk through this first
[00:48:15] code chunk after the setup code chunk
[00:48:18] Um, what's this doing here and how does that work?
[00:48:20] Meghan: yeah. So what I did, because I, I really I made this example really quick and I was just like, okay, like what, how's the like least painless way I can do this really quickly. So what I did was, um, bring in a copy of the master data file. So basically just a copy of the data that came directly from Google forms.
[00:48:43] Um, in this
[00:48:44] David: Mm-hmm was before any kind of modification or anything happened to it. I believe. I can't remember um, but I, because this could be redundant, I'm not sure cuz I really don't remember. But basically the main concept here is that I am bringing in the data. As, it came in us, um, pretty much as it came in before I tried to start like pulling everything apart for the visuals, because what I end up seeing a lot of the time is that it's really useful for when I am doing like, not so much visuals, but if I have like texts or like I'm dropping in, um, in line R code and I wanna pull it directly from the data, it helps me to just easily reference that if I have it in the, um, the markdown session here.
[00:49:33] Cool. So if I run this, for example, it brings in increase an object called survey data that just has participant ID and their age.
[00:49:44] Meghan: then you're And then you're
[00:49:44] David: bringing in games, data
[00:49:46] and artists,
[00:49:47] which is.
[00:49:50] Meghan: um,
[00:49:50] David: Uh, part of the.
[00:49:51] part of the, the data that you saved previously in that, uh, processing script. So you saved, uh, I think it was
[00:50:02] right there.
[00:50:03] Let me make sure yep. That favorite artist, which you're then reading in here. Um, and so
[00:50:10] Meghan: data data
[00:50:12] David: again.
[00:50:12] was, was an
[00:50:13] RDFs file that you saved. Then, um, you take that survey data and you just make, uh, for example, make a table of all participants. Um,
[00:50:27] Meghan: and obviously,
[00:50:30] David: you can do
[00:50:31] whatever you want in terms of making your table look nicer and that
[00:50:33] kind of thing. Again, that's not really, really the point here. Um, but let's actually, let's run through, let me run
[00:50:40] this code
[00:50:42] chunk. Um,
[00:50:43] Um, so what you've done is you've actually read in. That, um, game vis dot RDS to an object called games vis, and then you just display it here. Um, and that allows you to then have it included in your report.
[00:51:06] Meghan: Um,
[00:51:09] cool.
[00:51:10] David: cool. One last thing you did.
[00:51:12] you used some, uh, you talked before about inline R code. If someone isn't familiar with inline R code, explain what it is and, and how you use it
[00:51:20] here. So it's a way for you to add our code in line with some text that you have. So I usually use it when I am, um, trying to have a paragraph or any kind of, um, section of text where I'm referencing data. It's really a good way to keep some integrity with your data. If you're like, oh, we had, um, 50 participants and it might be that in that little inline R code, you're reading the number of rows of data if each row was a participant or something like that.
[00:51:52] Meghan: So it's just a really quick way for you to, um, kind of just drop in. Like some, I use it to drop in values of things, calculations really
[00:52:00] David: Mm-hmm I've never used it for anything. Like, I don't, I don't even know if you can use it for anything. That's like really expansive um, I usually use that if I have, um, like values, I need to drop in whether they are numeric, categorical or string, like I I've done here. Yeah.
[00:52:19] Yeah. So you took the the vector artists and, okay. What is this function? Cuz I think I need this
[00:52:26] function and I don't know it. So this is from the, um, knitter package. So what it will do is it will take all of, um, any like a vector of strings that you give it, and it will automatically give you an Oxford and an and at the end,
[00:52:41] Oh, my goodness. it's
[00:52:46] Okay. I don't, I, I have needed this so many times and I've made such hacky code
[00:52:54] to, to do this exact thing. because I had, um, one of the work that like I, I do have publicized is like, I have a, uh, dashboard that, um, the, my county department uses. And there's a section where we list like any kind of suspected drugs that we might have found. So it was perfect for that, because a lot of times, like you might have like multiple values and I was just like, man, there's no way that I'm gonna ahead and like go all of this manual
[00:53:25] Oh my goodness. Yeah, I, wow. Okay. That is amazing. Um, so
[00:53:32] Meghan: when when you knit this, you end up with this report, obviously. Again, couldn't improve
[00:53:38] David: the visualizations. Don't focus on that. Um, but you end up, for example, here that text is outputted, Nirvana, the Beatles NGK and Gure, um, you have your visualization and your table as well.
[00:53:52] Meghan: All
[00:53:53] David: Um, so if I go back to the original docking script, you actually have code that will render that. So if I run that, that will just update that example report and it hasn't changed. Nothing has changed. So it's gonna look
[00:54:08] exactly the same. Um,
[00:54:11] Meghan: but
[00:54:12] David: but let me actually go in for a second to here. Um, and let's pretend that we got some new data.
[00:54:21] Um, so,
[00:54:26] uh, I don't know. Let's see, I'll just choose one
[00:54:31] of these. Uh, no, actually let me add someone new, um, fresh prince. All right.
[00:54:47] So now I'm gonna go ahead and just restart my session. But if I just run this
[00:54:54] whole script, unless I messed something up, I'm gonna put it kind of back exactly how it was. I don't think I messed anything up
[00:55:02] Meghan: in
[00:55:03] David: in theory. What
[00:55:04] it should do is go to Google sheets, bring in my data,
[00:55:10] Meghan: process
[00:55:11] David: process my data, using the, the processing script, because now
[00:55:16] Meghan: updated updated should be set to true because there are five rows.
[00:55:20] David: Whereas there was
[00:55:20] four before it'll create those visuals, save them like we showed before
[00:55:26] in that vis script. And then it will render this report with
[00:55:30] that new data. Okay.
[00:55:34] Uh, let's try it. Oh, wait. Um,
[00:55:40] Meghan: Oh yeah. See, this is why I have the source and the and the block, cuz the block won't work without the source. Like unless you source it.
[00:55:50] David: yep. Uh, oh, wait,
[00:55:52] did that not gonna have to I would suggest just
[00:55:56] okay. the source button and then letting it do its thing. then it'll stop the script for you. Oh
[00:56:02] Oh, I have never
[00:56:04] Meghan: see. seen that. Interesting. All right. So, okay. That was
[00:56:13] David: really fast. Let's go back here and again, we've got four rows
[00:56:18] here. it though.
[00:56:19] Uh let's
[00:56:20] Meghan: No
[00:56:21] David: yeah. Yeah. Let me perfect. So now I've got, uh, five rows. I've got my new person here. My charts updated and the favorites have also updated, cuz we can see
[00:56:33] fresh prints is there. So we've done that in a really simple way, but you know, if you're doing something where you're getting like dozens or hundreds of surveys, the cool thing is you can do this kind of at, at
[00:56:46] will and automatically get updated, um,
[00:56:51] data whenever, whenever you
[00:56:52] want.
[00:56:53] So, Yeah.
[00:56:54] um, that's
[00:56:55] super cool. cool.
[00:56:56] Um, cool. Was there anything I haven't asked you about in this code that, that I should
[00:57:01] have? I think you touched on like most of the main important parts, you know? Um, cuz I think the biggest thing, I think when people see something like this is they always ask me like, why do you break everything up? And I'm like, because you don't understand you don't understand
[00:57:16] Yeah, yeah, I did. find things.
[00:57:22] yeah, definitely. I'll even show you. Actually I was, um, The call I had earlier today was with, do you know who Matt Herman
[00:57:32] Meghan: I
[00:57:32] David: is? Um, anyway, he made this, um, I'll show you. He actually made a really amazing, uh, COVID tracking website for Westchester county, New York.
[00:57:46] Meghan: Uh,
[00:57:47] David: Um,
[00:57:48] and I was,
[00:57:50] Meghan: he was I, he was
[00:57:51] David: showing me how it all works and he has a very similar
[00:57:54] approach. So I think it was wait. Oh no. In the R um, this, for example, you can see he's got one R the, the website has multiple
[00:58:08] data sources, so there's basically one script for each, um, source that he's pulling
[00:58:16] data from. So there's like hospital occupancy data there's
[00:58:21] hotspot zones. Um, but very similar kind of modularized
[00:58:26] approach. if
[00:58:27] Um,
[00:58:28] Meghan: unfortunately, but when I can't show you, um, it's like the, all
[00:58:31] David: yeah. Yeah, tracker stuff, I have this as well, because I have
[00:58:35] sure. sources. So it makes sense to like break it down and have different data or different scripts for different data sources. Mm-hmm
[00:58:45] Totally, totally.
[00:58:47] Meghan: Um,
[00:58:48] David: Um, cool.
[00:58:50] Well, um,
[00:58:52] hold on, let me just
[00:58:53] stop sharing. Um, alright, I'm gonna do the podcast,
[00:58:57] like wrap up and then I'll do the human
[00:58:59] being wrap up.
[00:59:01] Um, alright, well, Meghan, thanks for joining me today. I really appreciate it. If people wanna connect with you, where would be the best place
[00:59:08] Meghan: Best place is probably Twitter @meghansharris. Um, I am also on LinkedIn as well - Meghan Harris, MPH).
[00:59:32] David: Super.
[00:59:33] And I'll say, if people follow you on Twitter, they can also see some of the really cool art generative art
[00:59:39] that, that you do. It's not spam. people love it. I love seeing it. It's really cool to see
[00:59:46] what else art can do. So, calm down with it a little bit. I get, sometimes I'm just like, I get super excited.
[00:59:53] yeah. Yeah. I mean, there's a great community of people who make
[00:59:57] generative art, uh, with our so, um, super,
[01:00:01] well, thanks again,
[01:00:02] Meghan. I appreciate you
[01:00:03] talking with me. David. Thank you for inviting me.
[01:00:08] All right.
[01:00:08] Perfect. That was great. Um, and oh my God, that combined
[01:00:13] words function. I need to start using that. Oh my God. I really wept when
[01:00:19] Uh, I'm probably gonna tweet about it on the R for the rest of us account. I will totally mention that I got it from
[01:00:27] you. Um, cuz that is
[01:00:29] that,
[01:00:29] perfect. who, who does the inter I always see his name and I never like yes,
[01:00:36] hooey. at that freaking markdown. Like I'm just like, this is just sitting in
[01:00:40] Yeah. why is this not publicized?
[01:00:44] You know, whenever I, whenever I have to write some hacky code, I should always be like, somebody has probably written a function for this and I just need to figure out what that is. I mean, that's, that's the tidy
[01:00:57] verse in a nutshell, like is basically functions for things that you're writing
[01:01:02] hacky ways to do. using, um, geez. I was using like stringer and like RegX to do like the ed values for the longest time. And I actually made a whole blog post about, oh guys, this is like a cool way to do it. Not realizing that the separate rose function existed. I had to update it.
[01:01:22] Yeah,
[01:01:24] I was just like, oh God, I'm dumb.
[01:01:25] All right. Cool.
[01:01:30] but it really like
[01:01:31] reinforces the value of those functions, cuz it, although it takes so much time just to do what becomes a really trivial thing once, once you
[01:01:39] learn how to use a function. So, yeah. Um, cool. Well, thanks again, Meghan. Um, this, so as I mentioned to you in email, I'm actually just trying to do all the interviews now, before my kids are outta school on Friday,
[01:01:53] luck.
[01:01:53] the nothing will be, I know
[01:01:56] Meghan: Okay. will be actually out until later this summer, possibly even
[01:01:59] David: early fall, but I'll give you a
[01:02:00] heads up before, um, things. getting, situated at, uh, Memorial Sloan Kettering, and like, I I'll be moving into a house by then. And, um, I, I haven't, I haven't, uh, publicized it yet cuz it's a little early, but I'm also pregnant as well. So I'll be
[01:02:18] Oh, congratulations. in November,
[01:02:20] Wow. You have a lot going on.
[01:02:22] going on. So, um, by that time, hopefully everything's kind of like settling down and I could actually see the
[01:02:31] That's
[01:02:32] yes. Cool. Um, yeah. Well, I hope I hope everything, uh,
[01:02:38] goes smoothly on all fronts, cuz
[01:02:41] that's a lot.
[01:02:42] it's a lot. And I, you know, it's just, it's been a long, long, long journey in all fronts of everything.
[01:02:49] Yeah.
[01:02:50] Yeah.
[01:02:50] Yeah Are
[01:02:51] Um, are you gonna be at our
[01:02:52] studio conference by the.
[01:02:54] I am, um,
[01:02:55] Okay. Cool. Well, awesome. Uh, I will be there as well. Oh yeah. Right. Cuz you're giving a talk.
[01:03:00] Meghan: no, you're
[01:03:01] David: I'm now I,
[01:03:02] remembering we had I don't know. Yeah. I'll, um, I'll be there the whole week because I'll be TAing also for a workshop, um, for
[01:03:10] cool. art artistry workshop. Oh, that's right. That's right. to try to get this talk together.
[01:03:19] Yeah. Yeah. I gotta work
[01:03:21] up mine too. I don't have any slides yet. no.
[01:03:25] Yeah, yeah. Yeah.
[01:03:28] Meghan: So I can definitely,
[01:03:29] David: Cool. Well, that'll be nice. Um, I look forward to
[01:03:31] seeing you there, so I'm so excited.
[01:03:35] Meghan: All well, thank
[01:03:36] David: All right. Well thank you again, Meghan and I also may reach out with questions as
[01:03:39] I'm writing the book. Um,
[01:03:41] Meghan: Okay. All
[01:03:43] David: all right,
[01:03:44] thanks. I'll talk to you. soon. Bye.
Sign up for the newsletter
Get blog posts like this delivered straight to your inbox.
You need to be signed-in to comment on this post. Login.