( New ) 新連載スタート!2人の会話形式でPythonを学ぶ「週末Pythonゆる講座」はこちら ▶▶

週末Pythonゆる講座 #4|まずは平均から!

週末Pythonゆる講座の登場人物(ぶち先生とゆうちゃん)

おさらい:データを読み取ってみる

今回はさっそくデータを分析していきます!

はい!頑張ります!

では前回のおさらいで、Excelのデータを読み取ってみましょう

Pandasのインポートも忘れずに!

import pandas as pd
df = pd.read_excel('/content/drive/MyDrive/***/student.xlsx')
df.head()

read_excelでExcelのデータを読み取って、変数の「df」に入れるんですよね!できました!

PythonのDataFrameのイメージ

read_excelでデータを読み取って、最初の5行を出すheadで確認する

この流れは鉄板なので覚えておきましょう!

はい!分かりました!

ちなみにExcelを使わないでデータを読み取る方法もあるのでご紹介します!

そのまま貼り付けて実行すればデータを取得できます!

import pandas as pd
df = pd.read_html('https://smart-hint.com/student-data/')[0]
df.head()

急に分からなくなりました・・・

混乱させて申し訳ない・・・

read_htmlを使うとWeb上にあるデータを取得することができます

今回は本サイトにあるデータにアクセスしていますよ

もしかして「read_〇〇」でいろいろなファイルを読み取ることができるんですか?

その通り!他にもCSVファイルを読み取るread_csvもあります

【Python】read_csv|CSVファイルをPythonに読み込む方法

これからはExcelのデータを準備するのが大変なので、read_htmlを使っていきます

分かりました!!

さて、今回はどういう作業をするんですか?

Pythonが使えるようになったので、もうデータ分析に入りましょう!

さっそく実践ですね!やった!

では分析のテーマを発表しましょう!

テストの平均点を算出する

平均ですか!?さすがにこれくらいExcelでもできますよ

時間もかかりません・・・

もちろん単純に平均点を出すのは簡単です!せっかくPythonで分析するので、「教科ごと」や「部活ごと」に平均点を出してみましょう!

はい!分かりました!

必要なデータに絞りたい

まず最初に必要なのは、使うデータに絞ること!

テストの平均点データなので「国語・数学・英語」に絞るんですよね!

そう!点数のデータに絞ってみましょう

Pythonでは変数の隣に[ ]を付けて、カラム名(列名)を記述します

英語の点数に絞るにはこうですか??

df[english]
df[english]

あれあれ!?エラーが出ました・・・

カラム名には‘ ‘シングルクォーテーションを付けましょう!

データが出ました!!

あれ、でも前と雰囲気が違う・・・前は「表」だったのに、今回は「数値」が並んでる!?

df['english']
df['english']

SeriesとDataFrameの違い!?

良いところに目を付けましたね!これはデータ構造の違いです

1次元のSeriesシリーズ)と、2次元のDataFrameデータフレーム)があります。

しりーず?でーたふれーむ???

難しいことは考えず、複数の列があるDataFrameと、単一の列だけのSeriesと覚えましょう

DataFrameとSeriesのイメージの違い

はい、分かりました!複数のデータフレームと、単一のシリーズ

英語の点数をSeries形式で取り出すことができたので、平均点をさっそく出しましょう

新しい変数「df_english」に英語の点数を格納してください

変数は名前の付いた箱だから、こうですか??

df_english = df['english']

平均を出すmean関数

完璧!英語の点数だけが「df_english」に入りました!

平均を出すためmean関数を利用しましょう!使い方は最初に.ピリオド・最後に( )を忘れずに

これで合ってますか?

df_english.mean()
Pythonの平均の出し方

おおー!78点と平均点ができてました!

英語の平均点が分かりましたね!

では続いて「国語・数学・英語」の3教科の平均点を出してみましょう

3つの教科の平均点だから、こう書けばいいんだ!

df_english = df['english']
df_english.mean()
df_japanese = df['japanese']
df_japanese.mean()
df_math = df['math']
df_math.mean()

もちろんこのコードでも正解です!

ただ今回は3教科まとめて出してみましょうか!?

,カンマで並べて書いてみてください

df_testという変数を作って、3つを,カンマで並べてみました!

あれ、でもエラーが出たぞ・・・!?

Pythonのエラー

複数のカラムを抽出する場合はDataFrameの方になるので、[]角括弧を二つ並べましょう

df_test = df[['english','japanese','math']]
df_test.mean()

そうか、複数のカラムの場合[[ ]]こうやって書くんですね!覚えておきます

Pythonの複数項目の平均

3つのテストの平均点が出ましたね!

英語が一番高くて、数学が一番低いです!

私も数学は苦手だったな・・・

項目”ごと”に平均点を出してみる

今までは単純にテストの点数の平均を出しましたが、より分析っぽくするために項目に分けて平均を出してみましょう

項目ごとってことは「部活」とか「性別」ごとの平均ってことですね!

確かに運動部は勉強が苦手ってイメージがあったりしますw

項目ごとに集計(平均や合計)するにはgroupby(グループバイ)を使います

平均のように.ピリオドと( )括弧を記述し、( )括弧の中に分けたい項目を入れましょう

できました!でも何も出てこなかったです・・・

Pandasのgroupby

groupbyはあくまでもまとめるだけ!

後ろに続けてmeanを付けてあげてください

Pythonのgroupbyの使い方イメージ

groupbymeanを続けて書けるんですか!?

df.groupby('club').mean()
Pythonのgroupbyと平均

確かに平均は出ましたが、生徒番号やクラスなども平均が出ました!

groupbymeanを組み合わせると、数値型のデータ全てで平均が算出されます

[[ ]]を後ろに付けると、カラム(列)を限定することができますよ

おおーうまく出ました!

Pythonのgroupbyと平均

ちなみにこの書き方だとエラーが出たんですが・・・?

Pythonのgroupbyのエラー

Pythonでは一つのコードが左から順番に適応されるんです

つまり最初のdf[[‘japanese’,’math’,’english’]]で、3つのカラムに限定しているので、後ろのgroupbyで指定しているclubが見つからないエラーが出てるんですよ

なるほど!だから最後でカラム(列)を指定しているんですね

メソッドの使い方のコツ

groupbyなどのメソッドと呼ばれる機能は、変数に続けて書くことでデータを思いのままに変形することができます

様々なメソッドが登場するので、使い方を覚えましょう!

Excelの関数みたいなやつですか?

そう!そのイメージ!ポイントは4つです

  • 変数の後ろに続けて記述する
  • .ピリオドで始める
  • ()括弧を後ろに付ける
  • パラメータ(引数)を指定する

パラメータ?引数?初めて聞きました・・・

パラメータは詳細設定みたいなイメージかな・・?

必須で設定しないといけないものと、任意で設定するものがあります!

うーん、分かったような・・分からないような・・

今後、また教えていきますね!

やった、ありがとうございます!

まとめ

  • [ ]でカラム(列)を指定して、データを限定する
  • meanで平均が出る
  • groupbyで項目ごとに分析ができる

コメントを残す

メールアドレスが公開されることはありません。