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

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

ただいまの
回答率

89.52%

reshape(-1,2)の役割

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,293
退会済みユーザー

退会済みユーザー

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()
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    退会済みユーザー

    2017/04/28 12:07

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

    キャンセル

  • can110

    2017/04/28 13:03

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

    キャンセル

  • 退会済みユーザー

    2017/05/03 19:30

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 1

0

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

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

 お願い

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

a = np.array([1,2,3,4])
plt.boxplot(a)
plt.show()


箱ひげ図

 boxplotでの箱ひげ図について

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

  • 最小、最大、中央、第一四分位(箱の下辺)、第三四分位(箱の上辺)に位置する値を採用する。
  • 上記は、数値の組の先頭からそれぞれ0,1,0.5,0.25,0.75番目の率の位置にするものとする。
  • 位置(番目)が小数の場合は、その前後に位置する2値に応じた重み付き平均値を採用する(別の考えもあり)。
    参考:四分位数の求め方といろいろな例題
# 数値の組[1,2,3,4] の場合。数値の個数 n=4
最小値=(n-1)*0   番目の値= 0   番目の値=1
最大値=(n-1)*1   番目の値= 3   番目の値=4
中央値=(n-1)*0.5 番目の値= 1.5 番目の値=1番目の値*0.5 +2番目の値*0.5 =2*0.5 +3*0.5 =2.5
下辺値=(n-1)*0.25番目の値= 0.75番目の値=0番目の値*0.25+1番目の値*0.75=1*0.25+2*0.75=1.75
上辺値=(n-1)*0.75番目の値= 2.25番目の値=2番目の値*0.75+3番目の値*0.25=3*0.75+4*0.25=3.25


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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/29 14:00

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

    キャンセル

  • 2017/04/30 19:07 編集

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

    キャンセル

  • 2017/05/05 15:27

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

    キャンセル

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

  • ただいまの回答率 89.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る