1 00:00:00,000 --> 00:00:24,756 RC3 preroll music 2 00:00:24,756 --> 00:00:31,000 Herald: Hello, everyone, welcome back to Chaos West TV. The next talk will start 3 00:00:31,000 --> 00:00:34,620 momentarily. I will now switch back to German for a few seconds to announce a 4 00:00:34,620 --> 00:00:40,613 translation. Then I'll switch back and then we'll go off to the races as they say 5 00:00:40,613 --> 00:00:45,540 So nochmal schnell auf Deutsch, willkommen zurück zu Chaos West TV, eure 6 00:00:45,540 --> 00:00:51,298 beste Bühne auf dem rc3. Der nächste Talk beginnt gleich er ist zwar auf Englisch 7 00:00:51,298 --> 00:00:55,550 wird aber wie so vieles dank unserer Übersetzungscrew auf Deutsch übersetzt. 8 00:00:55,550 --> 00:01:00,241 Ihr solltet in der Lage sein das im Stream einfach auszuwählen ohne größere Probleme 9 00:01:00,241 --> 00:01:03,570 und dann könnt ihr den Vortrag auch direkt simultanübersetzt auf Deutsch hören 10 00:01:03,570 --> 00:01:06,031 und ich rede jetzt auf Englisch weiter. 11 00:01:06,031 --> 00:01:07,971 Alright back to English. 12 00:01:07,971 --> 00:01:11,896 Now in the comfort of your own homes or wherever you're viewing the stream, 13 00:01:11,896 --> 00:01:15,313 please do a warm round of applause for our next speaker, 14 00:01:15,313 --> 00:01:23,114 Martin, who will talk about optimizing public transport. 15 00:01:23,114 --> 00:01:24,436 Let's go. 16 00:01:26,924 --> 00:01:33,050 Martin: Welcome to my contribution to this year's rC3 2021 in the form of this talk, 17 00:01:33,050 --> 00:01:37,147 Optimizing public transport: a data-driven bike sharing study in Marburg 18 00:01:37,147 --> 00:01:42,241 I would like to thank the organizers of the rC3 2021 for organizing the whole event. 19 00:01:42,241 --> 00:01:47,140 And in particular, I would like to thank the channel that accepted me Chaos West TV 20 00:01:47,140 --> 00:01:52,750 well for accepting the presentation of my work. Today I would like to give you a 21 00:01:52,750 --> 00:01:57,220 quick overview of one of my hobby projects in which I scraped and therefore 22 00:01:57,220 --> 00:02:02,270 downloaded over one million data points regarding the bike sharing system in the 23 00:02:02,270 --> 00:02:09,099 city of Marburg. This study came about when I was traveling from Stuttgart to 24 00:02:09,099 --> 00:02:13,220 Frankfurt and ultimately to Marburg some time ago, and I was watching the amazing 25 00:02:13,220 --> 00:02:17,440 SpiegelMining talk by David Kriesel. So thank you very much for this implicit 26 00:02:17,440 --> 00:02:20,515 inspiration of the work that you're about to see now. 27 00:02:20,515 --> 00:02:26,091 Who am I? My name is Martin Lellep, and I studied physics in the past, 28 00:02:26,091 --> 00:02:30,425 and actually, I continue to do so in the form of a Ph.D. in theoretical physics at 29 00:02:30,425 --> 00:02:34,258 the University of Edinburgh in Scotland and in my spare time I like to do data 30 00:02:34,258 --> 00:02:39,255 analysis of all kinds of data. There are two more things... 31 00:02:39,255 --> 00:02:42,045 There are two more things that are important for here now. 32 00:02:42,045 --> 00:02:45,883 It's first of all, I studied at the University of Marburg, obviously in 33 00:02:45,883 --> 00:02:52,070 Marburg previously, and then also I like to ride my bike. Marburg, for those who 34 00:02:52,070 --> 00:02:56,310 don't know it yet, it's a small, university dominated town that is in the 35 00:02:56,310 --> 00:03:00,840 north of Frankfurt am Main, roughly 80 kilometers. So an hour by car or an hour 36 00:03:00,840 --> 00:03:07,450 by train, approximately. And again, it's quite dominated by the university that is 37 00:03:07,450 --> 00:03:12,070 located there, and that can be seen simply in terms of, for instance, numbers. There 38 00:03:12,070 --> 00:03:19,100 are roughly 25,000 students for an overall population of 77,000 residents in total, 39 00:03:19,100 --> 00:03:26,540 which is quite substantial, obviously. You can see a quite popular picture here of a 40 00:03:26,540 --> 00:03:32,600 picturesque scene in Marburg. We can see the castle and then the river Lahn, as 41 00:03:32,600 --> 00:03:37,290 well as a few houses and a bit of green. And the bike rentals are currently 42 00:03:37,290 --> 00:03:44,430 provided at the time of recording this by the company called Nextbike. Before now 43 00:03:44,430 --> 00:03:49,790 diving into a bit more technical details, I would like to motivate my story or my 44 00:03:49,790 --> 00:03:54,870 study by the story of Anna. Anna is a university... is a university student at 45 00:03:54,870 --> 00:03:59,780 the University of Marburg, and she lives a bit outside the city, so she typically 46 00:03:59,780 --> 00:04:06,910 does not walk to the place that she needs to be or study at. But she takes the bus 47 00:04:06,910 --> 00:04:13,310 from her... from her flat to the university, to the city. And then does the 48 00:04:13,310 --> 00:04:19,959 last mile by walking or cycling or whatever. And she's also quite an eager 49 00:04:19,959 --> 00:04:24,220 student, so she very often studies quite late. As you can see here, that's a 50 00:04:24,220 --> 00:04:29,940 picture of late Marburg, so to say, and just as it happens now, she needs to catch 51 00:04:29,940 --> 00:04:34,621 a bus now because she's a bit late. She forgot to pack in her... her fancy MacBook 52 00:04:34,621 --> 00:04:41,110 in time, so she needs to hurry up a bit and, well, didn't really make it. So 53 00:04:41,110 --> 00:04:43,720 therefore, she thought maybe 54 00:04:43,720 --> 00:04:47,127 taking a Nextbike for the last mile to the bus station is a good idea 55 00:04:47,127 --> 00:04:51,292 so she can safely take then subsequently the bus home. And normally the bus… 56 00:04:51,292 --> 00:04:55,710 The Nextbike stations look like that here. So there are plenty of bikes. 57 00:04:55,710 --> 00:05:02,530 It's very easy to go there, grab a bike and go to your destination. Now Anna must 58 00:05:02,530 --> 00:05:07,551 be a very unlucky student today because she arrives at the bike station, and it 59 00:05:07,551 --> 00:05:12,610 turns out that the station is empty, so ultimately she misses at least this bus 60 00:05:12,610 --> 00:05:19,717 and therefore only arrives at home a bit later. Her cooking plans and her Netflix 61 00:05:19,717 --> 00:05:26,459 plans, all that stuff postponed a bit because, well, she arrives a bit later. 62 00:05:26,459 --> 00:05:32,603 And that's, of course, a very, very sad story, and maybe it happens to multiple 63 00:05:32,603 --> 00:05:38,059 people, not only Anna. And in fact, it also happened to me a few times, and every 64 00:05:38,059 --> 00:05:41,919 time it happened to me, I thought, well, I must be the most unlucky person in whole 65 00:05:41,919 --> 00:05:46,504 Marburg going to a normally completely fully packed bike station and now it's 66 00:05:46,504 --> 00:05:51,513 completely empty. Missing, for instance, subsequent public transportation. 67 00:05:51,513 --> 00:05:56,714 After it happened to me a few times, I thought, well, maybe I'm not that unlucky. 68 00:05:56,714 --> 00:06:02,551 So is there may be a system to empty bike stations in Marburg. And given all my 69 00:06:02,551 --> 00:06:06,529 my spare time interest of analyzing and capturing data, I thought, well, data to 70 00:06:06,529 --> 00:06:12,550 the rescue, of course. And therefore, the idea for this talk now was to build a web 71 00:06:12,550 --> 00:06:17,901 scraper in order to acquire Nextbike data. Collect the data, store the data, analyze 72 00:06:17,901 --> 00:06:23,069 the data and then hopefully finally help Anna, me, and other students to figure out 73 00:06:23,069 --> 00:06:28,700 which stations maybe to avoid and which stations are safe to go to if you're in 74 00:06:28,700 --> 00:06:31,233 desperate need for a bike. 75 00:06:31,898 --> 00:06:35,517 The tech stack that I'm using here, it's based on a Docker container 76 00:06:35,517 --> 00:06:39,560 in which a python scraper runs every 30 seconds that queries the 77 00:06:39,560 --> 00:06:44,979 Nextbike API. It downloads the data, it parses the data, and then saves the data 78 00:06:44,979 --> 00:06:51,360 outside the Docker container in order to be evaluated later on. And it turns out 79 00:06:51,360 --> 00:06:56,180 that the whole concept of what I just described also has a name. It's called 80 00:06:56,180 --> 00:07:02,389 Extract, Transform, Load Pipeline or ETL in short. And what I again wrote here is 81 00:07:02,389 --> 00:07:06,330 an ETL pipeline in Python, and then I wrote an analysis code also written in 82 00:07:06,330 --> 00:07:13,779 Python and all that was running on a small home server in my flat. The data that I 83 00:07:13,779 --> 00:07:19,629 captured consists of the bikes identified through IDs and then also the locations of 84 00:07:19,629 --> 00:07:23,779 those bikes, typically at stations, but some of them were also freestanding and 85 00:07:23,779 --> 00:07:29,349 last but not least, the station locations, and of course, obviously also a list of of 86 00:07:29,349 --> 00:07:38,889 stations. And then with it, I went ahead and did a few pictures that I'm about to 87 00:07:38,889 --> 00:07:43,899 show now and a few analyses. And if you're interested in that and there are slides 88 00:07:43,899 --> 00:07:48,529 available on this website here, the website can be read through the QR code or 89 00:07:48,529 --> 00:07:52,939 through that link and this website contains the slides that you'll see in 90 00:07:52,939 --> 00:07:56,741 here, high resolution figures, a few interactive figures and all the 91 00:07:56,741 --> 00:08:01,175 information on the previous blog articles that I wrote about this topic. 92 00:08:02,659 --> 00:08:07,165 So the results of Anna, first of all, to start slowly. It turns out that there are 93 00:08:07,165 --> 00:08:13,242 37 bike stations in Marburg, with roughly 230 bikes spread across 94 00:08:13,242 --> 00:08:16,047 the whole Nextbike Marburg ecosystem. 95 00:08:17,097 --> 00:08:20,657 And it's now, well, knowing that there are roughly 40 stations, 96 00:08:20,657 --> 00:08:23,394 it's quite interesting to see where these stations are, 97 00:08:23,394 --> 00:08:25,294 because then Anna could, 98 00:08:25,294 --> 00:08:28,644 for instance, already go to another station if one station is empty. 99 00:08:28,644 --> 00:08:32,668 And what you can see here is now a map of Marburg, where the stations are 100 00:08:32,668 --> 00:08:36,363 annotated by these dots. And the area of the dot, 101 00:08:36,363 --> 00:08:40,080 as well as the color code, corresponds to the average number of 102 00:08:40,080 --> 00:08:46,640 parked bikes at that station. So let's see an interactive version because it's a bit 103 00:08:46,640 --> 00:08:53,500 nicer to see it in that way. So I click on here. Alright. OK, now we can pan around 104 00:08:53,500 --> 00:08:59,850 and zoom as you can often do with these interactive graphics and also by clicking 105 00:08:59,850 --> 00:09:04,680 on these buttons or on these these points, you can see the station name, as well as 106 00:09:04,680 --> 00:09:11,699 the average number of bikes placed there. And becomes quite obvious that, well, most 107 00:09:11,699 --> 00:09:17,970 of the stations are in the central part of the city, a few in the outskirts here. And 108 00:09:17,970 --> 00:09:22,980 it turns out that the largest station in terms of the number of parked bikes on 109 00:09:22,980 --> 00:09:27,759 average is the main train station Hauptbahnhof. There are again a few more 110 00:09:27,759 --> 00:09:30,683 spread around the central part of the station, 111 00:09:30,683 --> 00:09:34,291 such as the Elisabeth-Blochmann-Platz, which is the second largest station. 112 00:09:34,291 --> 00:09:38,305 And then if you continue the train line here, you can see that there's 113 00:09:38,305 --> 00:09:44,730 actually another set of stations, where the secondary train station is. 114 00:09:44,730 --> 00:09:48,484 So that's another train station, smaller train station. 115 00:09:51,150 --> 00:09:58,130 OK, so the first results for Anna would then be a day-hour usage histogram, 116 00:09:58,130 --> 00:10:03,740 because it's the kind of the first order approach, I would say, in order to see how 117 00:10:03,740 --> 00:10:11,980 the ecosystem of Nextbikes is in use against day as well as hour. And therefore 118 00:10:11,980 --> 00:10:19,089 Anna will based on this figure here, she will understand when to maybe plan for a 119 00:10:19,089 --> 00:10:23,990 bit more time when looking for a bike in a desperate fashion. And since this figure 120 00:10:23,990 --> 00:10:27,959 is a bit more difficult to understand, I would like to take a moment to explain it 121 00:10:27,959 --> 00:10:31,600 and we are going to start with the top figure here. What you can see on the x 122 00:10:31,600 --> 00:10:35,750 axis is the hour of the day and on the y axis, and that's shown in the whole 123 00:10:35,750 --> 00:10:40,279 figure. So each of the the numbers that you see is the following: it's the 124 00:10:40,279 --> 00:10:46,940 average. And well it's the number of parked bikes and then you subtract the 125 00:10:46,940 --> 00:10:51,560 average of the number of parked bikes in the whole ecosystem of Marburg. So that 126 00:10:51,560 --> 00:10:55,930 means if a number of zero is encountered like roughly here, it means that the 127 00:10:55,930 --> 00:11:01,110 average number of parked bikes simply in the system at that point in time. When the 128 00:11:01,110 --> 00:11:05,920 number is larger, it's above the average, if it's smaller, it's below the average. 129 00:11:05,920 --> 00:11:10,709 And you can clearly see from this small figure here already that in the morning, 130 00:11:10,709 --> 00:11:15,430 more bikes are typically parked. And then in the evenings or around noon, you can 131 00:11:15,430 --> 00:11:21,750 see two dips, a bimodal distribution so to say. Where people, well, obviously use 132 00:11:21,750 --> 00:11:28,129 bikes around noon and six p.m. roughly where these used bikes, of course, are not 133 00:11:28,129 --> 00:11:32,050 parked, and therefore these numbers are smaller. And the same thing can be done 134 00:11:32,050 --> 00:11:37,170 for the day of the week. Here and here you can see that the Monday, well, the 135 00:11:37,170 --> 00:11:40,190 beginning of the week and the end of the week, meaning Monday, Tuesday and Saturday 136 00:11:40,190 --> 00:11:46,990 Sunday are a bit more popular, so more people ride a bike and therefore fewer 137 00:11:46,990 --> 00:11:49,950 bikes are parked and therefore this is negative. And then in the middle of the 138 00:11:49,950 --> 00:11:55,649 week, fewer people seem to ride the bike, the bikes in general. And if you combine 139 00:11:55,649 --> 00:11:59,839 these figures now, you can see the the joint histogram here, where you can not 140 00:11:59,839 --> 00:12:05,140 only look for time or day separately, but also in a combined fashion. So you would, 141 00:12:05,140 --> 00:12:09,584 for instance, see that Monday morning is the time where many people use bikes 142 00:12:09,584 --> 00:12:13,821 because they are not as many bikes parked. And then also on a Saturday, you can see 143 00:12:13,821 --> 00:12:20,876 the same, so around afternoon many people seem to use the bikes. Last but not least 144 00:12:20,876 --> 00:12:24,853 on Friday mornings, it's quite easy to get a bike because many bikes appear to be 145 00:12:24,853 --> 00:12:29,500 parked, maybe because people envision already the weekend. So that's the first 146 00:12:29,500 --> 00:12:36,529 outcome for Anna. Well try to avoid times around six and around noon when 147 00:12:36,529 --> 00:12:41,350 desperately looking for bike. And although even more interesting part for Anna is the 148 00:12:41,350 --> 00:12:45,899 probability to find a specific station to be empty. For that, I took the time series 149 00:12:45,899 --> 00:12:51,389 of the number of parked bikes and counted the occasions where there was no bike for 150 00:12:51,389 --> 00:12:56,019 each of the stations here. And that has been done again for each station 151 00:12:56,019 --> 00:12:59,949 separately, so for each station, at the end of the day, you get a number that 152 00:12:59,949 --> 00:13:03,810 denotes the probability of finding that station empty. And clearly, for instance, 153 00:13:03,810 --> 00:13:08,242 the Hauptbahnhof, the main train station, which was the largest station. It's 154 00:13:10,038 --> 00:13:14,787 quite unlikely to find it empty, and contrary, if you go to these 155 00:13:14,787 --> 00:13:18,447 stations down here, for instance the Am Plan / Wirtschaftswissenschaften 156 00:13:18,447 --> 00:13:23,769 it turns out that these are empty at about 70 percent of the time, which is quite 157 00:13:23,769 --> 00:13:28,910 substantial, I would say. And interestingly, if you now look for the the 158 00:13:28,910 --> 00:13:33,130 secondary train station in Marburg, the Südbahnhof, you can see that this has 159 00:13:33,130 --> 00:13:37,825 quite a substantial probability of running empty at about 30 to 40 percent. 160 00:13:37,825 --> 00:13:41,889 In particular, in comparison to the main train station, which is essentially almost 161 00:13:41,889 --> 00:13:50,990 never empty. Also interestingly, you can then plot these probabilities against the 162 00:13:50,990 --> 00:13:54,920 average number of parked bikes at the station and you find an antiproportional 163 00:13:54,920 --> 00:13:59,349 relation between those two. It means that the larger the stations, the more unlikely 164 00:13:59,349 --> 00:14:02,811 it is that it's empty, which is quite a reasonable outcome, I would say. 165 00:14:02,811 --> 00:14:05,749 So finally, to conclude for Anna, 166 00:14:05,749 --> 00:14:08,809 she should try to avoid small stations 167 00:14:08,809 --> 00:14:11,868 and in particular, she should try to avoid the stations that are 168 00:14:11,868 --> 00:14:14,595 well, annotated here with the sad smiley, because these 169 00:14:14,595 --> 00:14:18,567 tend to run empty quite often. 170 00:14:21,363 --> 00:14:25,037 OK, so I have all this ETL pipeline stuff already set up, 171 00:14:25,037 --> 00:14:27,560 I have collected over a million data points 172 00:14:27,560 --> 00:14:32,584 and then I thought, well, maybe there's more in the data then only helping Anna. 173 00:14:32,584 --> 00:14:37,743 So everything that I've shown you so far, it's from the perspective of a user. 174 00:14:37,743 --> 00:14:40,954 And now I would like to turn to what's the perspective of a city. 175 00:14:40,954 --> 00:14:42,870 And there I would like to ask a few questions, like… 176 00:14:42,870 --> 00:14:45,541 How is Nextbike used in Marburg? first of all, 177 00:14:45,541 --> 00:14:48,540 and then, in general, Is cycling a good thing for a city? 178 00:14:48,540 --> 00:14:52,850 How can, or, Can cycling contribute to a better city? 179 00:14:52,850 --> 00:14:57,533 And now–better is of course first a quite vague term–and then last, but not least, 180 00:14:57,533 --> 00:15:01,336 is it worth improving bike infrastructure for a city? 181 00:15:02,804 --> 00:15:10,196 And all this again, is now from the perspective of a city instead of a user. 182 00:15:10,196 --> 00:15:14,834 The first thing that I would like to start with is something that I call the distance 183 00:15:14,834 --> 00:15:21,709 matrix in which I concentrated on the positions of the bike stations and 184 00:15:21,709 --> 00:15:26,029 computed the pairwise distances for all of them. And since the distance is, of 185 00:15:26,029 --> 00:15:32,045 course, symmetric, also the stored matrix is now in the end also symmetric. And, 186 00:15:32,045 --> 00:15:36,470 It turns out that there are roughly 600 combinations, and these combinations can 187 00:15:36,470 --> 00:15:41,760 be shown in a symmetric matrix, as shown here, where on the x axis this one here 188 00:15:41,760 --> 00:15:47,709 and the y axis you can see the stations and then each combination denotes 189 00:15:47,709 --> 00:15:52,620 the distance between that one station and the other station. It turns out that the 190 00:15:52,620 --> 00:15:57,319 range of these distances is between zero and roughly nine kilometers. And of 191 00:15:57,319 --> 00:16:03,407 course, those that have a zero distance to other stations are essentially the… 192 00:16:03,407 --> 00:16:07,920 the stations themselves. So if you pick a station, obviously the distance to itself 193 00:16:07,920 --> 00:16:12,370 is zero and therefore the diagonal is exactly zero. And then again, all the 194 00:16:12,370 --> 00:16:20,379 remaining part is a symmetric copy of the other diagonal part. The other thing and 195 00:16:20,379 --> 00:16:26,559 that is now the main treasure, I would say of this study, so the main base for 196 00:16:26,559 --> 00:16:31,490 everything that follows is what I call the transition matrix, where I counted the 197 00:16:31,490 --> 00:16:35,749 number of transition of bikes from one station to the other station. That is now, 198 00:16:35,749 --> 00:16:40,394 of course, not symmetric anymore because just because, say, five bikes go from one to 199 00:16:40,394 --> 00:16:44,212 the other station, it does not mean that these five bikes really come back again. 200 00:16:44,212 --> 00:16:50,598 And therefore, the number of entries is roughly 1400. Again, it can be shown 201 00:16:50,598 --> 00:16:58,470 or visualized in the same fashion. So you again have the stations on the one 202 00:16:58,470 --> 00:17:03,186 axis and the same stations on the other axis, and now each entry here in the 203 00:17:03,186 --> 00:17:07,150 matrix corresponds to the number of transitions of bikes from one to the 204 00:17:07,150 --> 00:17:14,650 other. And the range is from zero to over 3000. And it turns out that actually the 205 00:17:14,650 --> 00:17:19,010 self transitions, meaning somebody takes a bike from a station, does something with a 206 00:17:19,010 --> 00:17:23,460 bike, maybe grocery shop, grocery shopping or so, and then the person comes back to 207 00:17:23,460 --> 00:17:30,070 the same station. These events occur the most frequent and therefore the largest 208 00:17:30,070 --> 00:17:36,420 entry are on the diagonal, typically. Sometimes it is not so interesting what 209 00:17:36,420 --> 00:17:41,170 happens regarding the self transitions and therefore another matrix can be derived 210 00:17:41,170 --> 00:17:46,010 from the first one, namely a transition matrix without diagonal elements where 211 00:17:46,010 --> 00:17:51,625 those elements have been set to zero as you can see here, if you look closely. 212 00:17:51,625 --> 00:17:57,566 Speaking of looking closely, it's quite educational if you not only see the 213 00:17:57,566 --> 00:18:02,140 figures, but also can explore them a bit, and therefore I rendered an interactive 214 00:18:02,140 --> 00:18:07,450 version of it. Let's... let's visit it. So that's now again, the matrix without the 215 00:18:07,450 --> 00:18:11,880 diagonal and one with the diagonal. And now by hovering over these entries so you 216 00:18:11,880 --> 00:18:16,740 can see that, for instance, from Am Schülerpark to Ockershäuser Allee zero 217 00:18:16,740 --> 00:18:20,960 transitions happened. And then a bit larger one, for instance, Biegenstraße to 218 00:18:20,960 --> 00:18:28,120 Hauptbahnhof over 800 transitions happened in the time of capturing the data. So feel 219 00:18:28,120 --> 00:18:35,210 free to explore a bit, maybe identify the most, most interesting, most used popular 220 00:18:35,210 --> 00:18:44,560 routes. Ok, such a transition matrix can actually also be shown as a network graph 221 00:18:44,560 --> 00:18:49,310 where here I concentrate only on the largest entry because it turns out the 222 00:18:49,310 --> 00:18:55,520 full transition matrix is a bit too dense. And what is shown out here is as blue 223 00:18:55,520 --> 00:19:04,340 circles, it corresponds to a station and then these edges here are drawn whenever 224 00:19:04,340 --> 00:19:08,440 there happens a transition. And you can already see here that there are a few 225 00:19:08,440 --> 00:19:13,009 stations that are quite isolated, like those and then many stations have a self 226 00:19:13,009 --> 00:19:16,330 transition and mostly feed to a more central station. 227 00:19:16,330 --> 00:19:20,243 And since that is also more interesting in an interactive fashion, 228 00:19:20,243 --> 00:19:22,606 I also rendered an interactive version of that. 229 00:19:22,606 --> 00:19:29,311 Now again, we can zoom, pan around and drag the graph around a bit. 230 00:19:29,311 --> 00:19:33,760 And interestingly, if you click on a station, you can see from where 231 00:19:33,760 --> 00:19:39,940 transitions happen to that station. So like those interconnected central ones, 232 00:19:39,940 --> 00:19:43,440 like the Hauptbahnhof, the main train station, it's quite connected in the 233 00:19:43,440 --> 00:19:46,940 graph. And then there are a few like Friedrichplatz which are not connected at 234 00:19:46,940 --> 00:19:53,940 all. Interestingly, that one here, for instance, the Cafe Trauma/Aföllerwiesen it 235 00:19:53,940 --> 00:19:58,120 doesn't even have a self connection. So it turns out that, well, people apparently 236 00:19:58,120 --> 00:20:01,515 mostly use it for taking a bike going into the city. 237 00:20:01,515 --> 00:20:08,216 And most dominantly, the Elisabeth-Blochmann-Platz, actually. 238 00:20:12,178 --> 00:20:17,910 OK, so if you now take these transition matrices, 239 00:20:17,910 --> 00:20:22,500 as well as the distance matrices into account and mix them, first of all, 240 00:20:22,500 --> 00:20:29,080 you can get a few interesting numbers. So here I calculated the overall number of 241 00:20:29,080 --> 00:20:35,280 trips, which turned out to be 210,000 trips in the time of capturing the data, 242 00:20:35,280 --> 00:20:39,550 which is quite some essential number for such a small city like Marburg. And this 243 00:20:39,550 --> 00:20:44,030 is, of course, computed by taking the sum of the transition matrix elements. And 244 00:20:44,030 --> 00:20:48,280 then if you weigh these sums or these entries with the distances between those 245 00:20:48,280 --> 00:20:54,380 stations, it turns out that those transitions or those trips essentially 246 00:20:54,380 --> 00:20:58,610 correspond to a distance of 320,000 kilometers that have been traveled, which 247 00:20:58,610 --> 00:21:02,305 is a few times around the Earth actually. 248 00:21:02,305 --> 00:21:05,466 Now, when these two basic numbers and the 249 00:21:05,466 --> 00:21:10,690 the matrices that I introduced earlier are combined with a few statistical details – 250 00:21:10,690 --> 00:21:14,650 like, for instance, the average consumption of fuel of a car or how much 251 00:21:14,650 --> 00:21:21,050 CO2 it produces while driving – a few ecological, economic and social benefits 252 00:21:21,050 --> 00:21:25,550 of a bike system or cycling in general can be derived. First of all, I found it quite 253 00:21:25,550 --> 00:21:33,210 entertaining that the overall number of calories burned corresponds to 8.6 million 254 00:21:33,210 --> 00:21:40,331 kilocalories. And to convert that to a bit more, well, real life number, I would say 255 00:21:40,331 --> 00:21:44,030 I calculated how many Nutella jars those are, and it turns out that 256 00:21:44,030 --> 00:21:47,763 it's roughly 4,000 Nutella jars that have been burned in terms of calories 257 00:21:47,763 --> 00:21:56,265 just by this system of cycling. And then also, it can be found that this distance 258 00:21:56,265 --> 00:22:00,240 here, if you would have driven it by a car, you would have, 259 00:22:00,240 --> 00:22:06,281 well, used almost 26,000 liters of fuel. You would have produced 40 tons of CO2. 260 00:22:06,281 --> 00:22:13,164 And that fuel that you would have bought would have cost 34,000 €, actually. 261 00:22:13,164 --> 00:22:18,194 Interestingly, that number here of 40 tons of saved CO2 262 00:22:18,194 --> 00:22:23,008 corresponds to an average German who lives for 4 years 263 00:22:23,008 --> 00:22:27,498 or 4 Germans that live for one year. So a typical German produces 264 00:22:27,498 --> 00:22:31,060 roughly 10 tons, and therefore it's four times that, obviously. 265 00:22:32,803 --> 00:22:36,250 Ok, so again, from the transition matrix, 266 00:22:36,250 --> 00:22:40,130 you can derive a few more interesting details like, for instance, details that 267 00:22:40,130 --> 00:22:44,062 are interesting from the perspective of traffic management. 268 00:22:44,062 --> 00:22:48,651 Like, here I calculated the most popular routes by finding the maximal elements 269 00:22:48,651 --> 00:22:54,141 of the transition matrix. And it turns out that the most popular route has been used 270 00:22:54,141 --> 00:22:58,941 well over 2000 times a year from the Hauptbahnhof to the Ginseldorfer Weg. And 271 00:22:58,941 --> 00:23:02,820 if you look closely, you can see that the main train station or the Hauptbahnhof, 272 00:23:02,820 --> 00:23:07,264 as well as the Elisabeth-Blochmann-Platz is involved in many of those top row routes. 273 00:23:07,264 --> 00:23:12,580 And that's now again interesting. For instance, if a city would like to improve 274 00:23:12,580 --> 00:23:18,733 the bike system because we've now seen it has quite a good impact for social, 275 00:23:18,733 --> 00:23:23,211 ecological, and economical aspects. 276 00:23:23,211 --> 00:23:27,259 But let's say the the city has maybe limited financial resources. 277 00:23:27,259 --> 00:23:30,491 It would be interesting to simply calculate the most popular routes, 278 00:23:30,491 --> 00:23:33,690 and then start fixing or improving them first. 279 00:23:35,690 --> 00:23:38,820 OK, now at that point, you might ask yourself, 280 00:23:38,820 --> 00:23:41,883 Well, what kind of data did he scrape? 281 00:23:41,883 --> 00:23:44,454 And for that, I would like to show you this graph. It shows 282 00:23:44,454 --> 00:23:48,444 the number of parked bikes in the whole ecosystem of Marburg against time. 283 00:23:48,444 --> 00:23:50,879 And as you can see, I did it in two batches. 284 00:23:50,879 --> 00:23:55,700 The first one has been obtained from March to December 2020. So last year. 285 00:23:55,700 --> 00:24:01,440 And then I restarted the scraping at the end of April and finished just a few days 286 00:24:01,440 --> 00:24:06,660 ago in December 2021. And you can clearly see that the number of parked bikes 287 00:24:06,660 --> 00:24:12,260 decreases when the weather is good or when there are summer months and therefore most 288 00:24:12,260 --> 00:24:17,740 likely because the weather is good. And of course, it suggests itself a bit given 289 00:24:17,740 --> 00:24:22,900 that I captured this in 2020 and that one year in 2021 and taking the corona 290 00:24:22,900 --> 00:24:25,308 pandemic into account. Well, how does it compare? 291 00:24:25,308 --> 00:24:31,330 And therefore, I concentrated on the overlapping month of the two data sets 292 00:24:31,330 --> 00:24:34,809 and calculated, well, the comparison, as you can see here. 293 00:24:34,809 --> 00:24:40,206 Now in blue, it's 2021 this year and 2021, sorry 2020 is shown in red. 294 00:24:40,206 --> 00:24:43,951 And you can see that the number of parked bikes increased actually. 295 00:24:43,951 --> 00:24:49,683 There might be a multitude of explanations for that. I don't know. 296 00:24:49,683 --> 00:24:54,908 Maybe one explanation could be that people took more advantage of working from home. 297 00:24:56,397 --> 00:25:00,548 OK, so everything that I've shown you so far, 298 00:25:00,548 --> 00:25:05,488 it's been mostly statistical statements, averages, sums and stuff like that, 299 00:25:05,488 --> 00:25:10,355 and now I was interested if it's possible to do also more precise predictions. 300 00:25:10,355 --> 00:25:12,980 And therefore I turn towards a machine learning or 301 00:25:12,980 --> 00:25:17,540 artificial intelligence task where I predicted the num… where I tried to 302 00:25:17,540 --> 00:25:21,220 predict the number of parked bikes, meaning the quantity that I've shown over 303 00:25:21,220 --> 00:25:26,062 and over again in the in the last few minutes. So is it possible to predict that 304 00:25:26,062 --> 00:25:31,340 number based on the hour of the day, the weekday and the temperature that is shown 305 00:25:31,340 --> 00:25:36,760 here for 2020? And when starting such a task, it's always, first of all, very 306 00:25:36,760 --> 00:25:41,219 useful to investigate the training data. And therefore well I try to plot it. And 307 00:25:41,219 --> 00:25:44,703 And because it's a three dimensional face space, it's also very simple to plot it. 308 00:25:44,703 --> 00:25:49,410 So you can essentially plot it as a scatterplot. And the color coding here has 309 00:25:49,410 --> 00:25:53,928 been chosen to denote the target variable, meaning the number of parked bikes. 310 00:25:53,928 --> 00:25:57,470 And just by inspecting the data, you can already see that the smaller the 311 00:25:57,470 --> 00:26:02,810 temperatures are, the fewer… sorry, the more bikes are parked and therefore the 312 00:26:02,810 --> 00:26:07,710 fewer bikes are used. I use a random forest machine learning model, which 313 00:26:07,710 --> 00:26:12,870 consists... which is an ensemble model of decision trees, of randomized decision 314 00:26:12,870 --> 00:26:18,010 trees. And this model is quite powerful because it can work with little data. It 315 00:26:18,010 --> 00:26:22,880 can work with a lot of data, and it's also very flexible. If you would ever like to 316 00:26:22,880 --> 00:26:28,320 extend the face space, like maybe it would be interesting to see if one could predict 317 00:26:28,320 --> 00:26:33,220 the number of parked bikes given a bank holiday or given weekend. And all these 318 00:26:33,220 --> 00:26:38,350 aspects could be added to the random forest relatively easily. And that's now 319 00:26:38,350 --> 00:26:42,130 the outcome: So I show the measured data, well that's been data that hasn't been 320 00:26:42,130 --> 00:26:49,610 seen by the model before, and I show that data here and then the densely covered, 321 00:26:49,610 --> 00:26:53,407 face-based prediction of the machine learning model here. And you can see that 322 00:26:53,407 --> 00:26:57,962 the color trends, they correspond quite well to each other. Like you can, for 323 00:26:57,962 --> 00:27:03,130 instance, see the smaller numbers or larger parked numbers in the regime of 324 00:27:03,130 --> 00:27:07,670 small temperature and also from a quantitative perspective, the prediction 325 00:27:07,670 --> 00:27:12,050 is quite decent as the square root of the mean squared error corresponds to a 326 00:27:12,050 --> 00:27:15,685 roughly a tenth of the average value of the parked bikes. 327 00:27:15,685 --> 00:27:22,537 Which, again in this context is quite a decent prediction performance, 328 00:27:22,537 --> 00:27:26,577 given how naive the approach was in general. 329 00:27:26,577 --> 00:27:31,340 OK, I did a bit more on machine learning, but I'm not showing that here. 330 00:27:31,340 --> 00:27:37,053 I calculated the Markov steady state for the same data essentially. 331 00:27:37,053 --> 00:27:42,532 And if you're interested in that, well, feel free to check out this link here. 332 00:27:44,266 --> 00:27:47,110 OK, last but not least, I would, of course, like to come to 333 00:27:47,110 --> 00:27:50,575 the summary for Anna, me, and maybe other students. 334 00:27:50,575 --> 00:27:57,135 So first of all, what I did was to scrape Nextbike data in Marburg in order to find, 335 00:27:59,337 --> 00:28:03,569 which stations to potentially avoid when you're in desperate need for a Nextbike. 336 00:28:03,569 --> 00:28:09,342 And for that, I calculated the probabilities of empty stations 337 00:28:09,342 --> 00:28:13,848 and found that the larger the station, the less likely it is to run out of bikes. 338 00:28:13,848 --> 00:28:17,371 So the general recommendation from my side would be: 339 00:28:17,371 --> 00:28:20,793 try to find larger stations if you're in desperate need for an Nextbike. 340 00:28:20,793 --> 00:28:25,848 And feel free to go back to the interactive map to see the 341 00:28:25,848 --> 00:28:30,629 the locations of these stations, which is quite interesting in itself, I would say. 342 00:28:30,629 --> 00:28:34,202 And then I turned towards the perspective of a city, and 343 00:28:34,202 --> 00:28:39,721 investigated a bit the usage patterns of Nextbikes and therefore representative 344 00:28:39,721 --> 00:28:44,517 most likely also cycling in Marburg, where I calculated the day-hour usage. 345 00:28:44,517 --> 00:28:49,400 So when is the system quite busy and generally the most popular routes, 346 00:28:49,400 --> 00:28:56,190 which might be of use for city planning and also social, economical, and 347 00:28:56,190 --> 00:28:59,095 ecological benefits of the whole system. 348 00:28:59,916 --> 00:29:01,547 Last but not least, I showed that 349 00:29:01,547 --> 00:29:05,660 more precise predictions are possible when maybe a statistical statement is not 350 00:29:05,660 --> 00:29:09,347 enough and you would like to do per case predictions. 351 00:29:10,150 --> 00:29:14,488 Last but not least, I was fortunate enough to work with AstA Marburg. 352 00:29:14,488 --> 00:29:19,627 In particular, Lucas and David, thank you very much for your trust 353 00:29:19,627 --> 00:29:24,892 in that project where we try to optimize the placement of the bikes in the future. 354 00:29:26,472 --> 00:29:28,670 The take home messages are now, first of all: 355 00:29:28,670 --> 00:29:32,391 Bikes are amazing! And not only are they amazing for you and the environment, 356 00:29:32,391 --> 00:29:37,616 but also for your wallet. So you save essentially money on gas. 357 00:29:38,346 --> 00:29:41,092 And also, I would like to, 358 00:29:41,622 --> 00:29:45,116 well, highlight that those data-driven optimizations of public transport 359 00:29:45,116 --> 00:29:49,640 have the potential to, well, increase the life, the quality of life of 360 00:29:49,640 --> 00:29:54,521 many of us at moderate cost. So again, I would like to come back to a case where 361 00:29:54,521 --> 00:29:56,975 maybe a city would like to improve bike infrastructure 362 00:29:56,975 --> 00:29:59,909 that doesn't have enough money to do it in one go. 363 00:29:59,909 --> 00:30:04,476 So then it might be interesting to first find–in a data-driven way–which 364 00:30:04,476 --> 00:30:12,720 combinations of, now in Nextbike terms, maybe stations or in general streets 365 00:30:12,720 --> 00:30:17,076 are popular, and then these might be worth being fixed first with a limited budget. 366 00:30:18,353 --> 00:30:23,237 OK, if you're interested in more, I was very fortunate to be able to speak at the 367 00:30:23,237 --> 00:30:28,607 last rC3 already about data in Marburg, but last year I spoke about parking 368 00:30:28,607 --> 00:30:32,993 in Marburg. If you like to, well, read the blog articles corresponding to that 369 00:30:32,993 --> 00:30:39,065 or just see the official CCC video, just follow these links shown here. 370 00:30:39,383 --> 00:30:41,368 Thank you very much for your attention. 371 00:30:41,368 --> 00:30:45,755 If you have anything to get in contact with me, reach out to my e-mail address. 372 00:30:45,755 --> 00:30:49,701 Maybe some ideas on how to improve a talk or what else to evaluate. 373 00:30:49,701 --> 00:30:52,980 And then all the supplementary materials that I mentioned, 374 00:30:52,980 --> 00:30:56,570 and what I've shown here, can be found again on this link here. 375 00:30:56,570 --> 00:30:59,750 In particular, thank you very much to all the people who reached out to me 376 00:30:59,750 --> 00:31:03,427 based on my last year's talk. I haven't come about to respond properly, but 377 00:31:03,427 --> 00:31:06,875 I'm 100 percent certain that I will do so. 378 00:31:06,875 --> 00:31:10,973 Thank you very much for your attention, and have a good year. 379 00:31:15,970 --> 00:31:21,490 Herald: Alright, welcome back. It's time for the Q&A now. You probably know the 380 00:31:21,490 --> 00:31:26,110 drill, but I repeat it anyway. If you're on Twitter, on Mastodon or on the 381 00:31:26,110 --> 00:31:32,951 Fediverse in general, the hashtag is #rc3cwtv to ask any questions. And if 382 00:31:32,951 --> 00:31:37,600 you're in the hackint IRC, the channel name is the same except there's a dash in 383 00:31:37,600 --> 00:31:43,450 between the rc3 and the cwtv. And we apparently already have some questions, so 384 00:31:43,450 --> 00:31:46,412 I'll just get started now. 385 00:31:46,412 --> 00:31:49,951 First question: Is the Nextbike API free to use? 386 00:31:49,951 --> 00:31:53,900 Does Nextbike even know that you did this scraping? 387 00:31:53,900 --> 00:32:00,020 Martin: Yes, so as far as I know, the Nextbike API has been reverse engineered 388 00:32:00,020 --> 00:32:05,553 from the iOS app and there's a Github repo by ubahnverleih and he documents lots of 389 00:32:05,553 --> 00:32:16,160 APIs of public transport companies like Nextbike or some companies that also 390 00:32:16,160 --> 00:32:25,060 produce the scooters. And since it's the public, since it's the official iOS API, 391 00:32:25,060 --> 00:32:29,805 it's more or less public, so to say, it's free and it's pretty much quota unlimited 392 00:32:29,805 --> 00:32:33,603 because normally all the iPhones access it. But again, I can only recommend 393 00:32:33,603 --> 00:32:37,077 the ubahnverleih repository on that on Github. 394 00:32:37,077 --> 00:32:39,826 Herald: And you don't need any credentials to access it? 395 00:32:39,826 --> 00:32:45,980 Martin: No. Actually, you can, as far as I checked, you can pretty much access the 396 00:32:45,980 --> 00:32:53,185 whole world. So you can access stations in Poland in, well, all of Germany now. 397 00:32:54,145 --> 00:32:58,682 Herald: That's cool. It's probably accidental, but it's quite cool anyway. 398 00:32:58,682 --> 00:33:00,400 Martin: laughs Yeah. 399 00:33:00,400 --> 00:33:03,890 Herald: Ok. What software did you use for the machine learning stuff? 400 00:33:04,124 --> 00:33:07,209 Martin: The machine learning stuff has been done with Python, 401 00:33:07,209 --> 00:33:11,796 and then specifically with sklearn, which is a quite popular machine learning 402 00:33:11,796 --> 00:33:15,964 framework for Python. 403 00:33:16,565 --> 00:33:20,443 Herald: The working horse of the machine learning community, I would say. 404 00:33:20,443 --> 00:33:22,380 Martin: Yes, exactly yeah. 405 00:33:22,380 --> 00:33:26,907 Herald: Do you know if the Nextbike adds or removes bikes from the stations? 406 00:33:26,907 --> 00:33:31,442 Or do they relocate the bikes? Or do… I mean, do they do that? 407 00:33:31,442 --> 00:33:34,872 Or does it just happen as an emergent behavior? 408 00:33:35,801 --> 00:33:40,510 Martin: I would say that… So, I had the chance to speak 409 00:33:40,510 --> 00:33:46,159 with a person of Nextbike while I was working for the Marburg-ASTA 410 00:33:46,159 --> 00:33:51,310 and he said that first of all, it's not not very technical yet. Well, not very 411 00:33:51,310 --> 00:33:57,610 digitalized yet, and they essentially drive around. So I'm pretty sure that they 412 00:33:57,610 --> 00:34:01,300 certainly collect bikes that need maintenance, but then logically, 413 00:34:01,300 --> 00:34:03,937 logically, probably also relocate them where necessary. 414 00:34:05,690 --> 00:34:11,409 Herald: All right. OK, someone wants to know if the scripts that you use would be 415 00:34:11,409 --> 00:34:16,649 public? I assume the main part with the API is already answered if you gave the 416 00:34:16,649 --> 00:34:20,079 Github repo. But are you planning to open source anything else? 417 00:34:21,058 --> 00:34:26,204 Martin: Potentially so I have no plans on doing so just because it's additional 418 00:34:26,204 --> 00:34:33,129 work, to be honest. If you're… well, I can just do the same, well offer the same 419 00:34:33,129 --> 00:34:37,720 same thing as last year: Just write me an email and if there's enough people who are 420 00:34:37,720 --> 00:34:43,820 interested, I probably strip down to my internal repository. But since in the 421 00:34:43,820 --> 00:34:48,909 internal repository there are a few private notes, that one is not published 422 00:34:48,909 --> 00:34:49,849 for sure right now. 423 00:34:51,746 --> 00:34:54,400 Herald: All right. Anything else? 424 00:34:55,401 --> 00:34:59,144 Dear listeners, you have maybe 30 seconds to comply. 425 00:35:00,102 --> 00:35:04,203 So there's one question, about the time period of data that you have, 426 00:35:04,203 --> 00:35:06,430 but I think you answered it in the talk. Right? 427 00:35:06,430 --> 00:35:14,063 Martin: Yes, it's more or less whole 2020 and 1/2 to 2/3 of 2021 that I collected. 428 00:35:14,063 --> 00:35:17,926 Herald: OK, so you're probably mostly has like a pandemic situation? 429 00:35:17,926 --> 00:35:20,448 Martin: Yes, exclusively. Pretty much, yeah 430 00:35:20,913 --> 00:35:25,429 Herald: I wonder if that's more or less usage than usual. I mean, it's less people 431 00:35:25,429 --> 00:35:28,880 having to go places, but more people wanting to not use public transport. 432 00:35:28,880 --> 00:35:31,793 Martin: Yes, so based on my data, I can see that it's 433 00:35:31,793 --> 00:35:36,440 the number of parked bikes and therefore the usage is going down, so 434 00:35:36,440 --> 00:35:40,300 the number of parked bikes is going up. Therefore, the usage is going down and 435 00:35:40,300 --> 00:35:45,841 that was also confirmed internally by some Nextbike people. Now, one more thing, so 436 00:35:45,841 --> 00:35:51,750 regarding the people who are interested in the code, regardless of if I am going to 437 00:35:51,750 --> 00:35:56,580 publish it or not, they if you have questions, just drop me an email. I mean, 438 00:35:56,580 --> 00:36:02,050 the writing, the scraper in particular, it's it's absolutely trivial. And if it's 439 00:36:02,050 --> 00:36:06,972 not trivial for you, then the code wouldn't be of of value to you anyway. 440 00:36:07,854 --> 00:36:14,125 Herald: All right. How does your data interpret broken / unavailable bikes at 441 00:36:14,125 --> 00:36:18,508 the station? I mean, can you see that? Or do you take it into account? 442 00:36:19,031 --> 00:36:21,780 Martin: Yes, so I don't see directly. 443 00:36:21,780 --> 00:36:28,077 I mean, I have a list of of all the bikes and if I would dig a little bit deeper, 444 00:36:28,077 --> 00:36:33,320 I could probably, you know, compile a list where I see where the bike, where a 445 00:36:33,320 --> 00:36:37,535 particular bike is standing at the moment. And if that bike would be, for instance, 446 00:36:37,535 --> 00:36:42,170 absent for a for a longer time, I could conclude that it's maybe broken, 447 00:36:42,170 --> 00:36:46,880 maintenance, maintained or something like that. But there's no direct data on that. 448 00:36:46,880 --> 00:36:53,240 Herald: All right. Do you do you think that Nextbike moving the bikes has somehow 449 00:36:53,240 --> 00:36:56,990 biased your data. Like if basically relocate them? 450 00:36:56,990 --> 00:37:00,330 Martin: That's a good question. I have absolutely no idea. So I mean, what I what 451 00:37:00,330 --> 00:37:07,659 I did calculate was that, so I defined a term that I, a term of activity, 452 00:37:07,659 --> 00:37:13,180 I defined it as the number of bikes coming in, divided by the number of bikes going 453 00:37:13,180 --> 00:37:17,070 out, plus the number of bikes going in. So it's so to say the activity and when 454 00:37:17,070 --> 00:37:22,180 that number - it's obviously between zero and one - and if it's far from zero point 455 00:37:22,180 --> 00:37:26,820 five, that would mean that the station runs empty essentially or overfills at 456 00:37:26,820 --> 00:37:32,150 some point and there are a few stations where it's a bit above zero point five. 457 00:37:32,150 --> 00:37:38,781 But of course, that's only this well, the the data that I used has all only the 458 00:37:38,781 --> 00:37:43,700 moved bikes incorporated already. So it's not really something that could be used 459 00:37:43,700 --> 00:37:46,695 for really trying to find it. 460 00:37:47,505 --> 00:37:51,597 Herald: Do you, I mean, is this just kind of data also available for, 461 00:37:51,597 --> 00:37:55,902 for bike sharing services that don't have docking? 462 00:37:55,902 --> 00:37:59,216 If they even exist still in Germany? I kind of lost track. 463 00:37:59,216 --> 00:38:01,704 I think maybe they all went bankrupt, but of course… 464 00:38:01,704 --> 00:38:03,591 Martin: What do you mean by docking? 465 00:38:03,591 --> 00:38:07,100 Herald: By, you know, they don't have fixed stations, but they are floating. 466 00:38:07,100 --> 00:38:12,910 Martin: So I mean, all that I did was to look at the stations, but actually there 467 00:38:12,910 --> 00:38:16,560 are a few free standing ones also in Marburg, and these people are typically 468 00:38:16,560 --> 00:38:23,200 penalized, penalized by money, so they have to pay, pay a fee. I didn't analyze 469 00:38:23,200 --> 00:38:26,900 it at all. Would be interesting for sure. And as far as I know, there are cities 470 00:38:26,900 --> 00:38:32,805 where it's completely, well, there are no stations for Nextbike, 471 00:38:32,805 --> 00:38:36,070 where people can drop it off wherever they like. 472 00:38:36,070 --> 00:38:39,193 Don't quote me on that, it's just something that I've heard. 473 00:38:39,193 --> 00:38:43,040 Most likely in the large cities. So maybe in Berlin could be. 474 00:38:43,040 --> 00:38:47,674 Herald: Yeah, I think here there are like some locations where you have to drop the 475 00:38:47,674 --> 00:38:50,390 bikes, but that's, I'm not sure if that's Nextbike. 476 00:38:50,390 --> 00:38:54,640 I can never remember which ones laughs I actually end up using. 477 00:38:55,550 --> 00:39:01,650 All right, everybody. Now is your last chance to ask more questions. 478 00:39:01,650 --> 00:39:07,210 I feel like at Teleshopping, like the rC3 Teleshopping, which I highly recommend if 479 00:39:07,210 --> 00:39:12,170 you haven't checked it out. It's probably the peak experience at the remote Congress 480 00:39:12,170 --> 00:39:16,790 is the Teleshopping channel. And you should all have a look. 481 00:39:16,790 --> 00:39:22,140 And maybe buy some… some extremely useful items that they sell 482 00:39:27,295 --> 00:39:31,880 Herald: OK, so the chat confirms that Nextbike does have cities without stations 483 00:39:31,880 --> 00:39:33,432 Martin: Ah ja ja, very good. 484 00:39:34,408 --> 00:39:36,445 Yet, I mean, I can only… 485 00:39:36,445 --> 00:39:41,612 if you're remotely interested in all these public transport data studies, 486 00:39:41,612 --> 00:39:45,749 definitely check out the ubahnverleih Github repository. 487 00:39:45,749 --> 00:39:49,382 There's a large number of systems documented there. 488 00:39:49,655 --> 00:39:54,610 Herald: OK, and that's just ubahnverleih, just as you would write it. 489 00:39:54,610 --> 00:39:58,130 Martin: Yes, let me look it up very quickly, Ubahn… 490 00:40:02,579 --> 00:40:07,710 Well, the person is from Ulm, and he also contributed to the 491 00:40:07,710 --> 00:40:13,993 CCC infrastructure. His name is Constantine and yes, it's ubahnverleih. 492 00:40:13,993 --> 00:40:18,260 And I think it's like, I think the repo name name is WoBike, as far as I know, 493 00:40:18,260 --> 00:40:20,440 Herald: All right. Good. Thank you. 494 00:40:22,880 --> 00:40:29,000 Alright. I think we've managed to exhaust the internet. So, people, where can they 495 00:40:29,000 --> 00:40:33,220 find you have to have any further questions? Are you going to be wandering 496 00:40:33,220 --> 00:40:36,760 the remote, the world or what it's called? You know the… 497 00:40:36,760 --> 00:40:41,040 Martin: Well, that's a good idea. I haven't planned, but I can. So I've no 498 00:40:41,040 --> 00:40:46,140 idea how it works, but I'm sure I can figure it out. So I mean, in general, drop 499 00:40:46,140 --> 00:40:52,860 me an email and you can find my email on lellep dot xyz. It's my website. 500 00:40:54,903 --> 00:40:59,220 Other than that, I could be online in the 2D world adventure now, 501 00:40:59,220 --> 00:41:01,800 if that's of of value to anybody. 502 00:41:01,800 --> 00:41:05,287 Herald: People can maybe hunt you down if they really need to, you need to. 503 00:41:05,287 --> 00:41:07,560 Martin: definitely ja. 504 00:41:07,560 --> 00:41:12,024 Herald: OK, wonderful. Well, thank you for your talk and for answering the questions. 505 00:41:12,024 --> 00:41:16,617 And thanks everyone for tuning in. Have a good remainder of Congress. 506 00:41:17,191 --> 00:41:20,979 I think you should be able to at some point rate talks in the Fahrplan, 507 00:41:20,979 --> 00:41:24,853 if that feature still exists, so if you want to see more of this kind of stuff, 508 00:41:24,853 --> 00:41:27,444 maybe leave some feedback. 509 00:41:27,798 --> 00:41:29,098 Bye bye. 510 00:41:29,588 --> 00:41:30,585 Martin: Bye. 511 00:41:30,724 --> 00:41:44,448 rC3 postroll music 512 00:41:44,448 --> 00:41:52,239 Subtitles created by c3subtitles.de in the year 2022. Join, and help us!