データを集計する際に、楽に様々な集計値がでたらいいなと思いませんか?
値だけでなく、視覚的に数値を表すことができて、そのまま発表資料に使えたら効率的です。
そこで今回は、エクセルから取り込んだデータの確認と、
データを基にした棒グラフを作成します。
ー筆者についてー
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()
何かかっこ悪い・・・。
数値にそもそも差がないので図がぱっとしない上に、
縦軸が人数なのに小数点があることに違和感があります。
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別の集計や、円グラフなどの他の形式での図示を考えています!
コメント