Python& D3.js Dashboard Crossfilter热图

时间:2017-12-19 18:39:16

标签: javascript python d3.js heatmap crossfilter

我已成功复制此交互式信息中心地图example

我现在想输入自己的数据。我的python比示例更简单,因为我的所有数据都已按照我想要的方式构建。 这是我的python:

    # -*- coding: utf-8 -*-

import pandas as pd
from shapely.geometry import Point, shape

from flask import Flask
from flask import render_template
import json


data_path = './input/'

def get_location(longitude, latitude, ny_json):

    point = Point(longitude, latitude)

    for record in ny_json['features']:
        polygon = shape(record['geometry'])
        if polygon.contains(point):
            return record['properties']['Name']
    return 'other'

with open(data_path + '/geojson/ny_HA.json') as data_file:
    ny_json = json.load(data_file)

app = Flask(__name__)
    #route to html index
@app.route("/")
def index():
    return render_template("index.html")

    #route data
@app.route("/data")
def get_data():
    df = pd.read_csv(data_path + 'Mikes_NY_geocoded_tickets.csv', sep=';')

    df['location'] = df.apply(lambda row: get_location(row['longitude'], row['latitude'], ny_json), axis=1)

    cols_to_keep = ['timestamp', 'longitude', 'latitude', 'Violation', 'Type', 'DayOfWeek', 'location']

    #remove NaN values 
    df_clean = df[cols_to_keep].dropna()
    #return a json
    return df_clean.to_json(orient='records')


if __name__ == "__main__":
    app.run(host='0.0.0.0',port=5000,debug=True)

以下是我的数据geocoded_data.csvdata

当我运行我的应用python app.py时,没有错误,当我进入浏览器的本地主机时,我的仪表板出现了,但是一切都是空的,我的交叉过滤器和地图。

以下是浏览器显示的内容:

My_Dashboard

以下是浏览器控制台enter image description here中的错误 任何想法都会非常感激。

1 个答案:

答案 0 :(得分:1)

现在你已经展示了你的JS代码(在上面的调试器截图中),很容易猜到出了什么问题。

你有

d["timestamp"] = dateFormat.parse(d["timestamp"]);
d["timestamp"].setMinutes(0); // Error: d["timestamp"] is null

这里是documentation for d3.time.format.parse()

  

解析指定的字符串,返回相应的日期对象。如果解析失败,则返回null。不像"自然语言"日期解析器(包括JavaScript的内置解析),此方法是严格的:如果指定的字符串与关联的格式说明符不完全匹配,则此方法返回null。例如,如果关联的格式是完整的ISO 8601字符串"%Y-%m-%dT%H:%M:%SZ",则字符串"2011-07-01T19:15:28Z"将被正确解析,但"2011-07-01T19:15:28""2011-07-01 19:15:28""2011-07-01"将返回null,尽管有效期为8601个日期。

您尚未显示转化前d["timestamp"]的价值,但可能是预期格式与实际格式之间存在细微差别。

特别是,如果您的数据的屏幕截图是正确的,那么您的日期格式中没有秒数,但您的d3.time.format说明符期望它们?