-
Notifications
You must be signed in to change notification settings - Fork 22
/
bikedata
2753 lines (2753 loc) · 311 KB
/
bikedata
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
{
"metadata": {
"name": ""
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": [
"%matplotlib inline\n",
"# from pylab import *\n",
"\n",
"import matplotlib.pyplot as plt\n",
"import pandas as pd\n",
"import numpy as np"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 29
},
{
"cell_type": "code",
"collapsed": false,
"input": [
" # Read in bikedata\n",
"bikedata = pd.read_csv('2014-02 - Citi Bike trip data.csv', delimiter=',')"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 30
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"bikedata.head(3) # get a sense of bikedata data"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>duration</th>\n",
" <th>start</th>\n",
" <th>stop</th>\n",
" <th>startid</th>\n",
" <th>startname</th>\n",
" <th>startlat</th>\n",
" <th>startlong</th>\n",
" <th>endid</th>\n",
" <th>endname</th>\n",
" <th>endlat</th>\n",
" <th>endlong</th>\n",
" <th>bikeid</th>\n",
" <th>usertype</th>\n",
" <th>birthyr</th>\n",
" <th>gender</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td> 382</td>\n",
" <td> 2/1/2014 0:00</td>\n",
" <td> 2/1/2014 0:06</td>\n",
" <td> 294</td>\n",
" <td> Washington Square E</td>\n",
" <td> 40.730494</td>\n",
" <td>-73.995721</td>\n",
" <td> 265</td>\n",
" <td> Stanton St & Chrystie St</td>\n",
" <td> 40.722293</td>\n",
" <td>-73.991475</td>\n",
" <td> 21101</td>\n",
" <td> Subscriber</td>\n",
" <td> 1991</td>\n",
" <td> 1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td> 372</td>\n",
" <td> 2/1/2014 0:00</td>\n",
" <td> 2/1/2014 0:06</td>\n",
" <td> 285</td>\n",
" <td> Broadway & E 14 St</td>\n",
" <td> 40.734546</td>\n",
" <td>-73.990741</td>\n",
" <td> 439</td>\n",
" <td> E 4 St & 2 Ave</td>\n",
" <td> 40.726281</td>\n",
" <td>-73.989780</td>\n",
" <td> 15456</td>\n",
" <td> Subscriber</td>\n",
" <td> 1979</td>\n",
" <td> 2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td> 591</td>\n",
" <td> 2/1/2014 0:00</td>\n",
" <td> 2/1/2014 0:10</td>\n",
" <td> 247</td>\n",
" <td> Perry St & Bleecker St</td>\n",
" <td> 40.735354</td>\n",
" <td>-74.004831</td>\n",
" <td> 251</td>\n",
" <td> Mott St & Prince St</td>\n",
" <td> 40.723180</td>\n",
" <td>-73.994800</td>\n",
" <td> 16281</td>\n",
" <td> Subscriber</td>\n",
" <td> 1948</td>\n",
" <td> 2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>3 rows \u00d7 15 columns</p>\n",
"</div>"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 31,
"text": [
" duration start stop startid startname \\\n",
"0 382 2/1/2014 0:00 2/1/2014 0:06 294 Washington Square E \n",
"1 372 2/1/2014 0:00 2/1/2014 0:06 285 Broadway & E 14 St \n",
"2 591 2/1/2014 0:00 2/1/2014 0:10 247 Perry St & Bleecker St \n",
"\n",
" startlat startlong endid endname endlat \\\n",
"0 40.730494 -73.995721 265 Stanton St & Chrystie St 40.722293 \n",
"1 40.734546 -73.990741 439 E 4 St & 2 Ave 40.726281 \n",
"2 40.735354 -74.004831 251 Mott St & Prince St 40.723180 \n",
"\n",
" endlong bikeid usertype birthyr gender \n",
"0 -73.991475 21101 Subscriber 1991 1 \n",
"1 -73.989780 15456 Subscriber 1979 2 \n",
"2 -73.994800 16281 Subscriber 1948 2 \n",
"\n",
"[3 rows x 15 columns]"
]
}
],
"prompt_number": 31
},
{
"cell_type": "code",
"collapsed": false,
"input": [
" # Retrieve column names\n",
"bikedata.columns"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 32,
"text": [
"Index([u'duration', u'start', u'stop', u'startid', u'startname', u'startlat', u'startlong', u'endid', u'endname', u'endlat', u'endlong', u'bikeid', u'usertype', u'birthyr', u'gender'], dtype='object')"
]
}
],
"prompt_number": 32
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"bikedata.duration.describe()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 33,
"text": [
"count 224736.000000\n",
"mean 874.519810\n",
"std 5486.092219\n",
"min 60.000000\n",
"25% 360.000000\n",
"50% 544.000000\n",
"75% 845.000000\n",
"max 766108.000000\n",
"Name: duration, dtype: float64"
]
}
],
"prompt_number": 33
},
{
"cell_type": "code",
"collapsed": false,
"input": [
" # Calculate distances traveled\n",
"latdist = bikedata.endlat - bikedata.startlat\n",
"longdist = bikedata.endlong - bikedata.startlong\n",
"totaldist = ((latdist**2) + (longdist**2))**.5"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 34
},
{
"cell_type": "code",
"collapsed": false,
"input": [
" # store distance info in data frame\n",
"from pandas import *\n",
"distance = DataFrame({'latdist':latdist, 'longdist':longdist, 'totaldist':totaldist})"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 35
},
{
"cell_type": "code",
"collapsed": false,
"input": [
" # Check that distance df is what I think it is\n",
"len(bikedata.startlat), len(distance)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 36,
"text": [
"(224736, 224736)"
]
}
],
"prompt_number": 36
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"distance.describe()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>latdist</th>\n",
" <th>longdist</th>\n",
" <th>totaldist</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td> 224736.000000</td>\n",
" <td> 224736.000000</td>\n",
" <td> 224736.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td> -0.000145</td>\n",
" <td> -0.000135</td>\n",
" <td> 0.015294</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td> 0.014006</td>\n",
" <td> 0.012040</td>\n",
" <td> 0.010357</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td> -0.086687</td>\n",
" <td> -0.059058</td>\n",
" <td> 0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td> -0.007273</td>\n",
" <td> -0.008108</td>\n",
" <td> 0.008321</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td> 0.000000</td>\n",
" <td> 0.000000</td>\n",
" <td> 0.012686</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td> 0.007044</td>\n",
" <td> 0.007874</td>\n",
" <td> 0.019439</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td> 0.084147</td>\n",
" <td> 0.060703</td>\n",
" <td> 0.087475</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>8 rows \u00d7 3 columns</p>\n",
"</div>"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 37,
"text": [
" latdist longdist totaldist\n",
"count 224736.000000 224736.000000 224736.000000\n",
"mean -0.000145 -0.000135 0.015294\n",
"std 0.014006 0.012040 0.010357\n",
"min -0.086687 -0.059058 0.000000\n",
"25% -0.007273 -0.008108 0.008321\n",
"50% 0.000000 0.000000 0.012686\n",
"75% 0.007044 0.007874 0.019439\n",
"max 0.084147 0.060703 0.087475\n",
"\n",
"[8 rows x 3 columns]"
]
}
],
"prompt_number": 37
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"fig,ax1 = plt.subplots(1,1)\n",
"ax1.hist(distance.totaldist, color='#eeeeee')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 38,
"text": [
"(array([ 6.19920000e+04, 9.34470000e+04, 4.08450000e+04,\n",
" 1.60780000e+04, 6.92700000e+03, 3.21900000e+03,\n",
" 1.52800000e+03, 5.56000000e+02, 1.24000000e+02,\n",
" 2.00000000e+01]),\n",
" array([ 0. , 0.00874749, 0.01749499, 0.02624248, 0.03498997,\n",
" 0.04373747, 0.05248496, 0.06123245, 0.06997995, 0.07872744,\n",
" 0.08747493]),\n",
" <a list of 10 Patch objects>)"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nt95880298MIL2rZtW9wyORwOhcNhNTc3a8GCBWpubta1116rqqqqqDNFm2tQf3+/XnvtNT344INx\nzSRJ+/bt03PPPaf9+/ervb1dR48e1Z///Oe4ZsrJydHSpUtVUlKie+65RwUFBV/5gSkhCyQ9PV1t\nbW2Rr9va2uTxeM67TjAYlMfjuaCxlzJTLA5LL2aukydPqrS0VD/+8Y81bdq0hMg0KDk5Wffee692\n7twZ10zvv/++6uvrdeONN2rmzJl6++23VVFREddMkpSWliZJGjZsmO6//37t2LEjrpk8Ho88Ho9u\nv/12SdL06dPV3NwcdaZocw168803deutt2rYsGFxz7Rz507dcccdcrlccjqdeuCBB/T+++/HNZN0\n6mafnTt36p133tHQoUN18803n/8Jo75qcxGcPHnS3HTTTaa1tdX09fV95YWgDz74IHIh6ELGXupM\ng1pbW2N+ET2aXF988YUpLy83jz76aMJk+ve//20OHz5sjDGmt7fXjB8/3mzZsiWumU7X2NhofvjD\nH0adJ9pMx44dM59//rkxxpijR4+aO+64w7z11ltxzWSMMePHjzeffPKJMcaYJ554wixZsiTqTLHI\nZYwxM2bMiMmF6lhk2r17t8nNzTW9vb3miy++MBUVFeb555+PayZjjOns7DTGGHPgwAGTk5Njenp6\nzvt8CVkgxhizadMmk52dbbKysszTTz9tjDHmxRdfNC+++GJknZ/+9KcmKyvLjB492uzateu8Y+Od\n6aGHHjLf//73zbe+9S3j8XjMyy+/HPdc27ZtMw6Hw+Tn55sxY8aYMWPGmDfffDOumf75z3+agoIC\nk5+fb/Ly8syvf/3rmOSJJtPpGhsbY3YXVjSZ9u3bZ/Lz801+fr7Jzc1NmJ/zDz/80Nx2221m9OjR\n5v7774/ZXVjR5jp69KhxuVyR0k2ETM8884zx+Xxm1KhRpqKiwvT398c90/jx443P5zP5+fnm7bff\n/srnYiIhAMBKQl4DAQAkPgoEAGCFAgEAWKFAAABWKBAAgBUKBABghQIBAFihQAAAVv4fDmR+oO0V\nHusAAAAASUVORK5CYII=\n",
"text": [
"<matplotlib.figure.Figure at 0x18172c50>"
]
}
],
"prompt_number": 38
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# calculating distances in meaningful units\n",
"# converting latitude & longitude to miles\n",
"distance['longmiles'] = distance.longdist/.019078"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 39
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"distance['latmiles'] = distance.latdist/.014457"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 40
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"distance['totmiles'] = ((distance.longmiles**2) + (distance.latmiles**2))**.5"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 41
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Because I keep forgetting what columns I'm working with\n",
"for x in bikedata.columns.values:\n",
" print x,"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"duration start stop startid startname startlat startlong endid endname endlat endlong bikeid usertype birthyr gender\n"
]
}
],
"prompt_number": 42
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"for x in distance.columns.values:\n",
" print x,"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"latdist longdist totaldist longmiles latmiles totmiles\n"
]
}
],
"prompt_number": 43
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Checking out duration vs. distance data\n",
"for x in range (49, 55):\n",
" print (bikedata.duration.ix[x], round(distance.totmiles.ix[x], 2))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"(258, 1.74)\n",
"(584, 0.6)\n",
"(242, 0.43)\n",
"(983, 1.87)\n",
"(317, 0.53)\n",
"(114, 0.16)\n"
]
}
],
"prompt_number": 44
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print bikedata['birthyr'].describe()\n",
" # checking out birth years in bike data - some data is no good"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"count 224736\n",
"unique 78\n",
"top 1985\n",
"freq 9305\n",
"Name: birthyr, dtype: object\n"
]
}
],
"prompt_number": 45
},
{
"cell_type": "code",
"collapsed": false,
"input": [
" # creating non-random easy-to-work with sub-sample of bikedata \n",
"shortbikedata = bikedata[:5000]\n",
"print len(shortbikedata)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"5000\n"
]
}
],
"prompt_number": 46
},
{
"cell_type": "code",
"collapsed": false,
"input": [
" # The maximum birthyear is a string representing nothing\n",
"shortbikedata['birthyr'].max()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 47,
"text": [
"'\\\\N'"
]
}
],
"prompt_number": 47
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print shortbikedata.birthyr.count(), len(shortbikedata), '\\n'*2, \\\n",
"shortbikedata.birthyr[0:3]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"5000 5000 \n",
"\n",
"0 1991\n",
"1 1979\n",
"2 1948\n",
"Name: birthyr, dtype: object\n"
]
}
],
"prompt_number": 48
},
{
"cell_type": "code",
"collapsed": false,
"input": [
" # Some old folks keep bikes out for more than 20 minutes\n",
" # But this can be interpreted in 1 of 2 ways w/o distance \n",
"print shortbikedata[(shortbikedata.birthyr < 1960) & \\\n",
" (shortbikedata.duration > 1200)]['duration'].mean(), \\\n",
" shortbikedata[(shortbikedata.birthyr < 1960) & \\\n",
" (shortbikedata.duration > 1200)]['duration'].count()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"nan 0\n"
]
}
],
"prompt_number": 49
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"bikedata['minutes'] = bikedata['duration']/60\n",
"bikedata.minutes.hist(grid=False, bins=20, range=(1,4000/65))\n",
"plt.xlabel('Bike Trip Duration (Mins)', color=\"midnightblue\", fontdict={'fontsize':14})\n",
"plt.ylabel('Number of Trips', color=\"midnightblue\", fontdict={'fontsize':14})\n",
" # plt.text(25,50000, \"Few trips last even half an hour\", color='midnightblue')\n",
"\n",
"plt.figtext(0.197, 1.10,\"How long do people keep out\",fontdict={'fontsize':18}, color=\"midnightblue\")\n",
"plt.figtext(0.18,1.015,\"Citi Bikes in the dead of winter?\",fontdict={'fontsize':18}, color=\"midnightblue\")\n",
"plt.figtext(0.345,.93,\"(February 2014)\",fontdict={'fontsize':18}, color=\"midnightblue\")\n",
"# plt.figtext(0.02,0.6,\"# of exposures\",fontdict={'fontsize':18},rotation=90)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 50,
"text": [
"<matplotlib.text.Text at 0x18425898>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAZgAAAFWCAYAAABU2YuRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XdYFMf/wPH3UURUREEBORREQMTesPfeO0SNJSb5RU2M\nwcQS0zQNkmhMLBi/RhO72Dto7AqKLRFbBDugooI0aQL7+4Nw8XKgB3ogyef1PPckzM3Ozu6t+9mZ\n2d1RKYqiIIQQQrxgRsVdASGEEP9OEmCEEEIYhAQYIYQQBiEBRgghhEFIgBFCCGEQEmCEEEIYhAQY\noZeQkCuo1ZNYt+5EcVfluf2btuV5BQScQK2exPHjV19oubNmBaFWTyIq6uELLVeULBJgikHuCe6n\nnw7km0etnsTIkYuLsFb6UalUxV2FF+bftC2iZFm8+NB/4gJHAkwxetYJTk6AQvw7LV58iPXrTxZ3\nNQxOAowQQgiDMCnuCoiCCQw8x8KF+7l48TYqlQoPD3vGj+9It251NHnee28N27b9zqVLX2NmlvMT\nnzp1g3795lKhgjnnz3+paR3t33+JESMW89NPI+nTp0GB65OSks4PP/zG9u1/cPduApaW5rRrV5PJ\nk3vi4FBRky8k5ApDhvgzZ84rZGcr/PTTAW7ejKVyZQtGj27N+PEddcpetiyYxYsPER39ELW6Im+8\n0RZz81JMmrSWjRvfpnnzGs+sX1DQOWbP3s3Vq/ewsiqLl5cnzZo555k3NjaZWbOC2LPnArGxSVSq\nZEHXrnWYPLk7FSuWfea63ntvNevXnyIs7HNmztzKvn2XSE9/TKNGjnzySV/q1nXQWWbr1t9ZuvQI\nly7dJitLoVatKowb14Feverr5F216jjLlh3lypV7lCplTMOGjvj4dMXTU3t71OpJDBnSlIEDG/Ht\nt4FcunQHCwsz+vZtyLRpPSlTxuyZ25KensmiRQfYtOk0t27FYWZmgqenM5Mn96BOHfUzl89LVlY2\n06dvYNWq43z0UR/GjesAwLVr95kzZzdHjoQTH5+Cra0lvXvX5/33u1OmTCmtMmJiEpgzZw97917k\nwYMkrKzK0bmzB1On9sTaupwm36xZQcyZs4cDB6awfHkI27f/QVJSGh4e9kyb1ovWrV31qrO+x3dA\nwIl8j8tBg+YTFfWQ0NBPgJzfByA6Ol7z/wChoZ9olflvIAGmGKWkZBAbm6x3/l9/PcpHH23C1dWG\nSZO6oSgK69adZMyYpXz77RCGD28BQJs2rqxff5KTJ69r/iEdPRqOkZGKhIRUzp2Lol69qn+lR2Bk\npKJlS5cC1//x4yyGDl3EqVM36N27PuPGdeDatfssXx7CoUOXCQycRJUqFbSWWbEihPv3kxg2rDnl\ny5uzceMpvvpqB1WqVGDAgEaafPPn78PXdyf16jkwfXpvUlIy8Pffr3USeZbAwDDeeONXHB2t8fHp\nirGxEQEBJ9i794JO3sTEVPr1m8uNGw8YOrQZdes6cO5cFMuXBxMcHMGuXT6ULfvsEzPA8OGLqFix\nLB980J179xL55ZcjDBo0n+3bJ1KzZhVNvm++2cXcuXvp2NGdKVN6YmSkIjAwjP/7v2V89dVARo9u\nrcn75ZfbWbjwAI0aVWP69F4kJaWzcuUxhgzx55dfXqdjx1padTh/PoqdO8/y6qst8PJqSnBwBEuW\nHOHPP+8QEDDuqd2vjx9nMXz4Ik6fvsHgwU14/fW2JCSksnr1cfr1m8vmze9ojh99paZmMH78Cg4c\nuMTcucMZOLAxAGFhkQwZ4k+FCmUYObIVdnaWXLgQzdKlRzh58jqbNr2DiYkxAFFRD+nb90cyM7MY\nOrQ5jo7WXL+ec7yFhFwhMHASFhaltdb77rurMDExZsKETn/tsxCGD1/EypX/R5s2bk+tc2GO7/w8\nubvnzRvOZ59twdq6LO++20WTbmX17IuYEkcRRS44OEKxt/d55mfkyMWaZR4+fKTUqDFFadXqKyU5\nOU2TnpSUqrRo8aXi6jpVSUhIURRFUW7ffqjY2/sofn47NfkGD56vjB79s+LmNk1ZsGCfJr1r11lK\np07f6l3ndetOaNJWrgxR7O19lC+/3KaVd+/eC4q9vY8yYcJKneUbNfpMSUpK1aSnpKQrdep8rPTu\n/YMmLS4uWalefbLSqdO3Snr6Y036vXuJSs2a0xS12kc5duzKU+ubmZmlNG48Q6lT52MlLi5Zk56Y\nmKo0bTpTZ1t8fXco9vY+yrJlR7XK+eWXI4q9vY/yzTe7nrWLlIkTVyn29j7KG28s1Uo/e/aWolb7\nKMOG/aSV9s/fKNdrry1R3NymaX7niIgYxd7eR+nff67y+HGmJt/du/GKu/uHiqfn50pWVpYmPff4\nCQo6p1XuJ59sUuztfZQtW85o0tauDVXs7bX356JFBxR7ex/l4ME/tZZPSkpVmjSZqQwaNP+Z++K7\n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\npaQWZOPsAAAAAElFTkSuQmCC\n",
"text": [
"<matplotlib.figure.Figure at 0xa729978>"
]
}
],
"prompt_number": 50
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Replacing bad birth years in bikedata with 1900\n",
"\n",
"for x in range(len(bikedata)):\n",
" if bikedata.birthyr[x] in ('\\\\N',0):\n",
" bikedata.birthyr[x] = 1900\n",
" bikedata.birthyr[x] = int(bikedata.birthyr[x]) "
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 117
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"femalebikedata.birthyr.max(), femalebikedata.birthyr.min()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 139,
"text": [
"(1997, 1926)"
]
}
],
"prompt_number": 139
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"malebikedata = bikedata.loc[bikedata['gender']==1]\n",
"femalebikedata = bikedata.loc[bikedata['gender']==2]\n",
"\n",
"for x in range(len(bikedata)):\n",
" if bikedata.birthyr[x] in ('\\\\N',0):\n",
" bikedata.birthyr[x] = 1900\n",
" bikedata.birthyr[x] = int(bikedata.birthyr[x]) "
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 118
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Replacing bad birth years in shortbikedata with 1900\n",
"\n",
"for x in range(len(shortbikedata)):\n",
" if shortbikedata.birthyr[x] in ('\\\\N',0):\n",
" shortbikedata.birthyr[x] = 1900\n",
" shortbikedata.birthyr[x] = int(shortbikedata.birthyr[x]) \n",
" \n",
"# Splitting shortbike data into new vars for males & females\n",
"# Neuter bicyclists are excluded\n",
"\n",
"maleshortbikedata = shortbikedata.loc[shortbikedata['gender']==1]\n",
"femaleshortbikedata = shortbikedata.loc[shortbikedata['gender']==2]"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 52
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Creating fembirthlist & femdurlist\n",
"# in case fem birthyr's & durations still won't plot\n",
"\n",
"\n",
"fembirthlist=[]\n",
"for x in (femaleshortbikedata.birthyr):\n",
" fembirthlist.append(x) \n",
"\n",
"femlongbirthlist=[]\n",
"for x in (femalebikedata.birthyr):\n",
" femlongbirthlist.append(x)\n",
"\n",
"femlongage=[]\n",
"for x in (femalebikedata.birthyr):\n",
" femlongage.append(2013-x)\n",
" \n",
"femdurlist=[]\n",
"for x in (femaleshortbikedata.duration):\n",
" femdurlist.append(x) \n",
"\n",
"femlongdurlist=[]\n",
"for x in (femalebikedata.duration):\n",
" femlongdurlist.append(x) \n",
"\n",
"print len(fembirthlist), len(femdurlist), len(femalebikedata), len(femlongbirthlist), len(femlongdurlist)\n",
"print fembirthlist[0:5], femlongbirthlist[0:5]\n",
"print femdurlist[0:5], femlongdurlist[0:5]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"1188 1188 41479 41479 41479\n",
"[1979, 1948, 1983, 1989, 1980] [1979, 1948, 1983, 1989, 1980]\n",
"[372, 591, 439, 292, 259] [372, 591, 439, 292, 259]\n"
]
}
],
"prompt_number": 152
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"femalebikedata.birthyr.count(), len(femlongage)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 153,
"text": [
"(41479, 41479)"
]
}
],
"prompt_number": 153
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"femagedebug = femlongage\n",
"femagedebug.sort()\n",
"femagedebug[0:5], femagedebug[-5:]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 146,
"text": [
"([16, 16, 16, 16, 16], [1997, 1997, 1997, 1997, 1997])"
]
}
],
"prompt_number": 146
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print fembirthlist[0:5], '\\n', femaleshortbikedata.birthyr[0:5] "
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[1979, 1948, 1983, 1989, 1980] \n",
"1 1979\n",
"2 1948\n",
"9 1983\n",
"18 1989\n",
"19 1980\n",
"Name: birthyr, dtype: object\n"
]
}
],
"prompt_number": 59
},
{
"cell_type": "code",
"collapsed": false,
"input": [
" # Checking for ints in birthyr data\n",
" # Seems strings have all been successfully removed.\n",
"\n",
"count=0 \n",
"for x in range(0,5000): \n",
" if (isinstance(shortbikedata.birthyr[x], int)==False):\n",
" count = count + 1\n",
" \n",
"print count, type(shortbikedata.birthyr[0])"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"0 <type 'int'>\n"
]
}
],
"prompt_number": 60
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"distance.totmiles.describe()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 61,
"text": [
"count 224736.000000\n",
"mean 0.939850\n",
"std 0.673621\n",
"min 0.000000\n",
"25% 0.496625\n",
"50% 0.755699\n",
"75% 1.181352\n",
"max 6.027552\n",
"Name: totmiles, dtype: float64"
]
}
],
"prompt_number": 61
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# 4374 out of 224736 bikes were returned to the same station (I think)\n",
"print len(distance[(distance.totmiles==0)])"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"4374\n"
]
}
],
"prompt_number": 62
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# I can't understand why birthyr full of ints can't describe better\n",
"# maybe needs to be a float for describe calculations???\n",
"print len(shortbikedata[shortbikedata.birthyr > 1960])\n",
"print shortbikedata.duration.mean()\n",
"shortbikedata.birthyr.describe()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"4150\n",
"830.8146\n"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 63,
"text": [
"count 5000\n",
"unique 64\n",
"top 1984\n",
"freq 266\n",
"Name: birthyr, dtype: int64"
]
}
],
"prompt_number": 63
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# shortbikedata.birthyr.convert_objects(convert_numeric='force')"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 64
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print shortbikedata.duration.mean()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"830.8146\n"
]
}
],
"prompt_number": 65
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"shortbikedata.birthyr.describe()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 66,
"text": [
"count 5000\n",
"unique 64\n",
"top 1984\n",
"freq 266\n",
"Name: birthyr, dtype: int64"
]
}
],
"prompt_number": 66
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"shortbikedata.duration.describe()"
],
"language": "python",
"metadata": {},
"outputs": [