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

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

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

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python

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

Q&A

1回答

2335閲覧

reshape(-1,2)の役割

退会済みユーザー

退会済みユーザー

総合スコア0

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python

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

0グッド

0クリップ

投稿2017/04/28 02:18

Matplotlibで箱ひげ図の描画を行なっています。
その中で

plt.boxplot(np.random.randn(20).reshape(-1,2))

という部分があってreshape(-1,2)の部分が箱ひげ図のどこに関わっているのかがわかりません。
イメージ説明
コード実行の結果は画像のようなのですが、この画像のどの部分がreshape(-1,2)に対応しているのでしょうか?
コード全体は以下のようです。

# coding: utf-8 from __future__ import absolute_import from __future__ import division from __future__ import print_function import os import numpy as np import numpy.random as random import matplotlib.pyplot as plt plt.boxplot(np.random.randn(20).reshape(-1,2)) plt.show()

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

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

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

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

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

can110

2017/04/28 02:28

「箱ひげ図」とは何かを説明できますでしょうか?
jm1156

2017/04/28 02:31

もしかして、知らないメソッドが出るたびに質問しているのでしょうか…? 調べないで…?
退会済みユーザー

退会済みユーザー

2017/04/28 03:07

箱ひげ図はわかります。メソッドも調べていますが、reshape(-1,2)の役割がどうしてもわからず...
can110

2017/04/28 04:03

具体的にreshape(-1,2)のどこの部分が分からないのでしょうか?
guest

回答1

0

質問内容(あなたが疑問に思っていること)が完全には把握できていませんので回答ではありません。
アドバイスです。

  • "plt.boxplot(np.random.randn(20).reshape(-1,2))"を"plt.boxplot(np.**arange(4) **.reshape(-1,2))"とすると、何かピンとくるかもしれません。
  • reshapeについては配列の次元数や大きさの操作をよく読むと、何か分かるかもしれません。

お願い

  • 回答ではありませんので、ベストアンサーにはしないでください。
  • 自力で解決できた場合は自己回答することを強くお勧めします。
[1,2,3,4]の描画結果

Python

1import numpy as np 2import matplotlib.pyplot as plt 3 4a = np.array([1,2,3,4]) 5plt.boxplot(a) 6plt.show()

箱ひげ図

boxplotでの箱ひげ図について

一般的な「箱ひげ図」は以下の値を採用するようです。

  • 最小、最大、中央、第一四分位(箱の下辺)、第三四分位(箱の上辺)に位置する値を採用する。
  • 上記は、数値の組の先頭からそれぞれ0,1,0.5,0.25,0.75番目の率の位置にするものとする。
  • 位置(番目)が小数の場合は、その前後に位置する2値に応じた重み付き平均値を採用する(別の考えもあり)。

参考:四分位数の求め方といろいろな例題

Python

1# 数値の組[1,2,3,4] の場合。数値の個数 n=4 2最小値=(n-1)*0 番目の値= 0 番目の値=1 3最大値=(n-1)*1 番目の値= 3 番目の値=4 4中央値=(n-1)*0.5 番目の値= 1.5 番目の値=1番目の値*0.5 +2番目の値*0.5 =2*0.5 +3*0.5 =2.5 5下辺値=(n-1)*0.25番目の値= 0.75番目の値=0番目の値*0.25+1番目の値*0.75=1*0.25+2*0.75=1.75 6上辺値=(n-1)*0.75番目の値= 2.25番目の値=2番目の値*0.75+3番目の値*0.25=3*0.75+4*0.25=3.25

この結果はboxplotの描画結果と一致します。
上記の考察とあなたのコメントよりboxplot関数で描画される結果は、あなたの考える箱ひげ図ではないと考えます。

投稿2017/04/28 04:39

編集2017/05/05 06:12
can110

総合スコア38262

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

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

退会済みユーザー

退会済みユーザー

2017/04/28 05:36

ありがとうございます。すみません、伝わっていないようで...。 reshape(-1,2)では、?列2行の行列を作っていると思いますが、箱ひげ図なので、表のような図形ではないですよね?この?列2行の行列が箱ひげ図の箱のどの部分に関わっているのか、ということが知りたかったです。私には箱ひげ図の箱の部分は1行1列の行列に見えるので、例えば100行30列の行列がreshpeで作られた時などに、箱ひげ図はどう変わるのか,とか
can110

2017/04/28 05:44

箱ひげ図はよくわからないので「箱ひげ図の箱のどの部分」がどこを指しているのかが分かりません。 逆に教えてほしいのですが、上下の黒い横線、青い箱、赤い線は何を表しているのでしょうか? できれば具体的な数値とともに教えてください。
退会済みユーザー

退会済みユーザー

2017/04/28 05:55

赤い線は中央値で、上の黒い横線は最大値で下の黒い横線は最小値です。青い箱の四角の下の横線は数値の25%の大きさで、上の横線は数値の75%の大きさです。これらの値はrandn(20)で発生させた数から算出したそれぞれの値であると思います。
can110

2017/04/28 05:59

「数値の25%の大きさ」というのがよく分かりません。 この「数値」とはどの数値を指しているのでしょうか? 「これらの値はrandn(20)で発生させた数」というのもよく分かりません。 具体的にどのような値(複数?)が発生されるのでしょうか?
can110

2017/04/28 06:07

あと「中央値」というのもいまひとつ分かりませんので教えていただけないでしょうか? ネットで調べたところ「代表値の一つで、有限個のデータを小さい順に並べたとき中央に位置する値。 」 と出たのですが。
退会済みユーザー

退会済みユーザー

2017/04/28 08:30

randn(20)で発生させた数を小さい順に並べた時に、「数値の25%の大きさ」は、そのデータの最初から見た時に25%後半に位置する、と言えます。「数値」に関してはrandn(20)は、標準正規分布に従って乱数を発生するメソッドで、例えば[ 0.94044921 2.32545754 0.12382112 0.81027341 -1.39988634 -1.35578656 -0.78036814 1.64415725 0.35031527 -0.04179864 -0.42376991 0.54915611 0.49782194 0.93254174 0.68768312 1.98681456 0.75216274 0.90376647 -1.28840555 0.76482297]のような数が発生されます。
退会済みユーザー

退会済みユーザー

2017/04/28 08:32

中央値は データを大きい順(または小さい順)に並べたとき,真ん中の値を中央値(メディアン)と言います。データの数が偶数のときは「真ん中の値」が二つ登場するのでそれらを足して2で割ったものを中央値とします。 という説明がわかりやすいかなと思います。 http://mathtrain.jp/daihyochi
can110

2017/04/28 08:59 編集

回答ありがとうございます。中央値はよくわかりました。 しかし「数値の25%の大きさ」が依然として理解できません。 「そのデータの最初から見た時に25%後半に位置する」とありますが 例示くださった数値の中のどれが当てはまりますか? また、たとえば[0,1]という2つの数値のみの場合はどうなるのでしょう?
退会済みユーザー

退会済みユーザー

2017/04/28 12:48

25%後半に位置すると書きましたが、すみません、25%前半に位置する、です。 例えば、1・2・3・4という数字の列があった時の25%前半は2.5です。1+2+3+4=10で10*0.25=2.5であるからです。[0,1]という2つの数値のみの場合は0+1=1で1*0.25=0.25です
can110

2017/04/28 13:30 編集

回答ありがとうございます。すこしずつですが分かってきたような気がします。 [1,2,3,4]での箱の下辺の値は「1+2+3+4=10で10*0.25=2.5」ですね。 また、中央値は、中央に位置する2と3を足して2で割ったものなので同じく2.5ですね。 さらに、同じ考えで箱の上辺「75%前半(後半?)」だと10*0.75で7.5になりますよね。 これで正しいですか? なんとなく[1,2,3,4]と単調増加している数列なので 「上辺(7.5)と中央値(2.5)の差(5.0)」は「下辺(2.5)と中央値(2.5)の差(0.0)」 と一致しているのが自然な気がするのですが、一致していませんよね。 私が何か考え違いをしていますか?
退会済みユーザー

退会済みユーザー

2017/04/29 05:00

「上辺(7.5)と中央値(2.5)の差(5.0)」は「下辺(2.5)と中央値(2.5)の差(0.0)」と一致しているのが自然、と考えるのはわかります。そうですね...,なぜ一致していないのかはわかりません...。
can110

2017/04/30 10:12 編集

回答ありがとうございます。[1,2,3,4]をboxplotで描画してみました。(回答欄に追記しています) 最大値、最小値、中央値は教えていただいたとおりの値ですが、箱の上辺、下辺のy値が異なるようです。 図では上辺=約3.3、下辺=約1.7となっているようですが、教えていただいたとおりなら上辺=7.5、下辺=2.5となるはずです。なぜでしょうか?boxplotは「箱ひげ図」とは異なるのでしょうか?
can110

2017/05/05 06:27

解答欄に「箱ひげ図」についての考察を追記しました。 > 例えば、1・2・3・4という数字の列があった時の25%前半は2.5です。 > 1+2+3+4=10で10*0.25=2.5であるからです。 と箱の下辺値の算出方法を教えていただきましたが、これは一般的な考え、およびboxplotの描画結果と一致しませんので、あなたの考える「箱ひげ図」はboxplotでは描画できないと思われます。 もしかしたらboxplotの引数で制御できるのかもしれませんが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問