我正在尝试使 JMP 执行的过程自动化(分析-> 分布,输入 A 列作为“Y 值”,使用后续列作为“权重”值)。在 JMP 中,您必须一次处理一列 - 我想使用 Python 循环遍历所有列并创建一个数组,例如显示每列的中位数。
例如,如果质量数组为 [0, 10, 20, 30],第 1 列的权重数组为 [30, 191, 9, 0],则质量数组的加权中位数应为 10。但是,I '不知道如何得出这个答案。
到目前为止我已经
- 导入 csv,将权重显示为数组,掩码值为 0,以及
- 创建了一个形状和大小与权重数组 (113x32) 相同的“Y 值”数组。我不完全确定我需要这样做,但认为它比用于加权目的的 for 循环更容易。
我不确定从这里去哪里。基本上,“Y 值”是一个质量范围,数组中的所有列都代表为每个质量找到的数据点的数量。我需要根据报告的频率找到质量中值。
我不是 Python 或统计方面的专家,所以如果我遗漏了任何有用的细节,请告诉我!
更新:这是我到目前为止所做的一些代码:
#Boilerplate & Import files
import csv
import scipy as sp
from scipy import stats
from scipy.stats import norm
import numpy as np
from numpy import genfromtxt
import pandas as pd
import matplotlib.pyplot as plt
inputFile = '/Users/cl/prov.csv'
origArray = genfromtxt(inputFile, delimiter = ",")
nArray = np.array(origArray)
dimensions = nArray.shape
shape = np.asarray(dimensions)
#Mask values ==0
maTest = np.ma.masked_equal(nArray,0)
#Create array of masses the same shape as the weights (nArray)
fieldLength = shape[0]
rowLength = shape[1]
for i in range (rowLength):
createArr = np.arange(0, fieldLength*10, 10)
nCreateArr = np.array(createArr)
massArr.append(nCreateArr)
nCreateArr = np.array(massArr)
nmassArr = nCreateArr.transpose()