★★实用方法推荐★★

数据读写

读取单个文件

备注

自动识别文件类型并选择合适的方法读取,日常使用中99%以上的数据都可以用这一个方法读取

ricco.etl.extract.rdf(file_path: str, *, sheet_name=0, sheet_contains: str = None, encoding: str = None, info: bool = False, dtype=None, columns: (<class 'list'>, <class 'str'>) = None, nrows: int = None, recursive: bool = True) DataFrame

常用文件读取函数,支持 .csv/.xlsx/.xls/.shp/.parquet/.pickle/.feather/.kml/.ovkml/ .geojson/.shp/.json等

参数:
  • file_path – 文件或文件夹路径

  • sheet_name – 数据所在sheet的名称,仅对.xlsx/.xls生效

  • sheet_contains – 筛选sheet名称中包含此字符串的sheet,仅对.xlsx/.xls生效

  • encoding – 编码

  • info – 是否打印数据集情况(shape & columns)

  • dtype – 指定读取列的类型

  • columns – 指定读取的列名

  • nrows – 指定读取的行数

  • recursive – 是否循环遍历更深层级的文件夹,默认为True,仅当路径为文件夹时生效

from ricco import rdf
df = rdf('/path/test.csv')

读取文件夹

备注

自动识别文件类型并选择合适的方法读取整个文件夹的数据

ricco.etl.extract.rdf(file_path: str, *, sheet_name=0, sheet_contains: str = None, encoding: str = None, info: bool = False, dtype=None, columns: (<class 'list'>, <class 'str'>) = None, nrows: int = None, recursive: bool = True) DataFrame

常用文件读取函数,支持 .csv/.xlsx/.xls/.shp/.parquet/.pickle/.feather/.kml/.ovkml/ .geojson/.shp/.json等

参数:
  • file_path – 文件或文件夹路径

  • sheet_name – 数据所在sheet的名称,仅对.xlsx/.xls生效

  • sheet_contains – 筛选sheet名称中包含此字符串的sheet,仅对.xlsx/.xls生效

  • encoding – 编码

  • info – 是否打印数据集情况(shape & columns)

  • dtype – 指定读取列的类型

  • columns – 指定读取的列名

  • nrows – 指定读取的行数

  • recursive – 是否循环遍历更深层级的文件夹,默认为True,仅当路径为文件夹时生效

from ricco import rdf_by_dir
df = rdf_by_dir('/path_dir/', exts=['.csv'])

保存文件

备注

根据扩展名自动识别文件类型,并保存至对应的文件类型

ricco.etl.load.to_file(df: DataFrame, filepath, *, index=False, log=True, encoding=None)

根据文件扩展名,将Dataframe保存为文件

参数:
  • df – 要保存的Dataframe

  • filepath – 文件路径,包含扩展名

  • index – 是否保存索引,默认不保存

  • log – 是否打印保存信息

  • encoding – 保存文件的编码

import pandas as pd
from ricco import to_file
df = pd.DataFrame()
to_file(df, '/path/test.csv')

文件处理

文件拆分

备注

将文件拆分为多个文件,放置在与文件同名目录下;可按数据量和文件数量进行拆分;可自定义文件类型

ricco.etl.file.split2x(filename: str, *, chunksize: int | None = None, parts: int | None = None, to_ext='.csv', log=True, fn=None)

将文件拆分为多个文件,放置在与文件同名目录下

参数:
  • filename – 输入的文件路径

  • chunksize – 每份文件的数据量

  • parts – 输出的文件个数

  • to_ext – 输出的文件扩展名

  • log – 是否输出文件保存信息

  • fn – 处理函数

from ricco import split2x
split2x('/path/test.csv', chunksize=1000)
split2x('/path/test.csv', parts=3)

文件批量处理reshape

备注

将文件夹的文件大小进行统一拆分,并可传入自定义处理函数

ricco.etl.file.reshape_files(from_dir, to_dir, from_ext=None, to_ext=None, chunksize: int = 100000, func=None, log=False, **kwargs)

将文件拆分成小文件,并保存到to_dir中

参数:
  • from_dir – 读取的目录

  • to_dir – 保存的目录

  • from_ext – 读取的扩展名,默认为None,全部读取

  • to_ext – 保存的扩展名,默认为None,若读取文件的扩展名唯一,则使用读文文件的扩展名,反之需要指定

  • chunksize – 每个文件的大小

  • func – 自定义处理函数

  • log – 是否打印日志

from ricco import reshape_files

def process(df):
  return df

# 将'/path_dir/'中的文件,拆分为大小为1000的 csv 文件,并保存在'/path_dir_to/'目录下,
# 处理过程中调用 'process' 方法进行处理
reshape_files(
    from_dir='/path_dir/',
    to_dir='/path_dir_to/',
    to_ext='.csv',
    chunksize=1000,
    func=process,
)

万能格式转换

备注

批量转换可使用 dir_file_to_x()

ricco.etl.file.file_to_x(filepath, to_ext, to_dir=None, delete=False, overwrite=False, log=True, **kwargs)

文件格式转换,整体读取并转换,将文件整体加载到内存中再保存为另一种文件格式

参数:
  • filepath – 待转换的文件路径

  • to_ext – 要保存的文件扩展名

  • to_dir – 要写入的文件路径,默认存放在原目录

  • delete – 是否删除原文件,默认不删除

  • overwrite – 是否覆盖原文件,默认不覆盖

  • log – 是否输出文件保存、删除日志

from ricco import file_to_x
# 将csv转为Excel文件,保存在相同目录下
file_to_x('/path/test.csv', to_ext='.xlsx')

地理处理

自动转为shapely格式

备注

将带有地理信息的数据,自动转为 shapely 格式的GeoDataframe,地理格式可以为wkb/wkt/geojson等

ricco.geometry.df.auto2shapely(df, geometry='geometry') GeoDataFrame

自动识别地理格式并转换为shapely格式

from ricco import auto2shapely
from ricco import rdf

df = rdf('./test.csv')
auto2shapely(df)  # Return: GeoDataframe

shapely转为任意格式

ricco.geometry.df.shapely2x(df: (<class 'geopandas.geodataframe.GeoDataFrame'>, <class 'pandas.core.frame.DataFrame'>), geometry_format: str, geometry='geometry')

将shapely转为指定的格式

参数:
  • df – 要转换的GeoDataFrame

  • geometry_format – 支持wkb,wkt,shapely,geojson

  • geometry – geometry列的列名,默认“geometry”

from ricco import rdf
from ricco import shapely2x

df = rdf('./test.csv')
# 转为wkb格式的Dataframe
shapely2x(df, geometry_format='wkb')

shapely转为任意格式

ricco.geometry.df.auto2x(df, geometry_format: str, geometry='geometry')

将geometry转为指定格式

参数:
  • df – 要转换的Dataframe

  • geometry_format – 要转换为的geometry类型,支持shapely,wkb,wkt,geojson

  • geometry – geometry列的列名,默认为“geometry”

from ricco import rdf
from ricco import auto2x

df = rdf('./test.csv')
# 转为wkb格式的Dataframe
auto2x(df, geometry_format='wkb')

空间计算

投影变换

备注

根据经纬度自动获取 epsg code 进行投影,也可以指定城市和 epsg code 进行投影,该方法是对geometry列进行投影;如需要对经纬度进行投影,请使用`projection_lnglat()`方法

ricco.geometry.df.projection(df: GeoDataFrame, epsg: int | None = None, city: str | None = None, crs=None) GeoDataFrame

投影变换

参数:
  • df – 输入的GeomDataFrame格式的数据

  • epsg – epsg code, 第一优先级

  • city – 城市名称,未传入epsg的情况下将通过城市名称获取epsg,若二者都为空则根据经纬度获取

  • crs – 投影坐标系,第二优先级

ricco.geometry.df.projection_lnglat(df: DataFrame, epsg=None, city=None, crs=None) DataFrame

直接对经纬度进行投影变换

参数:
  • df – 输入的GeomDataFrame格式的数据

  • epsg – epsg code, 第一优先级

  • city – 城市名称,未传入epsg的情况下将通过城市名称获取epsg,若二者都为空则根据经纬度获取

  • crs – 投影坐标系,第二优先级

面积计算

备注

自动地理转换、投影、计算面积,新增面积列`area`,不改变原数据

ricco.geometry.df.get_area(df: DataFrame, c_dst='area', epsg: int | None = None, decimals=2) DataFrame

计算面积(单位:平方米)

参数:
  • df – 要计算的面数据

  • c_dst – 输出面积的列名,默认为“area”

  • epsg – 对于跨时区或不在同一个城市的可以指定epsg code,默认会根据经度中位数获取

  • decimals – 要保留的小数位数

近邻分析

备注

计算一个数据集中的元素到另一个数据集中全部元素的最短距离(单位:米),同时可进行其他统计

ricco.geometry.df.nearest_kdtree(df: ~pandas.core.frame.DataFrame, df_poi: ~pandas.core.frame.DataFrame, /, *, c_count: str = 'count', c_min_distance: str = 'min_distance', agg: dict = None, limit: int = None, r: (<class 'int'>, <class 'float'>) = None, keep_origin: bool = False, leaf_size: int = 2, epsg: int = None, city=None, crs=None)

KDTree近邻分析,计算一个数据集中的元素到另一个数据集中全部元素的最短距离(单位:米), 同时可进行其他运算

参数:
  • df – 基础数据集,统计该数据及周边的其他数据集的信息

  • df_poi – 被统计的数据集

  • c_count – 计数列字段名,默认“count”

  • c_min_distance – 最短距离字段名,默认“min_distance”

  • agg – 计算 df_poi 中的其他字段,格式如: {‘面积’: [‘sum’, ‘mean’]},即计算面积的和、均值

  • limit – 限制符合条件的 df_poi 中的个数,由近及远

  • r – 限制查询半径

  • keep_origin – 是否保留匹配后原始的索引信息

  • leaf_size – KDTree 叶子节点大小

  • epsg – 投影代码,用于投影,epsg/city/crs指定多个时以epsg为准

  • city – 城市,用于获取城市中心点,epsg/city/crs指定多个时以epsg为准

  • crs – 数据集的 crs,epsg/city/crs指定多个时以epsg为准

ricco.geometry.df.nearest_neighbor(df: DataFrame, df_target: DataFrame, c_dst: str = 'min_distance', epsg: int | None = None) DataFrame

近邻分析,计算一个数据集中的元素到另一个数据集中全部元素的最短距离(单位:米)

参数:
  • df

  • df_target

  • c_dst – 输出最短距离的列名,默认为“min_distance”

  • epsg – 对于跨时区或不在同一个城市的可以指定epsg code,默认会根据经度中位数获取

buffer计算

备注

生成指定半径的buffer的geometry列

ricco.geometry.df.buffer(df: DataFrame, radius: int | float, city: str | None = None, geo_type: str = 'point', geometry: str = 'geometry', buffer_geometry: str = 'buffer_geometry', geo_format='wkb') DataFrame

获得一定半径的缓冲区

参数:
  • df – pd.DataFrame, 包含地理信息的DataFrame

  • radius – numeric, 缓冲区半径(单位米)

  • city – str, 可选, 投影城市,可提高数据精度

  • geo_type – str, 地理数据类型,可选point, line或polygon(包括multipolygon),默认point

  • geometry – str, geometry字段名,默认”geometry”

  • buffer_geometry – 输出的缓冲区geometry字段名,默认”buffer_geometry”

  • geo_format – str, 输出的缓冲区geometry格式,支持wkb,wkt,shapely,geojson,默认wkb

返回:

包含缓冲区geometry的DataFrame

空间统计

备注

对面数据覆盖范围内的点数据进行空间统计

ricco.geometry.df.spatial_agg(point_df: DataFrame, polygon_df: DataFrame, by: str | List[str], agg: dict, polygon_geometry: str = 'geometry') DataFrame

对面数据覆盖范围内的点数据进行空间统计

参数:
  • point_df – pd.DataFrame, 点数据dataframe;

  • polygon_df – pd.DataFrame, 面数据dataframe;

  • by – Union[str, List[str]], 空间统计单位字段;

  • agg – dict, 空间统计操作。格式为{‘被统计字段名’: ‘操作名’, …}的字典。如{‘poi’:’sum’};

  • polygon_geometry – str, 面数据geometry字段名,默认”geometry”;

返回:

pd.DataFrame, 包含空间统计单位字段和被统计字段和面数据geometry的DataFrame

空间连接打标签

ricco.geometry.df.mark_tags_v2(point_df: ~pandas.core.frame.DataFrame, polygon_df: ~pandas.core.frame.DataFrame, col_list: (<class 'list'>, <class 'str'>) = None, *, predicate='intersects', drop_geometry=False, geometry_format='wkb', warning=True, point_lng='lng', point_lat='lat', point_geometry='geometry', polygon_geometry='geometry', warning_message=None, ensure_point=True)

使用面数据通过空间关联(sjoin)给数据打标签

参数:
  • point_df – 点数据

  • polygon_df – 面数据

  • col_list – 面数据中要关联到结果中的列,若为空则全部关联

  • predicate – 关联方法,默认 ‘intersects’

  • drop_geometry – 结果是否删除geometry,默认不删除

  • geometry_format – 输出的geometry格式,支持wkb,wkt,shapely,geojson,默认wkb

  • warning – 是否输出警告信息

  • point_lng – 指定点数据的经度列名

  • point_lat – 指定点数据的经度列名

  • point_geometry – 指定点数据的geometry列名

  • polygon_geometry – 指定面数据的geometry列名

  • warning_message – 是否输出警告信息,已弃用

  • ensure_point – point_df是否强制转换为点数据

from ricco import rdf
from ricco import mark_tags_v2

df_poi = rdf('./poi.csv')
df_plate = rdf('./plate.csv')

# 给POI数据打上plate_name的标签
mark_tags_v2(df_poi, df_plate, col_list='plate_name')