0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

7.Pythonのデータサイエンス入門を学ぼう

Last updated at Posted at 2025-04-14

プロローグ

ジャービス:「やあ、クルミくん。今日はデータサイエンスについて教えていこうと思うんだが...」

クルミ:「えっマジ!?データサイエンスって、なんかめっちゃ難しそうじゃない?あたし、正直数学とかプログラミングとか超ニガテなんだけど...」

ジャービス:「心配いらない。実際のデータを使って、一つ一つ丁寧に説明していこう。今日は地球温暖化の原因となるCO2(二酸化炭素)のデータを分析していくんだ。」

クルミ:「えー、マジ?地球温暖化やばくない?あたしたちの未来どうなっちゃうの?」

ジャービス:「その気持ち、とても大切だ。だからこそ、データを見て実際に何が起きているのか理解することが重要なんだよ。」

image.png

1. 必要なツールを準備しよう!

ジャービス:「まずは分析に必要なツールをインポートするよ。」

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt

クルミ:「えっと、これって何するやつ?全部英語でわかんない...」

ジャービス:「簡単に説明すると:

  • pandas: データを表にまとめて整理するツール
  • numpy: 計算を楽にしてくれるツール
  • matplotlib: グラフを描くためのツール
    だよ。」

クルミ:「なるほど!パンダって可愛い名前!これならなんか親しみやすい!」

2 🌍 今回使うデータについて

ジャービス:「今日使うのは、ハワイのマウナロア天文台で測定された大気中のCO2濃度データだよ。」

クルミ:「ハワイ!?いいなー!でも天文台でなんでCO2測ってるの?」

ジャービス:「マウナロア山は標高が高く、地域の影響を受けにくいんだ。だから地球全体のCO2濃度を測るのに最適なんだよ。」

📁 データの読み込み

# データのダウンロード
!wget https://scrippsco2.ucsd.edu/assets/data/atmospheric/stations/in_situ_co2/monthly/monthly_in_situ_co2_mlo.csv

ジャービス: 「最初にデータを確認しましょう」

# 最初の100行を確認
with open("monthly_in_situ_co2_mlo.csv") as file:
    for i in range(100):
        line = file.readline()
        print(f"{i+1}: {line}")

image.png

クルミ : 「データの前に英語文章が入っているんだ。それがあったら普通なPandasの.read_csvで使わないと気がする」

ジャービス:「その通りです。上記のprint()から61 列からデータが始まり、あそこまでにスキップすればいいです。実はpd.read_csvではskiprowsという列をスキップする変数があるんですよ」

df = pd.read_csv("monthly_in_situ_co2_mlo.csv", skiprows=61)

クルミ:「えっ待って!なんで61行スキップしてんの?超気になる~!」

ジャービス:「いい質問だね。実際のデータの前に説明文があるんだ。確認してみよう。」

df.head()

image.png

ジャービス:「問題を見ますね? 列のヘッダーは必の列ではなて、三つの列に占めています。」

クルミ:「えええ どうしょう」

ジャービス : 「簡単さ、PandasのDFの.key()のモジュールを利用して、ヘッダーを直しましょう。そして、ヘッダーでは繰り返した情報があるので最初の6つのヘッダーだけ使いましょう。」

header = df.keys().tolist()
print(header)
#['  Yr', ' Mn', '    Date', '      Date', '     CO2', 'seasonally', '        fit', '  seasonally', '      CO2', ' seasonally', ' Sta']
cleaned_header = [ col.strip() for col in header]
print(cleaned_header)
#['Yr', 'Mn', 'Date', 'Date', 'CO2', 'seasonally', 'fit', 'seasonally', 'CO2', 'seasonally', 'Sta']
cleaned_header[2]="Date Excel"
print(cleaned_header[:6])
# ['Yr', 'Mn', 'Date Excel', 'Date', 'CO2', 'seasonally']

ジャービス: 「」

df = pd.read_csv("monthly_in_situ_co2_mlo.csv",skiprows=64,names=cleaned_header[:6],usecols=cleaned_header[:6])
df.head()

image.png

3 🔍 データを理解しよう

📑 基本的なデータ確認

ジャービス:「では、読み込んだデータを確認していこう。」

# データの最初の5行を表示
print("【データの先頭】")
print(df.head())

# データの基本情報
print("\n【データの基本情報】")
print(df.info())

# 基本統計量
print("\n【基本統計量】")
print(df.describe())

クルミ:「うわっ!なんかいっぱい数字出てきた!」

ジャービス:「一つずつ見ていこう:

  • head():最初の数行を見せてくれる
  • info():データの形や型を教えてくれる
  • describe():平均値や最大値など、重要な数値をまとめてくれる」

🧹 4. データのお掃除タイム!

ジャービス:「その通り!データの欠損値を確認して、きれいにしていこう。」

# 欠損値チェック
df.isnull().sum()
# -99.99を欠損値として処理
df.replace(-99.99, np.nan, inplace=True)

image.png

# 欠損値を削除
df.dropna(inplace=True)

クルミ:「まじ!?データにも掃除が必要なんだ!あたしの部屋みたいね(笑)」

5. グラフを描いてみよう!

クルミ:「ねぇねぇ、グラフとか作れないの?なんかインスタ映えしそう!」

ジャービス:「もちろん!様々なグラフが描けるよ。」

# 基本的な時系列プロット
plt.figure(figsize=(12,6))
plt.plot(df["Date"], df["CO2"])
plt.title("CO2濃度の推移")
plt.xlabel("日付")
plt.ylabel("CO2濃度(PPM)")
plt.grid(True)
plt.show()

image.png
クルミ:「うわ~!右上がりじゃん!これやばくない?」

ジャービス:「その通りだ。CO2濃度は年々上昇している。具体的に計算してみよう。」

# 年平均のCO2濃度を計算
yearly = df.groupby("Yr")["CO2"].mean()
a, b = np.polyfit(yearly.index, yearly.values, 1)

クルミ:「えっと...これは何してるの?」

ジャービス:「簡単に言うと、毎年どのくらいCO2が増えているか計算してるんだ。結果を見てみよう。」

print(f"毎年のCO2増加量: {a:.2f} ppm/年")

クルミ:「まじやばくない?これって私たちの未来に関係あるよね?」

6. 季節ごとの変化を見てみよう!

ジャービス:「CO2濃度って、実は季節によっても変化があるんだ。」

クルミ:「マジで!?なんで?」

ジャービス:「植物が関係しているんだよ。春から夏にかけては植物が活発に光合成をして、CO2を吸収する。逆に秋から冬は...」

クルミ:「あ!植物が枯れちゃうから、CO2吸収されなくなるってこと?なんかスゴイ!季節で見れるの?」

# 月別の箱ひげ図を作成
plt.figure(figsize=(12, 6))
df_clean.boxplot(column="Residual", by="Mn", grid=True)
plt.title("月別のCO2濃度変動♪")
plt.xlabel("")
plt.ylabel("年平均からのズレ (PPM)")
plt.show()

image.png
クルミ:「なになに?この箱みたいなのって何?」

ジャービス:「これは箱ひげ図って言って、データのバラつきを見るのに便利なんだ。箱の中に、データの半分くらいが入ってるんだよ。」

クルミ:「へー!夏の方が数値低くなってるね!まじで植物すごい!」

7. トレンド分析:未来予測!?

クルミ:「ねぇねぇ、このままいくと将来どうなるの?」

ジャービス:「いい質問だね。データから将来の予測もできるんだ。」

# 年平均を計算して、トレンドを見る
yearly = df.groupby("Yr")["CO2"].mean()
future_years = np.arange(1958, 2050)
z = np.polyfit(yearly.index, yearly.values, 1)
p = np.poly1d(z)

plt.figure(figsize=(12,6))
plt.plot(yearly.index, yearly.values, 'o', label='実測値')
plt.plot(future_years, p(future_years), 'r--', label='予測')
plt.title("CO2濃度の未来予測...")
plt.xlabel("")
plt.ylabel("CO2濃度(PPM)")
plt.legend()
plt.grid(True)
plt.show()

image.png

クルミ:「うわ...マジやばくない?このままだと...」

ジャービス:「そうだね。だからこそ、データサイエンスは重要なんだ。数字で見ることで、問題の深刻さが理解できる。」

クルミ:「なんか、データサイエンス勉強して良かった!環境のこととか、前より全然わかるようになった!」

おわりに

ジャービス:「今日は基本的なデータ分析から、環境問題まで幅広く学んだね。」

クルミ:「うん!最初は難しそうって思ったけど、実際にデータ見ながらだと結構わかりやすかった!てか、これ友達にも教えたい!」

ジャービス:「それは素晴らしいね。データサイエンスの力で、世界をより良く理解できる。次回は...」

クルミ:「次回は絶対インスタのデータ分析やろうね!約束だよ!」

ジャービス:「(笑)分かった分かった。でも、その時もちゃんと統計的な考え方を使おうね。」

クルミ:「もちろん!あたし、データサイエンス女子になっちゃった?(笑)」

0
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?