Inside Airbnb: Visualizing data that includes geographic locations
This is a modal window.
The media could not be loaded, either because the server or network failed or because the format is not supported.
Formal Metadata
Title |
| |
Title of Series | ||
Number of Parts | 160 | |
Author | ||
License | CC Attribution - NonCommercial - ShareAlike 3.0 Unported: You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal and non-commercial purpose as long as the work is attributed to the author in the manner specified by the author or licensor and the work or content is shared also in adapted form only under the conditions of this | |
Identifiers | 10.5446/33717 (DOI) | |
Publisher | ||
Release Date | ||
Language |
Content Metadata
Subject Area | ||
Genre | ||
Abstract |
|
00:00
SoftwareIntelMappingMultiplication signGroup actionMereologyTelecommunicationEvent horizonResultantBitTwitterHacker (term)AlgorithmSelf-organizationComputer animationLecture/Conference
01:04
InformationComputer fontGoogle MapsRange (statistics)MappingWeb browserWeb page1 (number)Correspondence (mathematics)Expected valueZoom lensComputer configurationRepository (publishing)CloningWebsiteFile formatRepresentation (politics)Real numberLaptopVisualization (computer graphics)Set (mathematics)Electronic mailing listInformationPlotterUniform resource locatorComputer fileComputer-assisted translationBlock (periodic table)BitBeta functionIterationData miningMultiplication signVapor barrierWeb 2.0
04:51
Hill differential equationMenu (computing)Google MapsMaxima and minimaoutputHost Identity ProtocolSummierbarkeitPersonal identification numberPlot (narrative)MIDIPhysical lawMappingAdditionOrder (biology)Zoom lensLevel (video gaming)Set (mathematics)State of matterElectronic visual display1 (number)SatelliteRegular graphFigurate numberoutputVisualization (computer graphics)Object (grammar)Maxima and minimaKey (cryptography)Coefficient of determinationComputer animation
06:25
Graph coloringScatteringCodeNumberPoint (geometry)Web browserVector spaceElectronic mailing listFile formatDialectRepresentation (politics)InternetworkingPlotterAdditionSatelliteEmbedded systemEinbettung <Mathematik>Regular graphCategory of beingOrder (biology)Structural loadWeightComputer fileSystem callRevision controlShape (magazine)BitSpacetime
09:14
Hydraulic jumpMaxima and minimaRule of inferenceRange (statistics)MaizeLibrary (computing)Fatou-MengeLimit (category theory)Attribute grammarForm (programming)Data dictionaryRow (database)Different (Kate Ryan album)GeometryLibrary (computing)Planar graphBinary codeSymmetric matrixObject (grammar)DialectShape (magazine)Population densityVisualization (computer graphics)Electronic mailing listStructural loadPoint (geometry)Order (biology)ScatteringPhysical systemComputer filePlotterMathematicsScaling (geometry)Projective planeMedical imagingRepresentation (politics)WordShader <Informatik>LaptopInterior (topology)Process (computing)Expert systemBitType theoryPrototypeEmbedded systemObservational studyLine (geometry)Binary fileServer (computing)Category of beingQuery languageGraph coloring1 (number)CodeVideoconferencingFunctional (mathematics)Frame problemSoftware maintenanceINTEGRALRule of inferenceElectronic visual displayWeb browserSatelliteSocial classWritingSource codeHistogramRepository (publishing)Revision controlView (database)Time seriesQuicksortSimilarity (geometry)Two-dimensional spacePatch (Unix)Multiplication signSet (mathematics)MappingBit rateInstance (computer science)Front and back endsTexture mappingInteractive televisionGame theoryExtension (kinesiology)Computer configurationLevel (video gaming)Game controllerSeries (mathematics)NumberKey (cryptography)Regular graphCodeGUI widgetTesselationoutputDistanceLatent heatMereologyTotal S.A.Real numberNumbering schemeRight angleNeighbourhood (graph theory)Sound effectMatching (graph theory)Error messageCellular automatonSoftware repositoryData miningPerfect groupPairwise comparisonMedianDemosceneVideo gameDiscrete groupArithmetic meanCondition numberCasting (performing arts)CASE <Informatik>AreaLattice (order)Subject indexingPosition operatorState of matterMusical ensembleMachine visionInformationExecution unitPattern languageSampling (statistics)StrömungsdrosselMassPower (physics)Logic gateComputer-assisted translationPolarization (waves)CountingText editorPerturbation theoryWell-formed formulaPresentation of a groupMetropolitan area networkSymmetry (physics)WebsiteCuboidStability theoryVolumenvisualisierungData centerSummierbarkeitFigurate numberRange (statistics)Group actionData storage deviceShared memoryAssociative propertyEvent horizonUniform resource locatorLink (knot theory)Proof theoryParameter (computer programming)Covering spaceComputer animation
Transcript: English(auto-generated)
00:05
Hello everybody, it's a pleasure to be here. Today I'm gonna talk about maps. But first let's start talking a bit about myself because my name is quite Weird to pronounce so I will just present myself. I am the Andrew Rambegeste.
00:27
These are my Twitter and GitHub accounts. And when I was younger, I wanted to be a hacker so that's why I studied telecommunications engineering. But for the last five years, I've been more focused on learning Python and data science and
00:43
trying to invent my own artificial intelligence algorithms. I'm currently working in Madrid Source, which is a really good startup. But I am from Mallorca and I'm actually really proud to be one of the organizers of the meetups from ByData that we hold there.
01:04
Here, well, oh now it works actually better. Do you hear me well? A few months ago, Biala Stella, who's a friend of mine, found insiderbmb.com, which is a website that periodically scraps Airbnb and makes the data available to the public.
01:26
He wanted to study how Airbnb influences the real estate market, but he has no way to make cool visualization about his findings. You can see here how inside Airbnb collects data sets from all over the world, but mainly from North America and Europe.
01:45
And well, we also have some data sets from Australia and Hong Kong. Each one of these data sets contains 92 different columns, with a very wide range of features such as how the information was scrapped, listing features about the daily price
02:06
for renting, how many bedrooms or bathrooms it has, and so forth, and also has location features like the GPS coordinates that I displayed on the maps in the insiderbmb webpage,
02:21
the booking requirements that an owner makes to be able to rent his listing, and also information about how the people who rented a listing reviewed that listing. We will be using data from both Majorca and Barcelona, and well, it's one of these data sets, contains 14k columns and 17k columns respectively.
02:45
So it's in the range of what a browser can handle easily. So this could not be considered big data. This is one of the visualizations that the insiderbmb webpage has, which shows how the Airbnb listings are distributed in Barcelona. Here, for example,
03:05
you can see in green listings that correspond to a whole apartment or house. In red, you can see the ones corresponding to one room, and there's a few ones here in blue that corresponds to rooms that I shared.
03:23
If you go to the website, you can see the same representation, but for data from Majorca, and you can expect it, zoom in, and it actually works quite well when you have enough RAM, and has cool tooltips and filtering
03:42
options. But I think this is written in JavaScript, and this is EuroPython, so I wanted to make a tutorial on how to display this data. Plotting maps is easy, but it can really be a pain in the ass if you don't know how to do it.
04:02
So I wanted to make a tutorial for people that wanted to try to plot geographical locations, but had no idea how to start, so I can at least save them a few hours if they just download the repository and clone it. So today, we will talk about how to plot Google Maps using Bokeh,
04:24
how to work with shapefiles, which are a data format to work with geographical locations, how we can plot the shapefiles using oliviews and geoviews, and how we can use big data to make cool representation with Data Shader.
04:44
So let's get a hand on the notebooks. These notebooks are meant to be used with any data set available in Sarpel B&B, but as I am from Mallorca, I will be mainly using the data set from the island.
05:04
So how many of you know Bokeh? Please raise your hand. Okay, there's a lot of people here. Well, the ones that you know, please check the documentation. It's an awesome package for making any kind of visualizations, and the ones who already know it will find it extremely easy to work with Google Maps.
05:24
It is basically like building a regular figure object, but with additional features in order to indicate how we want our maps to be displayed. We will need to input the latitude and longitude coordinates of the center of the map,
05:42
the zoom level ranging from 1, which is for the whole world, to like 20, which is the much zoom you can get on Google Maps. You also will need a JavaScript Google Maps API key, and you also need to state which kind of layout do you want your map to be displayed. For example,
06:02
we have the roadmap layout, which is like the map that we already know. We also have the satellite layout, which is more like a Google Earth style, and the Ibloo layout. It is just like the satellite layout, but it also has an additional layer.
06:26
Well, let's wait for the internet to load. Let's get the cable.
06:52
This is the last layout, the terrain layout, which is almost like the roadmap layout, but with additional features that highlight terrain features. And the one that I wanted to show you before,
07:03
which is the hybrid layout, is just like the satellite one, but with an additional layer which shows roads and names of places. So once we have created our plot, we will go for the first example. In this example, I will try to recreate the plot.
07:28
To recreate the plot from inside Airbnb, so now that we have the roadmap layout, we need to embed data on top of it. This embedding will be done by creating just a regular scatter plot. Well, we will assign visual properties to each one of the points.
07:45
So first, we will select a suitable color map in order to mimic the plot that we are going to replicate. So we will select a diverging green, white, red color map, and assign it three colors.
08:05
And now we only need to create a scatter plot, where the X and Y coordinates of our plot will be the latitude and longitude coordinates from each one of the listings. And we get a pretty cool plot, which, given the amount of code that took to build,
08:24
looks actually pretty similar to the one that we had here. Of course, this can be improved, I mean filtering and additional and more worked tooltips, but
08:40
I think it's actually pretty good. Well, we're working with a number of points that can be managed by browser easily, but sometimes it comes in handy to aggregate data over regions. So we cannot trust the region data that is embedded in the data set.
09:01
We will have to download Shapefile with all the geographic data of all the regions in Spain. Shapefile is a vector format for geographical data representations. Each one of the Shapefiles can contain different records, and each record contains both a geometry and
09:23
different attributes. This geometry thing is handled with Shapely, which is a Python library that allows to work with planar geometrical objects, and each one of the attributes is stored in the form of a Python dictionary.
09:42
As we are getting all the regions in Spain, we would like to filter out the ones that do not correspond to Majorca. So, looking at the record attributes that we have, we find this Codenote3 code, which turns out to be
10:01
a standard way for representing geographical regions in Europe. Here you can see all the Codenote codes that belong to Europe at the level 3, and it turns out that Majorca is assigned the code ES532. So we only need to iterate
10:29
through each one of our records and store the ones that belong to Majorca. Now we have on the one hand all the shape files, all the shape records corresponding to the island and a
10:41
lot of GPS coordinates. So if you want to match one with the others, we will have to think some way to do it. What will we do? Okay, we will take the Shapely library and create a point object using the GPS coordinates of each one of the listings. Once we have created this point,
11:01
we will be able to calculate distance between that point and each one of the regions that we already have stored. When we find one which distance is zero, we will just store the name of the region that was that we found inside the column of the data frame. This way, we will be able to aggregate the data
11:23
by the regions that we just calculated. And now that we already have the shape files of the regions that we're interested in plotting and the aggregated data, we will use all of these and zero views to plot it. Please raise your hand the ones who know what is all of these
11:42
No one? Oh, great. And zero views, have you ever used it? Okay, they are actually two really cool libraries which allows to do really complex visualizations really easily and
12:01
they can use as a back-end Matlab, Bokeh, or Plotly. And well, zero views is an extension of follow views that allows for also working with the geographical data. So we will load all of use and zero views and we will create a data set from the aggregated data frame that we had.
12:27
Now, we only have to select the shape files that we want to plot, the data set, and a series of attributes that will create the visualization. In this case, we will choose on, which is
12:41
the common key on we will join the data, a key from the attributes of the shape files and from a column in our data frame. Value, which is the column in the data frame that will be used to assign colors to each one of the regions. Indets that are at least containing the name of the columns that will be used in the tooltip.
13:02
Group, which is used to state the name of the plot. And finally, CRL, which is the kind of projection that we believe that we will be using. In this case, it's plate query. Once we have done that, we can use cell magics to state how we want the visual options of the plot to be displayed. For example,
13:26
we can choose to eliminate biases, use a hover tool, the size of the plot, or even how we want the colors to be mapped. And here, we can see how we started with a scatter plot of a lot of points, and we were able to map them into this
13:43
shape plot, where each one of the regions is colored according to the number of listings that it has. For example, we can do more things with that, like aggregating the data and coloring by different properties. So, here we have a comparison. Perfect. A comparison of
14:09
the number of listings in each one of the regions in Mallorca against the median price per day that each region has. For example, here, which is Palma de Mallorca, the capital,
14:20
has the most number of listings, but it also turns out to be the most cheaper one. So, when you have a lot of money and want to be alone, just go to the northern part of the island to Daya. And now, before moving on to Data Shader and Big Data, I wanted to show you one cool thing that my friend BLS Tella did.
14:44
He used the Barcelona data set and various data sources to try to figure out how many listings in Airbnb there was compared to the total number of houses in Barcelona. Airbnb usually states that it cannot influence the real estate market
15:02
because the proportion of listings that it has to the total number of, but to the total portion of the real estate market is really low. That is true unless you group the data by different neighborhoods. So, he first created a
15:23
plot of all the different neighborhoods in Barcelona, and then merging different data sources, he calculated the proportion of Airbnb listings to the total market of real estate market. And we find that, okay, it's true that if we take the whole city, the proportion of
15:45
Airbnb listings is really low, but if we go to the center of the city, we found that, for example, in Barigatik, there's 14% of all the houses available that can be rented using Airbnb, and
16:01
the colliding neighborhoods, you find that this proportion is about 10 or 11 percent. So, it really has a great impact if almost 1 in 10 houses in your neighborhood are occupied by tourists and available in Airbnb.
16:21
Well, now that we've finished with HoloViews and GeoViews, let's talk a bit about Data Shader. How many of you know Data Shader? Have you ever heard this word before? Whoa, I have one. Nice. Well, Data Shader is actually a really good package, which is meant
16:45
to make easy loading bit data. There's a lot of examples in the form of Jupyter Notebooks that you can just check here. But I will explain, it's a bit, it's inner workings.
17:02
It mainly consists on a three-step pipeline, which allows to turn big data into images. How is this process accomplished? Well, first, we have a projection step in which we will define a image container.
17:21
This image will be treated sort of a two-dimensional histogram and assign different bins. In the next step, the data will be aggregated in a meaningful way, such as they can count or you can use any aggregation function you want in order to map the data into that bins that we
17:42
created in the first step. And finally, we can choose how we want the visual properties of each one of the bins to be displayed. Using these three steps, we finally get an image which has all the data that we wanted aggregated. For example, if we wanted to show a
18:09
Data Shader representation of listings in Majorca, we first define a canvas as a projection. Then, we use CVS dot point with the listings, X, Y, X, and
18:24
the function that we will use to aggregate the data. And finally, we pass that aggregated data and select the kind of color map that we will use. In this case, it's hot. And we will indicate that we want to map the colors logarithmically to each one of the bins.
18:43
Then, I also choose to have a light gray background, so it's easier to see. And this is what we get. In order to understand better how this binning process works, let's compare a regular Skader plot with a
19:03
representation of a Data Shader image. Okay, so as you can see here, where in this Skader plot, a high density of points is just represented by a blue mass,
19:24
Data Shader allows to change the color according to the density of points. And if we zoom in, we can see how the bins, how the data is mapped into bins. These are each one of the bins created with an heuristic, and
19:41
each one is colored according to the number of points that fell into that bin. Of course, this is a pretty aesthetically unpleasant effect. So, if you change this dynamic attribute here to true, all the plotting pipeline from Data Shader will be recalculated each time.
20:09
So, when you zoom in, these bins will automatically adjust to the data that is included in the image. You have to take into account that the coloring is also taken into account only the number of
20:28
points that are included in the image and not the whole data set. So, with your mapping data and zooming in,
20:42
you can see how the map scheme changes according to the points that I displayed. So, now that we already know how to display big data, with Data Shader, we will explain how it can be overlaid on top of a map.
21:03
Unfortunately, here we do not have Google Maps. So, we cannot access the Google Map plot like we did before, and we'll have to think some other way of doing it. In this case, we need to do a few steps because we will be using something called tile sources,
21:23
which is basically a class that, if you pass it a proper rule as a parameter, it will just download an image each time that it is called. So, in this case, creating the class algae from
21:43
WMSTY tile source and passing this URL, we will later get an image representation. The downside of it is that it uses a different cartographic projection. So, if you want to use OpenStreetMap instead of Google Maps, we have to transform the coordinates from
22:04
one projection to the other. In this case, we have created a function that takes a data frame as input and transforms the longitude and latitudes from the plate query projection to the Google Mercator one.
22:22
In order to create the plot, a map plot with Data Shader, it's quite similar to the way that we did it with Google Maps, but you will need to figure out which of the coordinates correspond to the center of the map. Sorry.
22:41
Instead of the center of the map, you have to define the ranges of geographical coordinates that you want to have displayed. So, it takes a little bit of tweaking and it's not easy, but once you have found the right numbers, it looks like this.
23:05
So, this map is not as cool as the Google Maps one, but at least you can still zoom in and all the pipeline is recalculated each time. And the more you zoom in, the cooler you get the map.
23:30
You have to take into account that even though these are just 17k points, all the time it takes to aggregate the data and use it, it's pretty much the similar from
23:44
this size to like 100 or 200 megabytes, but it's also building an image with big data, like using the Tatsi data set, which is included in the examples that I showed you before,
24:03
like rating or the census data from the United States is actually quite fast. It's a bit painful to install all these examples, but you have a really nice tutorial there on how to do that. It takes a while to download all the data sets,
24:21
but you should totally check them out because it's totally worth it. But, well, what are the downsides of using Data Shader to work with big data in the notebook? Well, unfortunately, everything related to interactivity does not work pretty well unless you are using
24:45
the options that are included in Data Shader to build widgets, but you have no total control over what you are plotting. For example, I tried to build here a dashboard that showed how aggregating data works with Data Shader and
25:10
if you are just using this image, it works quite well, but for example, you want to change how you aggregate the data. For example,
25:20
if you wanted to aggregate the data by the match price of each one of the listings that fall inside each one of the bins, you get errors that you are not able to silence until you get it right and the image is recalculated.
25:46
And also, please do not use the reset tool tip because it messes everything up. Well, now it will be really nice. I can talk a bit more about the JSON data and
26:03
I can show you some examples, but I would really like you to ask questions. So I will just finish my talk here and let you ask whatever you want. I'm not really an expert on this topic. So maybe you think of a question, which is quite difficult. I won't be able to answer it and you can laugh at me.
26:22
So, thank you very much for being here and it's been a pleasure to be talking about maps. Thank you. There is plenty of time of questions. You are finished?
26:43
I would really like you to ask questions. I can keep talking if you want because there have been like 27 minutes and I have more material, but please come on, participate a bit. There's a lot of people in here. So, what would you like to know about plotting data on maps?
27:20
My question, thank you very much. It was very useful.
27:24
My question is regarding the shapes. When you painted like the shapes of, I don't know if it was the different regions of Majorca and the density of points in that area. I had to do that at wall scale and from the files I've got the precision was very accurate and the
27:43
data was massive and it was impossible to plot anything. So, I mean the shape of the United States, I don't know how many points there are there, but if you have like one point every two meters, it's like huge and I never managed to plot anything with that data. Do you have anything to just compress this or did you have to use anything like that?
28:03
I think if you're using shapefiles you are screwed because I also try to do that with the whole regions in Spain, which is not a lot, but it was totally impossible because I got a lot of lag and the browser just cannot handle so many points. So, you have to resort to Data Shader,
28:22
but the good thing is that it can be used to plot data from all over the world. It actually has one example in which it's used data from satellites that shows really well how all this works, but yeah, unfortunately if you are using shapefiles you are screwed.
28:46
So, you have to figure out some way. You could aggregate the data and pass it. Try to create an image using Data Shader for the data you have aggregated, but it won't be easy. So, maybe you should contact James Bender who's the main maintainer of
29:04
these packages and ask him how to do it. They actually answer really fast in GitHub, so when you open an issue there will be a few hours until they respond. So, further questions?
29:35
It's a Python conference, so you presented Python solution. Is that the best technology to display such solution, such information?
29:45
I did not understood you because when you talk with the mic here, it reverts a lot. Can you please come down and ask me?
30:03
Is that the best technology to display that or is it just an alternative? It depends on what you want to do. If you're using the notebook, you can achieve almost anything, but if you are a real pro and have a lot of investors worried about how you're displaying the data,
30:22
maybe you should use JavaScript because it will be easier to do some really hand-made JavaScript tricks that are really specific for the kind of representation that you want. But if you want to build something a bit more general, really easily, just fall back to all of you and their views because it's really easy and it takes a few lines of code to do something really
30:46
complicated. For example, the plot here, a few years ago, I tried to do something similar with plotting all the patches and it was an example on the first versions of Bokeh about the census in the United States of America.
31:02
And there were like 70 lines of code, which have to be really carefully thought because it was really easy to mess up. So, this is getting every day easier and easier to use. Now the most pro thing is JavaScript, but if you wait a couple of months or years,
31:23
you will get the same things here in the notebook. And this can also be used using the Bokeh server, so you don't like the notebooks, you can try to do it there. It's a pain, but it can work.
31:40
Come down. I almost heard you. Yeah, I would finally use this to prototype the visualizations and if you need something really specific,
32:01
you can resort to JavaScript. But even with things like the tooltips, Bokeh allows to play a lot with it, so you can embed arbitrary HTML code inside of them. So almost anything can be accomplished, but yes, you are a pro. Go to JavaScript.
32:26
Who's the next? Please can you come downstairs? It's much better to need the question on the video too and also he wants to understand you. So anyone with questions, please come down.
32:43
Can you show us an example of how to visualize time series data? Visualize time series data. I don't know how to load it here, but there's an example. Let me think, okay.
33:11
Here are a few examples. For example here, this is a visualization. Let me zoom in a bit.
33:23
On the population of some cities, you just enter a proper formatted data frame and as I told you before, there are like custom widgets that can be used with all views and zero views, so you can use them to visualize how things are evolving in time on top of a map.
33:45
Depending on the specific kind of visualization that we're going to use, I can point you some resources, but here you can find a few things about how to do that, and also in the examples from all of you, I think there was...
34:05
Well, merging these two examples, you should be able to work with data maps and make cool dashboards. We can talk later about it if you want.
34:21
Hello, thank you for inspiring talk. I got a question maybe unrelated to geodat data, but is there any convenient way to create a custom shaped map, for instance from TIF texture to get the custom map view, for instance,
34:42
for some game data, the game level data? I mean, is there a way to create a custom map to load and visualize the data over it? Yeah, what kind of custom map are you referring to? I mean, for instance, you have an
35:02
in-game level and you have a player activity data, and you need to visualize it, so you have an actual geometry with some coordinates, so is there any way to load such level right into these tools? Yeah, there are actually very different ways to deal with all these things,
35:26
but there's a package called CartoPy, which allows you to get images in all of the coordinate representation that you need. Let me check for an example.
35:43
Well, for example, here there are different types of visualization using CartoPy. For example, you have like the whole world map here in to be plot with map load. Thinking to account, that's all the weird projections and all that, I'm not sure if it's work with bokeh.
36:03
Maybe you have to do it by hand and be converting from one coordinate system to the other in order to then plot them as a scatter plot, but CartoPy has not only all everything you need to switch from one coordinate system to the other, but also has stored visual representations of maps,
36:23
so in a similar way as we did with the Google map load, you are able to select how you want your maps to be displayed. Wait a moment, let's see if I can find...
37:07
Yeah, here you have a lot of different map representations, so it's really possible that you are able to find the one that you need and if you're not, write James Bender, bother him.
37:23
Okay, can you come please down for questions? You have one? No? You want me to torture you with JO JSON data? Nah, that's just a joke. I won't.
37:44
Do you know if it's possible to integrate OpenStreetMap with bokeh, for instance? It should be possible.
38:01
I have not tried it because I think that Google Maps are way cooler, at least the point in which they are now. But I can look at it and tell you later. We'll try to search it. I have never done it myself before. Okay. Next question, two? Any questions?
38:25
Okay. Can you come and speak to the microphone and directly to him? Otherwise, it's difficult to understand for him. Yeah, it's like the mic is for the people in YouTube, but if you use that, I cannot hear you well from here, so...
38:47
If you put the data into bokeh, what do you get? Is it some kind of JavaScript or... I didn't understand it, really. I'm not understanding your question.
39:07
I saw all those bokeh calls, something like this, and some map mysteriously appeared. What do you get if you put data into bokeh? Is it some kind of JavaScript that you can put on a website or...
39:30
Yes. Well, if you wanted to study thoroughly all this data from Airbnb, first go to the repository of my friend, who's
39:46
this one. They did an in-depth study on how data from Airbnb affects the market, and if you wanted to put it outside the Jupyter notebook, you would have to
40:01
use the bokeh server. It's... I don't like it because it's really difficult to configure for me, at least, but it can work really well if you know what you're doing. So you could also be using Data Shader, all of you, and Jovius,
40:20
using bokeh as a back-end and using the bokeh server to render the plots and then send them as HTML code and JavaScript into a regular website. Because bokeh is using JavaScript as a back-end, so if you're using the bokeh server to render the plot,
40:41
a plot from bokeh looks like a regular HTML code that you can embed in your website. Last chance for a question. Yeah, you can find all these notebooks on GitHub, so where you want to plot maps, just
41:03
clone the repo and copy-paste, and if you want to find, you want to know the findings from my friend when he analyzed the Airbnb data, then go to this repository. Mine will be in my...
41:20
is this one. My user name in GitHub is Guillem Debe, and the project is inside Airbnb, EuroPython 17, and here you will be able to find everything that I explained here.
41:51
I wanted someone to ask me this.
42:02
I did not forget to put the data into the repository. It was too big for a GitHub repo, so I have uploaded that into my Google Drive account. So, I don't know which is the link, but I will put it in the repository, okay? I don't know where it is.
42:29
Here, see? I have all the data inside the zip file. That I will commit to my repository when I finish the talk in about 10 minutes or so, okay?
42:42
So, last chance. Otherwise, get him for a coffee or so. Well, it's been a pleasure having you as a public because it's like the time that I have been asking questions in my entire life. So, thank you very much everyone.