【Python】取り込んだデータの集計~棒グラフ【初心者のための】

python bargraph Python

データを集計する際に、楽に様々な集計値がでたらいいなと思いませんか?
値だけでなく、視覚的に数値を表すことができて、そのまま発表資料に使えたら効率的です。

そこで今回は、エクセルから取り込んだデータの確認と、
データを基にした棒グラフを作成します。

Mogrii
Mogrii

 ー筆者についてー

Excelを使う事務作業が多いサラリーマン

同僚の「これまとめといて」で

かなり時間を使ってしまう現状に嫌気がさし

なんとかPythonで楽に仕事ができないか日々勉強中。

非エンジニア。数学も苦手。


振り返りと使用するデータ

前回はExcelからデータフレームに内容を取り込むところまで紹介しました。

使用したデータは、ファイル名「arisounadata.xlsx」です。
内容は適当ですが、仮に「友達に聞いた、ごはんに一番合うと思うおかず」です。
回答者番号(No)と、性別(Gender)、回答(Answer)の3列です。

初心者向けのため、欠損値や異常値は含まれていないことを前提に進めます。
(いつかまたその記事も書きます)

データのイメージ

行の数(回答数)、列の数(項目数)

まず今回のアンケートでは合計何人が回答したかを求めます。

行数(縦にいくつデータが並んでいるか)を数えるときは、
pandasのlen(df)
列数(横にいくつ項目が並んでいるか)を数えるときは、
len(df.columns)
で調べます。

import pandas as pd
df = pd.read_excel('arisounadata.xlsx', sheet_name= 'Answer')

#データの行数を確認する(このデータでは回答者数,50人)
print(len(df))
#データの列数を確認する(このデータでは、No, Gender, Answerの3つ)
print(len(df.columns))

数字だけが出るとわかりにくい場合は、文字も一緒に表示すると、
見て混乱しないです。
(※str()は、変数の中の数字を文字型に変換するもの。
文字とくっつけて表示するときはこうしないといけないらしい)

gyou = len(df)
retsu = len(df.columns)

# データを文字と一緒に表示
print('このデータの行数は'+str(gyou))
print('このデータの列数は'+str(retsu))

回答の属性を集計

元々のアンケートデータを再度確認すると、Genderの項目にはfemale, male, Unansweredの3種類があるようです。

まず最初に、どんな項目が含まれているかを、pandasのuniqueで確認しました。

df['Gender'].unique()

この実行結果は下記で、3種類のようです。

この女性・男性・未回答はそれぞれ何人いるかを集計します。

print(df['Gender'].value_counts())

これで回答者の属性(今回は性別)の集計ができました。

同様に、Answerも確認すると、このようになります。

print(df['Answer'].value_counts())

からあげが人気のようです。

データ全体の雰囲気が見えてきましたね!

棒グラフで表現

まずGender(性別)について図示してみます。

図示にはmatplotlibのpyplotを使うので、まだインポートしていない場合はインポートします。

import matplotlib.pyplot as plt

#さっき作ったGenderの集計結果を、「df_gender」に入れる
gender_data = df['Gender'].value_counts()

gender_data.plot(kind="bar")
plt.show()

Jupyter notebookだと、%matplotlib inlineが要るかも?

何かかっこ悪い・・・。
数値にそもそも差がないので図がぱっとしない上に、
縦軸が人数なのに小数点があることに違和感があります。

gender_data.plot(kind="bar")
# 縦軸の下限、上限を設定
plt.ylim([10,20])
# 縦軸のラベルを設定
plt.ylabel("number of perple")
# 横軸のラベルを設定、元のデータの名前から
plt.xlabel(gender_data.name)
plt.show()

ちょっといい感じになりました。

同様にAnswerに関しても図示します。

answer_data.plot(kind="bar")
# 縦軸の下限、上限を設定
# plt.ylim([10,20])
# 縦軸のラベルを設定
plt.ylabel("number of answers")
# 横軸のラベルを設定、元のデータの名前から
plt.xlabel(answer_data.name)
plt.show()
からあげ、餃子、焼肉、生姜焼きが人気。

縦軸はデフォルトのままでもよかったので、コメントアウトしています。

次考えること

本稿では述べていませんが、人数や獲得票数が多い順にならんでいますが、
アルファベット順に並べたくなったり、色を変えたくなったりするかもしれません。
次にレベルアップした際はその点も追記します。

次回以降は、Gender別の集計や、円グラフなどの他の形式での図示を考えています!

コメント

タイトルとURLをコピーしました