In [1]:
import gpxpy
import os
%pylab inline
import json
import codecs
import pandas as pd;
import csv;
from pandas import DataFrame,Series
from pandas import Timestamp
import matplotlib as mpl
import seaborn as sns
import matplotlib.pyplot as plt
Populating the interactive namespace from numpy and matplotlib
In [2]:
from datetime import datetime,timedelta
In [3]:
mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei'] #指定默认字体  
mpl.rcParams['font.size'] = 16
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题 
sns.set_context("talk")
In [4]:
dir='../datasets/rungps/'
#dir='D:/360安全浏览器下载/gps_scripts/sample_gpx2/'
In [5]:
gpxs= [dir+'/'+r for r in os.listdir(dir) if r.split('.')[1]=='gpx']
In [18]:
jsonfile= codecs.open('../datasets/rungps/info.json','r','utf-8')
In [19]:
gpxinfo = json.load(jsonfile)
In [20]:
gpxpd=pd.DataFrame(gpxinfo)
In [21]:
len(gpxpd)
Out[21]:
345
In [22]:
gpxpd
Out[22]:
distance hot id type
0 8.76 248 15414378 骑行
1 9.24 262 15414365 骑行
2 0.53 33 15414353 跑步
3 5.96 384 15414346 跑步
4 9.93 268 15414328 骑行
5 9.82 645 15414313 跑步
6 0.43 36 15289498 跑步
7 0.20 17 15289495 跑步
8 10.70 895 15274763 跑步
9 8.29 230 15274758 骑行
10 9.20 260 15274756 骑行
11 6.71 240 15241610 骑行
12 8.70 262 15241609 骑行
13 9.90 301 15215963 骑行
14 2.23 34 15215960 骑行
15 7.66 196 15215958 骑行
16 12.01 300 15158279 骑行
17 9.64 268 15158277 骑行
18 9.30 295 15135785 骑行
19 9.80 272 15135782 骑行
20 9.20 262 15113542 骑行
21 8.66 272 15113541 骑行
22 2.90 76 15113539 骑行
23 12.94 1063 15113536 跑步
24 8.20 651 14876253 跑步
25 9.50 772 14876248 跑步
26 1.24 100 14876246 跑步
27 4.84 144 14857102 骑行
28 0.20 15 14857100 跑步
29 20.33 1636 14667595 跑步
... ... ... ... ...
315 8.31 271 8236112 骑行
316 8.34 301 8236110 骑行
317 6.96 244 8236109 骑行
318 11.31 443 8236108 骑行
319 6.05 218 8236107 骑行
320 10.35 866 8236106 跑步
321 11.02 922 8236104 跑步
322 11.26 976 8236103 跑步
323 11.06 927 8236102 跑步
324 17.80 1499 8236101 跑步
325 8236099 步行
326 18.01 1511 8236098 跑步
327 15.51 1296 8236094 跑步
328 1.01 85 8236093 跑步
329 12.68 1061 8236092 跑步
330 10.48 869 8236091 跑步
331 14.55 1215 8236090 跑步
332 0.43 31 8236089 跑步
333 47.37 1803 8236088 骑行
334 20.10 1669 8236087 跑步
335 20.03 1672 8236086 跑步
336 4.92 414 8236085 跑步
337 7.10 573 8236083 跑步
338 5.93 487 8236081 跑步
339 22.01 1836 8236080 跑步
340 21.08 1770 8236079 跑步
341 7.60 631 8236077 跑步
342 45.31 3793 8236076 跑步
343 9.45 369 8236075 骑行
344 15.33 1280 8236074 跑步

345 rows × 4 columns

In [23]:
gpxpd.head()
Out[23]:
distance hot id type
0 8.76 248 15414378 骑行
1 9.24 262 15414365 骑行
2 0.53 33 15414353 跑步
3 5.96 384 15414346 跑步
4 9.93 268 15414328 骑行
In [24]:
gpxpd.groupby(gpxpd.type).size().plot(kind='pie')
Out[24]:
<matplotlib.axes._subplots.AxesSubplot at 0xa40cf0>
In [25]:
def readgpx(x):
     
    file= open(dir+x+'.gpx','r')
    txt=file.read()
    gpx=gpxpy.parse(txt)
    mv=gpx.get_moving_data()
    dat= {'移动时间':mv.moving_time,'静止时间':mv.stopped_time,'移动距离':mv.moving_distance,'暂停距离':mv.stopped_distance,'最大速度':mv.max_speed};
    dat['总时间']=(gpx.get_duration())
    dat['id']=str(x)
    updown=gpx.get_uphill_downhill()
    dat['上山']=(updown.uphill);
    dat['下山']=(updown.downhill)
    timebound=gpx.get_time_bounds();
    dat['开始时间']=(timebound.start_time)
    dat['结束时间']=(timebound.end_time)
    p=gpx.get_points_data()[0]
    dat['lat']=p.point.latitude
    dat['lng']=p.point.longitude
    file.close()
    return dat
    
In [26]:
data=[]
for r in gpxpd.id:
    data.append(readgpx(r))
In [27]:
详细= DataFrame(data)
In [28]:
详细=详细.merge(gpxpd,left_on='id',right_on='id',how='left')
In [29]:
详细.开始时间=详细.开始时间.map(lambda x:x+timedelta(hours=8))
In [30]:
详细.结束时间=详细.结束时间.map(lambda x:x+timedelta(hours=8))
In [31]:
详细.describe()
Out[31]:
lat lng 上山 下山 总时间 暂停距离 最大速度 移动时间 移动距离 静止时间
count 345.000000 345.000000 345.000000 345.000000 345.000000 345.000000 345.000000 345.000000 345.000000 345.000000
mean 39.639758 116.273281 87.815084 87.023480 2517.179710 25.289476 7.767560 2307.921739 9576.608661 209.257971
std 2.057149 0.964971 208.227441 205.920037 2131.922694 84.145590 3.871210 1964.271345 5727.557821 576.908975
min 22.293875 103.849650 0.400000 0.000000 33.000000 0.000000 0.000000 33.000000 186.027132 0.000000
25% 39.963141 116.354551 18.900000 19.400000 1426.000000 0.000000 5.284012 1351.000000 7515.321150 0.000000
50% 39.965323 116.438743 29.000000 27.300000 1683.000000 9.604584 8.400156 1585.000000 8984.510016 73.000000
75% 39.966690 116.448580 41.200000 42.500000 2904.000000 22.230107 9.233345 2623.000000 10251.276385 156.000000
max 40.553930 120.157380 2430.800000 2414.800000 15242.000000 1388.285536 62.295214 15169.000000 47501.618425 6607.000000
In [32]:
详细=详细[详细.distance.str.contains('\d+')]
In [90]:
详细
Out[90]:
id lat lng 上山 下山 开始时间 总时间 暂停距离 最大速度 移动时间 移动距离 结束时间 静止时间 distance hot type 移动速度 平均速度
开始时间
2016-02-29 15:55:25 15414378 39.939775 116.428021 20.100000 10.100000 2016-02-29 15:55:25 1545 0.000000 9.335115 1545 8716.251458 2016-02-29 16:21:10 0 8 248 骑行 5.641587 5.641587
2016-02-29 12:49:34 15414365 39.962662 116.354799 20.900000 22.900000 2016-02-29 12:49:34 2004 54.552571 8.529740 1702 9165.652439 2016-02-29 13:22:58 302 9 262 骑行 5.385225 4.573679
2016-02-27 19:09:01 15414353 39.975522 116.371728 2.100000 2.100000 2016-02-27 19:09:01 292 0.000000 2.883729 292 548.189867 2016-02-27 19:13:53 0 0 33 跑步 1.877363 1.877363
2016-02-27 17:55:15 15414346 39.965782 116.451051 32.200000 35.200000 2016-02-27 17:55:15 3527 5.048983 6.156464 3361 7059.813048 2016-02-27 18:54:02 166 5 384 跑步 2.100510 2.001648
2016-02-26 08:47:12 15414328 39.965386 116.449411 35.100000 21.100000 2016-02-26 08:47:12 1623 0.000000 10.401620 1623 9909.582299 2016-02-26 09:14:15 0 9 268 骑行 6.105719 6.105719
2016-02-25 08:36:59 15414313 39.966949 116.447950 34.800000 24.800000 2016-02-25 08:36:59 1765 15.931564 8.565283 1610 9499.873492 2016-02-25 09:06:24 155 9 645 跑步 5.900543 5.382365
2016-02-24 21:07:14 15289498 39.968828 116.444666 2.000000 3.000000 2016-02-24 21:07:14 121 0.000000 6.930610 121 448.238202 2016-02-24 21:09:15 0 0 36 跑步 3.704448 3.704448
2016-02-24 20:33:14 15289495 39.963203 116.353801 1.400000 1.400000 2016-02-24 20:33:14 81 0.000000 6.278180 81 221.293046 2016-02-24 20:34:35 0 0 17 跑步 2.732013 2.732013
2016-02-24 08:21:42 15274763 39.970826 116.441234 43.100000 28.100000 2016-02-24 08:21:42 3672 10.557960 4.935352 3624 10040.179902 2016-02-24 09:22:54 48 10 895 跑步 2.770469 2.734254
2016-02-23 18:17:51 15274758 39.966273 116.365732 20.600000 35.600000 2016-02-23 18:17:51 1608 14.834453 8.953432 1524 8811.645872 2016-02-23 18:44:39 84 8 230 骑行 5.781920 5.479879
2016-02-23 08:32:19 15274756 39.966902 116.447078 31.700000 21.700000 2016-02-23 08:32:19 1631 1.661745 8.968138 1584 9205.410972 2016-02-23 08:59:30 47 9 260 骑行 5.811497 5.644029
2016-02-22 18:40:24 15241610 39.966389 116.365743 31.500000 42.500000 2016-02-22 18:40:24 940 0.000000 10.322870 938 6694.850563 2016-02-22 18:56:04 2 6 240 骑行 7.137367 7.122181
2016-02-22 08:33:00 15241609 39.965323 116.444699 27.100000 19.100000 2016-02-22 08:33:00 1452 12.655550 9.667941 1382 8738.635723 2016-02-22 08:57:12 70 8 262 骑行 6.323181 6.018344
2016-02-21 11:37:24 15215963 39.931260 116.368583 20.500000 28.500000 2016-02-21 11:37:24 1828 19.626797 9.131326 1738 9807.296475 2016-02-21 12:07:52 90 9 301 骑行 5.642863 5.365042
2016-02-20 18:24:56 15215960 39.944419 116.379186 3.400000 3.400000 2016-02-20 18:24:56 2763 115.215321 6.381430 1821 3319.860929 2016-02-20 19:10:59 942 2 34 骑行 1.823098 1.201542
2016-02-20 14:11:50 15215958 39.962575 116.441709 59.100000 17.100000 2016-02-20 14:11:50 3458 197.918391 8.703025 2018 7013.520820 2016-02-20 15:09:28 1440 7 196 骑行 3.475481 2.028202
2016-02-18 18:27:15 15158279 39.962891 116.353953 37.400000 35.400000 2016-02-18 18:27:15 3040 28.626952 7.128958 2624 11887.543411 2016-02-18 19:17:55 416 12 300 骑行 4.530314 3.910376
2016-02-18 08:27:09 15158277 39.964197 116.449781 32.200000 27.200000 2016-02-18 08:27:09 1826 8.807502 8.598475 1701 9698.992878 2016-02-18 08:57:35 125 9 268 骑行 5.701936 5.311606
2016-02-17 18:29:04 15135785 39.962939 116.354365 16.300000 29.300000 2016-02-17 18:29:04 1406 5.409439 10.081761 1310 9206.184951 2016-02-17 18:52:30 96 9 295 骑行 7.027622 6.547784
2016-02-17 08:32:19 15135782 39.969064 116.455769 26.200000 16.200000 2016-02-17 08:32:19 1625 13.461072 9.049439 1439 10251.276385 2016-02-17 08:59:24 186 9 272 骑行 7.123889 6.308478
2016-02-16 08:44:20 15113542 39.965810 116.447056 29.000000 22.000000 2016-02-16 08:44:20 1568 4.136678 9.683209 1538 9145.346825 2016-02-16 09:10:28 30 9 262 骑行 5.946259 5.832492
2016-02-16 18:56:35 15113541 39.966180 116.360724 20.300000 34.300000 2016-02-16 18:56:35 1313 0.000000 9.561346 1313 8648.839108 2016-02-16 19:18:28 0 8 272 骑行 6.587082 6.587082
2016-02-06 18:24:04 15113539 38.416831 112.726142 8.800000 9.800000 2016-02-06 18:24:04 2209 38.941033 6.904218 929 2872.489807 2016-02-06 19:00:53 1280 2 76 骑行 3.092023 1.300358
2016-02-05 08:15:59 15113536 38.433069 112.732837 58.500000 59.500000 2016-02-05 08:15:59 7263 84.996667 4.110671 5875 14218.627402 2016-02-05 10:17:02 1388 12 1063 跑步 2.420192 1.957680
2016-01-31 15:44:35 14876253 39.922908 116.404737 34.900000 39.900000 2016-01-31 15:44:35 3877 0.281920 4.959237 3873 9280.776306 2016-01-31 16:49:12 4 8 651 跑步 2.396276 2.393804
2016-01-31 14:00:19 14876248 39.895152 116.322193 44.100000 42.100000 2016-01-31 14:00:19 4181 84.448243 5.118835 3691 9788.424509 2016-01-31 15:10:00 490 9 772 跑步 2.651971 2.341168
2016-01-31 10:44:59 14876246 39.741531 116.325856 6.400000 5.400000 2016-01-31 10:44:59 404 0.000000 6.296293 404 1267.308028 2016-01-31 10:51:43 0 1 100 跑步 3.136901 3.136901
2016-01-30 11:04:28 14857102 39.997435 116.456407 8.900000 9.900000 2016-01-30 11:04:28 1189 69.098863 8.706801 921 4778.247182 2016-01-30 11:24:17 268 4 144 骑行 5.188108 4.018711
2016-01-30 10:13:16 14857100 39.971886 116.453083 1.000000 0.000000 2016-01-30 10:13:16 33 0.000000 0.000000 33 186.027132 2016-01-30 10:13:49 0 0 15 跑步 5.637186 5.637186
2016-01-17 15:10:38 14667595 39.961681 116.440548 106.400000 112.400000 2016-01-17 15:10:38 10449 40.740915 4.166478 10156 22676.888450 2016-01-17 18:04:47 293 20 1636 跑步 2.232856 2.170245
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
2015-03-09 16:51:05 8236113 39.977300 116.434090 170.156638 156.247918 2015-03-09 16:51:05 2160 37.974594 6.295204 1953 8653.527850 2015-03-09 17:27:05 207 8 278 骑行 4.430890 4.006263
2015-03-09 22:58:36 8236112 39.980520 116.369490 169.236472 174.927482 2015-03-09 22:58:36 1391 2.040290 7.323827 1372 8342.032792 2015-03-09 23:21:47 19 8 271 骑行 6.080199 5.997148
2015-03-23 16:42:41 8236110 39.942930 116.450310 262.423767 264.901547 2015-03-23 16:42:41 1544 1.710910 8.359646 1466 8393.330303 2015-03-23 17:08:25 78 8 301 骑行 5.725328 5.436095
2015-03-23 23:19:43 8236109 39.953270 116.447250 203.249923 190.904233 2015-03-23 23:19:43 1375 26.090245 7.669159 1220 7018.380479 2015-03-23 23:42:38 155 6 244 骑行 5.752771 5.104277
2015-03-29 19:12:42 8236108 39.966690 116.450480 307.652997 388.500407 2015-03-29 19:12:42 1965 22.899450 9.217671 1698 11416.726198 2015-03-29 19:45:27 267 11 443 骑行 6.723631 5.810039
2015-03-29 21:23:44 8236107 39.976710 116.389990 136.303065 128.571435 2015-03-29 21:23:44 991 11.324806 8.345556 931 6072.419285 2015-03-29 21:40:15 60 6 218 骑行 6.522470 6.127567
2015-04-06 17:24:02 8236106 39.966870 116.455490 206.034403 190.730643 2015-04-06 17:24:02 3546 26.635323 4.448066 3409 10402.544603 2015-04-06 18:23:08 137 10 866 跑步 3.051494 2.933600
2015-04-06 21:05:50 8236104 39.989010 116.353720 126.755278 132.826398 2015-04-06 21:05:50 3801 2.225021 3.772658 3787 11089.507899 2015-04-06 22:09:11 14 11 922 跑步 2.928309 2.917524
2015-04-16 08:31:53 8236103 39.977070 116.484960 152.163052 125.505422 2015-04-16 08:31:53 3485 22.230107 4.214460 3358 9569.840046 2015-04-16 09:29:58 127 11 976 跑步 2.849863 2.746009
2015-04-21 09:05:44 8236102 39.973290 116.446960 224.118669 200.656409 2015-04-21 09:05:44 3690 39.185363 4.263799 3517 11035.311047 2015-04-21 10:07:14 173 11 927 跑步 3.137706 2.990599
2015-04-24 08:07:32 8236101 39.968440 116.454090 406.109159 458.660519 2015-04-24 08:07:32 5236 0.000000 5.133062 5236 17961.121500 2015-04-24 09:34:48 0 17 1499 跑步 3.430314 3.430314
2015-04-27 20:45:22 8236098 39.960330 116.444900 490.480347 469.372567 2015-04-27 20:45:22 5586 0.000000 4.577185 5586 18058.833022 2015-04-27 22:18:28 0 18 1511 跑步 3.232874 3.232874
2015-04-29 08:06:43 8236094 39.970910 116.455830 225.162235 281.057815 2015-04-29 08:06:43 5018 17.639681 4.288345 4949 15465.157491 2015-04-29 09:30:21 69 15 1296 跑步 3.124906 3.081937
2015-04-30 19:39:31 8236093 38.485690 112.725340 16.256826 13.912986 2015-04-30 19:39:31 351 0.000000 3.757809 351 1011.907043 2015-04-30 19:45:22 0 1 85 跑步 2.882926 2.882926
2015-05-02 19:22:55 8236092 38.435180 112.734460 187.505566 179.783216 2015-05-02 19:22:55 4370 7.498077 3.899078 4331 12963.504895 2015-05-02 20:35:45 39 12 1061 跑步 2.993190 2.966477
2015-05-06 20:47:53 8236091 39.961660 116.445350 230.499558 212.732318 2015-05-06 20:47:53 3814 10.050538 4.335467 3765 10354.878838 2015-05-06 21:51:27 49 10 869 跑步 2.750300 2.714966
2015-05-12 16:18:53 8236090 39.975470 116.443880 139.795762 128.597422 2015-05-12 16:18:53 4991 24.044541 3.838270 4880 14468.874969 2015-05-12 17:42:04 111 14 1215 跑步 2.964933 2.898993
2015-05-12 17:55:31 8236089 40.012650 116.390040 11.642333 10.813323 2015-05-12 17:55:31 661 9.869003 1.567872 479 423.498822 2015-05-12 18:06:32 182 0 31 跑步 0.884131 0.640694
2015-05-16 20:15:53 8236088 39.968430 116.414910 875.263993 863.971333 2015-05-16 20:15:53 8760 86.750755 8.818718 7988 47501.618425 2015-05-16 22:41:53 772 47 1803 骑行 5.946622 5.422559
2015-05-26 20:25:23 8236087 39.959190 116.453710 455.751090 494.709900 2015-05-26 20:25:23 6816 0.000000 4.079952 6816 19951.228454 2015-05-26 22:18:59 0 20 1669 跑步 2.927117 2.927117
2015-05-28 20:14:26 8236086 39.966790 116.455710 218.614361 204.520931 2015-05-28 20:14:26 7169 10.693060 3.584331 7118 20264.978279 2015-05-28 22:13:55 51 20 1672 跑步 2.847005 2.826751
2015-05-30 19:46:21 8236085 40.011490 116.392710 100.640030 114.721660 2015-05-30 19:46:21 1426 0.000000 4.262249 1426 4929.671186 2015-05-30 20:10:07 0 4 414 跑步 3.456992 3.456992
2015-05-30 20:28:30 8236083 40.008660 116.392480 108.168800 109.621020 2015-05-30 20:28:30 4541 95.479479 2.557352 3800 7028.834615 2015-05-30 21:44:11 741 7 573 跑步 1.849693 1.547861
2015-05-30 21:45:14 8236081 39.948660 116.398460 174.371374 158.640994 2015-05-30 21:45:14 2863 16.951199 3.239376 2741 5940.609254 2015-05-30 22:32:57 122 5 487 跑步 2.167315 2.074960
2015-06-04 19:48:06 8236080 39.962000 116.457020 1255.600000 1292.600000 2015-06-04 19:48:06 7770 14.922985 4.681906 7704 23431.109999 2015-06-04 21:57:36 66 22 1836 跑步 3.041421 3.015587
2015-06-06 20:19:57 8236079 39.966760 116.448870 1414.700000 1408.700000 2015-06-06 20:19:57 6603 0.000000 5.109054 6603 22291.681667 2015-06-06 22:10:00 0 21 1770 跑步 3.375993 3.375993
2015-06-08 15:32:12 8236077 39.973040 116.446440 570.900000 557.900000 2015-06-08 15:32:12 3122 0.000000 5.107019 3122 8421.531394 2015-06-08 16:24:14 0 7 631 跑步 2.697480 2.697480
2015-06-13 07:32:50 8236076 36.069780 103.849650 2430.800000 2414.800000 2015-06-13 07:32:50 15242 1.428810 4.788815 15169 46838.918600 2015-06-13 11:46:52 73 45 3793 跑步 3.087805 3.073017
2015-06-18 22:56:26 8236075 39.989250 116.361950 262.200000 294.200000 2015-06-18 22:56:26 1173 0.000000 10.398171 1173 9678.939041 2015-06-18 23:15:59 0 9 369 骑行 8.251440 8.251440
2015-06-21 20:04:22 8236074 39.966960 116.455860 1012.700000 879.700000 2015-06-21 20:04:22 5454 0.000000 5.284012 5454 16192.062623 2015-06-21 21:35:16 0 15 1280 跑步 2.968842 2.968842

338 rows × 18 columns

In [33]:
详细.distance= 详细.distance.map(lambda x:int(float(x)))
In [34]:
详细.hot= 详细.hot.map(lambda x:int(float(x)))
In [35]:
详细.index= 详细.开始时间
In [36]:
详细['移动速度']= 详细.移动距离/详细.移动时间
In [37]:
详细['平均速度']= 详细.移动距离/详细.总时间
In [38]:
详细[详细.type=='跑步'].移动速度.plot()
Out[38]:
<matplotlib.axes._subplots.AxesSubplot at 0x80c92f0>
In [39]:
详细[详细.type=='骑行'].移动速度.plot()
Out[39]:
<matplotlib.axes._subplots.AxesSubplot at 0x8161f10>
In [79]:
exceptids=详细[(详细.lng<116.1)|(详细.lng>116.7)|(详细.lat<39.9)|(详细.lat>40.1)].id
In [80]:
def filtercity(r):
    sp=r.split('/')[-1].split('.')
    if sp[1]!='gpx':
        return False;
    if sp[0] in exceptids.values:
        return False;
    return True;
In [81]:
import shutil
In [82]:
bjids= [r for r in gpxs if filtercity(r)]
In [83]:
len(bjids)
Out[83]:
327
In [87]:
for r in gpxs:
    if filtercity(r):
        shutil.copy(r, r.replace('rungps','rungpsbj'))
In [89]:
import zipfile
In [ ]:
 
In [ ]:
 
In [ ]:
 
In [ ]: