Pythonデータ分析入門|初心者向けpandasの基本を解説

python
副業・キャリア入門

Pythonでデータ分析の基礎を身につける方法

小さな分析を1つ、最後までやり切ってみましょう

プログラミング未経験OK 所要時間の目安:30分程度

「データ分析」という言葉はよく聞くけれど、具体的に何をするものなのか実感が湧かない、という方は多いと思います。この記事では、難しい数学の知識は使わずに、Pythonで小さなデータ分析を1つ、最後までやり切る体験をしてもらいます。家計簿の自動集計の記事で使ったpandas・matplotlibの、いわば「次のステップ」にあたる内容です。

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5

データ分析って何をすること?

「データ分析」と聞くと難しそうに感じますが、やっていることはシンプルで、基本的には次の3ステップの繰り返しです。

  1. 集める:分析したい数字やデータをまとめる(CSVファイルなど)
  2. 整理する:平均を出す、グループごとに分けるなど、扱いやすい形にする
  3. 傾向をつかむ:グラフにするなどして、数字の並びだけでは気づきにくい傾向を見つける

特別な数学の知識がなくても、この3ステップは十分に体験できます。まずは手を動かして、小さな分析を1つ最後まで終わらせてみましょう。

MEMO

AI・データ分析の分野は今後も人材需要が拡大していくと言われています。今回学ぶ「集計してグラフにする」という基本操作は、その入口にあたる内容です。

用意するもの

  • Python本体
  • コードを書くためのエディタ(VS Codeなど)
  • pandas(データを表として扱うライブラリ)
  • matplotlib(グラフ作成用ライブラリ)
INFO

Pythonのインストール、コードを書くためのエディタ(VS Code)の準備、コードの書き方・実行方法がまだの方は、先に「Pythonを始める前に:インストールとエディタの準備」を済ませてから、この続きに進んでください。

ターミナルで以下のコマンドを実行し、必要なライブラリをまとめてインストールします。

pip install pandas matplotlib

使うデータを用意する

今回は、クラスの小テストの結果を例に使います。「名前」「教科」「点数」の3列だけのシンプルな形式です。test_scores.csvという名前で、以下のような内容を保存してください。

名前教科点数
Aさん国語78
Aさん算数92
Bさん国語65
Bさん算数70
Cさん国語88
Cさん算数81
MEMO

ここでは小テストの点数を例にしていますが、同じ「名前・カテゴリ・数値」という形式に置き換えられるデータであれば、アンケートの満足度や、日々の運動記録など、どんなものでも同じ手順で分析できます。

平均・合計・最大最小を求める

まずは、pandasでCSVを読み込み、点数全体の基本的な統計を求めてみます。

import pandas as pd

df = pd.read_csv("test_scores.csv", encoding="utf-8-sig")

print("平均点:", df["点数"].mean())
print("合計点:", df["点数"].sum())
print("最高点:", df["点数"].max())
print("最低点:", df["点数"].min())

実行すると、点数列の平均・合計・最高点・最低点が表示されます。df["点数"]のように列名を指定するだけで、その列全体に対する計算がまとめて行えるのが、pandasの基本的な考え方です。

見本のCSV(6行)で動かすと、平均点79.0・合計点474・最高点92・最低点65と出ました(pandas 3.0.5 で確認)。

MEMO

CSVをExcelで作って「CSV (コンマ区切り)」で保存すると、文字コードがShift_JISになります。そのまま読むとUnicodeDecodeError: 'utf-8' codec can't decode byte ...で止まりました。このエラーが出たら、encoding="utf-8-sig"をencoding="cp932"に変えてください。Excelの保存形式で「CSV UTF-8 (コンマ区切り)」を選んだ場合は、元のままで読めます。

教科ごとに集計する

全体の平均だけでなく、「教科ごと」のように条件を分けて集計したい場合はgroupbyを使います。

subject_mean = df.groupby("教科")["点数"].mean()
print(subject_mean)

実行すると、国語・算数それぞれの平均点が表示されます。「全体の平均」だけを見ていては気づけない、教科ごとの傾向の違いが見えるようになります。

MEMO

手で入力したデータで起こりやすいことを、見本のCSVを1か所ずつ変えて試しました。

  • 点数が1つ空欄:エラーは出ず、空欄を抜いた5人分で計算されます。全体の平均は79.0→80.8、算数は81.0→86.5に変わりました。空欄がいくつあるかはdf["点数"].isna().sum()で数えられます。
  • 点数に「欠席」や全角の「92」が入っている:TypeError: Cannot perform reduction 'mean' with string dtypeで止まります。列が数値ではなく文字列として読まれたためです。df["点数"] = pd.to_numeric(df["点数"].str.normalize("NFKC"), errors="coerce")を読み込みの直後に入れると、全角の数字は数値になり、「欠席」は空欄扱いになります(空欄は上と同じく、計算から抜けます)。
  • 「国語 」のように後ろに空白が入っている:エラーは出ず、国語が2つに分かれて集計されました(71.5点と88.0点)。df["教科"] = df["教科"].str.strip()で前後の空白を取ってから集計してください。

グラフにすると、こうなります

教科別の平均点の棒グラフ。国語77点、算数81点の2本
この記事の見本CSV(6行)をそのまま使って、上のグラフ化のコードを動かした結果です。国語77点、算数81点。全体の平均79点だけを見ていると、この4点の差は見えません。
POINT

groupby("教科")の部分をgroupby("名前")に変えれば、今度は生徒ごとの平均点を求めることもできます。同じ書き方で、見たい切り口を自由に変えられるのがgroupbyの便利なところです。

「名前」で区切ると、こうなります

人ごとの平均点の棒グラフ。Aさん85点、Bさん67.5点、Cさん84.5点の3本
groupby("名前")に変えただけで、この絵になります。Aさん85点、Bさん67.5点、Cさん84.5点。同じデータでも、区切り方を変えると別のことが見えます。

グラフ化して傾向をつかむ

最後に、教科ごとの平均点を棒グラフにして、数字を目で見て理解できるようにします。ここでも他のPython記事と同じく、Tkinterのウィンドウにグラフを表示します。

import tkinter as tk
import matplotlib
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

# グラフの日本語が□□□にならないようにする(Windows標準のフォントを指定)
matplotlib.rcParams["font.family"] = "Meiryo"

fig = Figure(figsize=(6, 4))
ax = fig.add_subplot(111)
subject_mean.plot.bar(ax=ax, color="#3e8f5c")
ax.set_title("教科別の平均点")
ax.set_ylabel("点数")
ax.set_xlabel("教科")
fig.tight_layout()
fig.savefig("subject_mean.png")

root = tk.Tk()
root.title("教科別の平均点")
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.draw()
canvas.get_tk_widget().pack()
root.mainloop()

実行すると、教科ごとの平均点を表す棒グラフのウィンドウが開き、subject_mean.pngとして画像も保存されます。数字だけの一覧表よりも、グラフにしたほうがひと目で傾向をつかみやすいことを実感できるはずです。

ここからどう学びを広げるか

今回学んだ「平均・集計・グラフ化」は、データ分析のほんの入口です。慣れてきたら、次のようなテーマに進むと学びが広がります。

  • 相関分析:2つの数値の間に関係があるかを調べる(例:勉強時間と点数の関係)
  • 欠損値の処理:データの一部が空欄になっている場合の扱い方
  • より大きなデータセットの練習:公開されている練習用データセットで、より実務に近い分析を体験する
  • 機械学習の入門:集計・可視化の先にある、予測・分類といった発展的な分野
MEMO

AI・データ分析関連の求人は増加傾向にあると言われていますが、実際に評価されやすいのは「文法を知っている」ことよりも「実際にデータを触って分析した経験」です。今回のような小さな分析を積み重ねていくことが、遠回りに見えて確実な一歩になります。

うまくいかないときのトラブルシューティング

数学が苦手でもデータ分析はできますか?▼
この記事で扱った平均・合計・最大最小・グループ集計は、算数レベルの内容です。相関分析や機械学習など、より進んだ分野に進むタイミングで少しずつ数学の知識を補っていけば十分です。最初から高度な数学は必要ありません。
Excelでも同じことができるのでは?▼
少量のデータであればExcelでも十分です。ただし、データの量が増えたり、同じ集計を毎回繰り返したりする場合は、コード化して再利用できるPythonのほうが効率的です。また、求人市場ではPythonでのデータ分析スキルが評価されやすい傾向もあります。
この後、具体的に何を学べばいいですか?▼
「ここからどう学びを広げるか」で紹介した、相関分析や欠損値処理から試してみるのがおすすめです。同じpandas・matplotlibの延長線上で学べるため、今回の内容がそのまま土台になります。

まとめ

pandasを使って、平均・合計・最大最小を求める基本操作から、groupbyによるグループ集計、そしてグラフ化までの一連の流れを紹介しました。「小さな分析を1つ最後までやり切る」という今回の体験が、データ分析・AI関連分野への学びを広げていく最初の一歩になれば幸いです。

他の自動化アイデアも見てみる

家計簿の自動集計やファイル整理など、Pythonでできる生活の自動化アイデアを6つ紹介しています。

6テーマ一覧を見る

コメント

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