質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

4621閲覧

python:テキストデータのグラフ化の際にエラーが出て困っています。

vegasapo

総合スコア13

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2016/09/15 07:00

編集2016/09/16 02:47

###前提・実現したいこと
pythonを用いて、処理したいと思っています。
環境はOS Xです。
以下のようにして、複数のファイルが同じディレクトリに存在し,そのひとつひとつに同様の処理を行い,テキストデータを一つのグラフにしようと考えていますが、
テキストデータの一行目の日時の部分が問題のようです。
一行目はsjisで書かれているようです。
エラーメッセージが出てしまいます。
どのようにしたら、エラーを解消できるでしょうか。
###発生している問題・エラーメッセージ

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x94 in position 6: invalid start byte

###該当のソースコード

python

1import matplotlib.pyplot as plt 2import numpy as np 3import os 4import sys 5 6target_dir = sys.argv[1] if len(sys.argv) >= 2 else '.' 7 8for filename in os.listdir(target_dir): 9 path_in = os.path.join(target_dir, filename) 10 if not (os.path.isfile(path_in) and path_in.endswith('.txt')): 11 continue 12 13 rfile = path_in 14 data = np.loadtxt(rfile, comments='#' ,dtype='float') 15 16 x_txt = data[:,0] 17 y_txt = data[:,3] 18 19 20 plt.figure(figsize=(8,5)) 21 plt.plot(x_txt,y_txt) 22 plt.show()

処理しようとしているテキストは以下のようなものです。

# 2016年09月09日 19時04分測定 #A #B #C #D 2.0000000E+0 -2.0000000E-7 4.2900000E-8 1.1816112E-3 1.9800000E+0 -2.0000000E-7 3.6000000E-8 1.1896633E-3 1.9600000E+0 -2.0000000E-7 3.4000000E-8 1.1655072E-3 1.9400000E+0 -2.0000000E-7 3.3000000E-8 1.1494031E-3 1.9200000E+0 -2.0000000E-7 3.2600000E-8 1.2138194E-3 1.9000000E+0 -2.0000000E-7 3.2600000E-8 1.2540795E-3 1.8800000E+0 -2.0000000E-7 3.3000000E-8 1.2943397E-3 1.8600000E+0 -2.1000000E-7 3.3900000E-8 1.1816112E-3 1.8400000E+0 -2.0000000E-7 3.5200000E-8 1.3023917E-3 1.8200000E+0 -2.1000000E-7 3.7100000E-8 1.3587560E-3 1.8000000E+0 -2.1000000E-7 3.9800000E-8 1.4392763E-3 1.7800000E+0 -2.1000000E-7 4.3200000E-8 1.5036926E-3 1.7600000E+0 -2.1000000E-7 4.7400000E-8 1.6566812E-3 1.7400000E+0 -2.1000000E-7 5.2400000E-8 1.6808373E-3 1.7200000E+0 -2.1000000E-7 5.8000000E-8 1.9465544E-3 1.7000000E+0 -2.1000000E-7 6.4400000E-8 2.1961675E-3 1.6800000E+0 -2.1000000E-7 7.1900000E-8 2.3813642E-3 1.6600000E+0 -2.1000000E-7 8.0700000E-8 2.6953935E-3 1.6400000E+0 -2.1000000E-7 9.0100000E-8 3.1946196E-3

###試したこと
テキストデータの一行目を削除すると動くようなので、以下のように書き換え、実行すると

python

1data = np.loadtxt(rfile, comments='#' ,dtype='float' ,skiprows='1')

別のエラーが発生してしまいました。

TypeError: 'str' object cannot be interpreted as an integer

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

dtypeの使い方を誤っていませんか?
skiprowsは、='1'ではなく、=1でないといけないはず。
与えられたテキストは非常に簡潔なので、これを処理するのにloadtxt()のパラメータをいじくる必要はありません。
plotする前に、まず(X,y)の値が正しく読み込まれたか確認すると良いでしょう。

Python

1# -*- coding; utf-8 -*- 2import os 3import sys 4import numpy 5 6data = numpy.loadtxt(’data.txt') 7for x in data: 8 print("x={}, y={}".format(x[0], x[1]))

投稿2016/09/15 16:39

EloiseSeverin

総合スコア50

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

vegasapo

2016/09/16 02:51

同様のエラー UnicodeDecodeError: 'utf-8' codec can't decode byte 0x94 in position 6: invalid start byte が発生してしまっているようです。 テキストデータの一行目を、削除して実行するとうまくいくようです。 テキストデータの一行目は、sjisで書かれているようなのですが、どのようにすればエラーが解消できるかわかりません。
EloiseSeverin

2016/09/16 06:33

そのエラーは、何行目で出ていますか? pythonは、詳細にエラーの発生個所を報告しているのに、そこを削除していては、解決は難しいです。 文字コードは、"sjisで書かれているよう"ではなくきちんと確認してください。BON付きUTF-16あたりで書かれているかもしれません。 numpy.__version__の確認、および numpy.loadtxt(’data.txt', skiprows=1)での実行結果も合わせて報告お願いします。
vegasapo

2016/09/16 10:05 編集

エラーコードの全文です。 Traceback (most recent call last): File "test7.py", line 6, in <module> data = numpy.loadtxt('/Users/ito/Desktop/VDD2V/inverter no1 Vop45 Von45 rev_VDD+2.00_000.txt') File "/Users/ito/anaconda3/lib/python3.5/site-packages/numpy/lib/npyio.py", line 887, in loadtxt first_line = next(fh) File "/Users/ito/anaconda3/lib/python3.5/codecs.py", line 321, in decode (result, consumed) = self._buffer_decode(data, self.errors, final) UnicodeDecodeError: 'utf-8' codec can't decode byte 0x94 in position 6: invalid start byte 失礼いたしました。 確認したところ、文字コードは、sjisで書かれています。 numpy.__version__は、'1.11.1'でした。 numpy.loadtxt(’data.txt', skiprows=1)での実行結果は、 Traceback (most recent call last): File "test7.py", line 6, in <module> data = numpy.loadtxt('/Users/ito/Desktop/VDD2V/inverter no1 Vop45 Von45 rev_VDD+2.00_000.txt') File "/Users/ito/anaconda3/lib/python3.5/site-packages/numpy/lib/npyio.py", line 887, in loadtxt first_line = next(fh) File "/Users/ito/anaconda3/lib/python3.5/codecs.py", line 321, in decode (result, consumed) = self._buffer_decode(data, self.errors, final) UnicodeDecodeError: 'utf-8' codec can't decode byte 0x94 in position 6: invalid start byte itou-no-MacBook-Pro:VDD2V ito$ python test7.py Traceback (most recent call last): File "test7.py", line 6, in <module> data = numpy.loadtxt('/Users/ito/Desktop/VDD2V/inverter no1 Vop45 Von45 rev_VDD+2.00_000.txt', skiprows=1) File "/Users/ito/anaconda3/lib/python3.5/site-packages/numpy/lib/npyio.py", line 880, in loadtxt next(fh) File "/Users/ito/anaconda3/lib/python3.5/codecs.py", line 321, in decode (result, consumed) = self._buffer_decode(data, self.errors, final) UnicodeDecodeError: 'utf-8' codec can't decode byte 0x94 in position 6: invalid start byte となりました。
EloiseSeverin

2016/09/16 11:36

numpy.loadtxt()がコメント行を無視してくれないのが不思議なんだけど、これでどうかな? import codecs fp = codecs.open('data.txt', encoding='cp932', errors='ignore') data = nummy.loadtxt(fp, skiprows=1)
vegasapo

2016/09/17 02:59

エラーが出ず、データが正しく読み込まれていることが確認できました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問