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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

解決済

3回答

948閲覧

正解率を確認するための表を作りたいのですが。。(python)

n_pome

総合スコア2

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

0クリップ

投稿2020/05/26 07:02

編集2020/05/26 09:43

前提・実現したいこと

python初心者です。

Pythonで2つのリスト
t=[2,3,4,6,7,3,5,9,3,0,7,5,3,2,1,6,8]
p=[2,3,4,6,6,3,5,9,3,0,9,5,3,3,1,6,8]

があるとき、
tが正解リストとしています。pは予測値のようなイメージです。
どの数字がどの数字として予測されたかを百分率(0.××のように)で示す表を
作りたいです。誤りがなければ1.00(個人的に解析を行う際に便利だと思ったからです。)
横軸が予測データp、縦軸が正解データtです。

例:

 | 0 1 2 3 4 5 6 7 8 9

0 | 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
1 | 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
2 | 0.00 0.00 0.50 0.50 0.00 0.00 0.00 0.00 0.00 0.00
3 | 0.00 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00
4 | ・・・
5 | 以下、判定率(縦軸(正解)の数字が横軸(予測)の数字と判定された割合)を書いていく
6 | 
7 | 
8 |  
9 |

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

t=[2,3,4,6,7,3,5,9,3,0,7,5,3,2,1,6,8] p=[2,3,4,6,6,3,5,9,3,0,9,5,3,3,1,6,8] index_k=[] for i in range(10): for j in range(10): for k in range(10): if t[i]==k: index_k.append(t.index(k))

試したこと

やろうとしているのは、例えば
tの配列中で2(これがkにあたる)という値が何番目の要素か?
→この場合、0番目と14番目

そして、pの0番目と14番目は何か?(正解しているか)
を参照しようとしています。

ほとんど考えついておらず、このような状態で申し訳ないです。

考え方、どのように書いていけばよいかご教授いただけますでしょうか。

質問の意味が分からなければお申し付けください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

x98000

2020/05/26 08:03

ちょっとよくわかりません。 「どの数字がどの数字として予測されたかを百分率(0.××のように)で示す表」というのをもう少し具体的に記載してもらえませんか。
n_pome

2020/05/26 08:25

この質問に関して考えていただき、誠にありがとうございます。 かしこまりました。 以下に示します | 0 1 2 3 4 5 6 7 8 9 --------------------------------------------------------------- 0 | 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1 | 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 2 | 0.00 0.00 0.50 0.50 0.00 0.00 0.00 0.00 0.00 0.00 3 | 0.00 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 4 | ・・・ 5 | 以下、判定率(縦軸(正解)の数字が横軸(予測)の数字と判定された割合)を書いていく 6 |  7 |  8 |   9 |  例えば、 表の3行目については、 きちんと2と予測されているデータもあるが、 誤って3と予測されているデータもあるので、上記のようになっている。 [2を2と予測されたデータ数(=1)]/[2のデータ数(=2)]=0.50 [2を3と予測されたデータ数(=1)]/[2のデータ数(=2)]=0.50 となります。   全部正確に予測できた場合は対角線上に1.00が並びます。 参考: t=[2,3,4,6,7,3,5,9,3,0,7,5,3,2,1,6,8] p=[2,3,4,6,6,3,5,9,3,0,9,5,3,3,1,6,8]
n_pome

2020/05/26 09:04

すみません、表が醜かったので修正します  | 0 1 2 3 4 5 6 7 8 9 --------------------------------------------------------------- 0 | 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1 | 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 2 | 0.00 0.00 0.50 0.50 0.00 0.00 0.00 0.00 0.00 0.00 3 | 0.00 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 4 | ・・・ 5 | 以下、判定率(縦軸(正解)の数字が横軸(予測)の数字と判定された割合)を書いていく 6 |  7 |  8 |   9 |
x98000

2020/05/26 09:27

よく理解できました
x98000

2020/05/26 09:37

上記の内容は質問の方を修正して追記したほうがいいです。あとから見た方のために。
guest

回答3

0

ベストアンサー

ロジックの学習にはならないので、こういうことも出来るという参考までに。

python

1from sklearn.metrics import confusion_matrix 2import pandas as pd 3 4t=[2,3,4,6,7,3,5,9,3,0,7,5,3,2,1,6,8] 5p=[2,3,4,6,6,3,5,9,3,0,9,5,3,3,1,6,8] 6 7df=pd.DataFrame(confusion_matrix(t, p)) 8print(df) 9 0 1 2 3 4 5 6 7 8 9 100 1 0 0 0 0 0 0 0 0 0 111 0 1 0 0 0 0 0 0 0 0 122 0 0 1 1 0 0 0 0 0 0 133 0 0 0 4 0 0 0 0 0 0 144 0 0 0 0 1 0 0 0 0 0 155 0 0 0 0 0 2 0 0 0 0 166 0 0 0 0 0 0 2 0 0 0 177 0 0 0 0 0 0 1 0 0 1 188 0 0 0 0 0 0 0 0 1 0 199 0 0 0 0 0 0 0 0 0 1 20 21tsum=df.sum(axis=1) 22print(df.apply(lambda x: x/tsum)) 23 0 1 2 3 4 5 6 7 8 9 240 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 251 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 262 0.0 0.0 0.5 0.5 0.0 0.0 0.0 0.0 0.0 0.0 273 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 284 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 295 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 306 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 317 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.5 328 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 339 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 34

投稿2020/05/26 09:31

x98000

総合スコア1096

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

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

n_pome

2020/05/26 10:19

ご回答いただき誠にありがとうございます。 pandasって便利ですね。 良いことを知りました。 詳しく調べてみます!
guest

0

表形式で出力するとして、

t=[2,3,4,6,7,3,5,9,3,0,7,5,3,2,1,6,8] p=[2,3,4,6,6,3,5,9,3,0,9,5,3,3,1,6,8] # p、t内要素の最大数 m = max([max(p), max(t)]) # 二次元配列の準備 data = [[0] * (m+1) for i in range(m+1)] # データの充填 for i,x in enumerate(p): data[t[i]][x] += 1 # 表ヘッダ出力 print(' ', ' '.join([str(n) for n in range(m+1)])) print(' ', '-'*42) # データ出力 for k in range(len(data)): print(f"{k:>2}| {' '.join([str(n/sum(data[k])) if sum(data[k])>0 else '0.0' for n in data[k]]) }")

ではどうでしょうか。

投稿2020/05/26 09:44

編集2020/05/26 09:47
patapi

総合スコア820

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

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

n_pome

2020/05/26 10:47

ご回答いただき誠にありがとうございます。 助かります。 感謝申し上げます。
guest

0

書いてるうちに全然違うコードになってしまいましたが、ご参考まで。

python3

1ts=[2,3,4,6,7,3,5,9,3,0,7,5,3,2,1,6,8] 2ps=[2,3,4,6,6,3,5,9,3,0,9,5,3,3,1,6,8] 3 4max_number = 10 5dict_k = {i:[0,0] for i in range(max_number)} # 番号それぞれについて[出現回数,正解回数]の辞書を作成 6for t,p in zip(ts, ps): 7 dict_k[t][0] += 1 # 出現回数+1 8 if t==p: 9 dict_k[t][1] += 1 # 正解回数+1 10print(dict_k) 11# {0: [1, 1], 1: [1, 1], 2: [2, 1], 3: [4, 4], 4: [1, 1], 5: [2, 2], 6: [2, 2], 7: [2, 0], 8: [1, 1], 9: [1, 1]} 12 13results = list() 14for i in range(max_number): 15 result = dict_k[i][1]/dict_k[i][0] # 正解/出現 16 results.append([i,result]) # 番号,正答率 17print(results) 18# [[0, 1.0], [1, 1.0], [2, 0.5], [3, 1.0], [4, 1.0], [5, 1.0], [6, 1.0], [7, 0.0], [8, 1.0], [9, 1.0]]

投稿2020/05/26 07:57

編集2020/05/26 07:59
jeanbiego

総合スコア3966

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

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

n_pome

2020/05/26 08:26

ご回答いただき誠にありがとうございます。 辞書型にしているんですね。 是非参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問