Episode #225: Julia Silge - PolicyViz
Episode #225: Julia Silge
in Data Projects , Tools
Julia Silge is a data scientist and software engineer at RStudio PBC where she works on open source modeling tools. She is an author, an international keynote speaker, and a real-world practitioner focusing on data analysis and machine learning. Julia loves text analysis, making beautiful charts, and communicating about technical topics with diverse audiences.x
New Ways to Support the Show!
With more than 200 guests and eight seasons of episodes, the PolicyViz Podcast is one of the longest-running data visualization podcasts around. You can support the show by downloading and listening, following the work of my guests, and sharing the show with your networks. I’m grateful to everyone who listens and supports the show, and now I’m offering new exciting ways for you to support the show financially. You can check out the special paid version of my newsletter, receive text messages with special data visualization tips, or go to the simplified Patreon platform. Whichever you choose, you’ll be sure to get great content to your inbox or phone every week!
One-Time with PayPal
Welcome back to the PolicyViz podcast. I am your host, Jon Schwabish. On this week’s episode of the show, I chat with Julia Silge. Julia works at RStudio. So if you’re familiar with the R programming language, I’m sure you know Julia, I’m sure you know of her work. She was one of the earlier developers of the Tidymodels package, and she’s working on a whole bunch of other things right now, and she has two books that have come out over the last year or so, one on Tidymodels, one on text analysis. As I mentioned, in the first episode of the season, text is going to be a theme that you’re going to hear more and more about over the course of the season, so Julia and I talk a little bit – actually, not a little bit, a lot a bit about visualizing qualitative data and the challenges that come with that. So you want to hear about that. You’ll also want to hear about the new package Vetiver that Julia and her team have been working on about machine learning and sort of putting those models out into the world and actually getting them to work in real scenarios, in real situations. So I hope you’ll enjoy this week’s episode of the show, and here’s my conversation with Julia.
Jon Schwabish: Hey Julia. Welcome to the show.
Julia Silge: Thank you so much for having me. I’m so happy to be here.
JS: I’m so excited to chat with you. We’ve been emailing for a while. I’m super excited. You have all sorts of stuff going on. In general, I’m sure in addition to your regular busy schedule, you also have two books out now, which is pretty incredible. I don’t know how you do two books and work, and lifestyle, all at the same time. So I thought maybe you could tell folks a little bit about yourself, and then we talk a little bit about each of these new books, but then, we’ll spend a bulk of our time talking about this new work that you’re doing and about to mention it now. Just save it for a little bit, get people to like, keep that play button going…
JS: Yeah, what are they going to talk about…
JS: What could it be, what could it be.
JS: What are they going to be talking about, yeah. So yeah, so I’m really happy to be here. My name is Julia. So my title now is software engineer. I’m a software engineer at RStudio. When I introduce myself, I often say I’m like data scientist and software engineer, because people – there’s certain different kinds of tasks and kinds of skills that I often think about and talk about and write about, kind of, has that overlap there. But yeah, so I’ve been at RStudio for coming up on three years, two and a half to three years. I’ve been there for about that long, and it’s been no shock. Right? It’s been a really an amazing experience working at RStudio. It was interesting, because it is the first time that my title has been software engineer, and that the focus of, let’s say, all of my time, or most of my time is on tool building. I think I’m someone who’s always been very interested in people’s really practical workflows, like, how do they do things, and I’ve been involved in tool building either open source or internally at plays I worked for a while. But it is pretty interesting to now be kind of focused on that full time and less as a daily sort of practitioner, I guess, of the kind of using the tools that now I focus on building.
JS: Yeah. And I would guess, I mean, even though you’ve done open source stuff in the past, I would guess R is kind of different in the fact that, like, there’s so much of a community, where there’s so much openness around it. The one thing your build has like 40 other things that add on top of it.
JS: Yeah. I actually was not involved in open source community before R.
JS: Yeah, so my academic background is in physics and astronomy, and my computational background at that point was all C, just like plain old C, and I, you know, partly for data analysis pipelines, coming out of the telescope, and partly for, what we now call embedded kind of work, to write software to run on the camera on the telescope, software that does the drivers, moves a little optical components around, and that kind of thing. So now that’s called embedded programming, I guess. So I think at the time there must have been open source communities, but I perceived them as scary and not for me. What I perceive…
JS: Like the [inaudible 00:04:40] world sort of thing, yeah.
JS: Well, it’s like the Linux kernel people, that’s what I perceive open source as. Because, I mean, I think there’s some reality to that both, because of the time that was then and what those particular kinds of communities are like. So I didn’t see that as a place where I thought would be a good fit for me, and I didn’t try, and I wasn’t interested, like, that wasn’t something that I did before in my sort of pre-data science life. And then later in life, when I’ve kind of made this career change, and first I started learning Python, and then, I found out about R and started learning it a bit too, and seeing what the open source communities are like, and especially R, I would say, especially R, and be like, whoa, this is amazing. I really did when I was thinking about this transition and kind of like thinking, I think this would be a good fit for the things that I really liked to do, and okay, I’m going to learn these new – I mean, not new, new to me, new to me at the time, programming languages that I had not dabbled in before, I really kind of had this mental attitude of, okay, it’s time to toughen up, time to gird my loins and go back in there to this kind of technical community. But my experience of it has been just the opposite, just welcoming, people excited about what you’re doing, people interested in what kind of thing might you do. You’re also interested in, let’s call it, mentorship or interested in like, oh, you I see, you built a package, let me offer you resources for how you might be better at that, how you might get better at that. So actually, no, I really do not have open source history besides R and data science technologies.
JS: And I do want to get to the other stuff, but your origin story is really interesting. So were you like, when you’re getting into Python and getting into R sort of learning the open source world and learning the code, is that what drew you to RStudio, OR was that kind of like, yeah, I now see this is a good positive community, I want to be a part of it, but that’s sort of like added bonus, and I want to go to RStudio because of X, Y, Z?
JS: And do you mean, go to RStudio, in terms of full time employment?
JS: I guess so, yeah.
JS: Because RStudio has the IDE, I was like, man, I love this, this is great. This is way better than just using Emacs like I used to do.
JS: Coding in time, yeah.
JS: Yeah, right, yeah. So in terms of working on open source full time, I, honestly, it wasn’t really – I wouldn’t say it was a goal I had or something that I had on my radar as an option. I was interested in data science as a practice, and I was interested in building tools that made my literal life better, but also could be reused by other people, and we can make things better together. And if you had asked me what do you envision doing, I would say, oh well, I’ll probably be a data scientist and contribute to open source on the side. And the employers that I had over those kinds of first couple of jobs in data science were definitely employers who knew the value of open source and encouraged involvement in open source software. So it wasn’t a situation where I was like, well, I will get in big trouble if I do anything for an open source project on the clock. It wasn’t that kind of situation. So I was working as a data scientist, and thinking about my next step, and RStudio posted this job about working on Tidymodels. So working on Tidymodels, what that really involves is like, not statistical methods, not like, let’s implement new methods, but rather, let’s think about how do people go through the process of a model analysis, how can we build software to make a harmonious, less heterogeneous interface to many kinds of models, how can we build in statistical guardrails, to how people go about building machine learning models. And I thought, oh, that is right up, that is right up my alley, like, I love working on that kind of thing. That’s a little bit about process, and a little bit about practice. Of course, like, I am a mathy-science person by background, but I am much more motivated by tools that are a little bit more around process and practice than about say, let’s invent a new statistical method that’s going to get this tiny bit better than the one before, like, that’s not super, that’s not super motivating to me. So I applied to this job just like any other person did, I wasn’t the only person who applied, they interviewed. So my process of getting a job at RStudio was pretty much like getting a job. I wasn’t in a situation where they said, Julia, come, we want to hire you it wasn’t like that. It wasn’t like that. I applied, I interviewed, I was lucky enough, I feel like, to be offered that job. And so, it’s been really fantastic. I’m really excited. I do, you know, I talk to people sometimes who I think maybe have an exaggerated idea of what it is like to work on open source, or maybe an unrealistic or rose colored glasses kind of idea of, like, what is it like to work on open source full time as a job, because I do think for some people, like, that sounds like the dream, the dream. I mean, the thing is, it is a job. I mean, don’t get me wrong, it’s a great job I enjoy it very much. It’s one that I feel very fortunate to have. But yeah, it is, at the end of the day a job.
JS: Yeah. I mean, it’s interesting to hear you talk about the workflow, because it seems like all the stuff that we’re going to talk about is definitely in that vein. And I would guess that the workflow around data and tech and coding has changed dramatically. I mean, even in the three years or so that you’ve been in RStudio, the way people are working with data has changed.
JS: So you’ve got two books coming out, you’ve got one book on Tidymodels, which you’ve already talked about. Now, I have Max, your coauthor, Max Kuhn is going to come on the show later this season. So we don’t need to dive into all that, he can do the sales job on Tidymodels. You’ve also got this book on text analysis, which is really exciting. So I want to make sure that we get to your current work. So I’m going to ask you just one question on the text analysis book, and [inaudible 00:12:04]. So I want to ask you, do you think data analysis, data visualization is harder with qualitative data or with quantitative data?
JS: That’s a great question. I think that the important thing to realize about those, that sort of comparison, that sort of, hey, how do we think about rectangular data versus unstructured data is to realize that when it comes to computers, no matter what you’re doing, Python, R, whatever you’re doing, for you to be able to summarize, visualize, or eventually train a machine learning model, you have to get that unstructured data, that qualitative data into some kind of structure, into some kind of shape. I kind of think that way, like, you have to – if you think about your, say, raw text data or other kinds of qualitative data, as, I don’t want to say, shapeless, but very unstructured in their shape, if you’re going to do some kind of analysis, any kind of analysis, you have to transform that text or other kind of qualitative data into an appropriate data structure for whatever it is you’re trying to do. So I think I’ve been thinking about this actually, because so the first book that I wrote with Dave, with David Robinson, Text Mining with R is name of it, and it’s a book that’s really about EDA, like, exploratory data analysis, but for text. And it adopts an opinionated, kind of, an opinionated take that having your text data transforming it into a tidy data format, so you have one observation per row, that sets you up for success in terms of the task of exploratory data analysis, whether that’s, I need to summarize, I need to visualize. So that tidy data structure is one that sets you up for being able to flexibly take a lot of different kinds of tasks or approaches, and it’s good for the same reason that just any kind of tidy data is good. When it comes to training a machine learning model, we got to transform, right? But often the best end shape or data structure we’re going to head to is not, say, something that looks like a table, like a table in the database or like a tidy data frame, but rather that’s something that looks like a matrix, something you can do math on, because, basically, any of the machine learning algorithms are going to use some kind of big matrix and do some matrix math or some other kind of approach there. And so, there again, we have this transformation that has to happen, but it’s a bit of a different one, where we need to end up in a different kind of situation, and much like, say the transformation from raw kind of unstructured text to a tidy data, that transformation to a something that you might think of as like a document term matrix, or just some kind of matrix representation of it, the decisions that you make to get from one to the other really impact what you can learn, what, like, in the literal statistical learning sense, and/or the more conceptual, like, what am I trying to do here with this data. That is really the focus of the book that I wrote that was published last year, yes, with Emil Hvitfeldt. And so, that’s called supervised machine learning for text analysis in R, bit of a mouthful there. And that, like, fully, the first third of the book is about feature engineering for text, which is just exactly that process of I have unstructured, natural language, and I need to transform it into a representation that a machine learning algorithm can do math on.
JS: Right. I had a call yesterday with people – with a team that have qualitative data, and they were sort of asking me for help with some of the pieces like, well, if you wanted me to help you with your bar chart or a map, and you sent me a table of data, I could sort of play around with it. But with qualitative data, I felt like, I really need a content expert to go through and tell me what the themes are. Right? And, I guess, if you, yeah, if you can structure that data and pull out the themes using machine learning, you can then sort of share that information with lots of people to say, what’s the best way to then represent it.
JS: Yeah, I think that’s a really interesting question that I’ve definitely run into, in different situations or jobs, that idea I have unstructured data, and what do I do with it, and I think, I would say, the two big sort of answers to what can I do with this unstructured data, like, the first big answer I think is, yes, content experts, experts who – domain experts who know something about this, I’m going to have them label this, I’m going to have them create themes, and I’ve worked with really fantastic qualitative researchers who have this skill of say, I’m going to spend time doing either top down or bottom up kind of, like, categorization of what these things are about. And then, once we have those annotations or labels or whatever you want to call that, then we can use that to, maybe you can use that as training data, maybe you can use that in and of itself to be able to learn something. So that’s the first sort of answer to what am I going to do with unstructured data. I think the second answer uses quantitative approaches. So uses something like unsupervised machine learning approach, like, topic modeling, or uses some kind of supervised machine learning approach, to be able to predict some kind of label. And then, you use these methods of text analysis like tokenization, like, identifying important words, like, you basically transform the data, like what I was talking about before, kind of, to probably some sort of matrix representation, and then, use some kind of statistical method to be able to learn from it. And I think in my experience, those two options, like, what is right to choose, depends a lot on how much data you have, right? Like, if you have, let’s say, you have less than a 1000 observations, then it’s like, yeah, you probably are going to need to read those, like, someone’s going to need to read those, and do some principled qualitative analysis on it. And yet above about a 1000, and then you can start using some of these quantitative approaches. The thing about text is you say you have a 1000 observations, but the thing you’re observing usually is some kind of token, like, whether that’s a single word or something else in there, and depending on the vocabulary that people use, and I can actually mean you don’t have 1000 observations, you have maybe many more observations than that, like, you haven’t observed each thing very many times. It’s like the way natural language works, right, like, some words are used. There’s a few words that are used a lot, and then, it’s a power law in terms of like, most of the words are used very few times. And so, you actually haven’t observed those words very many times. So it depends on the specifics of the vocabulary that people use, and how it is used, but truly natural language where people just kind of use all the vocabulary that they have access to, ends up in a kind of interesting situation for, let’s just call it, the counts, like, the count of how many times you observe different things.
JS: Yeah. I’m guessing tokenization is one of those words that’s at the tail of that power law.
JS: Yes, I’ve already said it three times, so yeah.
JS: Right, but it’ll be the only time in all the transcripts of this show that will occur, so it’s right.
JS: Okay, so all of this, I think, segues very nicely into your current work, which is on the Vetiver package, and this is not an area that I’m familiar with. So I am just going to ask you to explain it to me, because I’m guessing people who are listening to this are also not as familiar with it. But it sounds like it’s got the combination of all the things you’ve talked about. If I’m understanding, it’s got the workflow piece; it’s got the open source piece, obviously; and it’s got the text and the machine learning; and it seems my reading of it, it’s working all those into this, like, closing the circle on the workflow.
JS: Yeah, I like thinking about it that way. So this is something that I’ve been talking about since I was hired actually at RStudio. One of the things that we talked about when I was hired was, okay, you’re going to come, you’re going to work on Tidymodels packages, but one of the areas that we know, for example, we get questions about when we would do trainings on Tidymodels, like, okay, well, once I have my train model, what do I do with it? Like, if I have some kind of predictive model or some kind of machine learning model, what is it that I do when I’m done? And there is this narrative that R is not good for production, R is not good for real work or work that you need to scale, something that you need to scale. But it turns out, actually, that some of those same tasks are difficult in Python as well, like, the difference is maybe not as big as some people expect or would like to see that the process of taking a Python model and putting it into production is actually also fairly difficult.
JS: Actually also, there’s a lot of questions around what will you do, what are good practices? And so, as I spent more time at RStudio, it really – to express interest, right, and working on these kinds of tools, because I think – and you’re exactly right, a big reason why it appeals to me is that I do love working on really applied problems on really practical kind of sets of tools or sets of analyses that people have. And this sort of, you know, you’ve trained a model, so you’ve used really good statistical practices to do a great job training a model that is reliable and robust, and you understand its predictions. But that question of like, what do you do afterwards with that model is where Vetiver sits. So Vetiver is not about developing a model. Vetiver is about what you might call ModelOps or MLOps tasks. So these are tasks like versioning your model, these are tasks like deploying your model, and these are tasks like monitoring your model. So your model is done being trained and not all models are deployed, right? Some models are trained – in the book with Max, we kind of outline an ontology of models where models can be built for different purposes. Some models are built to describe just as, like, to describe data, some models are built for inferential purposes. So you want to look at, say, the coefficients of the model, and you want to communicate something or explain or understand some situation based on the coefficients of the model. And then, another big reason why models are trained are to be predictive, to be predictive models, and that’s typically where, like, it’s not very useful to have a predictive model and not be able to deploy it somewhere, and put it into quote production. And people I think also talk about, like, hear that, and either feel scared or confused, because they’re like what does production mean.
JS: Yeah, right.
JS: Yeah, what does it mean…
JS: Yeah, what does it mean, right, yeah.
JS: What does it mean to put a model into production, but just like, what does production mean, in general. One way I like to think about production is that you’re, in this case, model is portable, in the sense that you don’t say you trained it, say, on the computer sitting on your desk, right? And so, you have that model on the computer on your desk, but to put it into production is to make it useful in a different computational environment, like, to make it useful to other users than you. So kind of by that definition, one way you could think about or visualize putting a model into production is say, like, building a shiny app that allows people to, like, human beings to kind of move sliders or change inputs, and to see what does the model predict. Like, if I do this, what does the model predict, and to get a prediction out. And then, if you deploy that shiny app somewhere, like, you put that shiny app somewhere, I would call that putting a model into production. Most often, when people put models in production, what they’re doing is they’re making their model available, not necessarily to a person to be able to say move a slider and see how the prediction changes, but probably to make the predictions of that model available to IT infrastructure. So say, you have, say, a business selling widgets and you want to have some, a model that helps you decide, predict what is the most likely widget that this customer wants. And so, you don’t necessarily want a person to go and look, but rather you want in a more automated way for whatever system that’s facing the customer to be able to say, oh, hey, this is the one I think that this is the best or, like, here’s the highest probability category, or whatever that this person is interested in. And so, usually, when people say put a model into production, what they mean is they, like, take the model, package it up, and make it available, so that the systems that you have can interact with the model and get out what they need. And if you ever heard the term microservices, what that means is just like, let’s separate those things out, so that each one of them is its own little computer, basically, its own little piece. Right? So you don’t have them all together in one system, but like, this system that, like, shows the customer something is separate from the system that makes the prediction, but they all can, like, talk the…
JS: They’ll talk, yeah, okay.
JS: Yeah, and the way that most of these things talk to each other in most situations is by RESTful API. So if you’ve ever sent, like, oh, I’m going to use say, in R, like the hitter package, and I’m going to do a get request or a post request, like, you use HTTP calls to, from one system to be able to talk to the other system. So that’s, when most people say, put a model in production, that’s usually what they mean. They want to have the model somewhere, so that other parts of your infrastructure can say, make an HTTP call, and get back the predictions that they…
JS: The predictions from the first part. And then, on the version control, so does that ever have a version control embedded within it, or, do you need to also be using like a GitHub type solution to also have that piece?
JS: So this is an interesting question, how do you version data, how do you version models. So let’s talk about just models. Git can be used to version models, but they sometimes get a little big, because you don’t – it’s not like text, they’re not plain text, they’re usually binary objects. And if you update it, like, you retrain it with new data, it’s not like text where you’re like, ah, let me, I can diff it, and I can see that this line has changed. No, the whole binary file has changed, and so, Git can be used for that kind of purpose, but it gets big, and sometimes it’s not very, you know, you don’t get – like, the reasons why you typically use Git, because of all the diffing, all the line by line, all that kind of thing, it doesn’t really apply to a model. So there are some tools that use Git for versioning data and/or models, one that I like is called DVC, data version control, but that’s actually not the approach that we took. So we took an approach that’s a little bit more like think about you have a way to store files somewhere, and then, let’s just put like a little bit of a layer on top of that, so that you can version, so that you can version and like have access to all the versions you need in the past, attach some metadata that’s like appropriate metadata for a model, and that you can kind of switch out backends in kind of a flexible way. So we use, it’s actually the same approach that the pins package takes, so pins is a – there’s an R and Python version of pins, and the metaphor here is like you have a board, like, picture a bulletin board, and then, you pin things to the board. And then, it’s like, oh, it’s time for me to make a new version of that, you kind of like pin a new version on top of the old version.
JS: Got you.
JS: Yeah, and so, where you’re actually keeping it is quite flexible, like, you can pin, you can write a pin to, like a cloud platform’s Blob storage, like S3 or Azure’s Blob storage, or something like that. You can use, if you use like RStudio’s pro products, you can use Connect as the storage device, like, here’s where we come and get these versioned storage pieces. You can use, like, if you’re in a situation where, say, you have a shared network drive or something, you can use that. And so, it looks the same to the user, but you are deciding where is it that this goes. So it’s a little bit of a bespoke versioning approach that is meant to have flexible backends, and give you just the right amount of abstraction around it, where it’s straightforward to get the right version, it’s straightforward to share it with the right sets of users, that type of thing.
JS: So do you now get to, or, do you and your team try to work with RStudio clients, I guess, to see how they’re implementing it and what, like, where the blockages are, and where they need improvements?
JS: Yeah, that’s a super valuable piece of feedback for us. We work on open source, I’m on the open source team. Me and my team work on open source software. But what because it is so much about deployment, which is really about where does my data artifact and work, like, where does it finally come into contact with the infrastructure that I’m working on, like, so it really does involve very, like, I’ve been saying very applied very practical, like, how are people really doing this. And yeah, so before, kind of, very early in the process of all of this, like, I spent some time doing a round of user interviews, like, I had a little questionnaire I had put together, to try to understand what were people doing now, what was working for them, what was not working for them, where did they see their pain points, or, like, where was collaboration not working, where was…
JS: Yes, it’s kind of like falling apart.
JS: Yeah, and I so appreciate all the people who are willing to talk to me. So that was a mix of people who are RStudio customers, and people who are from the community who had been trying to, say, put a model into production. I really appreciate those people’s time and expertise and perspectives, because it did inform what we eventually decided to build, which is different than some of the other options that are out there, in that, it’s really flexible what you bring, like, what kind of model you bring is, like, where we kind of put the, I guess, the hooks, like, where do you kind of enter into this process, like, we built that to be very flexible. Hopefully, we have the options for, say, the 80% case, and then, it’s extensible and customizable for, say – and, I mean, that in like a real substance and work.
JS: No, no, right, for multiple teams doing multiple different things.
JS: And you mentioned earlier, sort of, I like having this piece and this piece and this piece, that’s not just tools, that’s people working in their own little pieces, and to try to resolve that or fix that. It’s like a good old industrial organization challenge that.
JS: yeah, no, for sure, for sure, yeah. And so, that was all early, and then, since we have had something to show people, we’ve been doing – we do pretty regular demos, or, getting feedback kind of sessions where we show people, like, say a demo, and say, what questions you have about it, what do you think would work about this, what are you still looking for. And not that we can do – we can be everything to everybody because we can’t, but to understand what the most common use cases are, or difficulties.
JS: Right. So one last question for you, are you making Vetiver T-shirts, because that’s like the obvious extension, entering the Vetiver, right?
JS: That’s right, yes. Yes, I actually – so it’s a real word. It’s a real word, Vetiver. It is an ingredient in perfumery. So if you’re like, I’m into perfume, and I’m into fancy candles, and so, like, if any of your listeners are like, Vetiver, I feel like I’ve seen that, or heard that somewhere, it probably is from a fancy candle or something like that. So it’s a stabilizing ingredient in perfume, it does smell good on its own, but, its main purpose that is used for is that, like, if you take more volatile kind of scents and fragrances, Vetiver will help stabilize them, so they don’t just go away and evaporate off. And so the metaphor here is like Vetiver helps you stabilize, your models here, are, like, these sort of more volatile kind of components, and Vetiver stabilizes it, so that you have the version you need, it is reliably deployed in a way that you can get to the predictions, and also, you can monitor how it’s doing over time.
JS: Got you.
JS: So in doing research on this before deciding for sure on the name, it was kind of appealing that it was a bit of an unusual word, there’s not a ton out there. But I think there is something out there called the Vetaverse, because I think there’s like a band or something, which is named, but it’s a pretty uncommon word.
JS: Okay. But if I’m ever out, and I see a perfume store, or a candle store named Vetaverse, I’m going to expect you to be in there, just like selling your custom made candles and stuff, yeah.
JS: That’s right.
JS: With RStudio stickers on the bottom of it with the price or something.
JS: Perfect. I love that.
JS: Julia, thanks so much. This was really interesting. I mean, I just learned a lot, I’ll just say that, really fascinating stuff. Congrats on getting it out, and I’m excited to see how it starts to be picked up and find itself into the open source community and see what folks do with it. It’ll be really interesting to see.
JS: Yeah, we’re super excited about that too.
JS: Great. Well, thanks again for coming on the show. It’s been great chatting.
JS: Thank you so much for having me.
Thanks everyone for tuning into this week’s episode of the show. I hope you enjoyed that. I hope you’ll check out all of Julia’s work on her website at RStudio and in the R packaging language. I’ve put links to all of these packages that we talked about and her books in the show notes, so I hope you’ll check that out, and I hope you’ll check out policyviz.com where you can learn more about visualizing and communicating your data. So until next time, this has been PolicyViz podcast. Thanks so much for listening.
A whole team helps bring you the PolicyViz podcast. Intro and outro music is provided by the NRIs, a band based here in Northern Virginia. Audio editing is provided by Ken Skaggs. Design and promotion is created with assistance from Sharon Sotsky Remirez. And each episode is transcribed by Jenny Transcription Services. If you’d like to help support the podcast, please share and review it on iTunes, Stitcher, Spotify, YouTube, or wherever you get your podcast. The PolicyViz podcast is ad free and supported by listeners. But if you would like to help support the show financially, please visit our Winno app, PayPal page or Patreon page, all linked and available at policyviz.com.