データのノイズが大きく微分を取ることが難しいケースで、
エクセルを使ってスムージングを行う方法を探しています。
Savitzky-Golay の方法をやるには、計算に必要な係数などは
どうやって決めたらいいのでしょうか。

数学カテゴリーにも本質的に同じ質問をしたのですが、
回答がなく、重複してしまいすみません。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

ふむ、平滑筋のCa2+測光かなんかですかね?



いろいろ調べてみたんですがExcelだけでやろうとするにはプログラムの知識がいるような・・・。残念ながら私にはわかりません。

一つ確認しておきたいのですが、データ取り込みソフトにSavitzky-Golay filterがついているのなら、filterをかけた状態で出力したデータをエクセルで扱うことはできなかったんでしょうか、あるいはそのソフトをoff-lineで使ってこれからフィルターすることは出来ないんでしょうか?(MacLabか何かですか?)でなければMATLAB(http://www.mathworks.com/access/helpdesk/jhelp/t …)、Origin(http://www.originlab.jp/www/products/origin/feat … これはWindowsのみ)なんかの有料ソフトを買わないと厳しいかも。

一つ可能性があるのはKaleidaGraph(http://www.hulinks.co.jp/software/kaleida/sectio …)の回帰曲線の作成の中に「スムース」というのがありました。このフィルターはSavitzky-GolayかGaussianかあるいはもっと別のものか分かりませんがこれを使ってみては?Excelのデータをコピーして「スムース」をかける。これができた曲線のみでなくもとのプロットデータも表示してくれるならそれをExcelに戻して差分を取る・・・。では駄目でしょうか?
    • good
    • 0
この回答へのお礼

SNAPPERさん、迅速なご返答を再度ありがとうございます。

御察しの通り、平滑筋のカルシウム測光です。
データ取り込みはPTIの古い装置で、filter後のデータを出力できない
ようです。
ただし、もう一度他のソフトへ移すという点では、
LabViewというソフトの使えるWindows機がありました。
KaleidaGraph も確認してみます。
いずれにせよ、明日は少し希望を持てそうです。

質問はもうしばらく開いたままにさせてもらいます。が、
有用な情報をありがとうございました。

お礼日時:2002/02/19 13:40

まず、もともとのデータはどんな種類のものでしょうか?普通はADコンバータに接続するデータ取り込みのコンピュータとソフトが付いていることが多いのですが、これはASCIデータのみで出力され、Excelで読むしか方法がないのですか?



ノイズを取ることでなく、微分を計算するのが目的なんですよね?近似したい関数が決まっているのであれば(Exponentialなど)、フィルターをかけなくてもそのまま近似してしまえば結果はほとんど同じはずです(曲線自体をプレゼン用にきれいに見せたいのであれば別ですが)。たとえノイズだけ取っても微分を求めるためにはそのplotを近似(fitting)する関数がいずれ必要になるはずです(それとも別の方法があるのでしょうか?)

近似したい関数が決まっていれば下記のCurve Fittingソフトを使えば出来るのではないでしょうか(たしかMacでしたよね)。KaleidaGraphにもFittingの機能はありませんでしたか?(http://www.hulinks.co.jp/software/kaleida/sectio … 回帰曲線の作成というのがありますが)

MacCurveFit(シェアウエア)
http://www.macinsearch.com/infomac2/science/mac- …
ここに無い関数でも自分で式を作ってFit出来るのでSavitzky-Golay も出来るのでは?私は経験が無いですが。

pro Fit ($95)
http://www.quansoft.com/

但し前回同様3万行が収まるかどうか知りませんが。

あとこの手の仕事が続くのであれば専用のソフトを購入されることをお勧めします。何でもExcelでやるのは無理があるような。
AxoGraph ($600)
http://www.axon.com/CN_AxoGraph4.html

この回答への補足

SNAPPERさん、まずは応答してくださりありがとうございます。

元のデータは、具体的には、ある小さな生体組織で測定された張力と、luminescenceです。
後者は、2つの波長をphotomultiplier tubeで増幅して測定し、その比(405nm/485nm)を
取っています。張力の方は性質上連続的なのですが、luminescenceの方は、高電圧と比の評価という
2つの要素により、ノイズとバラツキはかなりのものになります。ただし、生データは、
smoothingの必要なく意味を伝えるものですのでこれ自体のプレゼンなどは問題ありません。
データは、15分程度の間に揺らぎのある規則的な収縮・弛緩を繰り返すようなもので、
「近似したい関数」を得るのは難しいと思います。関数なしに微分を行う件ですが、
微分ではなく差分と書くべきだったのかも知れません。
1/30秒毎に取られたデータから、単に差を計算し、1/30秒で割っています。(この方法で、
2次微分まで行いたいと思っています) 適切だと思われる方法として
Savitzky Golayを見つけたのですが、その計算方法が分からないという訳です。
ある英語サイトにそれと思われる数字が並んでいたので、デタラメですが係数かも知れないと
思って、試しに40個のデータ(C5 から C45 とします)を用いて
"=0.0323313*C5+0.00850822*C6-0.00829007*C7-0.0189799*C8-0.024428*C9
-0.0254516*C10-0.0228183*C11-0.0172464*C12-0.00940445*C13+0.0000884431*C14
+0.0106627*C15+0.0217983*C16+0.0330246*C17+0.0439208*C18+0.0541154*C19
+0.0632863*C20+0.0711613*C21+0.0775174*C22+0.0821813*C23+0.0850292*C24
+0.0859867*C25+0.0850292*C26+0.0821813*C27+0.0775174*C28+0.0711613*C29
+0.0632863*C30+0.0541154*C31+0.0439208*C32+0.0330246*C33+0.0217983*C34
+0.0106627*C35+ 0.0000884431*C36-0.00940445*C37-0.0172464*C38-0.0228183*C39
-0.0254516*C40 -0.024428*C41-0.0189799*C42-0.00829007*C43+0.00850822*C44
+0.0323313*C45"
と入力し、コピーしてみました。すると、いちおうsmoothingされているのです。が、これが適切だと
しても意味が分からないし、他の係数の取り方とか、全く計算しようがありません。
実は装置をコントロールするソフトにも同じ様なsmoothing (SavitzkyGolay)が付いているのですが
表示して印刷はできますが、書き出しはテキスト形式のみです。
そのため、データは別のパソコンに移してから処理(iMac G3)しています。

という状況です。ソフトの方の紹介も、ありがとうございました。

補足日時:2002/02/19 09:25
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセル プルダウンの作り方

お世話になります。
エクセルでプルダウンの作り方を教えていただけませんでしょうか?
住所を▼のボタンでクリックしたら【北海道,青森,秋田,岩手・・・】などの選択ができるようにしたいのです。
宜しくお願いします。

Aベストアンサー

メニューから「データ」、「入力規則」、「設定」で「入力値の種類」を「リスト」を選択します。
そうすると「元の値」という表示がでますので、そこで前もって作っておいたリストの範囲を指定します。
多くないのでしたら、そのままそこにカンマで区切って入力しても出来ます。

QEXCELでSavitzky-Golay法

EXCELでSavitzky-Golay法

仮にノイズを含むデータがEXELのA列に時系列で出力されているとします.
これにSavitzky-Golay法を用いてスムージングを行いノイズを低減したいのですが,EXCELの機能で簡単にできないものかと考えています.ですが上記の式などを見ているとVBAでプログラムを組まないとできそうにない気もするのですが,EXCELの機能だけでSavitzky-Golay法を適用することはできるでしょうか?
どなたか経験のある方回答をお願いします.

Aベストアンサー

ずばり回答ではないが、感じるところを記してみます。
(1)Excelのメニュー(リボン)を辿って、Savitzky-Golay法を用いてスムージングはズバリはでて来ないと思います。移動平均程度は出てきます。Excelではグラフー近似曲線の追加、辺りが近縁関係だと思います。
だだし
http://www.keep-on.com/excelyou/2003lng1/200302/03020119.txtの中ほどの回答に、近い線までの議論は出ているのでは
(2)Googleででも「エクセル Savitzky-Golay法」で検索してみましたか。
ずばり同じ過去の質問もありますよ。
http://soudan1.biglobe.ne.jp/qa220622.html
ただ満足な回答かどうかはある。
(3)質問するカテゴリ
Excelを使うにしても、この質問コーナー(オフィスソフト)で扱う質問(操作とか関数単独適用)とは
タイプが違います。Savitzky-Golay法の理解が必要だからです。
参考 https://www.hulinks.co.jp/support/flexpro/v7/dataanalysis_SavitzkyGolay.html
だからエクセルのカテゴリより、質問閲覧者は少ないかもしれないが、理工系の、研究者が見ていそうなカテゴリに質問を出すべきでは。
(4)VBAでプログラムを組まないとできそうにない・・
VBAを使うまでの入り口は極く易しい。しかし上記(A)のアルゴリズムをプログラム化するには、文系プログラマ(会計、在庫、検索などの処理中心)では難しいと思う。
(5)いまの時代はソフト(コンピュタによる処理機能)は作るより、使う時代です。
Savitzky-Golay法がメニューにあるソフトを探すべきでしょう。
http://www.lightstone.co.jp/origin/Origin6/Origin6features.htm
買う金がないと言われると苦しいが。
「vector Savitzky-Golay法」で照会してみるとか。
ーー
10行程度の簡略模擬データを示して、Savitzky-Golay法を、もし筆算・電卓でやるとするなら(少しは語句による表現、例「(移動)平均をとる」など、なら、一々細かい仮定を説明しなくても、言葉で表して質問しても良かろう)こうなる、という説明をいただけるなら、日ごろのここでの回答者でも回答できるかもしれない。

ずばり回答ではないが、感じるところを記してみます。
(1)Excelのメニュー(リボン)を辿って、Savitzky-Golay法を用いてスムージングはズバリはでて来ないと思います。移動平均程度は出てきます。Excelではグラフー近似曲線の追加、辺りが近縁関係だと思います。
だだし
http://www.keep-on.com/excelyou/2003lng1/200302/03020119.txtの中ほどの回答に、近い線までの議論は出ているのでは
(2)Googleででも「エクセル Savitzky-Golay法」で検索してみましたか。
ずばり同じ過去の質問もありますよ。
http:...続きを読む

Qエクセルでプルダウンメニューの作り方

  エクセルの画面で、よく三角形を逆さまにした形をクリックするといくつかメニューが出てき、どれかを選べるようになっていますが、その作り方を教えてください。
 会社で人事を担当していますが、三角形(プルダウンボタン)をクリックすると社員氏名一覧が表示され、そこから選択できるようにしたいのです。
 しばらく自力でいろいろやってみましたが、さっぱり見当がつかず、どうやればいいのか分かりませんでした。よろしくお願いします。

Aベストアンサー

こんばんは!
当方使用のExcel2003での一例です!

↓の画像のようにSheet2に名簿表を作成しておきます。
画像ではSheet2のA2セル以降を範囲指定 → 名前ボックスに仮に「名簿」と入力しOK
これで範囲指定したセルが「名簿」と名前定義されましたので、

Sheet1のリスト表示させたいセルを範囲指定 → メニュー → データ → 入力規則
→ リスト → 「元の値」の欄に
=名簿
としてOK

これでSheet1のセルをアクティブにすると右側に下向き▼が表示されますので、そこをクリック!
これで希望に近い形にならないでしょうか?
Excel2007の場合は↓のURLが参考になるかもしれません。

http://www.eurus.dti.ne.jp/~yoneyama/Excel2007/excel2007-ny_kis2.html

尚、同一Sheetに「名簿表」を作成する場合は名前定義する必要はなくて
「元の値」の右側の四角をクリックし、リスト表示したいセルをそのまま範囲指定すればOKです。

以上、お役に立てば良いのですが・・・m(_ _)m

こんばんは!
当方使用のExcel2003での一例です!

↓の画像のようにSheet2に名簿表を作成しておきます。
画像ではSheet2のA2セル以降を範囲指定 → 名前ボックスに仮に「名簿」と入力しOK
これで範囲指定したセルが「名簿」と名前定義されましたので、

Sheet1のリスト表示させたいセルを範囲指定 → メニュー → データ → 入力規則
→ リスト → 「元の値」の欄に
=名簿
としてOK

これでSheet1のセルをアクティブにすると右側に下向き▼が表示されますので、そこをクリック!
これで希望に近い形にならない...続きを読む

Q(エクセル)重複値の上側数値の非表示/削除 重複した数値があった場合に1番下側にある重複値のみを残し

(エクセル)重複値の上側数値の非表示/削除
重複した数値があった場合に1番下側にある重複値のみを残し,他は非表示/削除したいのですが、関数を使って良い方法はありませんか?
上側を非表示/削除する場合はcountif関数で可能なようですが,下側となると分かりません。。

写真の例のように重複値がある場合はその1番下だけを残し、他は非表示/削除したいです。
お願いいたします。。

Aベストアンサー

[No.4]の別解
=IF(COUNTIF(A2:A999,A2)=1,A2,"")

Qエクセル(Excel) 納品書の作り方【画像修正版

昨日http://oshiete.goo.ne.jp/qa/7348426.htmlで質問させていただき、詳しくご回答いただき少し進んだのですが、状況が変わったので改めて質問させていただきます。

■エクセル(Excel)で納品書の作成をしています。
シート1に納品書、シート2に商品マスタ(一覧)を作っていて、シート2の一覧を反映させて
納品書に番号を打ち込むだけで、商品名・単価までが出るシステムを作りたいのですが、
昨日のご回答の中の「VLOOKUP」?を入れて、自分なりにマス目の数字を変えてやってみたのですが
反映されずN/?のようなエラーになってしまいます。

※画像が見にくかったのでシート<CENTER></CENTER>だけにしました。

1、上記のように、シート2との関連付けの係数を、写真の場合の数字で教えてください。

2、合計と、合計から20%を引いた数値を割り出す関数も、写真の数字で御願いします。

宜しくご教授お願い致します。

Aベストアンサー

こんばんは!
前回投稿した者です。

当方もかなり古い(人間も古い!なぁ~んちゃって!)Excel2003を使用しています。
↓の画像のようにSheet2にデータを作成しておきます。

#N/A というエラーは、「検索値」がない!ということですので
お示しの画像のB列にSheet2のA列にないデータを入力するとそういったエラーが表示されます。

画像のセル配置ですと
C4セルに
=IF($B4="","",VLOOKUP($B4,Sheet2!$A:$C,COLUMN(B1),0))
(「$」マークの位置に気を付けてください)
という数式を入れD4セルまでオートフィルでコピー!
そのまま最後の24行目までコピーしておきます。

F4セルには
=IF(COUNTBLANK(B4:E4),"",D4*E4)
という数式を入れ、F24までオートフィルでコピー!

これでB列に商品番号を入力すればSheet2のデータが反映され、
E列に数量を入力でF列に金額が表示されると思います。

最後に合計金額のF26セルは
=IF(COUNT(F4:F24),SUM(F4:F24),"")
手数料のF27セルは
=IF(F26="","",F26*0.2)

これで何とか形にならないでしょうか?

※ 振込金額の欄は不明ですので手を付けていません。

参考になりますかね?m(_ _)m

こんばんは!
前回投稿した者です。

当方もかなり古い(人間も古い!なぁ~んちゃって!)Excel2003を使用しています。
↓の画像のようにSheet2にデータを作成しておきます。

#N/A というエラーは、「検索値」がない!ということですので
お示しの画像のB列にSheet2のA列にないデータを入力するとそういったエラーが表示されます。

画像のセル配置ですと
C4セルに
=IF($B4="","",VLOOKUP($B4,Sheet2!$A:$C,COLUMN(B1),0))
(「$」マークの位置に気を付けてください)
という数式を入れD4セルまでオートフィルで...続きを読む

QExcel2003にて データ重複時に『重複』とエラー表示させたい

いつもこちらでは皆様にご回答いただきお世話になっております。
またひとつご指導いただければとおもっております。

図のようにB列とF列には『名前』を入力するようになっています。
B列とF列で重複する名前があった場合C列、G列に『重複』と
表示させたいと思っております。

このような該当データが2列にまたがる場合のC列、G列に入れる数式をお教えください。

よろしくお願いいたします。

Aベストアンサー

No.2です!
たびたびごめんなさい。

すでにNo.3さんで回答が出ていますので、
少し遊んでみました。

↓の画像で説明させていただくと
両方の列で重複している場合は「両列重複」
自列のみで重複している場合は「(B)または(F)列重複」
と表示する方法です。

作業用の列を使わせてもらっています。
作業列I2セルに
=COUNTIF(F:F,B2)*100+COUNTIF(B:B,B2)
J2セルに
=COUNTIF(B:B,F2)*100+COUNTIF(F:F,F2)
としてI2・J2セルを範囲指定し、J2セルのフィルハンドルで下へコピーします。
この表を参照して

C2セルに
=IF(AND(INT(I2/100)>0,MOD(I2,100)>1),"両列重複",IF(AND(INT(I2/100)=0,MOD(I2,100)>1),"B列重複",IF(AND(INT(I2/100)>0,MOD(I2,100)=1),"F列重複","")))
とし、オートフィルで下へコピー

G2セルに
=IF(AND(INT(J2/100)>0,MOD(J2,100)>1),"両列重複",IF(AND(INT(J2/100)=0,MOD(J2,100)>1),"F列重複",IF(AND(INT(J2/100)>0,MOD(J2,100)=1),"B列重複","")))
とし、同様にオートフィルで下へコピー

これで画像のような感じになります。
以上、余計なお世話でしょうが、
お遊び程度でやってみました。
どうも長々と失礼しました。m(__)m

No.2です!
たびたびごめんなさい。

すでにNo.3さんで回答が出ていますので、
少し遊んでみました。

↓の画像で説明させていただくと
両方の列で重複している場合は「両列重複」
自列のみで重複している場合は「(B)または(F)列重複」
と表示する方法です。

作業用の列を使わせてもらっています。
作業列I2セルに
=COUNTIF(F:F,B2)*100+COUNTIF(B:B,B2)
J2セルに
=COUNTIF(B:B,F2)*100+COUNTIF(F:F,F2)
としてI2・J2セルを範囲指定し、J2セルのフィルハンドルで下へコピーします。
この表を...続きを読む

Qエクセル(Excel) 納品書の作り方【改めて】

昨日http://oshiete.goo.ne.jp/qa/7348426.htmlで質問させていただき、詳しくご回答いただき少し進んだのですが、状況が変わったので改めて質問させていただきます。

■エクセル(Excel)で納品書の作成をしています。
シート1に納品書、シート2に商品マスタ(一覧)を作っていて、シート2の一覧を反映させて
納品書に番号を打ち込むだけで、商品名・単価までが出るシステムを作りたいのですが、
昨日のご回答の中の「VLOOKUP」?を入れて、自分なりにマス目の数字を変えてやってみたのですが
反映されずN/?のようなエラーになってしまいます。

※画像が貼り付けてあります。商品名は1番以外伏せさせていただいています。
くっつけてありますが、左側がシート1・右側がシート2です。

1、上記のように、シート2との関連付けの係数を、写真の場合の数字で教えてください。

2、合計と、合計から20%を引いた数値を割り出す関数も、写真の数字で御願いします。

宜しくご教授お願い致します。

Aベストアンサー

画像がいまいちよく見えないのですが、納品書の項目は左から、No、商品番号、商品名、単価、数量、金額でいいのでしょうか(名前は多少違っていても意味があっていればもんだいないです)

でしたら、
C1セルに=IF(ISBLANK(B2),"",VLOOKUP(B2,Sheet2!$A$2:$C$200,2,FALSE))
D1セルに=IF(ISBLANK(B2),"",VLOOKUP(B2,Sheet2!$A$2:$C$200,3,FALSE))
E1セルは空白で
F1セルに=IF(D2="","",D2*E2)
といれて、C1からF1までをコピーしてその下の行にタテに貼り付ければ出来ますよ。
おそらくエラーが出たのは、コピーしたときにVLOOKUP関数の最初のセルの指定がずれてしまっているのでは無いかと思いますよ。     

Qエクセル 二列のデータの相関係数を取る際に、データ範囲をずらしながら相関係数を取る方法

エクセルの質問です。

10 20
12 18
11 16
25 15
21 32
10 26
……

という二列のデータがあるとします。
このデータを、

a1,b1
a2,b2
a3,b3
……

というようにセル番号で置き換えます。

単純に上記のデータの二列のデータの相関係数を
とるのであれば、
CORREL(a1:an,b1:bn)
で、求める値が算出できます。

次に、上記のデータをひとつずらして、

a1,b2
a2,b3
a3,b4
……

とした場合の相関係数を求めます。
CORREL(a1:an-1,b2:bn)
で求まると思います。

これを繰り返していって、
「最も相関が強くなるのは、データをいくつずらしたときなのか?」
を知りたいのですが、
データ数が多くなるといちいち式を書き換えていくのは少し面倒です。

オートフィルや関数など使いながら、
うまくやる方法をどなたかご存じでないでしょうか?
お教え頂けると有りがたいです。
よろしくお願いいたします。

エクセルの質問です。

10 20
12 18
11 16
25 15
21 32
10 26
……

という二列のデータがあるとします。
このデータを、

a1,b1
a2,b2
a3,b3
……

というようにセル番号で置き換えます。

単純に上記のデータの二列のデータの相関係数を
とるのであれば、
CORREL(a1:an,b1:bn)
で、求める値が算出できます。

次に、上記のデータをひとつずらして、

a1,b2
a2,b3
a3,b4
……

とした場合の相関係数を求めます。
CORREL(a1:an-1,b2:bn)
で求まると思います。

これを繰り...続きを読む

Aベストアンサー

もう少し簡単にできました
=CORREL(A$1:INDEX(A:A,COUNT(A:A)-ROW(A1)+1),B1:INDEX(B:B,COUNT(A:A)))
下へオートフィル
お分かりのこととは思いますが、行番号n-1まで相関関係を出せますが信頼性は薄れます

Qエクセル2007でプルダウンで選んだものに反応

Excel2007でプルダウンで選んだものに反応して隣のセルが自動入力される方法(エクセル2007)
A1をプルダウンで「猫」「犬」から選べるようにし、「猫」を選んだ場合B1に自動に「111」が、「犬」を選んだ場合B1に自動に「222」と入力されるようにしたいです。
ご教授の程、宜しくお願いします。

Aベストアンサー

VLOOKUP関数での方法です。
(1)別シートに入力文字列と対応コード表を作成。(仮にSheet2のA:B列範囲で順不同)
(2)B1に=IF(COUNTIF(Sheet2!A:A,A1),VLOOKUP(A1,Sheet2!A:B,2FALSE),"")を設定
   入力文字列が存在しない場合は空白としています。

QExcelで重複行を非表示にする方法(重複行の最後の行だけ表示させる方法)について教えてください。

エクセルで重複するデータを非表示にする方法は、[データ]→[フィルタ]→[フィルタオプションの設定]を選択し、[重複するレコードは無視する]にチェックを入れればできますが、デフォルトでは重複行の最初の行だけを表示し、残りの重複行を非表示にしてしまいます。
最初の重複行ではなく最後の重複行だけを残し、他の行を非表示にしたいのですが方法がわかりません。
ちなみに上記の[重複するレコードは無視する]にチェックするまでの流れをマクロに記録させ、マクロの編集をクリックすると下記のような記述になっていました。

Columns("A:A").Select
Range("A1:A100").AdvancedFilter Action:=xlFilterInPlace, Unique:=True

このソースのどの部分を変更すれば、1番最後の重複行だけを残し他の行を非表示にすることが可能になるのか教えてください。
よろしくお願いします。

Aベストアンサー

フィルタの設定には無いようです

シンプルに

Sub test()
Dim i, ii As Integer
For i = Range("a65536").End(xlUp).Row To 2 Step -1
For ii = i - 1 To 1 Step -1
If Cells(i, 1).Value = Cells(ii, 1).Value Then
Rows(Cells(ii, 1).Row).EntireRow.Hidden = True
End If
Next ii
Next i
End Sub

A列の重複を対象にしています
最終行から比較していく方法です


人気Q&Aランキング

おすすめ情報