日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

大数据案例之OD线分析

發布時間:2023/12/10 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大数据案例之OD线分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? 我們從網絡上爬取了2013年到2017年芝加哥每一輛出租車的每一單行程數據,數據內容示例如圖一,包含了出租車ID,行程ID,上下車時間,上下車坐標,行程耗時,費用以及支付方式等信息。有了這些數據,我們就可以對其進行數據挖掘分析,找到打車需求最旺的區域和時間段,以便得到更好的出租車資源調度策略等。本案例中我們明確分析目標,要找出2016年里周末10點到18點這個時間段,從奧黑爾國際機場出發的旅客都去了哪兒。深入分析也能從這個分析目標中預測出芝加哥最熱門的旅游景點等。

? 針對該分析目標,我們選擇supermap pyspark大數據組件產品,其OD線分析功能即可實現該分析目標,由于OD線分析需要行政區域面數據集,故我們又爬取了芝加哥主要的行政區域面數據。

  • 數據

  • 工具

    supermap-bdtpy-9.1.0-beta

  • 步驟

  • 數據上傳到hdfs,便于分布式計算

    ./hadoop fs -put /opt/data/*.csv /opt/data/*.meta /taxi_data
  • 讀取出租車數據,并按條件過濾,提取2016年周末10-18點期間在奧黑爾國際機場上車的行程單

    def get_point():fRdd = read_csv(ss.sparkContext, 'hdfs://localhost:9000/taxi_data/Chicago-Taxi_Trips.csv', SpecFieldNames('', 'TripStartTimestamp', ''), 36, None,'hdfs://localhost:9000/taxi_data/Chicago-Taxi_Trips.meta', None)regionRdd = read_csv(ss.sparkContext, 'hdfs://localhost:9000/taxi_data/Chicago-region.csv', SpecFieldNames('SmID', '', ''), 36, None,'hdfs://localhost:9000/taxi_data/Chicago-region.meta', None)# 奧黑爾國際機場所在的行政區ID為165381airportRdd = regionRdd.filter(lambda f: int(f.get_value('OBJECTID')) == 165381)# 構造時間周期,2016年里所有的周末,2016-01-02為第一個周六cycleW = TimeCycle(Duration(1, DurationUnit.Weeks), '2016-01-02 00:00:00', Duration(2, DurationUnit.Days),'2016-01-01 00:00:00', '2017-01-01 00:00:00')tfW = TimeCycleFilter(cycleW)# 構造時間周期,每天的10-18點cycleH = TimeCycle(Duration(1, DurationUnit.Days), '2016-01-02 10:00:00', Duration(8, DurationUnit.Hours),'2016-01-01 00:00:00', '2017-01-01 00:00:00')tfH = TimeCycleFilter(cycleH)# 上車點數據按時間過濾,過濾行程終點為空的,過濾行程時間異常的,按區域裁剪fr = fRdd.filter(tfW).filter(tfH).filter(lambda f: f.get_value('TripSeconds') != None).filter(lambda f: f.get_value('DropoffCentroidLatitude') != None).filter(lambda f: f.get_value('DropoffCentroidLongitude') != None).filter(lambda f:int(f.get_value('TripSeconds')) > 120).filter(lambda f:int(f.get_value('TripSeconds')) < 12000).clip(airportRdd.first())return fr
  • 點數據集轉屬性表數據集,od線分析需要上車點與下車點的關系表數據集

    # 構造屬性表結構 def make_new_meta():struct_type = StructType()struct_type.add(StructField('TripID', StringType()))struct_type.add(StructField('TaxiID', StringType()))struct_type.add(StructField('TripSeconds', IntegerType()))struct_type.add(StructField('DropoffCentroidLat', DoubleType()))struct_type.add(StructField('DropoffCentroidLon', DoubleType()))struct_type.add(StructField('PickupCentroidLat', DoubleType()))struct_type.add(StructField('PickupCentroidLon', DoubleType()))return FeatureMetadata(struct_type, 'Empty', None, has_feature_id=True)# 構造新的要素 def make_new_feature(f):xy = str(f.get_value('PickupCentroidLocation'))import re# 提取起始點的xy坐標x, y = re.findall(r'[(](.*?)[)]', xy)[0].split(" ")field_value = [f.get_value('TripID'), f.get_value('TaxiID'), f.get_value('TripSeconds'), f.get_value('DropoffCentroidLatitude'), f.get_value('DropoffCentroidLongitude'), y, x]# none代表屬性表記錄,注意參數順序return Feature(None, field_value, id_value=f.get_value('TripID'), field_infos=make_new_meta()._get_field_infos())# 點轉屬性表 def get_table():rdd = get_point().rdd.map(lambda f: make_new_feature(f))tableRdd = FeatureRDD.make(rdd, make_new_meta())return tableRdd
  • 讀取用于OD線分析的行政區域面數據

    # 用于od線制作的面數據 def get_region():regionRdd = read_csv(ss.sparkContext, 'hdfs://localhost:9000/taxi_data/Chicago-region.csv',SpecFieldNames('OBJECTID', '', ''), 36, None, 'hdfs://localhost:9000/taxi_data/Chicago-region.meta', None)return regionRdd
  • 構建OD線

    def make_odline():# 參與計算的featurerdd必須具備唯一id值odRdd = make_od_line(get_region(), get_table(), 'NAME', 'PickupCentroidLon', 'PickupCentroidLat', 'DropoffCentroidLon', 'DropoffCentroidLat', 'TripSeconds,Sum,sumTripSeconds')# od線數據odRdd[0].save_as_csv('hdfs://localhost:9000/taxi_data/output/workday16_line.csv', write_header=True)#od關聯區域面數據odRdd[1].save_as_csv('hdfs://localhost:9000/taxi_data/output/workday16_region.csv', write_header=True)print('Done')
  • 結果展示,通過idesktop對od分析結果數據集制作專題圖表達,可以看出去市區的人最多。

  • 感興趣的伙伴可以進行更多的深度分析,比如不同時間段哪個區域的用車量最大?哪個區域更容易接到長途出租車單?

  • 源碼及數據下載鏈接

總結

以上是生活随笔為你收集整理的大数据案例之OD线分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。