Esempio n. 1
0
def assign(filename, date, time_l, time_r, m, L, pb, pc, cr, cb):
    dat = order_filter.filter_time(filename, date, time_l, time_r)
    dest_dat = csvreader.csv_reader_no_headers('../data/destination.csv')
    departure_dat = csvreader.csv_reader_no_headers('../data/departure.csv')
    coordinates = [[float(departure_dat[0][0]), float(departure_dat[0][1])]]
    for line in dest_dat:
        coordinates.append([float(line[0]), float(line[1])])
    for line in coordinates:
        line[0] *= lon_km
        line[1] *= lat_km
    k = len(coordinates)
    dest = []
    for line in dat:
        departure_longitude = float(line[3]) * lon_km
        departure_latitude = float(line[4]) * lat_km
        dest_longitude = float(line[5]) * lon_km
        dest_latitude = float(line[6]) * lat_km
        if (departure_longitude - coordinates[0][0]) ** 2 + (departure_latitude - coordinates[0][1]) ** 2 > departure_radius ** 2:
            continue
        min_dis, pos = 1e20, 0
        for j in range(1, k):
            cur_dis = (dest_longitude - coordinates[j][0]) ** 2 + (dest_latitude - coordinates[j][1]) ** 2
            if cur_dis < min_dis:
                min_dis, pos = cur_dis, j
        dest.append(pos)

    n = len(dest)

    datahelper.dump_json('../data/order_data.json', n, m, k, L, dest, coordinates, pb, pc, cr, cb)
Esempio n. 2
0
def filter_day(filename):
    dat = csvreader.csv_reader_no_headers(filename)
    out_dat = []
    for line in dat:
        s = timestamp_datetime(int(line[1]))
        s = s[11:]
        if s2 <= s <= s1:
            out_dat.append(line)
    return out_dat
Esempio n. 3
0
def filter_time(filename, date, sl, sr):
    dat = csvreader.csv_reader_no_headers(filename)
    out_dat = []
    for line in dat:
        s = timestamp_datetime(int(line[1]))
        dat = s[:10]
        tm = s[11:]
        if sl <= tm <= sr and dat == date:
            out_dat.append(line)
    return out_dat
Esempio n. 4
0
import csvreader
import json
import numpy as np
import time
from urllib.request import urlopen


if __name__ == '__main__':
    dest_dat = csvreader.csv_reader_no_headers('../data/destination.csv')
    departure_dat = csvreader.csv_reader_no_headers('../data/departure.csv')

    ak = '??????????????????' # Please fill in your AK code

    coordinates = [[float(departure_dat[0][0]), float(departure_dat[0][1])]]

    for line in dest_dat:
        coordinates.append([float(line[0]), float(line[1])])

    K = len(coordinates)

    new_coordinates = []

    dist = np.zeros((K, K))

    for i in range(K):
        for j in range(K):
            print(i, j)
            if i == j:
                dist[i][j] = 0
            else:
                uri = 'http://api.map.baidu.com/routematrix/v2/driving?output=json&origins=' + str(coordinates[i][1]) + ',' + \
Esempio n. 5
0
def selection(re):
    dest_cnt = {}
    hotel_cnt = {}
    dat = order_filter.filter_night(
        '../../CS214-CourseData/Projects/data/haikou_order/order_20171011_20171014.csv'
    )
    departure_dat = csvreader.csv_reader_no_headers('../data/departure.csv')
    departure = [float(departure_dat[0][0]), float(departure_dat[0][1])]
    hotel_dat = csvreader.csv_reader_no_headers(
        '../data/hotel_address_lat_lng.csv')

    # Analyze order destination.
    for line in dat:
        dest_longitude = float(line[5])
        dest_latitude = float(line[6])

        dest_brick_lon = int(dest_longitude * 500)
        dest_brick_lat = int(dest_latitude * 500)

        index = str(dest_brick_lon) + '.' + str(dest_brick_lat)
        if dest_cnt.get(index) is None:
            dest_cnt[index] = 1
        else:
            dest_cnt[index] += 1

    # Analyze hotel data
    valid_cnt = 0
    for line in hotel_dat:
        hotel_lat = float(line[0])
        hotel_lon = float(line[1])
        if hotel_lon < 109.4 or hotel_lon > 110.82 or hotel_lat < 19.6 or hotel_lat > 20.05:
            continue
        valid_cnt += 1
        hotel_brick_lon = int(hotel_lon * 500)
        hotel_brick_lat = int(hotel_lat * 500)
        index = str(hotel_brick_lon) + '.' + str(hotel_brick_lat)
        if hotel_cnt.get(index) is None:
            hotel_cnt[index] = 1
        else:
            hotel_cnt[index] += 1

    # Combine
    cnt = {}
    for key in dest_cnt.keys():
        res = dest_cnt[key]
        if res >= 50:
            res = 50
        cnt[key] = beta_d * res / 50

    for key in hotel_cnt.keys():
        if cnt.get(key) is None:
            cnt[key] = beta_h / (1 + math.exp(-hotel_cnt[key]))
        else:
            cnt[key] += beta_h / (1 + math.exp(-hotel_cnt[key]))

    dest = []
    for key in cnt.keys():
        brick_lon, brick_lat = key.split('.')
        dest.append([cnt[key], int(brick_lon), int(brick_lat)])

    dest.sort()

    pre_final_list = []

    for item in dest:
        if re and (lon_km * (departure[0] - item[1] / 500.0))**2 + (
                lat_km *
            (departure[1] - item[2] / 500.0))**2 <= departure_radius**2:
            continue
        if item[0] >= 0.6:
            pre_final_list.append([item[1], item[2]])
            print('longitude =', item[1] / 500.0, 'latitude =',
                  item[2] / 500.0, 'count =', item[0])

    min_arg = [54700, 9800]
    max_arg = [55410, 10025]

    center, _ = kmeans.kmeans(K, 2, min_arg, max_arg, pre_final_list)

    dest_lon = []
    dest_lat = []

    with open('../data/destination.csv', 'w', newline='') as out:
        csv_write = csv.writer(out, dialect='excel')
        for item in center:
            print(item[0] / 500.0, item[1] / 500.0)
            dest_lon.append(item[0] / 500.0)
            dest_lat.append(item[1] / 500.0)
            csv_write.writerow([item[0] / 500.0, item[1] / 500.0])

    print('total', len(dest_lon), 'possible destinations.')

    plt.plot(dest_lon, dest_lat, 'o', markersize=2)
    plt.savefig('../data/destination.pdf', dpi=300)
    plt.show()