我正在尝试自动化 JMP 执行的一个过程(分析-> 分布,将列A输入为“Y值”,使用后续列作为“权重”值)。在JMP中,您必须一次处理一列 - 我想使用Python循环遍历所有列,并创建一个数组,显示每个列的中位数。
例如,如果质量数组为[0, 10, 20, 30],并且第1列的权重数组为[30、191、9、0],则质量数组的加权中位数应为10。然而,我不确定如何得出这个答案。
到目前为止,我已经:
- 导入了csv文件,将权重显示为数组,同时掩盖了值为0的数据;并
- 创建了一个与权重数组相同大小和形状的“Y值”数组(113x32)。虽然我不完全确定需要这样做,但认为它比使用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()