从一个大的CSV创建一个有代表性的示例

2024-07-03 07:06:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据集:

head -2 trip_data_1.csv

medallion,hack_license,vendor_id,rate_code,store_and_fwd_flag,pickup_datetime,dropoff_datetime,passenger_count,trip_time_in_secs,trip_distance,pickup_longitude,pickup_latitude,dropoff_longitude,dropoff_latitude
89D227B655E5C82AECF13C3F540D4CF4,BA96DE419E711691B9445D6A6307C170,CMT,1,N,2013-01-01 15:11:48,2013-01-01 15:18:10,4,382,1.00,-73.978165,40.757977,-73.989838,40.751171

通过按日期对记录进行简单计数,可以得到以下输出:

^{pr2}$

我的问题是:如何创建一个子集(最好是总行数的10%)使其代表整个数据集?我需要确保每个日期至少有40000行数据。在

Link to the dataset


Tags: csv数据iddatadatetimelicenseheadvendor
2条回答

随机抽样:

sort -R filename | head -n $(($(wc -l filename | awk '{print $1}') / 10))
# random sort    | get     10%   ( length divided by 10 )

您必须先删除CSV头,然后再将其附加回去。留作练习:)

出于效率原因,您可能希望使用本机应用程序来实现这一点。在

您可以这样使用awk

awk 'rand()>0.9' trip_data_1.csv

它只会在读取每条记录时生成一个介于0和1之间的随机数,如果该随机数大于等于0.9,则会打印该记录,因此平均应打印10%的记录。在

如果还需要标题,请使用:

^{pr2}$

如果你想让它真正随机,而不是可预测的随机性:-)

awk 'BEGIN{srand()} FNR==1 || rand()>0.9' trip_data_1.cv

相关问题 更多 >