因此,我正在尝试Datashader,它看起来和性能都很好。然而,所有的示例都必须在具有大量ram的机器上完成,或者只是不使用那么大的数据集。因为我在做大图的时候会炸掉我的16 do的内存。我毫不怀疑Datashader可以处理数据,然而,我不知道如何加载它并逐段绘制它。
需要明确的是,它不是在绘图期间,而是实际上通过从数据库读取失败了-然而,由于Datashader是一个用于绘制非常大的数据的库,所以必须有一些方法来代替在df中加载所有内容并传递它?
我现在的代码是:
from colorcet import fire
import psycopg2
import datashader as ds
import datashader.transfer_functions as tf
con = getCon()
query = """SELECT latitude, longitude FROM mydatabasetable"""
df = pd.read_sql(query, con)
cvs = ds.Canvas(plot_width=400, plot_height=400)
agg = cvs.points(df, 'longitude', 'latitude')
img = tf.shade(agg, cmap=['lightblue', 'darkblue'], how='log')例如,是否可以多次调用cvs.points方法(从而将我的数据分成几个位?)
发布于 2020-06-13 06:31:05
Datashader支持Pandas、Dask和CUDA dataframe (cuDF),每种都有自己的优势和局限性。Pandas是一个很好的默认选择,但是Pandas DataFrame会一次加载到内存中,这确实会限制您可以处理的数据集的大小。Dask dataframe没有这个限制;Dask定义了块,不需要一次加载所有块。我们通常将Datashader+Dask与基于分块的文件格式(如Parquet )一起使用,以处理比内存容量大得多的数据集;例如,请参阅https://examples.pyviz.org/nyc_taxi/dashboard.html (但删除.persist()以使其在内核外运行)。Dask.DataFrame有一个read_sql_table方法,但是我还没有验证过它是否像Parquet那样在内核之外运行;如果是这样的话,您应该是在做生意!
https://stackoverflow.com/questions/62313371
复制相似问题