Excelの自動書式により、遺伝子のリストを使用する論文の約20%に誤った遺伝子シンボルが掲載されているとの調査結果 97
ストーリー by headless
確認 部門より
確認 部門より
Microsoft Excelの自動書式機能により、遺伝子のリストを使用する論文の約20%で、遺伝子シンボルが日付や浮動小数点値に変換されたまま掲載されていることがわかったそうだ(論文、
Softpediaの記事、
WinBetaの記事)。
たとえば「Septin 2」の遺伝子シンボルは「SEPT2」だが、デフォルトの状態でExcelに入力すると「2-Sep」に変換される。また、「Membrane-Associated Ring Finger (C3HC4) 1, E3 Ubiquitin Protein Ligase」の遺伝子シンボル「MARCH1」は「1-Mar」に変換されるほか、理研の「2310009E13」のようなクローンIDは「2.31E+19」に変換されてしまう。保持されるデータ自体が変換されてしまうため、後で書式を変更しても復元することはできない。
同様の変換はExcelだけでなく、LibreOffice CalcやApache OpenOffice Calcでも発生する。Googleスプレッドシートでは発生しないとのことだが、試してみたところクローンIDは変換されてしまった。
こういった問題と回避方法は10年以上前から注目されている。しかし、事前にセルの書式設定で「文字列」を選ぶか、先頭に「'」を付加して文字列として 入力する方法ぐらいで、完全に無効化する方法はないこともあり、簡単にはなくならないようだ。
たとえば「Septin 2」の遺伝子シンボルは「SEPT2」だが、デフォルトの状態でExcelに入力すると「2-Sep」に変換される。また、「Membrane-Associated Ring Finger (C3HC4) 1, E3 Ubiquitin Protein Ligase」の遺伝子シンボル「MARCH1」は「1-Mar」に変換されるほか、理研の「2310009E13」のようなクローンIDは「2.31E+19」に変換されてしまう。保持されるデータ自体が変換されてしまうため、後で書式を変更しても復元することはできない。
同様の変換はExcelだけでなく、LibreOffice CalcやApache OpenOffice Calcでも発生する。Googleスプレッドシートでは発生しないとのことだが、試してみたところクローンIDは変換されてしまった。
こういった問題と回避方法は10年以上前から注目されている。しかし、事前にセルの書式設定で「文字列」を選ぶか、先頭に「'」を付加して文字列として 入力する方法ぐらいで、完全に無効化する方法はないこともあり、簡単にはなくならないようだ。
すごく同意する (スコア:3, 興味深い)
なんなんでしょうね、あのおせっかい機能。
変換したいんだったら自分でやるっていうのに。設定でオフにできる代物じゃないというのがさらに腹立つ。
その上一旦変換されちゃうとCtrl+Zで戻るしかなくて、あとから書式を設定しても元のデータを得られないという非可逆性を持っているのがさらにさらに腹立たしい。
ストーリーの例の他にも、表に見出しつけようと思ってチャプターのつもりで数字とハイフンの組み合わせを入力したら日付に変換されるとかね。これは手入力だったからすぐわかったけど、外部ファイルをインポートしたり、他からコピペして持ってきたときとかはわかりづらい。
正直なんでMSはこんな糞機能を搭載したのかがわからない。この件に関するフィードバックは結構なユーザーが送っていると思うんだけど、一向に改善される気配がない。
Re: (スコア:0)
そうそう。セルの入力内容を書き換えるのはおかしい。フォントや色はメチャクチャに設定できるのに、直接内容を変更するのは間違ってる。
Re:すごく同意する (スコア:2)
お節介機能といえば、コピーする時に書式がくっついてくるのも困り物。
標準は「値のコピー」か「計算式のコピー」にしてほしい。
せっかく書式設定をしたのに誰かが編集するとぐちゃぐちゃになってメンテが大変。
下手に書式設定なんかしたくないのだけど、その誰かさんが「見やすくするためにこういう形にしてくれ」と言うからしかたない。確かに見やすくなるけど。
ついでに値/計算式の移動も実装してほしい。
Re: (スコア:0)
Excelに限らず、イルカが登場したあたりから勝手に発動するおせっかい機能にイライラすることが増えた気がする。
Re: (スコア:0)
最低限の仕様として
データ型や書式を判別する際、行単位列単位でデータを見た上で総合的に判別してほしいですよね
セルに入力された1個の短いサンプルだけで判別するから間違った値に変換される可能性が跳ね上がる
それから、入力内容の生のデータはそのまま保持してほしいかなぁ
1-1って入力したら、後から入力し直すことなく書式設定だけで1月1日にも0にも1-1にもできるような
Re:すごく同意する (スコア:1)
データ型や書式を判別する際、行単位列単位でデータを見た上で総合的に判別してほしいですよね
それって、いつその機能が働くんですか?
いつ働くか、容易に想像できない機能は、かなり厄介だと思います。
明示的にその機能を起動した時のみ、指定した範囲を自動書機器設定する、とかならいいと思いますが。
それから、入力内容の生のデータはそのまま保持してほしいかなぁ
最低限、というなら、こっちの方かな。
Re:すごく同意する (スコア:1)
CSVにそれぞれのカラムのデータ型を指定する情報を追加した書式があって、それがExcelで正しく読み込めればよいのです。
XMLとかはいかがでしょうか?
Re:すごく同意する (スコア:1)
よく知りませんが、XML データのインポート [office.com]って機能はあるそうですよ。
Re:すごく同意する (スコア:1)
「生のデータを破壊するな」ということに尽きる。勝手な書式で表示されることは耐えられる。
勝手に生のデータを丸めて意味を落として保持するというのは到底受け入れられない。
Re:すごく同意する (スコア:2)
X-Yグラフを作るのに「散布図」を選ぶとか、折れ線グラフのサンプルの絵でなんで線が戻るのかとか、謎が多いです。
Re:すごく同意する (スコア:1)
新しい、Word/Excelを使う時の、最初にすること、
スペルチェックとかの自動修正機能をオフにする事。
で、勝手に日付とかは、、よく分かりません。
計算機能が必要でないときは、左上で、全選択して、すべてのセルを文字にしてから、
入力すると間違いが少ないというのを実践している。
Re:すごく同意する (スコア:1)
手元のExcel2010だと、
手入力で「1-1」と入力 → 1月1日 (データ上は 今年の1月1日(つまり入力時点によりシリアル値が変化))
手入力で「"1-1"」 → "1-1" (データ上は "1-1" )
手入力で「'1-1」 → 1-1 (データ上は '1-1 だがcsv再出力すると 1-1 に変換)
csvで「1-1」 → 1月1日 (データ上は 今年の1月1日)
csvで「"1-1"」 → 1月1日 (データ上は 今年の1月1日)
csvで「'1-1」 → '1-1 (データ上も '1-1 )
ということで、手入力とcsv読み込みでは法則が異なり、また見た目と内部値と出力値も変化するので、混乱しまくり。
「csvファイル作成側でこれを回避する手段は全くない」のが、辛い。(「数値-数値」や「数値/数値」というデータを作ってはいけない。""はデータの区切りとしては機能するが変換禁止という機能は持っていない)
Re:すごく同意する (スコア:1)
と書いてから#3071447 [srad.jp]を読んだんですが、
出力側は
>各要素を ="...." で囲み
で回避できるんですね、勉強になりました。
20% はでかすぎるだろ (スコア:2, 興味深い)
エクセルの自動変換機能は大変に迷惑でかつ外せないので,まあこの被害に会う奴がでるのはわかる.
しかし 2%ならともかく 20% はでかすぎる.
この分野の研究者が論文の正確さをこんなにないがしろにしているとは…
# 著者が気づかなくても,査読者が気づくだろう,普通は.
# 生物系は査読もいい加減ということか?
Re:20% はでかすぎるだろ (スコア:5, 参考になる)
最近の論文には多くの場合、supplementary filesというのが付加されてます。
そこにおかしくなった遺伝子名のようなものが含まれていて、その割合が、5論文につき1つくらい、と言う話でしょう。
元記事の論文もちらっとみましたが、supplementary filesの問題のようです。
Supplementary filesは網羅的に非常に多くの遺伝子名などを扱っていることもあるため、論文の主旨に直接関係ない遺伝子名などが含まれています。査読者もSupplementary filesを熟読したりはしないでしょう。チェックのためのソフトやスクリプトが雑誌の編集部から提供されていれば、別でしょうが。
論文の英語の綴りはスペルチェッカにかける著者がほとんどでしょうが、supplementary filesのこまかなチェックはおろそかになってしまうのでしょう。
ということで、誰かが汎用のチェックソフトなりサイトを作成すれば多くの人が喜びます。Microsoftに頼みましょうか w)
他人にチェックしろと勧めておきながら (スコア:1)
たとえば「Septin 2」の遺伝子シンボルは「SEPT2」だが、デフォルトの状態でExcelに入力すると「1-Sep」に変換される。
ちがうよね。
「SEPT2」と入力すると、「2-Sep」に変換されるよね。
Re:他人にチェックしろと勧めておきながら (スコア:5, おもしろおかしい)
Re:他人にチェックしろと勧めておきながら (スコア:1)
流石にこれをExcelのせいにするの話がこじれるだけじゃないか?
「誤字があったのはhylom氏に書いてもらった部分だ」とか言っておけばみんな納得するよ
Excel方眼紙禁止 (スコア:1)
やたらと、Excel方眼紙を使いすぎた弊害だろう。
あくまで数値扱うのが主体の表計算ソフトだからね。
便利なのに不便 (スコア:0)
データの集計には持ってこいなのに微妙な仕様なんだよなぁ
有効数字や小数位の設定なんかもOptionレベルで実装して欲しいなーと思い続けて何年も経ってるぞ
Excelよりもスクリプト (スコア:2)
Excelなどの表計算の結果はPerl / Python / Ruby などのスクリプトで検算しましょう、とBioinformatics関連の勉強会で、初心者にお勧めしていたけど、よい実例がまた一つ増えました。
もちろん、逆にスクリプトの検算を表計算でやるのもありです。
事前の書式設定なんかやってあたりまえ (スコア:0, 興味深い)
カップ焼きそばの調理に失敗する問題と回避方法は10年以上前から注目されている。しかし、お湯を捨ててからソースを入れる方法ぐらいで、完全に無効化する方法はないこともあり、簡単にはなくならないようだ。
……みたいな話と同じくらいの違和感しか無い。
どこまでが「やってあたりまえ」で、どこからが「バッドノウハウ」なのかなんて、誰にも決められないと分かっていても。
Re:事前の書式設定なんかやってあたりまえ (スコア:2)
オートコレクト・オートフォーマットはお節介な機能だ、という話はずっと昔からある
オートフィルと Excel 2013 以降のフラッシュ フィルはあまりそういう話は聞かない
Re:事前の書式設定なんかやってあたりまえ (スコア:1)
オートフィルと Excel 2013 以降のフラッシュ フィルはあまりそういう話は聞かない
ユーザが明示的な操作で指定したときのみ、機能するからじゃない?
元データを書き換えてしまうような重大な機能なのに、ユーザが特に指定しないのに、自動的に機能しちゃうのが嫌がられているのでは?
しかも、それをオフにできないと来ちゃ、ねぇ。
Re:事前の書式設定なんかやってあたりまえ (スコア:1)
>オートコレクト・オートフォーマットはお節介な機能だ、という話はずっと昔からある
MS-Office全般でこれらの完全OFFをデフォにして欲しい。
トラブルの元になりすぎるし、各アプリ各バージョンで解除の仕方が変わったりしてややこしいイメージしか無い
#万年MS-Office初心者の愚痴
Re:事前の書式設定なんかやってあたりまえ (スコア:1)
カップ焼きそばの調理に失敗するのは単に調理する本人の問題でしょ?
だってカップ焼きそばのパッケージに調理手順が事細かに図まで載せて書いてあるのだから
本人がそれを見忘れた、もしくは見てたけど手順を間違えたってことで。
本件はそうじゃなく、そもそも「事前の書式設定」的な手順書がないとか
その手順書に従って初期設定をすることが徹底されていないと思われるところが一番の問題。
Re: (スコア:0)
カップ焼きそばのカップは、(上方投影面積は減らしても)もう少し深い方が、お湯が零れ難くて安全だと思う。
Re: (スコア:0)
ヒント:食べる当人が作るとは限らない。
書式設定だって、いくら自分じゃ気を付けてたって他人が作った糞ファイルで嫌な思いをすることあるでしょ。
Re:事前の書式設定なんかやってあたりまえ (スコア:1)
「その設定を入社前に知識として持っている前提で採用」するような会社がどこにあるんだよ。
それが挨拶のやり方程度の一般常識なら分かる話だがこれは違う。
コンビニの店員じゃないけど、セブンとローソンとファミマじゃオペレーションが違う部分がある。
それを店員になる前に知っとけというのは無理がある。
だから基本は何でもマニュアル化で、作業はすべてマニュアルに沿って実施するのが普通。
だから
マニュアルに沿って作業しなかったのなら、マニュアルに沿って作業しなかったヤツのせい。
マニュアルに沿って作業したのに失敗したら、マニュアルを作ったヤツのせい。
となる。
何でもかんでも「勉強不足」の一言で作業者の責任にされたらたまったもんじゃない。
Re: (スコア:0)
カップ焼きそばの容器に3分経ったら蓋が自動で外れる機能があって、知らないとだばぁする感じ。その機能で救われた人より困らされた人の方がたぶん多い。
Excelなんか使うな (スコア:0)
Originでやれ
Re:Excelなんか使うな (スコア:2)
Origin [wikipedia.org]
ですか、なるほど。
Windowsにはこういうソフトがあったんですね、Linuxにはなくて残念かも。
Re: (スコア:0)
Originでやれ
仕事辞めて遊べ!ってことだね♪ [origin.com]
Re: (スコア:0)
AWKを使え#温故知新
Re: (スコア:0)
カップ焼そばよりもオリジン弁当のほうが旨い‼ということですね。
賛成です。
普通気づくだろ? (スコア:0)
日ごろからよくある話だから気づくだろ?とも思ったが・・・
直接手入力なら気づきやすいだろうが、CSVとかから読み込むデータに「混じってたら」気づきにくいだろうなぁ
Re: (スコア:0)
データなんて間違ってる前提で扱わないとね。
Re:普通気づくだろ? (スコア:1)
「10年以上前から注目されている」そうですから、劣悪化も高齢化も関係ないんじゃないですか?
Re:普通気づくだろ? (スコア:1)
>業務で使うならまず真っ先に先輩から指導されるイロハでしょう
重要注意事項を口伝で伝える企業や研究機関ってのも職人的で良いね。
#コミュ障には厳しそう
Re:普通気づくだろ? (スコア:1)
丁寧な先輩なら手順書を作成して手取り足取り教えてくれそうですね。
#ある意味きつそう
Re:普通気づくだろ? (スコア:1)
イニシエの前世紀の職場で、そうおっしゃっている先輩はいました。
古き良き時代だったのかもしれない。
#その工場はその後・・・
Re: (スコア:0)
既存のシートからCSVをデータとして読み込むのなら手はあるんでしょうけど、
CSVファイルを直接Excelで開いていじろうとすると開いた時点で変換されちゃうんですよね
バッドノウハウ (スコア:1)
拡張子txtに変えてから開くのは常識だと思ってた・・・
Re:バッドノウハウ (スコア:1)
>そこでデータ型を「文字列」にすればこういう問題は起きません。
つい忘れてしまった時のフォロー手段が確立されていないのが問題ですね。
住所録で電話番号を入れる時には (スコア:0)
ハイフンで区切って入力しましょう。
開き方 (スコア:0)
16進テキストデータとかでも13E5など数字とEで構成されたセルがあると浮動小数点にされて困る。
回避用スクリプト (スコア:3)
あまりに面倒なので回避用のスクリプトを作って Excel 専用文字列 CSV に変換するようにしていました。
データを計算に使用するときには変換前の CSV も開いて切り張りか、まっとうに「テキストからのインポート機能」が必要ですが、「表」機能だけをつかって「計算」機能を使わないときにはこれだけで事足ります。
遺伝子とかじゃないけど... (スコア:0)
全文検索とかで、I(沃素) が、I (私) と誤認されて、ストップワード扱いになりインデックスされないという問題があったな。
追跡番号も困る (スコア:0)
中国郵便の安いやつ(Small Packet Plusだったかな?)は03から始まる11ケタなんですが、スプレッドシートにそのまま入れると3から始まる10ケタに自動変換され、番号追跡に入れるとエラーになっちゃうので「'を付けなきゃ」と思いつつよく忘れてひどいことになります。
マクロ組んでおけ (スコア:0)
Option Explicit
Dim WithEvents xla As Application
Private Sub Workbook_Open()
Set xla = Application
End Sub
Private Sub Workbook_NewSheet(ByVal sh As Object)
Dim ws As Worksheet
Set ws = sh
Dim rng As Range
ws.Cells.NumberFormat = "@"
End Sub
Private Sub xla_NewWorkbook(ByVal Wb As Workbook)
Dim ws As Worksheet
For Each ws In Wb.Worksheets
ws.Cells.NumberFormat = "@"
Next
End Sub
Private Sub xla_WorkbookOpen(ByVal Wb As Workbook)
Dim path As String
Dim fso As New FileSystemObject: Dim ts As TextStream:
Dim line As String: Dim v As Variant: Dim i As Integer: Dim r As Range
path = Wb.FullName
If (Right(path, 4) ".csv") Then
Exit Sub
End If
Wb.Close False
Set Wb = xla.Workbooks.Add
For Each ws In Wb.Worksheets
ws.Cells.NumberFormat = "@"
Next
Set r = Wb.Worksheets(1).Cells(1, 1)
Set ts = fso.OpenTextFile(path)
Do While Not ts.AtEndOfLine
line = ts.ReadLine
v = Split(line, ",")
For i = 0 To UBound(v)
r.Offset(0, i).Value2 = v(i)
Next
Set r = r.Offset(1, 0)
Loop
End Sub