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

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

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

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Matplotlib

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

Python

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

Q&A

解決済

1回答

1359閲覧

matplotlibで棒グラフを書きたい!

Pablito

総合スコア71

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Matplotlib

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

Python

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

0グッド

1クリップ

投稿2019/07/16 05:20

編集2019/07/16 05:38

前提・実現したいこと

ある会社の購買データから、
男女別の売上を集計したいと思っています。
そこでmatplotlibを使い、棒グラフを描こうと思ったのですが、
以下のエラーが起きました。

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

TypeError: 'Series' object is not callable

該当のソースコード

Python

1x = df.sex('男性', '女性') 2y = df.rev() 3 4plt.figure(figsize = (10, 6)) 5plt.bar(x, y, align='center', width = 0.5) 6plt.xticks(x, ['male', 'female']) 7plt.xlabel('sex') 8plt.ylabel('revenue') 9 10plt.grid(True)

該当のソースコードの上に

python

1df = pd.read_csv(rf'G:???csv,engine='python', 2 encoding='cp932')

というのがあり、
そのデータの中では性別は男性、女性と
表記されています。

Python

1 2 3 4print(df.keys()) 5 6 7 8Index(['cst_id', 'date_purchase_c', 'date_purchase_n', 'yymm_purchase', 9 'InsDate', 'dhms_InsDate', 'Trn_Type', '**rev**', 'num', 'code', 'Brand', 10 'MdName', 'TranKey', 'TranLineNo', 'Store_code', 'TerminalNo', 11 'date_purchase', 'TranNo', 'StoreName', 'St_SalesChannel', 12 'St_Hierarchy', 'Category_c', 'Item_c', 'Sub_Item_c', 'Category', 13 'Item', 'Sub_Item', 'Sub_Item_2', 'FY', 'age_latest_cat', **'sex**', 14 'age_asof_purchase_cat', 'St_Region', 'Season', 'SubSeason', 15 'Season_wk'], 16 dtype='object')

何卒宜しくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

sex, rev という名前の列があるのでしょうか?
もしそうだとすると、df.sex は DataFrame から sex という列を Sereis オブジェクトで取得するということになりますが、その Series オブジェクトに対して、df.sex('男性', '女性') のような関数呼び出しをする使い方は pandas には存在しません。

python

1x = df.sex('男性', '女性') 2y = df.rev()

最初の10行ぐらいでいいので、csv ファイルをテキストエディタで開いた中身を質問に追記していただけますか。

追記

matplotlib で直接描画することもできますが、DataFrame からグラフを作成する場合は seaborn を使うことをおすすめします。

seaborn.barplot — seaborn 0.9.0 documentation

pip install seaborn でインストールできます。

python

1import pandas as pd 2import seaborn as sns 3 4sns.set() 5 6# DataFrame を作成する処理 7# 省略 8 9ax = sns.barplot(x="sex", y="rev", data=df) 10ax.set_xlabel('sex') 11ax.set_ylabel('revenue')

投稿2019/07/16 05:27

編集2019/07/16 05:46
tiitoi

総合スコア21956

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

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

Pablito

2019/07/16 05:40

ご回答ありがとうございます。 都合上実際のデータはお見せできないのですが、 質問に追記したように、sex, revという列は存在します。 宜しくお願い致します。
tiitoi

2019/07/16 05:46

サンプルデータがないので、実際に動かしての確認はこちらでできないですが、追記のようにすればできると思います。
Pablito

2019/07/16 05:50

ありがとうございます! 試してみます!
Pablito

2019/07/16 05:56

すいません! 棒グラフは描けたのですが、 いわゆる豆腐が起きて どの棒が男性なのか女性なのか不明なのか わかりません。 豆腐を解除するのは面倒なので、 別の方法でやりたいんですが、 方法はありませんか?
tiitoi

2019/07/16 05:58

豆腐とは日本語が□で表示されることでしょうか? seaborn は matplotlib の関数を呼び出しているだけなので、matplotlib を使って直接描画しても同じことが発生します。 解決策は matplotlib で日本語表示できるように設定する必要があります。 http://pynote.hatenablog.com/entry/matplotlib-use-japanese-text
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問