2016-08-24 12 views
0

私は研究化学者であり、「信号強度」対「質量電荷」(m/z)を記録する測定を行っています。特定のパラメータ(Collision Energy)を変更することで、この実験を15回繰り返しました。その結果、私は15のCSVファイルを持っており、同じ範囲のm/zの値と同じ間隔の値内で整列/結合したいと思います。楽器のスレッシュホールドのルールのため、特定のm/zの値は記録されていないため、単にExcelにエクスポートしてコピー/貼り付けできないファイルがあります。データは、テーブルのようなビットは、私は、このコードを開始MATLAB使用複数のCSVファイルをインポートしてマスターテーブルを作成するにはどうすればよいですか?

Dataset 1: x | y   Dataset 2: x | y 
      ---------     ---------  
      0.0 5      0.0 2 
      0.5 3      0.5 6 
      2.0 7      1.0 9 
      3.0 1      2.5 1 
             3.0 4 

下に掲示になりますそして

%% Create a table for the set m/z range with an interval of 0.1 Da 
mzrange = 50:0.1:620; 
mzrange = mzrange'; 
mzrange = array2table(mzrange,'VariableNames',{'XThompsons'}); 

をI手動でインポート1 X/Y CSV(XTITLE = XThompson、Ytitle = YCounts)指定されたm/zの範囲に揃えます。

%% Join/merge the two tables using a common Key variable 'XThompson' (m/z value) 
mzspectrum = outerjoin(mzrange,ReserpineCE00,'MergeKeys',true); 

% Replace all NaN values with zero 
mzspectrum.YCounts(isnan(mzspectrum.YCounts)) = 0; 

この時点で、このプロセスを別のファイルで繰り返すと、YCounts列が上書きされるため、私は立ち往生しています。私は後でそれを変更することができますように私にYCounts列doesntの物質のタイトルは、しかし、私は、テーブルのような継続したいと思います。これは、少なくともあるように、私はMatlabのでこれを実行するにはどうすればよい

XThompson | YCounts_1 | YCounts_2 | YCounts_3 | etc... 
-------------------------------------------------------- 

半自動?私は以前に同様のシナリオを記述していましたが、必要なものを実行できないことが判明しました。私は、私の心がプログラマーではないことを認めなければならないので、私はこの問題をかなり苦労してきました。

PS-この問題はMatlabまたはPythonで最もよく実行されますか?

答えて

0

を使用してExcelシートとして合成されたデータをエクスポートすることができcombined_datasetに

combined_dataset = outerjoin(combined_dataset,dataset3, 'MergeKeys', true); 

をdataset3を追加誰もが入力して、オンラインのMATLABコースを受講しています。私は自然なコーダーではないので、私のスクリプトはここの天才ほどエレガントではありませんが、うまくいけば、他のプログラミング以外の科学者が使うことができれば十分です。ここ

は私のために動作した結果は次のとおり

%は、*の.csvファイルを含むディレクトリを読み取り、均等に離間(0.1単位)間隔にx軸を補正します。

% Create a matrix with the input x range then convert it to a table 
prompt = 'Input recorded min/max data range separated by space \n(ex. 1 to 100 = 1 100): '; 
inputrange = input(prompt,'s'); 
min_max = str2num(inputrange) 
datarange = (min_max(1):0.1:min_max(2))'; 
datarange = array2table(datarange,'VariableNames',{'XAxis'}); 

files = dir('*.csv'); 
for q=1:length(files); 

    % Extract each XY pair from the csvread cell and convert it to an array, then back to a table. 
    data{q} = csvread(files(q).name,2,1); 
    data1 = data(q); 
    data2 = cell2mat(data1); 
    data3 = array2table(data2,'VariableNames',{'XAxis','YAxis'}); 

    % Join the datarange table and the intensity table to obtain an evenly spaced m/z range 
    data3 = outerjoin(datarange,data3,'MergeKeys',true); 
    data3.YAxis(isnan(data3.YAxis)) = 0; 
    data3.XAxis = round(data3.XAxis,1); 

    % Remove duplicate values 
    data4 = sortrows(data3,[1 -2]); 
    [~, idx] = unique(data4.XAxis); 
    data4 = data4(idx,:); 

    % Save the file as the same name in CSV without underscores or dashes 
    filename = files(q).name; 
    filename = strrep(filename,'_',''); 
    filename = strrep(filename,'-',''); 
    filename = strrep(filename,'.csv',''); 
    writetable(data4,filename,'FileType','text'); 
    clear data data1 data2 data3 data4 filename 

end 
clear 
0

私は知らない、またはmatlabを使用しているので、私の答えは純粋なpythonベースです。私はpythonとmatlabは、CSVファイルを読み込んでマスターテーブルを生成するのにも同様に適していると思います。

この答えは、Pythonの問題を解決する方法の参考にしてください。

普通、pandasパッケージを使用してこの問題に対処します。このパッケージは、「高性能で使いやすいデータ構造とデータ解析ツール」を提供し、CSVファイルを含む大量のファイル形式をネイティブに読み取ることができます。 2つのCSVファイル「foo.csv」および「bar.csv」からのマスターテーブルを生成することができる。

import pandas as pd 
df = pd.read_csv('foo.csv') 
df2 = pd.read_csv('bar.cvs') 

master_table = pd.concat([df, df2]) 

パンダはさらに、さまざまな方法でデータをグループ化して構造化することができます。 pandas documentationにはさまざまな機能の説明があります。

一つはPythonのパッケージインストーラpipでパンダをインストールすることができます:LinuxやOSXであれば

sudo pip install pandas 

0

異なる分析からのカウントは、それらを結合する前に、異なるデータセット内のそれぞれ分析1,2および3から異なる、すなわちYCounts_1、YCounts_2、およびYCounts_3という名前を付けるべきである。しかし、M/Z名(すなわち、XThompson)は、これがデータセットを結合するために使用されるキーであるため、同じでなければならない。以下のコードはMATLAB用です。

この手順は不要です(テーブルを再作成するだけです)。データセット2をコピーして、データセット3を作成しました。あなたはあなたのデータをインポートするために 'readtable'を使うことができます。すなわち、imported_data = readtable( 'filename');

dataset1 = table([0.0; 0.5; 2.0; 3.0], [5; 3; 7; 1], 'VariableNames', {'XThompson', 'YCounts_1'}); 
    dataset2 = table([0.0; 0.5; 1.0; 2.5; 3.0], [2; 6; 9; 1; 4], 'VariableNames', {'XThompson', 'YCounts_2'}); 
    dataset3 = table([0.0; 0.5; 1.0; 2.5; 3.0], [2; 6; 9; 1; 4], 'VariableNames', {'XThompson', 'YCounts_3'}); 

外部結合を使用するマージテーブル。多くのデータセットがある場合は、ループを使用できます。

combined_dataset = outerjoin(dataset1,dataset2, 'MergeKeys', true); 

あなたは、私が学習に基づく私の問題への解決策を作成するために管理writetable

writetable(combined_dataset, 'joined_icp_ms_data.xlsx'); 
関連する問題