 I'm happy to welcome you for this our special tutorial that you were waiting for a few hours or days or weeks or years, I don't know. We'll spend about three hours together. And I hope that you had no problem. If you are here, it seems that you don't have any problem with the room and don't have any problem with Slack. Obviously everybody said hello on the Slack, so that's perfect. So now we can start speaking about maps and everything. It's not that, if there are some problem with my microphone, do not hesitate to say it. You can write in the Slack. Feel welcome to speak together also inside the chatroom. And if there are some problem with our connection, I may ask you to shut down your videos just to see. But for now, that's good. I'm happy to see some faces. If you do not want to open your video, I'm okay with it too. I will just ask you to close the microphone, which is okay for everyone for now. So perfect, you followed all the instructions. So we can start to play with this platform. So I will share my screen. So I just take a picture of all of you. And if you don't want to be on the picture, I will remove that just for the communication on Twitter and everything you know. So if you do not want to come to be on the picture, you can just shut down your video now. Just say hi and pictures should be good now I think. And I will share it on Slack so that you can all see your face. And if you're happy with that, we will be able to go. If you want to do another picture because you're not nice on this picture, maybe we can do something at the end when you're totally exhausted and you will see that your faces will be worse than this one. Before and after, spatial change. Spatial change, very appropriate. Yeah, so let me share my screen with this one. Okay, so here is my project on Santa Cruz. So I hope all of you were able to connect to this Santa Cruz, I just verify that I did not have email of people with problems. Okay, okay, okay. So I need to send an email to the captioners. Can shell, maybe can you send, I put that in the admin part. An invitation to this person inside Slack so that we can discuss on Slack. I don't see, okay, I need to add some captioners, right. I think, sorry, I think as you do that, maybe we can introduce ourselves. Yeah, yeah, yeah, for sure. Yeah, okay. Thank you. Hi everyone, my name is Shalnez. So glad to be here. I'm part of the co-organizers of Nairobi R and we are very happy to be hosting this tutorial. We are meant to do this with Kampal R but their representative, I'm not sure if he's here yet. I guess he's running late. And Nairobi R is just any other user group. Our idea is to always make sure people are learning R and like people are getting the most out of R which is what we've been doing for one year. We co-organized this with two of my brothers. One is Chris who is on this call and the other one is Keegan. So Nairobi R is part of Africa R which is now a larger community for users in Africa. And our goal is just to help people develop communities within themselves like R communities within themselves where they can meet and learn R and interact with amazing people like they think R team and other many people globally and we are so happy to be doing this. I think just a few reminders maybe Sebastian has mentioned one. I hope we are all good with Slack at this point. Myself and Chris, we have an M tagged on our name. So in case you have an issue with anything, absolutely anything, even something you will think is small and maybe you're afraid to ask. I promise you we are the sweetest people ever or so we tell ourselves. So please feel free to reach out. And if you're not comfortable asking questions publicly and you want to DM, we are happy to do so. Also we want you people to, if you've not done this, please take a minute and go through the code of conduct. This is a very safe space for everyone. We don't want people to go through harassment issues, stalking issues and all the bad things that can go wrong on a Zoom call. So please, please, please read that. And if anything happens whatsoever, anything that offends you, please feel free to DM myself or Chris or anyone, any of the presenters if they'll not be presenting. Again, this is a very friendly tutorial and I promise you this is the best team ever. I'm not bling my own horn, but we are the best team ever. So we hope by the end of the three hours, everyone will be happy, satisfied and this will be like the best use of your time. I'll give my brother Christopher to introduce myself. Oh my God, I rarely call him Christopher, he's Chris. So anyway, feel free. Thank you, Shel. Hi everyone, my name is Christopher Maronga and as Shel has said, I'm also part of the co-organizers of Nairobi R. I'm pretty sure everyone is very excited to be taking this particular tutorial today. And I think Shel has actually given all the information about Nairobi R and what we actually, our role in during this tutorial. So feel free to reach out in case you need some help. And so finally, probably I just want to take this opportunity as well to thank, sincerely thank our instructors because I know it takes time to put together a tutorial like this one. So thank you, thank you, our instructors and I hope you all enjoy at the end of the tutorial. Thank you. Good, thank you very much. There are still some people who don't have their credentials. So Diana, I'll do it in a few minutes. If you are already, Diana, maybe you are here already inside the, I don't see any. Yeah, I'm here. Yes, you're here, okay. So I will just do the presentation and when Yakub is starting to present the job, I will give you your credentials, okay? Okay, thank you. Perfect. Okay, so thank you, Cheryl, for the introduction and as she said, of course, you're welcome here. It's a safe place. You can discuss with us, you can discuss with everybody and if you have any problem, any problem does, do not hesitate to speak privately or publicly inside the chat room of the Slack. So let me put that in the bigger screen. So you all have the slides too, okay? So you can, if it's too small for your screen, you can also follow it on your computer. First things first, not that all this material will be available on my GitHub account at the end of the course and you will have all the answers to the exercises you will have during these three hours. So if you cannot finish some exercises, do not worry, you will be able to have everything at the end and take it later to finish it. So this tutorial is possible thanks to collaboration between Doris, Jakob and I. We've worked a lot of hours to prepare you this small tutorial, but we are very happy to present it to you. It's also facilitated by Cheryl Christopher with Africa Air, Kampala Air and Nairobi Air and also facilitated by SyncR and provide us this e-learning platform with, as you already saw, it's a part with the exercises and a part with the RStudio that you may already know. I am part of SyncR, so I am Sebastian Rochette and I'm doing data analysis and tutorials at SyncR and maybe Doris, you can introduce yourself in a few words too and then Jakob, that you know is speaking. Sure, so hi everyone, my name is Doris Scott and I am a GIS Librarian and Social Science Data Curator at Washington University, St. Louis. Really sad that we're not able to meet in St. Louis but we're gonna try to still give you the St. Louis experience through the exercises. So I'm glad to be here and I'm so happy that everyone's here to learn more about spatial applications using R. Thanks Doris. Jakob, can you say a few words? Yeah, sure, so hello everyone, my name is Jakob Novosad. I am an Assistant Professor at Adam Miskewicz University in Poznan, Poland. And I'm also a co-author of a book called Geocomputation with R. So most of my days I spent working with spatial data, visualizing it, processing it and creating new methods and new R packages. So I hope we spend some time together and you'll learn some new things with us. Thank you Doris, thank you Jakob. So to continue the presentation and then we will draw some maps. Don't worry, we won't speak for hours without you playing with R and maps. So here is how we see the planning. So we are three instructors. There are also three facilitators. You will have three hours tutorial which is already started and this will be three parts of it. So the first part will be with the presentation, the one I'm doing now. Then you will see how to draw maps with team up with Jakob and what are spatial data in R. Then you will see how to read and write spatial vector data and manipulate vector data with the tidy rest with Doris and which is why we asked you before to be able to know the deep layer things before coming because we will do something with the tidy rest and as I open this tutorial, I will also close it with presenting you how to manipulate and do some intersection between spatial data sets. We plan to divide this part in three times one hour part. So half of each part will be about presentation and following the slides. So first half part we speak, then you work and I will break all of you in different breakout rooms. So this will be done totally randomly and I think I will divide you in five or six different rooms which means that there won't be an instructor in each room each time but we will jump between different rooms so that you can ask us some questions. And so if you are stuck you can first try to speak with the other people who are in the same room if you like to or you can ask your question directly on Slack and if you have very specific question and you really want us to come, just do not hesitate to call us on Slack with our name. So we are here, we are ready to move between different class but we want small groups so that you can help you, help working together and maybe it will come up with some good friendship after that or maybe you want to see these people for another minute but let's see if we can help each other to go through this tutorial and these questions. Yeah, again, there is only thing which is not with the number three, it's number one, it's one repository and you already know about it. As you hear and you were here very early which is very nice that you did this, you already know what is Santa Cruz. So Santa Cruz is the platform you are using now, except for two of you who do not have the credentials but I will send it to you, don't worry. So Santa Cruz is a platform made by Sync.org because we give a lot of online tutorial and we wanted to have a platform which is where you have everything you need to work on so you have slides on the part, you have the RStudio, you already followed the instruction so you already know that how to connect, where to find your course, you know that you can move the window to have the upper part for the RStudio or for the slides and you know that you can use the arrows to go in the slides, you can use O to see the different slides and move inside. If you are looking for something during the exercises, you probably know already how to use RStudio. This is RStudio server, so it's not really different from RStudio but there is one more button with uploads and exports and export button, I suggest you take all the courses or everything that you did at the end of the course is that you have your notes too. So you can already open a Markdown file to take your notes inside and at the end of the tutorial, you will be able to take it back to you. Up my notes and the home courses or RStudio if you want it in full screen. The chat room is not here, as you can see, that's why we are working with Slack but it will come later on and resources if you want to see the cheat sheet of the different packages that are already available as cheat sheet. So this, you already did it, so I will not take a lot of time on it but if you have questions about that, you don't hesitate to ask them inside the Slack room and yeah, we are doing this with Zoom so you already know how to shut down your microphone and alternate to, you don't know how to control the webcam which is this button here. Here is the chat part but as I said, I suggest to speak inside Slack so that it's easier to follow. With this green button, I can share my screen and it's possible that during the exercises, if you want some help for some specific parts, we may ask you to share your screen or you can of course copy paste the code that has some problems and put it inside Slack so that we can answer and see what you tried and how we can help you. When you take the sharing screen, you can choose which screen or which window you want to share so that you can protect part of your privacy if you want but do not worry, we're not here to take part, to take advantage of your computer. So we will ask you to mute your microphone during the slides presentation, which you already did so thank you for that. You can share the screen, I already said it, you can cut off your webcam if you want, for now it seems to work correctly so it's good. Yeah, there may be some other thing if you think that you are stuck in the full screen mode because now you can only see my own computer so maybe you want to do something else, you can double click on press escape. If you think you lose this bar somewhere, maybe it's because you are in the full screen and then you can go on top of your screen but if you have the problem, you can go back on this slide to see how to do it and we will start to draw some maps for now. The only thing I didn't say is timer five. So we have timer which this one is about five minutes and we will use it to have some breaks during the tutorial. It means that we will do one hour work and at the end of the one hour we have five minutes stop so we will ask you to do exactly this five minutes, take some fresh air, do not look at your screen during this five minutes and then come back to the tutorial and we start again. So I already spoke a little too much so I will let Jakub take on the following on this slide. I will give access to the people who send me an email not having their credentials and if you have any questions on the part I already presented do not hesitate to say it in the Slack room. Thank you very much and I just top my screen during so that Jakub you can do it Perfect. Awesome. Okay, so hello again. You will start with the first part of our tutorial today and we'll start with probably the thing that most people connect with spatial data and geography which is making drawing maps. And we of course want to draw a map for several reasons. Firstly to just see our data, to validate if our data is correct but also at the end of our projects whether you want to share our results with other people and you want to have a map as a result of our project as some kind of an outcome. And we want to have our map in some kind of a paper or report or a blog post or some other format. So today due to the time limits and so on we will focus just on one major package for making maps in our called team up and we will also focus on one type of spatial data which is called spatial vectors. That being said, we know that there are a lot of possibilities and team up is not the only one. So probably you know that we have a lot of packages which gives us and allows us to create regular plots like ggplot2 or interactively plotly. We have of course built in functions in R namely under the plot function. And in all of those tools we can also create maps. For example, most of data packages are spatial data packages have function called plot and you can plot a simple spatial data. However, it is very or at least quite hard to create a nice looking map just by stacking a lot of plot functions all together. Therefore, we are going to focus on some packages dedicated for making maps because they usually not only are easier to operate they also understand spatial data better and finally they also have defaults that are more suitable for spatial data. So today I'm going to focus on the package called team up and you will hear about this package in a second. However, there are some more possibilities like ggspatial which is an extension of ggplot2 or the cartography package. And when we're talking about making maps traditionally we are thinking about static maps which means we create a map, we can print that map and this map is static in the sense that we cannot manipulate data after making this map. On the other hand, we also have some tools for making interactive maps. So with interactive maps, we can create the map and next our users can zoom in or zoom out can pan on the map can select an object and so on. And in the interactive maps world we have packages like a map deck, map view or leaflet but as you will see fairly soon the team up package also allows us to create interactive maps. So maybe before we even start this we probably should ask ourselves this fairly simple question. Do we really want to draw a map? And this is not a vain question because maps are perfect for some problems but not for all of the problems. What do I mean by that? Our main purpose while making a map is not to just create a nice looking plot it's to communicate something. Therefore, our map should be and our situation or some features we want to present needs to have some spatial patterns. We want to show that something in space is related to our data because when we have a data which is exactly the same on the whole map it just not a very, very useful map. So here we can see on this example we have a, we can see on the left regular plot which just gives us some values of coffee bars per department in France. And we can see that some departments have more some departments have less. However, when we put that on the map we can see that some areas have larger density of the coffee bars. And we can also look at the second dimension so what was the department with the smallest number of coffee bars. And we can look at this if that's something which is spatially related. So this is our main reason. And as I mentioned before this is not the only reason. Sometimes we just want to create a simple map to see if our data is correct because we shouldn't expect that our data will be always correct. And this is I think also a good way of working to start by looking at the data and understanding data better. So when we think about making maps we also should know a few rules about visualizations. And many of visualization rules like selecting proper color palettes are very or identical to creating regular plots. And there are of course a lot of rules just for cartography and just for map making. So we know that when we have data which is qualitative data for example, name of a region or some category or a group and our data is point data we can use different shapes to describe our data. So one category could be this shape the second category could be this one and so on and so on. In this context we can also use colors but you can see that each color is very different. So we cannot order those colors. Every color is very different and this way we can put a name to a color. And colors can work not only for points but also for lines. And as you can see in the example below an example of land covered classes colors can represent different categories. Next we can also think about quantitative data. And here we can think about two types. So can we sum the data and it still makes sense then we can use so-called absolute data and we can use sizes to express our data and to show that there is a difference between the smallest sizes and the largest and this difference is proportional to the size of an object. And of course, again, this applies to point data. On the other hand, we can still use colors for quantitative data but in this example colors should have some order and we should be able to know the order as quick as possible. So this example, you can see that we start from bright brown color and we are going through next colors and finally getting to the dark brown color. And in the example below, we can see those colors used for unemployment rate. So that's important that we need to, when we have some data, we need to ask ourselves a question. What's the type of the data we have and we want to present? Gladly, we have some R packages and R functions and often they helps us with making proper decisions as I will show you in a second. Okay, so let's start by reading spatial data because of course we cannot create a map or most of the time we shouldn't create a map when we don't have a spatial data. Of course, sometimes we can create data by hand but in terms of spatial data, creating few points is possible but more than that, it's maybe not, maybe R is not the best for that purpose. So in this example, you can see that we've got three data sets. One is called Europe.gpkg, second one is department.shp and third one is covers bars.shp. So those three data sets are spatial vectors. So they are represented by the vector data model and in case of Europe and department, we are talking about polygons, so format which shows us areas. And the last one is about point data. So to read our spatial data, we are using the SF package. So this is right now the modern standard for vector data in R, which allows you to read dozens of spatial vector formats. And it also includes, for example, creating spatial data from text files. So that's also possible. However, in our case, as you can see, we have spatial data formats. So we have two formats here. One format here, using those two examples is called shp, which stands for S3 shapefiles. And the second one is the modern replacement of shapefiles called GPKG or geo package. So we are reading all of those using the read underscore SF function. And this way, we are creating new objects. So we have three new objects and we know that they are spatial objects that we want to visualize. So how the team-up package works? Of course, firstly, we need to attach this package with library team-up. And next, we can start making maps. And with the team-up package, we have fairly similar ideas to the ggplot2 package, if some of you are familiar with that package. So here we are using some kind of a grammar to create maps and maps are created by stacking layers. Well, the main function in this package is called tm underscore shape. And as you can see here as well, most of the functions in this package and all of the functions that create maps have this prefix. So tm underscore allows you to look what's possible in team-up when you want to create a map. Okay, so going back to TM shape, so what's TM shape, why we even have this function? So the main role for TM shape is to let the package know what kind of an object you want to visualize. So if you just type this line, so TM underscore shape Europe, we are just letting know the team-up package that we want to visualize our dataset, our object called Europe. However, if you just try to run this line of code alone, you will get an error because this function has only one main role to specify the data. It does not give you any visualization. Why is that? This is because we need to specify how we want to visualize our data because we can, for example, visualize our data symbols. So for example, we can have different shapes or colors or sizes for each point. We can visualize our data as lines so we can have different colors or line widths to show some attributes. And we can visualize our polygons in several ways. So TM polygons gives us some color for the internal, for the areas of our polygons and also gives us some other color for the borders of the polygons. Sometimes, however, we just want to have either only the colored areas. In those cases, we will just use TM fill or we just want to have our borders only on the map. Then we just use TM borders. We can also put some kind of a text on the map and many other concepts, many other layers. The one last thing that I should show you is that we are connecting all of the layers, all of the commands in the team up package with the plus sign. So in this example, we are saying, I want to plot my object called Europe. So the object we read on the previous slide and I want to visualize this object using TM polygons. So I want to create polygons of my data. And you can see we have quite large data here. So, but in our case, as you remember, we loaded three different data sets. So we want to focus on just one area, on area of France, and we want to plot different departments. So here, look at the pluses. So we started with this one on the previous example, but now we said, I want to add something to my map. And what I want to add, I want to add my second object, departments L 93, and I also want to do something else. I also want to zoom in just to this object. Because on previous slide, you remember, we had a very large area, but we just want to be here. So it's possible we've just specifying is master equals true. So this data, this object, becomes the main object that we are going to zoom in. And next, again, we need to specify how we want to, for this data, for this object to be visualized. And in this example, I want to specify a color for each of the departments. So I can do that with call and specific. So the call argument, and I in my data in the departments, I have a column called NOM depth. And in this column, you have names of each departments. So this way, I'm saying, I want to have colors based on this column. And the team up will automatically create some colors and will add a legend. And finally, we can either stay with some default color palette or we can move to some different color palette of our choice. And in this example, I selected color palette called set one. This color palette came from our color brewer package. And you can see, this is our map. But I'm not entirely happy because for this map, I don't think the legend is maybe required. Maybe I just want to show you the spatial distributions and sizes of the departments. So what can I do? I can just specify that I don't want to have a legend here. So I can just say legend.show equals false. And now we can see hopefully the first difference. The first difference is the legend is not here anymore. The second difference that hopefully you can also see is that I also added borders between the departments. How? I just specify that I can add borders with plus TM borders. And they will have gray color by default. And I decided maybe the darker gray will be better. So I changed the color to dark gray. So this is how we basically manipulate with the team up package. So we specify our objects and we are saying how our objects should be portrayed. And we can connect many, many objects. And then this connection works as layers. So the first layer will be at the bottom. And next we are putting the second layer on top of the first layer and so on and so on. Here you can see even expanded version of this idea where when we added three new elements, so now you can see that we added a scale bar here in the bottom right corner. We added the north arrow in the top right corner and we also added a map title in the left top corner. So how can we do that? In the same fashion as previously with our map layers we just need to add another functions that we can also manipulate. So in this example, I added TM scale bar and this is the default TM scale bar that was made exactly for this dataset for this level of zoom, but for different data it could have a slightly different values. Next we added TM compass. So TM compass creates a north arrow and by default I think it was probably here, but I wanted to move it somewhere else. So to move any element, so we can in the same fashion we can move, for example, the scale bar, to move any element we need to use the position argument. And the position argument requires a vector with two elements. The first element says, is it left, center, or right? And the second argument specifies bottom, center, or top. And also you can try, it's possible to specify those as values between zero and one and between again zero and one. And finally, we are adding the last layer. In our case, this is a map title and to add elements like map title or change the map background or disable the map frame and many others, we can use the TM layout function. So in this example, I just added a title with the title argument equals to French departments. Okay, so that's about all from the introduction, very brief introduction to the TMAP package. And now I have a question for you that you can answer on Slack. So the question is, what is the correct code to draw departments L93 map? So we know that this data set is a spatial object containing polygons and you have four answers. A, B, C, and D. So just take your time and look at the answers, think a little bit, try not looking to the previous slides and select what do you think about it in the Slack chat. So thank you for your answers. So it seems that everyone agrees on the answer C. You can also visually see that also all of the function starts with TM underscore. So I think there are any exceptions from that rule. So that's why this one is also not correct. And you also here in the answer code B answer, we didn't start with TM shape. And you will see that every time you want to create a map of TM package, we use start with TM shape almost every time. Okay, so just to sum up this part of the tutorial, the first question you should ask yourself is do you really need a map? And you should be honest with yourself because often we want to condense a lot of information when we create some reports and so on. That's why we should choose what's the most effective and what's the most informative. But again, if your map, if your data is have some special relationships, that's a perfect way to visualize that. Maps are great for that. Next, we need to think about different types of representations and visualizations. And we should think about not only what's the correct type for our type of variable, but also what's the correct color palette for our audience. For example, if you want to print your map in the black and white color, maybe you need to change your color palette to something different than you made on your computer. And you also need to think about what's your audience expects. Finally, we started using R and I showed you that you can read spatial vectors like shape files or geo packages with the SF package. And at the end, we draw some team up maps with functions like TM shape to specify the data, TM polygons to plot polygons, but we could also use TM symbols for points or TM lines for lines. And you know that you can add some map elements like TM scale bar or TM compass. And we can change appearance of our map with TM layout. So that's about all for the first part of the tutorial. Now is the time for you to test yourself, to try work those ideas. We prepared you some exercises that you can find in the Santa Cruz platform. And for this part, we ask you to start from the beginning of the file and work through until the line for the manipulating vector of data presentation. So just the first few... Maybe we can present inside the RStudio Yakub directly to show which file to open or I can do it if you want. Yeah, okay, good. Yeah, I'm here. So we have our files. You have some introduction and next you have some packages to attach. And finally, you've got some exercises scenario and objectives. So we ask you to read some data and next to fill some missing code and so on. So hopefully you understand where you can find it. So it's in your main folder. I think you just have this file. So just open this RMD file called starting with EXO, explore St. Louis. As Doris mentioned before, this data set is our idea was to put you in St. Louis to maybe just to have a look at the city and have some fun being there. Maybe you have access to the HTML. You can open it Yakub. The HTML is the exercises when you will finish it at the end of the three hours, you should be able to have this. So you can open this one and see what we expect you to do. So you have the, not the answers, but at least the maps that are already drawn. So if the text is not understandable enough, maybe the map which is drawn will help you to see what we ask you to do. Next major topic when we think about maps and spatial data and probably the hardest topic to grasp is fairly, fairly, I would hope obvious sentence that IRF is not flat. So we, when we work with spatial data, we usually, maybe not always, but in most cases we work on data from our planet from IRF and our planet is not flat. But when we create maps, maps are flat. Maps are put on our flat screens or on a piece of paper and so on. And therefore we, it's not very easy and not obvious on how to put a sphere, our geoid, our planet and put it on a map in the best way possible. So here you can see example on the left again that's actually the simplification of our planet because our planet is not that nicely looking. We have some mountains and some flatter areas and so on. But when we need to, when we want to put them up, we are moving to closer to this visualization when our data is flat. And there are a lot of ways on how we can do that. So that's the role of cartography, how we can convert and move from this 3D representation to the flat one. And you see some major ways of transforming data from the sphere to the flat surface and they are cylindrical or conic or azimutal. And they have some properties that are better and worse for some kind of maps. Like azimutal are often used for poles while conic are used for larger scale maps and cylindrical are used often for world maps. However, we always, when we create maps we have some distortions and our maps are not exactly the same as they are when we think about Earth as a sphere. So how we, using R, how we can operate and how we can know what kind of projection we are working with. So we call this whole idea coordinates reference system. So in the, let's say recent history people created a lot of those called reference systems because someone wants to create a map of France but other person wants to create a map of Kenya or map of US and maybe a global world map on a map or just Asia and so on. So for each map we have a map of the United States we want to be as correct as possible about our area and we don't care when we create a map of US we don't care if our map will be distorted for some other continents. We just want to be as best as possible for our area. And because of that people created hundreds maybe thousands I assume called reference systems. And as I said, this is a large topic and I'm definitely not going to tell you everything you need to know about it in this few slides but gladly most of the time spatial objects contains this information. So your spatial objects like our data we read a few minutes ago contains this information. And one way on how you can work with data and your objects because sometimes we need to move from one representation one projection or one coordinate reference system to the other and one way to name your objects is to add the post fix showing you what's the projection we are using. So for example in the here we are either using local projection L93 or we're using global projection WGS84. And very recently just a few months ago there was a huge change in our in relation to coordinate reference systems which meant that if some of you work on spatial data before we usually work with using this representation called Projforce string. However, right now we are moving to a new representation called WKT well known text. And this let's call that code. This code stores information about our projection. So for example in this NZ data we have local projection for New Zealand and you have some mathematical properties of this projection stored in your file. So most of the time you don't need to worry about that too much. Most of the time it's in your data. However, I recommend you to watch the video here on the, you have link here which explains the changes and also explain in more detail what the WKT is and how you can extract that from your data. Next, when we think about spatial data we also need to know that spatial data is just a simplification of reality is just some kind of a model of our reality. Because our reality as you know is complex is we are still not able to grasp all of it but we can simplify our reality. And we are doing that using those two data types namely raster and raster as you can see here or maybe something which is called to regular raster is just a matrix. So we have columns and rows and each cell has some value and we can put a value of a reservation for example or maybe you can put a value to a long cover category and this is how we can create maps using raster data. And also we can have vector data and you already seen some examples of that during the previous session and during the exercises. So we can have polygons. For example, countries are represented by polygons or French departments or neighborhoods in St. Louis. We can have lines, so like rivers or roads and we can have points, so locations of something. So what are the basic packages that we are using for spatial data? So right now I recommend you when you are working with vector data to use the package called SF. So the SF package is the modern way of working with vector data and it's recommended for most of the use cases. When we are thinking on about raster data situation is maybe a little bit more complex. You can go both two ways. You can go either with the package called stars which not only gives you a support for raster data but also for space time data. And finally you can go with one of two from the group called Terra or raster. So I still recommend using the raster package but there is a new package called Terra which is planned to replace the raster package with some more efficient code for processing of raster data. All right, so now is the time for the next question. Again, like in the previous example, in the previous case you should open your Slack and try to read the question carefully and read the answers carefully and try to answer that. So the question is what is the first question to ask yourself when you have a problem with your spatial data manipulations? You know that you will have these two questions at least to ask yourself. So maybe the first two questions and everyone agrees that it's B and C and then you can probably ask about your computer or the instructors that we are. Thank you, Jakob. I think then you have a summary part but the part is for you to remember. Just those four elements. So projections as we mentioned that's the most often the main issue but issue the sense that I will encourage all of you to think and learn a little bit more about projections. Next, we need to know that main two data models in our vector data and raster data and because of that we also should use different R packages. Good, so I think we will let Doris share our screen. Yep, let me find. I have so many, oh my goodness, where is it? Thank you, Jakob, for this first part of the presentation. You can move your hand if you want to say to a close so that there is no sound and we're happy to have you here and he's not leaving, okay? He'll be here for the exercise as part two. But thank you for having me. I like press something and all my slides just went out of control. Okay, so now we're going to talk about just kind of going more into detail but not too much detail due to time constraints about projecting and reading your data. So when you want to read in a spatial data format which several are listed, you're going to use read underscore SF. If there are issues in loading your data, maybe you forgot to load the libraries that might be one thing or you might accidentally map to the wrong location or you might have the file extensions wrong. So just two things I want to mention before I go on. The most used spatial data format is the Esri shape file and that has a minimum of four files. I'm going to have to throw in my GIS librarian hat on and say, if you really want to be nice, please add some metadata to that and an XML file or like just just something. So if you share it, you're showing that you care with a metadata file, okay? And then next is the geo package. A lot of issues can happen with like sharing of files because the shape file is like four to five files. So the geo package packages everything up into one file. So that is the new thing. So I haven't personally played around with it yet as much but it is becoming the thing, especially if you're like using different GIS platforms. I highly recommend you look into geo package. And as you can see, the read underscore SF function is mapped to the location of the data. Okay, I'm going to move on. So we had this very healthy discussion about getting the coordinate reference system, you know, like is your data projected or not. The easiest way you can do that is just using this function st underscore CRS and you will be able to see what your coordinate reference system is. And I'm not going to like go into detail about all of that because it can get really lengthy. So let's just say you have a points data file and it's in WGS84, which is actually a format that's used for 3D data. And you need to project it to a date, to a projection that is more appropriate to where the data is actually at. You're going to use st underscore transform to do that. And you are going to use whatever CRS coordinate reference system that you want to. If it's points, like if it's a CSV file, a points with latitudes and longitudes, I highly, highly, highly, highly recommend that you first transform it in WGS84. And then after that, transform it to whatever projection you want. That's just going from a lot of trial, pain and error, dealing with points. And that kind of moves on to my next point. Ironic. You use for CSV files, you can read it in or CSV text so on. You just use whatever appropriate reader function is that you need for that. So for example, in this slide for cafes and bars, we're going to use read underscore CSV for that. And as you can see in the slide, you have the amenities, the timestamp, the user ID, and the longitude and latitude. But you can't play around with this spatially yet because it is not transformed into a spatial object. So in order to do that, you have to use the ST underscore as a self function to do that. And so after you read in your CSV file or text file or whatever, you use this function and then you specify which columns are your longitude and latitude. And just make sure that you actually know the spellings of your longitude and latitude because some people might do long, lat, and then they'll put this code in and be like, hey, why doesn't work? Well, it's because your columns are not the same. So be, oh, and then, yeah, be, notice that. And then if you are a GIS person who's worked with different software, for me, I think of things in lat long. And I remember I was like 10 minutes trying to figure out why isn't this working? It's because you need to put your longitude first and your latitude second and then your spatial, your CRS. So that's a big tip from me about using this function. And then let's just say you read it in, you do some spatial manipulations, you might join some things together and you wanna output it as a shape file or a geo package. Well, you can use the write underscore SF to do that. And yeah, you can again use any type of format for that. And like I said before, highly recommend that you play around with the geo package format because that's becoming the new thing and GIS or spatial computing. Okay, now that I hope people were able to grasp what I was saying, I know I went through that fast but I want everyone to have time to do the exercises. So let's do this quiz. So what is the correct way of dealing with the following text file with coordinates to be used as a spatial points data set? And just know that 2154 is Lambert 93 projection, France projected and then 4326 is the WGS84 format. So I believe there is a poll up and yeah. Yes, take your time. This one is tricky, but you will use it. Agreed, agreed. Okay, so answer D is not good because you have a TXT file, which is a text file, which means that you will not be able to read directly this as a spatial data set because there is no spatial information inside. So answer D is not correct, but you pointed this out. Answer B on the bottom left. B is not good either because we read a TXT file and try to transform it as a spatial data with ST transform, but ST transform only works if your data set is already a spatial data set. But if you read TXT file, it's not a spatial data set. So you have to use the function ST as SF to transform the text file into a spatial data set file, which is why A and C should be the two answers to look at. The only difference between the two questions, these two answers is the coordinate reference system. And when we use ST as SF, you have to choose the coordinate reference system of the data set you have, not the one you want, the one you have inside your data. So you need to know what is the projection of the data you have. In this case, we wrote that is position of point using a GPS and with the GPS, you have geographical coordinate data, which means it's answer A, which is most likely to be good. But as some of you pointed out, it's probable that the order of coordinates is not in a good order. Like we should put longitude before latitude. So because I think we tried on the previous slide, it's longitude before latitude. So you see, even if we think that something are good, it's not good. So answer would have been A, but in the present case, it's no answer is good. It was not intended to do it this way. Okay, just a mistake for me. I think we're going to go to the exercise parts. Doris, you have, I think, a summary part for this. Yeah, I think you actually summed up the most important point, you know? I was going in the slack and I'm like, what do you mean? What are you talking about? Should it be longitude? I was like, what do you mean, but it is. And then I looked at the exercise, I'm like, oops. Cause I'm like, oh, I work in different GIS platforms, blah, blah, blah, but now I see, sorry about that. My bad are bad. Yeah, so that's the biggest lesson long. Make sure you have your longitudes before your latitudes. And I really don't think there's anything else to say. No, let's practice now. Sorry. Okay, I'm going to try to get through this as quickly as possible. So now we're going to talk about, am I on the right one? Or is this yours? I'm sorry, let me go back. Okay, so we're going to talk about manipulating spatial, I mean vector data using the tidyverse. So as we've been looking at, the data that we've been dealing with is rectangular. So it has rows and columns. And so one, so we can use many of the deep layer verbs on these SF objects, which for me, going from many GIS platforms, I thought this was pretty cool. For example, you can do a union of the various departments into one region. Wait, hold on, I'm sorry, sorry. You can do, I'm trying to figure out what this is doing. But you can filter out certain names of your regions or you can select what you want to have into your, like from your spatial data using deep layer. So like, if you only need three columns, you can select that. And let's just say you wanna do a little bit of cleaning up of your names. Like for example, the S2 title puts a capital letter on every first letter of your name. So you can do all sorts of tidying using the deep layer verbs and then also making sure you use the piping notation. And I kinda like went too much forward because this is actually what I was talking about, how you can actually like do what I would call like dissolve if you're GIS person to doing it from departments to regions. And I just thought that's pretty cool that you can do a group by and summarize to group smaller geographic units to bigger geographic units. And one very, very important function that you will be dealing with a lot with spatial data is joining. And I'm not gonna get into the whole details of it due to time, but essentially when you do a join you have like a shared key, a key that's the same between both data sets. And then you're gonna do a particular join. For me, I do a lot of left joining. So if there's like data set A and B, I'm joining B to A. And all of the columns from data set B is going to the spatial data set A. And then like, if I just want like, like I have two data sets and I just want the ones that are in data set B and that's it to show up, you know the share between data set A and B then I'm gonna do an inner join. And I'm only gonna see what's in the, like what's detected in the second one in the first one and the first one, if that makes sense. So you're only seeing what's common between the two data sets with the inner join. And then the full join, I guess there's times to do this. You're just joining everything together. I don't know, personally I would never, I had never had a reason to use it, so I never did. So I've mostly used left joins. And then if I just want data, like I just wanna know what's in both tables. If I'm joining like one to another, I'll do an inner join. And I'll put a link in the exercises channel just so you can better understand that because this can become quite lengthy of the discussion. So for example, in here, you know, for me what I always do is I do a glimpse and try to see what columns are in the data that I'm dealing with and I find commonality for that. So for me, one of the things I do a lot is join demographic CSV files to boundaries, to boundary files. And the data that I use has a common key. And I just look for that common key name and I join it using that specialized number that's created from the data source that I use. So just when you have two data sets, see which fields are common, log them and then do the appropriate join based on what you're really trying to get. But if, you know, just a quick application tip, if you're joining demographic data to like say a region or geographic boundary, chances are you're gonna be using a left join. Chances you are. Okay, so, but for this one, for this inner join, I'm joining these two data sets and I just only wanna know what's in both data sets and I only wanna see that. So that's why I would do an inner join because the difference is like with a left join, it's gonna just show NA, like if there's no matching values, it's just gonna show NA, but the inner join doesn't even show anything, it just shows me what's in both data sets that's common. And then you can just glimpse that. Okay, so I hope that made sense. So for our next quiz, what you're gonna do is to choose which function, which join function allows you to join the external data set restaurants with the spatial data set France underscore L 93 but you only want to keep spatial entities where there is a match. So one tip, the direction is important when it comes to figuring out what the answer might be. See anyone in the answer? Can I give a tip, Sebastian, just a little hint? Of course you can. Thank you. Okay, okay. So I just wanna reiterate this question because this question might be a little confusing, okay? You only want to see the data, like when you joined France 193 to restaurants. So think of the direction of the join. You only wanna see what's being like, what's, you know, the transaction. So if I have A to B and I'm transferring B to A, I only want to see what's in A. And that's essentially what this is asking. So the transaction is very important. So you only wanna see what's in the first data set that's chosen, which is restaurants. Many teams, huh? So maybe we can ask one of each team. You can change answers if you want, feel free because, you know, joins are very tricky things and I even get them confused in my head. Like I have to think about it conceptually. I'm like, okay, I'm joining this to that. And, you know, so it's totally fine, okay? Like we all deal with spatial data. And for, I mean, I'm gonna just submit. Like sometimes I mess it up. Yeah. The problem is not to have the good or the wrong answer is to understand why one is good and one is wrong. Why we are here to explain you. But maybe we can ask, for instance, I see that Julius answered B. Would you like to explain to us why you think B is a good answer? If you... Yeah, I think based on how Doris explained the left join, France is my primary dataset. So I just want to see what happens to it. You're almost there. You got the, you got the date, like you got the dataset, right? Like B, you got the dataset, right? But the thing I emphasize is you only want to see the restaurants data. You only want to see that. And that will only show up if you do this one join. Maybe we can ask someone who answered the C. Who didn't ask Prishila, for instance. Uh-oh, I see more people are. If you want to... Sorry, did you ask me? Yes. Would you like to... I chose, you know, first I chose restaurants. So first because she said that she wanted, that restaurants was the thing she wanted to see. And only the France ones that... Well, there was a match. So I want to have all the ones that have a match to restaurants. So in that case, I will do in a join. We'll get all the ones that have a match. And as restaurant was the focus. So I use, I start with restaurants and then I in a join France, whatever. Okay. Good. I'm not sure if my explanation is going to be... Yeah, I mean, that's an explanation. That's good. I mean, and now we will listen to somebody in the D camp and then you will be able to know which one is good or not. I see some people moving from one group to the other, but who can I ask? Cathy, did I ask you some questions already? In the D group, if you want to answer, Cathy, maybe I'm not saying correctly the name. Cathy? Okay. Or Bill, Bill would you like to explain us why you chose D? So D will start with the spatial dataset France. And only keep the rows that also appear in restaurants. But I'm struggling to understand why C and D because an inner join will take those rows that match in both data set only. So do you want to explain noise? So there might be more matches in one dataset than the other. So that could be one reason why in terms of the inner join. So the inner join is you will be sure that with the inner join that you only choose the data which is in both datasets. If you choose the left join, you will keep all the data from France and some of the data from restaurants, okay? Which is not the question. And then the difference between C and D is the order. Do we keep restaurant first or the spatial dataset first? The thing is, if you want the inner join function to work with your spatial data and keep your spatial information at the end of the join, you have to put the spatial dataset before, okay? So if you do the inner join, yeah, so the answer D is a good answer because otherwise inner join will be used as a deep layer on the classical dataset and you will do a classical join and you will lose the spatial information. I'm not even sure. I think it doesn't work now in the, I think I'm going to take a new screenshot just to see the evolution of your faces during this tutorial. So if you want to appear on the picture, you can open your video now and if you do not want to appear on the picture, of course you can shut down your video. I see some intruders. Colin is coming back just for the picture, right? So how do I take a screenshot now? So you can have a smile or you can show that you're exhausted, you can move your hands, you can just do whatever you want, but the picture is going to be, oh, my computer is really exhausted. So let's have a screenshot in three, two, one. Three, two, one. Yes, good. And I put two screenshots because I took two in the slack so that you know what you're looking. Perfect. Shell reminded me that we will ask you to answer a survey at the end of the tutorial or I don't know if it's just at the end or maybe later by email, but you will receive a quiz, the questionnaire to know for the user conference how you felt with this tutorial. And I probably also send you another quiz with specific to think or because the platform you use now who is quite new platform and would like to know how you felt about it to see how we can improve it or not. It will be a short questionnaire, don't worry. If you don't want to answer, just don't answer. Yes, Shell. I'm going to paste the link to the survey on the general channel. So please, please, please, before you go, just check it out and I'll give more details on the text, on the slack. Thank you, Shell. So it's not finished, okay? Stay a little more. I will present you the following of the course and then take the time we have to do some exercises. Okay, go on, Shell, you're the last one and you have 100 of slides to finish. Good luck. Okay, that's finished, I'm going too far. Perfect. Ah, yeah. You presented this and this and that. Good, okay, okay, okay, exercise. Okay, manipulating vector data, spatial manipulation. So you learned how to draw some maps with TMAP. You learned how to read some spatial data. You know how to read some non-spatial data text file that you can turn into spatial point data sets. You know that you can use all the deep layer of verbs that you already know to manipulate your data like it was a classical data set. So when you will want to add some information inside the table of the data sets, you will know how to move it because you know how to use the tidy verse on it. And now we'll go to the spatial specific part. So something you probably don't know. Well, I hope that we also teach you some things in the first two hours, otherwise it's used, we are useless, but this part is very specific to spatial manipulation. So this is the slide where we show you how to read the data because this is the data I will use in this shutter. So one thing I didn't say is that all the code parts inside the slides, you can run them because you also have the data of this France map. So if you want to try to run the code you have in the slides, you will be able to do it too. So the first thing you can take from your spatial data is some attributes. We already spoke about getting the coordinate reference system of your data with STCRS. And the STB box is to get the bounding box of the data set, which means the spatial extent. So it gives the minimum longitude and maximum longitude of the data and the minimum latitude and maximum latitude of the data in the coordinate reference system of the data sets. This one is Lambert, which means that is in meter, but you have at least the spatial extent of your data sets. We spoke about joining some external data sets with a classical data like left join or inner join in the previous quiz. But what you will probably do too is to join two different spatial data sets. So for that you can use ST join or you can use ST intersection for instance. The ST join is like the left join in classical data and the ST intersection is like the inner join. And why would you do that is for instance you have a big set of spatial points. And here we have some coffee and bars in France. And you want to get the data sets only the points that are in a specific place. And if you have a spatial data set of polygons you can choose to do the spatial join and keep only the points that are inside the polygon you have. So if you use the ST intersection it works like the inner join and the ST intersection will keep all the cafe bar which are in this specific region of France in this place. And so it keeps the points inside the polygons but it also keeps the information of the polygon. So if you do this spatial join you will get all the variables that are inside the second spatial data set. That's why here if I look at the points before the spatial join I have five variables but if I look at the spatial data set after the ST intersection I get 16 different variables because some of them are coming from the spatial data set I used to do the intersection. So you can get information of all the spatial data while doing the spatial join. And if I show you the result of this intersection here I use the ggplot to do the plot not the map but you see that it's possible to do some ggplot with geom SF. And you can use different layers if you use data in each time in each geom so that you can put different spatial data set inside. So the first layer is the department which is very behind in the gray feeling gray. You have the cafe bar which are all the points. So the black ones and the yellow ones are all the bars in France. The one that are only in the specific region of France which is called Brittany here is are the yellow points. So these are the ones I created with the previous slide with the intersection. And the last one is the polygons of only Brittany that I put over the yellow points. So you see the intersection just took only the part I wanted inside the yellow region here. There are other geometric corporations so if you want to do an intersection without keeping all the variables of the second data sets you can use SD crop. So it crops data but without the variables. You can union two different spatial data sets. So if you have two sets of points and you want to have only one set of points you can use SD union same with lines or polygons. You can use SD difference if you want to keep all the parts of your data that are not inside the second spatial area, spatial polygon for instance. And if you use SD union on a unique data set it will join all the features inside one inside one spatial data set. So the SD department is one with all the region of France and if I apply SD union on it I have the complete I have a unique polygon with all the polygons that were merged, joined, unioned together. You can do some geometric measures on your spatial data set. So if you have a set of polygons you can calculate the surface area of the polygons. If you have a different data set you can calculate the distance between two sets of points for instance or distance between one set of points and one set of lines or one set of polygons. So any vector data you can calculate the distance between different features. And if you calculate the length you can calculate the length of a line. So if you have a set of roads for instance of streets you can calculate the length of each of each streets of your feature, if you want. And so this can apply directly on the data set. But I suggest to use it inside the mutate, which will create a new column inside your data set. And you will have the information. Here is the area of the each polygon inside the data set as a new variable of the data set. And if you want to do that, this is a way to do it. So if you look at the result of these lines of code, we take the entire map of front with all the departments inside. I create a new variable, which is called area, which calculates the area of each polygon. And then I select only two variables of the final data set so that I can show it on the screen, otherwise it's too big. And you can see that we have the first column here called we have the area, which is a surface. What is good with SF2 is that the area is calculated with packaged units, which means that you can do some transformation between middle square to kilometer square with one function from the packaged units. And of course, each time you use a deep layer verb on your spatial data, you keep the geometry because they are specific to the geometry, even if I do not put the geometry inside the select here. Of course, you can do that with areas, but you can do that with lengths, too, work with a line data sets. An interesting feature, too, is the ST centroid. It takes the gravity center, the centroid, so of your spatial data. So you can have the centroid for your points, for your lines, for your polygons, depending on which one you use. Usually for spatial representation, if you want to put some numbers of, I don't know the size of the population, for instance, you will use a circle to show what is the number of individual inside each department. And to put this circle in the good place, you can use a centroid, for instance. So here, I calculated the centroid of my polygons and I have all these points, these orange points in the middle of each polygon of my spatial data. Another feature is the buffer area. It means that you can have a polygon at a specific distance of your features. So if you want to know what are the points around 50 kilometers around my point, you can use this buffer area. It will create a polygon that you will be able to join, to intersect with your other data sets so that you know what's around your city. This buffer area is working on point, but also on lines and also polygons. And in the example below, I used ST Union to merge all the department of Brittany, the department of Brittany, so always the same part of France. And then I do the buffer around it. And also, like for the calculation of the surface or the length, SF is working well with packaged units. And here I say, okay, you can calculate the buffer area with around 50 kilometers. And if you use units to do it, it will be easier for you to know exactly in which unit you are working with. You don't have, otherwise, you will have to use the unit of your data sets. And in orange, of course, you have the buffer area around the Brittany part, which has these four polygons here in the west part of France. So of course, there are many, many other functions inside SF package, there are many operations. We wanted to present to you what are the main functions. You can use, and I mean, usually these are the function we are mostly using when doing some special data as the others. You will find them by yourself. So before giving you some time for the end of this tutorial, I will ask you this last quiz question that I can put also inside the Slack is what function do you use to, at the same time, die cut the spatial data set point data set using the spatial polygon data set and keep the variables of the polygon inside the point. So, oh, so you're almost all for C. It means that I explained very well this part of the course. So yeah, so if you use ST join, it will not die cut the spatial point data set, okay? It will keep all the information of the second spatial data set while keeping all the information of the previous point. ST join is like the left join. So you do not die cut. If you use ST crop, it die cuts but it does not associate variables. If you use left join, it won't work because left join is for non-spatial data sets. And if you use this in the section, of course, it die cuts the spatial points with the polygons and associate the variables. So that's perfect for the end of this tutorial. You have all the good answer. I'm very proud of you. So as you saw, there are different summary parts in the tutorial. So you can go back to it to help you answer the question inside the exercises you have. Normally, you don't have to take any other function that the one that are presented inside the tutorial, inside the slides to answer the exercises. And it should be the time for practice, but I think I will stop the tutorial here. I will probably stay for 15 to 20 minutes more so that you have some time to do some exercises as I am here. I don't know if how Doris and I could be hard for now, but I will stay here a little more so that you can practice now if you want, if you have time to do it, if you want to answer the questions. I will also, as I said, let the Slack open for the week so that we can continue to answer with you. I will put the answers on this GitHub at the end, just when I will have some time to take some fresh hair and to drink a little water after that. And so let me close the official tutorial for now. And just after the closing, it won't be totally closed because you will be able to do some more exercises and more discussion in the Slack channel. So as you saw, we had a lot of things to present you. I think Doris and Jacob will join me to say that we were happy to present you all this slide on this work and we were happy to work together to prepare this and to propose you this tutorial. You had some privilege because, you know, we could not accept everyone and we wanted to have some small groups so that we could interact with you. And you saw that we didn't really had all the time we wanted for the exercises part, which is the part where we wanted to interact with you, but I hope you had at least enough interaction during the part with exercises you had. And we're still here to continue on this and I hope you enjoyed having this introduction to spatial data. As I said, there are much more things to learn from manipulating spatial data, but at least you have the main thing to, if you have something to remember for this tutorial is the part we have in the quiz, okay? And as you now have 100% good answers in the quiz, you are good to go on your own with the spatial data, so do not worry, you're not alone with our community. Maybe I can let also Doris say a word before ending this. Yes, this has been really fun. I hope everybody else had fun, you know? I saw a lot of people laughing and that always makes me happy when I see people smile and laugh. So yeah, thank you so much for joining our tutorial and we'll make some updates to the code, like some of the quiz questions. Yeah. And have, see that was a good teachable. Like it was good to know that people were listening because I harped so much about that and then like we made that mistake. So our bad about that, but we'll have the material updated and ready for you to use on your own. So thanks again, everyone. I really enjoyed teaching you and also enjoyed working with you, Sebastian and Jakob, it's been fun and I hope you can do it again. Thanks, Jakob, you wanna say a word too? Yeah, I talked a lot through the first part, so I'm just going to thank you all for being here and it was pleasure to have this tutorial and I hope you can use some of the skills in the future. I would also like to thank Shell and Christopher for the help to set all this tutorial and work with the administration part and the quiz you had before and the choice and everything you did for us. So thank you for your help in this. I will let you close the tutorial as you opened it and then as I said, we're still here to discuss some slack for a few minutes if you want. Okay, thank you so much for, I don't know, time rush is so fast, like it's already three hours and we just started, I don't know, a third time, but we're so grateful that first of all, you applied and you were patient with us when we were going through the selection period and thank you for showing up. We had limited slots and apologies to anyone who was not able to make it. Just a reminder, as Sebastian has said, we are here for the next 15 or so minutes. So if you have a question, if you have a question you weren't willing to ask openly, feel free to DM any of us. Also, I would encourage you, people to join us in the Slack community. There's a very good hashtag that goes on. I don't know why Sebastian has not mentioned that, but I'll do it for you. There's a hashtag called R-spatial. Yeah, R-spatial, where questions are, like if you have a question on anything related with spatial analytics in R, you can always ask. It happens tomorrow, Tuesday. I know it's 5 p.m. GMT plus three, so it's 5 p.m., so it's 2 p.m. UTC. Maybe Sebastian can add the exact timing, but it's always a safe space where you can ask whichever question you want. It's also a good place to just look at what people are working on. Some of us recently started using R-spatial, that's how we feel as though we've become gurus, or maybe almost gurus, but I think I'm very proud of this community and I'm happy to have more people that adopt R-spatial analytics. So yeah, I don't think I have much. Thank you to the presenters for being patient with us. It has been a long process since we applied to host this tutorial, and I'm very thankful it has been a success. As Sebastian had mentioned earlier, we are going to share this material soon. I'm not sure when, but you'll have them soon and feel free to share with others who couldn't make it. And please follow the presenters. These people are good folks. I can speak on their behalf. Maybe they're going to pay me some commission, but anyway, they are awesome. No. No. No. No. You had your damn left number all in pants, okay? So. Okay, fine. That moment floated away last year. Okay, anyway, but these are cool folks. Anytime you have questions, not even today, not even regarding today's tutorial, anytime ever you have anything to, any question on our special analytics. And please check out Yaqub's book. I think he posted it somewhere. It's just partial computation. Let me try and ping it. It's an amazing book. And I think everyone should go through it. So I'm happy on behalf of Chris and I, Nehru B.R., you're grateful and see you in social media somewhere talking about our special. I would really hope to see someone talk about our special chat from something they've learned from this tutorial. It will make us proud. I'm speaking on behalf of the presenters, I'm sure. But it will really make us proud, but no pressure at all. Yeah, that's it from me.