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

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

新規登録して質問してみよう
ただいま回答率
85.35%
機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

Q&A

1回答

1469閲覧

python:合計値を1にしたいです。

python_2019

総合スコア68

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

0グッド

0クリップ

投稿2020/08/11 05:10

以下のようにそれぞれの変数の重要度を算出しました。

importance = pd.DataFrame({ '変数' :df_X.columns, '重要度' :gbm.feature_importances_}) importance = importance.sort_values('重要度', ascending=False) # 降順ソート importance
変数 重要度 3 β-EEG 1806 2 α-EEG 1719 1 θ-EEG 1582 0 δ-EEG 1531

これを以下のように、重要度の合計=1にして、それぞれの変数の値を%で表示するにはどうすればよいでしょうか?

変数 重要度 3 β-EEG 0.2653 2 α-EEG 0.2558 1 θ-EEG 0.2490 0 δ-EEG 0.2299

以下のように試しましたが、エラーになってしまいます。
お詳しい方、ご指導お願いいたします。

importance = pd.DataFrame({ '変数' :df_X.columns, '重要度' :gbm.feature_importances_}) importance = importance.sort_values('重要度', ascending=False) # 降順ソート importance = importance / np.sum(importance) importance
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) C:\python\anaconda\pgm\lib\site-packages\pandas\core\ops.py in na_op(x, y) 1504 try: -> 1505 result = expressions.evaluate(op, str_rep, x, y, **eval_kwargs) 1506 except TypeError: C:\python\anaconda\pgm\lib\site-packages\pandas\core\computation\expressions.py in evaluate(op, op_str, a, b, use_numexpr, **eval_kwargs) 207 if use_numexpr: --> 208 return _evaluate(op, op_str, a, b, **eval_kwargs) 209 return _evaluate_standard(op, op_str, a, b) C:\python\anaconda\pgm\lib\site-packages\pandas\core\computation\expressions.py in _evaluate_numexpr(op, op_str, a, b, truediv, reversed, **eval_kwargs) 122 if result is None: --> 123 result = _evaluate_standard(op, op_str, a, b) 124 C:\python\anaconda\pgm\lib\site-packages\pandas\core\computation\expressions.py in _evaluate_standard(op, op_str, a, b, **eval_kwargs) 67 with np.errstate(all='ignore'): ---> 68 return op(a, b) 69 TypeError: unsupported operand type(s) for /: 'str' and 'str' During handling of the above exception, another exception occurred: TypeError Traceback (most recent call last) C:\python\anaconda\pgm\lib\site-packages\pandas\core\ops.py in safe_na_op(lvalues, rvalues) 1528 with np.errstate(all='ignore'): -> 1529 return na_op(lvalues, rvalues) 1530 except Exception: C:\python\anaconda\pgm\lib\site-packages\pandas\core\ops.py in na_op(x, y) 1506 except TypeError: -> 1507 result = masked_arith_op(x, y, op) 1508 C:\python\anaconda\pgm\lib\site-packages\pandas\core\ops.py in masked_arith_op(x, y, op) 1025 with np.errstate(all='ignore'): -> 1026 result[mask] = op(xrav[mask], y) 1027 TypeError: unsupported operand type(s) for /: 'str' and 'str' During handling of the above exception, another exception occurred: TypeError Traceback (most recent call last) <ipython-input-195-b8e79d3fe232> in <module> 1 importance = pd.DataFrame({ '変数' :df_X.columns, '重要度' :gbm.feature_importances_}) 2 importance = importance.sort_values('重要度', ascending=False) # 降順ソート ----> 3 importance = importance / np.sum(importance) 4 importance C:\python\anaconda\pgm\lib\site-packages\pandas\core\ops.py in f(self, other, axis, level, fill_value) 2028 return _combine_series_frame(self, other, pass_op, 2029 fill_value=fill_value, axis=axis, -> 2030 level=level) 2031 else: 2032 if fill_value is not None: C:\python\anaconda\pgm\lib\site-packages\pandas\core\ops.py in _combine_series_frame(self, other, func, fill_value, axis, level) 1928 1929 # default axis is columns -> 1930 return self._combine_match_columns(other, func, level=level) 1931 1932 C:\python\anaconda\pgm\lib\site-packages\pandas\core\frame.py in _combine_match_columns(self, other, func, level) 5114 copy=False) 5115 assert left.columns.equals(right.index) -> 5116 return ops.dispatch_to_series(left, right, func, axis="columns") 5117 5118 def _combine_const(self, other, func): C:\python\anaconda\pgm\lib\site-packages\pandas\core\ops.py in dispatch_to_series(left, right, func, str_rep, axis) 1155 raise NotImplementedError(right) 1156 -> 1157 new_data = expressions.evaluate(column_op, str_rep, left, right) 1158 1159 result = left._constructor(new_data, index=left.index, copy=False) C:\python\anaconda\pgm\lib\site-packages\pandas\core\computation\expressions.py in evaluate(op, op_str, a, b, use_numexpr, **eval_kwargs) 206 use_numexpr = use_numexpr and _bool_arith_check(op_str, a, b) 207 if use_numexpr: --> 208 return _evaluate(op, op_str, a, b, **eval_kwargs) 209 return _evaluate_standard(op, op_str, a, b) 210 C:\python\anaconda\pgm\lib\site-packages\pandas\core\computation\expressions.py in _evaluate_numexpr(op, op_str, a, b, truediv, reversed, **eval_kwargs) 121 122 if result is None: --> 123 result = _evaluate_standard(op, op_str, a, b) 124 125 return result C:\python\anaconda\pgm\lib\site-packages\pandas\core\computation\expressions.py in _evaluate_standard(op, op_str, a, b, **eval_kwargs) 66 _store_test_result(False) 67 with np.errstate(all='ignore'): ---> 68 return op(a, b) 69 70 C:\python\anaconda\pgm\lib\site-packages\pandas\core\ops.py in column_op(a, b) 1142 def column_op(a, b): 1143 return {i: func(a.iloc[:, i], b.iloc[i]) -> 1144 for i in range(len(a.columns))} 1145 1146 elif isinstance(right, ABCSeries): C:\python\anaconda\pgm\lib\site-packages\pandas\core\ops.py in <dictcomp>(.0) 1142 def column_op(a, b): 1143 return {i: func(a.iloc[:, i], b.iloc[i]) -> 1144 for i in range(len(a.columns))} 1145 1146 elif isinstance(right, ABCSeries): C:\python\anaconda\pgm\lib\site-packages\pandas\core\ops.py in wrapper(left, right) 1581 rvalues = rvalues.values 1582 -> 1583 result = safe_na_op(lvalues, rvalues) 1584 return construct_result(left, result, 1585 index=left.index, name=res_name, dtype=None) C:\python\anaconda\pgm\lib\site-packages\pandas\core\ops.py in safe_na_op(lvalues, rvalues) 1531 if is_object_dtype(lvalues): 1532 return libalgos.arrmap_object(lvalues, -> 1533 lambda x: op(x, rvalues)) 1534 raise 1535 pandas/_libs/algos.pyx in pandas._libs.algos.arrmap() C:\python\anaconda\pgm\lib\site-packages\pandas\core\ops.py in <lambda>(x) 1531 if is_object_dtype(lvalues): 1532 return libalgos.arrmap_object(lvalues, -> 1533 lambda x: op(x, rvalues)) 1534 raise 1535 TypeError: unsupported operand type(s) for /: 'str' and 'str'

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

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

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

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

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

guest

回答1

0

以下のように単純に列の値を.sum()した結果で割ればよいです。

Python

1import pandas as pd 2from io import StringIO 3 4s = """変数,重要度 5β-EEG,1806 6α-EEG,1719 7θ-EEG,1582 8δ-EEG,1531""" 9importance = pd.read_csv(StringIO(s)) 10importance = importance.sort_values('重要度', ascending=False) # 降順ソート 11 12importance['重要度(率)'] = importance['重要度'] / importance['重要度'].sum() 13print(importance) 14# 変数 重要度 重要度(率) 15#0 β-EEG 1806 0.272070 16#1 α-EEG 1719 0.258964 17#2 θ-EEG 1582 0.238325 18#3 δ-EEG 1531 0.230642

投稿2020/08/11 05:43

編集2020/08/11 23:00
can110

総合スコア38341

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

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

python_2019

2020/08/11 06:17

ありがとうございます。 一度、ご指摘どおりにやってみようと思います。
Penpen7

2020/08/11 21:03 編集

%であれば100倍しないといけないのでは? (元の質問で1にしたいと書いてあるのに、他方%と書いていて、ややこしいせいもあるのですが)
can110

2020/08/11 23:01

ボケてました… ご指摘ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問