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

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

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

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

Q&A

解決済

1回答

1280閲覧

クロス集計表から散布図を描きたい

_hh

総合スコア79

Python 3.x

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

0グッド

0クリップ

投稿2019/01/21 20:42

Pandas初心者です。POSデータを分析したクロス集計表があります。横軸に年代(30代、40代、・・・)、縦軸に購入した物の単価が5円刻みで入っており、各セルに該当するお客様の度数が入ったデータフレームを作成しました。ここから、各年代ごとの、購入した物の平均金額の散布図(横軸に年代、縦軸に平均金額)を描きたいのですが、どのようにすればよいでしょうか?pivot_table?などを試したのですが、思っていることができませんでした。

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

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

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

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

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

guest

回答1

0

ベストアンサー

クロス集計をする前のデータであれば散布図を書くことも考えられますが、クロス集計を行ったあとであればヒートマップあたりが適当ではないでしょうか。
ヒートマップでは、金額を横軸、年代を縦軸にして、度数を色の濃淡で表したものです。
ヒートマップは matplotlibでも書くことはできるのですが、seabornを使ったほうが簡単に描けるのでこちらをお勧めします。

ということでサンプルです。
一応散布図も描いておりますが、クロス集計を行った後のデータでは単なる格子点になります。

Python

1import pandas as pd 2import numpy as np 3import matplotlib.pyplot as plt 4import seaborn as sns 5 6# 適当なデータを生成 7N = 1000 8df = pd.DataFrame( 9 {'年代': np.random.choice(['10代','20代','30代','40代','50代','60代'],N), 10 '金額': np.random.choice(range(1000, 2000, 100), N) 11 } 12) 13 14# クロス集計表を作成 15cross_df = pd.crosstab(df['年代'], df['金額']) 16print(cross_df) 17 18fig, axs = plt.subplots(2,1) 19 20# 一応散布図も描いてみるけど・・・ 21axs[0].scatter(df['金額'], df['年代']) 22axs[0].set_xlabel('金額') 23axs[0].set_ylabel('年代') 24 25# ヒートマップで表示 26sns.heatmap(cross_df, ax=axs[1]) 27axs[1].invert_yaxis() 28 29plt.tight_layout() 30plt.savefig('out.png') 31plt.show()

イメージ説明

投稿2019/01/21 23:56

magichan

総合スコア15898

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

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

_hh

2019/01/22 04:18

有難うございます。以下の様にしていたのですが、、 df2=pd.read_excel('ID_data.xlsx') df=pd.read_excel('market.xlsx')#,encoding='UTF-8') cross=pd.crosstab(df['税抜価格'],df2['年代'],margins=True) ----- 頂いたサンプルコードを試そうとして cross['税抜価格']とすると、KeyError: '税抜価格' と出てしまいました。。
magichan

2019/01/22 12:00 編集

遅くなりました。 なるほど2つのDataFrameからクロス集計を行っているのですね。 であれば、上記のサンプルはこのようになります。 df2=pd.read_excel('ID_data.xlsx') df=pd.read_excel('market.xlsx')#,encoding='UTF-8') cross=pd.crosstab(df['税抜価格'],df2['年代'],margins=True) fig, axs = plt.subplots(2,1) # 一応散布図 axs[0].scatter(df['税抜価格'], df2['年代']) axs[0].set_xlabel('税抜価格') axs[0].set_ylabel('年代') # ヒートマップで表示 sns.heatmap(cross.iloc[:-1, :-1], ax=axs[1]) axs[1].invert_yaxis() plt.tight_layout() plt.show()
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問