目次
おさらい:データを読み取ってみる
今回はさっそくデータを分析していきます!
はい!頑張ります!
では前回のおさらいで、Excelのデータを読み取ってみましょう
Pandasのインポートも忘れずに!
import pandas as pd
df = pd.read_excel('/content/drive/MyDrive/***/student.xlsx')
df.head()
read_excelでExcelのデータを読み取って、変数の「df」に入れるんですよね!できました!
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もあります
これからはExcelのデータを準備するのが大変なので、read_htmlを使っていきます
分かりました!!
さて、今回はどういう作業をするんですか?
Pythonが使えるようになったので、もうデータ分析に入りましょう!
さっそく実践ですね!やった!
では分析のテーマを発表しましょう!
テストの平均点を算出する
平均ですか!?さすがにこれくらいExcelでもできますよ
時間もかかりません・・・
もちろん単純に平均点を出すのは簡単です!せっかくPythonで分析するので、「教科ごと」や「部活ごと」に平均点を出してみましょう!
はい!分かりました!
必要なデータに絞りたい
まず最初に必要なのは、使うデータに絞ること!
テストの平均点データなので「国語・数学・英語」に絞るんですよね!
そう!点数のデータに絞ってみましょう
Pythonでは変数の隣に[ ]を付けて、カラム名(列名)を記述します
英語の点数に絞るにはこうですか??
df[english]
あれあれ!?エラーが出ました・・・
カラム名には‘ ‘シングルクォーテーションを付けましょう!
データが出ました!!
あれ、でも前と雰囲気が違う・・・前は「表」だったのに、今回は「数値」が並んでる!?
df['english']
SeriesとDataFrameの違い!?
良いところに目を付けましたね!これはデータ構造の違いです
1次元のSeries(シリーズ)と、2次元のDataFrame(データフレーム)があります。
しりーず?でーたふれーむ???
難しいことは考えず、複数の列があるDataFrameと、単一の列だけのSeriesと覚えましょう
はい、分かりました!複数のデータフレームと、単一のシリーズ
英語の点数をSeries形式で取り出すことができたので、平均点をさっそく出しましょう
新しい変数「df_english」に英語の点数を格納してください
変数は名前の付いた箱だから、こうですか??
df_english = df['english']
平均を出すmean関数
完璧!英語の点数だけが「df_english」に入りました!
平均を出すためにmean関数を利用しましょう!使い方は最初に.ピリオド・最後に( )を忘れずに
これで合ってますか?
df_english.mean()
おおー!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つを,カンマで並べてみました!
あれ、でもエラーが出たぞ・・・!?
複数のカラムを抽出する場合はDataFrameの方になるので、[]角括弧を二つ並べましょう
df_test = df[['english','japanese','math']]
df_test.mean()
そうか、複数のカラムの場合は[[ ]]こうやって書くんですね!覚えておきます
3つのテストの平均点が出ましたね!
英語が一番高くて、数学が一番低いです!
私も数学は苦手だったな・・・
項目”ごと”に平均点を出してみる
今までは単純にテストの点数の平均を出しましたが、より分析っぽくするために項目に分けて平均を出してみましょう
項目ごとってことは「部活」とか「性別」ごとの平均ってことですね!
確かに運動部は勉強が苦手ってイメージがあったりしますw
項目ごとに集計(平均や合計)するにはgroupby(グループバイ)を使います
平均のように.ピリオドと( )括弧を記述し、( )括弧の中に分けたい項目を入れましょう
できました!でも何も出てこなかったです・・・
groupbyはあくまでもまとめるだけ!
後ろに続けてmeanを付けてあげてください
groupbyとmeanを続けて書けるんですか!?
df.groupby('club').mean()
確かに平均は出ましたが、生徒番号やクラスなども平均が出ました!
groupbyとmeanを組み合わせると、数値型のデータ全てで平均が算出されます
[[ ]]を後ろに付けると、カラム(列)を限定することができますよ
おおーうまく出ました!
ちなみにこの書き方だとエラーが出たんですが・・・?
Pythonでは一つのコードが左から順番に適応されるんです
つまり最初のdf[[‘japanese’,’math’,’english’]]で、3つのカラムに限定しているので、後ろのgroupbyで指定しているclubが見つからないエラーが出てるんですよ
なるほど!だから最後でカラム(列)を指定しているんですね
メソッドの使い方のコツ
groupbyなどのメソッドと呼ばれる機能は、変数に続けて書くことでデータを思いのままに変形することができます
様々なメソッドが登場するので、使い方を覚えましょう!
Excelの関数みたいなやつですか?
そう!そのイメージ!ポイントは4つです
- 変数の後ろに続けて記述する
- .ピリオドで始める
- ()括弧を後ろに付ける
- パラメータ(引数)を指定する
パラメータ?引数?初めて聞きました・・・
パラメータは詳細設定みたいなイメージかな・・?
必須で設定しないといけないものと、任意で設定するものがあります!
うーん、分かったような・・分からないような・・
今後、また教えていきますね!
やった、ありがとうございます!
まとめ
- [ ]でカラム(列)を指定して、データを限定する
- meanで平均が出る
- groupbyで項目ごとに分析ができる