【发布时间】:2021-09-20 05:30:24
【问题描述】:
场景:
- 我有一个第一列“年龄”的 CSV,还有一百万 其他列。我想找到最多的列 与年龄相关。
- 行数很少,比如说不到 1000 行。
- 这是用 Python 编写的更大解决方案的一部分,但不一定是 Python。
- 和大多数事情一样,我想平衡代码可读性和性能
- 在下面的示例中,为简单起见,我只查看一列。真正的解决方案可能会使用所有列的多处理。
我有下面的代码可以运行,但可以理解的是,将 CSV 存储为非常(非常!)宽的 Pandas 数据框会很慢。
如果是你,你会怎么做?
命令行:python mycode.py myfile.csv columnname-to-measure
import pandas as pd
from scipy import stats
import os,sys
if __name__=="__main__":
_DATAFILE = sys.argv[1]
##Sample tiny datafile
#Age,m1,m2,m3
#35,0.00234,0.1,1
#30,0.0034,0.2,2
#40,0.0013,0.3,4
_MEASURE=sys.argv[2]
print("Parsing file %s" %(_DATAFILE))
df = pd.read_csv(_DATAFILE)
print(f"Corellating {_MEASURE} with Age")
all =df[['Age',_MEASURE]].copy()
allna=all[all[_MEASURE].notna()]
pearson_coef, p_value = stats.pearsonr( allna['Age'].values,allna[_MEASURE].values)
print(pearson_coef,p_value)
【问题讨论】:
标签: python pandas csv bigdata pearson-correlation