JMPが行うプロセスを自動化しようとしています(分析->分布、列Aを「Y値」として入力し、後続の列を「重み」値として使用します)。JMP では、一度に 1 列ずつ実行する必要があります。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()