引言
在处理百万级用户行为数据时,使用 Matplotlib 绘制折线图或散点图常面临程序卡顿、内存溢出或数据重叠成黑块等问题。这些问题的根源通常在于数据未优化、数据结构低效或未利用交互功能。
数据预处理
Matplotlib 直接处理百万行原始数据易导致渲染超时或内存溢出。核心策略是数据瘦身,以最小代价保留关键信息。
高效数据加载
加载大数据的第一原则是尽量少读、读对类型。Pandas 的 read_csv 默认参数会浪费大量内存,可通过指定数据类型优化。
指定数据类型
通过 dtype 参数手动指定列的数据类型,例如整数用 int32,小数用 float32,日期用 datetime64[ns]。
import pandas as pd
dtypes = {
'user_id': 'int32',
'product_id': 'int32',
'purchase_amount': 'float32',
'purchase_time': 'datetime64[ns]'
}
df = pd.read_csv('user_purchases.csv', dtype=dtypes, parse_dates=['purchase_time'])
print(f"原始数据内存占用:{df.memory_usage(deep=True).sum()/1024**2:.2f}MB")
分块读取
如果数据超过 1GB,可使用 chunksize 分块读取,每次处理后再合并。
chunk_size = 100000
chunks = []
for chunk in pd.read_csv('user_purchases.csv', dtype=dtypes, chunksize=chunk_size):
chunk = chunk[chunk['purchase_amount'] > 0]
chunk = chunk[['user_id', 'purchase_time', 'purchase_amount']]
chunks.append(chunk)
df = pd.concat(chunks, ignore_index=True)
print(f"总有效数据量:行")

