Step 18:NumPyをインストールして使ってみよう

🔢 ステップ18: NumPyをインストールして使ってみよう

データ分析の強力な武器、NumPyを使い始めよう!

ここからはPart 4「NumPy入門」に入ります。Part 3までは、Pythonの基本機能だけで統計計算をしてきました。ここからは、データ分析のプロが使う専用のツールを学んでいきます。

📖 このステップで学ぶこと

・NumPyとは何か、なぜ必要なのか

・NumPyのインポート方法

・配列(array)の作り方

・リストと配列の違い

・配列の基本情報を確認する方法

学習時間の目安: 2〜2.5時間

🎯 1. NumPyとは?

まず、「NumPy」がどんなものかを理解しましょう。

🔰 データ分析に欠かせないライブラリ

NumPy(ナンパイ)は、Pythonで数値計算をするための強力なツールです。「Numerical Python(数値のためのPython)」を短くした名前です。

📌 ライブラリとは?

ライブラリとは、便利な機能をまとめた「道具箱」のようなものです。Pythonの基本機能に加えて、専門的な機能を追加できます。

NumPyは「数値計算専用の道具箱」というイメージです。

📘 なぜNumPyが必要なの?

これまで学んだPythonのリストでも計算はできますが、大量のデータを扱う場合は遅くなります。NumPyを使うと、同じ計算が10倍〜100倍速くなることもあります!

💡 リストとNumPyの違い(例え話)

リスト:電卓で1つずつ計算するイメージ

 → 10個の計算なら問題ないが、100万個は大変

NumPy:スーパーコンピュータでまとめて計算するイメージ

 → 100万個でも一瞬で終わる

📘 NumPyの4つの特徴

🚀 NumPyの特徴

特徴 説明
高速 リストより何十倍も速く計算できる
便利 平均、合計などが1行で計算できる
メモリ効率が良い 大量のデータを少ないメモリで扱える
多機能 統計計算、行列計算など何でもできる

📘 データ分析の「土台」

これから学ぶPandas(データ分析ライブラリ)やMatplotlib(グラフ作成ライブラリ)も、内部でNumPyを使っています。NumPyはデータ分析の「土台」となる、最も基本的なライブラリなのです。

📦 2. NumPyのインストールとインポート

🔰 Google Colabではすでに使える

良いニュースです!Google ColabではNumPyは最初からインストール済みです。何もインストールせずに、すぐに使い始められます。

💡 自分のパソコンで使う場合

もし自分のパソコンでPythonを使っている場合は、以下のコマンドでインストールできます:

pip install numpy

📘 NumPyをインポートする

NumPyを使う前に、インポート(読み込み)する必要があります。「道具箱を開く」ようなイメージです。

📝 書き方:NumPyのインポート

import numpy as np

import numpy

・「numpyライブラリを読み込む」という意味

as np

・「np という短い名前で使えるようにする」という意味

・毎回 numpy と書くのは長いので、np と省略します

コード:NumPyをインポートする

# NumPyをnpという名前でインポート
import numpy as np

# バージョンを確認(正しくインポートできたか確認)
print(f"NumPyのバージョン: {np.__version__}")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

NumPyのバージョン: 1.26.4

💡 コードの解説

np.__version__

・NumPyのバージョン番号を表示します

・__version__(アンダースコア2つで囲む)は特別な属性です

・バージョンが表示されれば、正しくインポートできています

📌 世界共通のルール

import numpy as npは、世界中のデータ分析者の共通ルールです。

誰が書いたコードでも「np」と書いてあればNumPyのことだとわかります。

必ずこの形式で書くようにしましょう!

📊 3. NumPy配列を作ってみよう

NumPyの中心となるのが「配列(array:アレイ)」です。リストに似ていますが、計算に特化したデータ構造です。

🔰 リストから配列を作る

まず、普通のリストからNumPy配列を作る方法を学びましょう。

📝 書き方:配列の作成

np.array(リスト)

np.array()

・リストをNumPy配列に変換する関数

・()の中にリストを入れる

コード:リストから配列を作成

import numpy as np

# 普通のリストを作る
my_list = [1, 2, 3, 4, 5]

# リストからNumPy配列を作る
my_array = np.array(my_list)

# 両方を表示して比較
print(f"リスト: {my_list}")
print(f"配列:   {my_array}")
print(f"型:     {type(my_array)}")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

リスト: [1, 2, 3, 4, 5]
配列:   [1 2 3 4 5]
型:     <class 'numpy.ndarray'>

💡 見た目の違いに注目!

リスト: [1, 2, 3, 4, 5] ← カンマ(,)で区切られている

配列: [1 2 3 4 5] ← スペースで区切られている

この違いで、リストか配列かを見分けられます。

💡 コードの解説

type(my_array)

・変数の「型(種類)」を調べる関数

・numpy.ndarray と表示される → NumPy配列である証拠

ndarray

・「n-dimensional array」の略

・「n次元配列」という意味です

📘 直接配列を作る

変数を使わずに、直接配列を作ることもできます。

コード:いろいろな配列を直接作成

import numpy as np

# 整数の配列
arr_int = np.array([10, 20, 30, 40, 50])
print(f"整数の配列: {arr_int}")

# 小数の配列
arr_float = np.array([1.5, 2.5, 3.5, 4.5])
print(f"小数の配列: {arr_float}")

# 文字列の配列(あまり使わないが可能)
arr_str = np.array(["りんご", "バナナ", "オレンジ"])
print(f"文字列の配列: {arr_str}")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

整数の配列: [10 20 30 40 50]
小数の配列: [1.5 2.5 3.5 4.5]
文字列の配列: ['りんご' 'バナナ' 'オレンジ']

📘 2次元配列を作る

2次元配列は、「表」のようなデータを扱うときに使います。Excelのシートをイメージしてください。

📝 書き方:2次元配列の作成

np.array([[行1], [行2], [行3]])

リストの中にリストを入れることで、行と列を持つ配列を作れます。

コード:2次元配列の作成

import numpy as np

# 2次元配列を作成(3行3列)
arr_2d = np.array([
    [1, 2, 3],    # 1行目
    [4, 5, 6],    # 2行目
    [7, 8, 9]     # 3行目
])

print("2次元配列:")
print(arr_2d)

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

2次元配列:
[[1 2 3]
 [4 5 6]
 [7 8 9]]

💡 2次元配列のイメージ

Excelの表と同じです:

・横方向が「行(row)」

・縦方向が「列(column)」

・今回の例は「3行3列」の配列です

📘 便利な配列の作り方

NumPyには、よく使うパターンの配列を簡単に作れる関数が用意されています。

np.zeros() – ゼロで埋められた配列

コード:ゼロの配列を作成

import numpy as np

# 5個のゼロが入った配列
zeros_arr = np.zeros(5)
print(f"ゼロの配列: {zeros_arr}")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

ゼロの配列: [0. 0. 0. 0. 0.]

💡 なぜ「0.」と表示される?

「0.」は「0.0」の省略形で、小数(float型)を意味します。

np.zeros()はデフォルトで小数の配列を作ります。

np.ones() – 1で埋められた配列

コード:1の配列を作成

import numpy as np

# 5個の1が入った配列
ones_arr = np.ones(5)
print(f"1の配列: {ones_arr}")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

1の配列: [1. 1. 1. 1. 1.]

np.arange() – 連続した数の配列

📝 書き方:np.arange()

np.arange(終了値) → 0から終了値-1まで

np.arange(開始値, 終了値) → 開始値から終了値-1まで

np.arange(開始値, 終了値, 間隔) → 指定した間隔で

コード:連続した数の配列を作成

import numpy as np

# 0から9までの配列
arr1 = np.arange(10)
print(f"0から9まで: {arr1}")

# 5から14までの配列
arr2 = np.arange(5, 15)
print(f"5から14まで: {arr2}")

# 0から20まで2つ飛ばし
arr3 = np.arange(0, 21, 2)
print(f"0から20まで2つ飛ばし: {arr3}")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

0から9まで: [0 1 2 3 4 5 6 7 8 9]
5から14まで: [ 5  6  7  8  9 10 11 12 13 14]
0から20まで2つ飛ばし: [ 0  2  4  6  8 10 12 14 16 18 20]

💡 arangeはrange()のNumPy版

Pythonのrange()と同じように使えますが、結果がNumPy配列になります。

名前も「array + range」を合わせた「arange」です。

np.linspace() – 等間隔に分割した配列

📝 書き方:np.linspace()

np.linspace(開始値, 終了値, 個数)

開始値から終了値までを、指定した個数に等間隔で分割します。

※ arangeと違い、終了値も含まれます

コード:等間隔の配列を作成

import numpy as np

# 0から10までを5個に分割
arr = np.linspace(0, 10, 5)
print(f"0から10を5分割: {arr}")

# 0から100までを11個に分割(10刻み)
arr2 = np.linspace(0, 100, 11)
print(f"0から100を11分割: {arr2}")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

0から10を5分割: [ 0.   2.5  5.   7.5 10. ]
0から100を11分割: [  0.  10.  20.  30.  40.  50.  60.  70.  80.  90. 100.]

📌 配列作成関数のまとめ

関数 用途
np.array() リストから配列を作る np.array([1,2,3])
np.zeros() ゼロで埋めた配列 np.zeros(5)
np.ones() 1で埋めた配列 np.ones(5)
np.arange() 連続した数の配列 np.arange(10)
np.linspace() 等間隔に分割 np.linspace(0,10,5)

🔄 4. NumPy配列とリストの違い

NumPy配列がリストより優れている点を、具体的に見ていきましょう。

🔰 違い1:計算のしやすさ(最大の違い!)

これがNumPyを使う最大の理由です。配列なら、全ての要素に一度に計算できます。

コード:配列とリストの計算の違い

import numpy as np

# リストの場合
my_list = [1, 2, 3, 4, 5]
# my_list * 2 とすると... [1, 2, 3, 4, 5, 1, 2, 3, 4, 5] になる(リストが2回繰り返される)

# 配列の場合
my_array = np.array([1, 2, 3, 4, 5])
result = my_array * 2  # 全ての要素が2倍になる

print(f"元の配列: {my_array}")
print(f"2倍:      {result}")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

元の配列: [1 2 3 4 5]
2倍:      [ 2  4  6  8 10]

💡 この違いは重要!

リスト × 2 → リストが2回繰り返される(連結)

配列 × 2 → 各要素が2倍になる(計算)

データ分析では「各要素に計算」したいことがほとんどなので、NumPyが便利です。

📘 違い2:様々な計算が簡単

四則演算だけでなく、様々な計算が全要素に対して一度にできます。

コード:配列への様々な計算

import numpy as np

arr = np.array([10, 20, 30, 40, 50])

print(f"元の配列: {arr}")
print(f"2倍:      {arr * 2}")
print(f"10を足す: {arr + 10}")
print(f"2で割る:  {arr / 2}")
print(f"2乗:      {arr ** 2}")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

元の配列: [10 20 30 40 50]
2倍:      [ 20  40  60  80 100]
10を足す: [20 30 40 50 60]
2で割る:  [ 5. 10. 15. 20. 25.]
2乗:      [ 100  400  900 1600 2500]

💡 リストで同じことをしようとすると…

リストで全要素を2倍にするには、forループが必要です:

result = [x * 2 for x in my_list]

NumPyなら arr * 2 の1行で済みます!

📘 違い3:配列同士の計算

2つの配列の対応する要素同士を計算できます。

コード:配列同士の計算

import numpy as np

arr1 = np.array([1, 2, 3, 4, 5])
arr2 = np.array([10, 20, 30, 40, 50])

print(f"配列1: {arr1}")
print(f"配列2: {arr2}")
print()

# 対応する要素同士を足し算
result_add = arr1 + arr2
print(f"足し算: {result_add}")

# 対応する要素同士を掛け算
result_mul = arr1 * arr2
print(f"掛け算: {result_mul}")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

配列1: [1 2 3 4 5]
配列2: [10 20 30 40 50]

足し算: [11 22 33 44 55]
掛け算: [ 10  40  90 160 250]

💡 計算の仕組み

足し算の場合:

 1 + 10 = 11、2 + 20 = 22、3 + 30 = 33、…

掛け算の場合:

 1 × 10 = 10、2 × 20 = 40、3 × 30 = 90、…

同じ位置の要素同士が計算されます。

⚠️ リストで同じことをすると…

list1 + list2

→ [1, 2, 3, 4, 5, 10, 20, 30, 40, 50] (連結される)

list1 * list2

→ エラーになる

リストでは配列同士の計算ができません!

📘 違い4:データ型の統一

NumPy配列は、全ての要素が同じ型に統一されます。

コード:データ型の統一

import numpy as np

# リスト:異なる型を混在できる
my_list = [1, 2.5, "文字", True]
print(f"リスト: {my_list}")

# 配列:整数と小数を混ぜると、全て小数になる
my_array = np.array([1, 2.5, 3, 4])
print(f"配列: {my_array}")
print(f"配列のデータ型: {my_array.dtype}")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

リスト: [1, 2.5, '文字', True]
配列: [1.  2.5 3.  4. ]
配列のデータ型: float64

💡 なぜ型が統一されるのか?

全て同じ型に統一されることで:

・計算が高速になる

メモリ効率が良くなる

データ分析では数値データを扱うことがほとんどなので、これは利点です。

📏 5. 配列の基本情報を確認する

NumPy配列には、便利な属性(プロパティ)がいくつかあります。配列の情報を調べるのに使います。

🔰 配列の4つの属性

📌 よく使う4つの属性

属性 意味
shape 形(行数×列数) (3, 4) → 3行4列
ndim 次元数 1 → 1次元、2 → 2次元
size 全要素数 12 → 12個のデータ
dtype データ型 int64 → 整数

💡 属性とメソッドの違い

属性:arr.shape のように () なしで使う → 情報を見るだけ

メソッド:arr.sum() のように () ありで使う → 何か処理をする

📘 1次元配列の情報を確認

コード:1次元配列の属性

import numpy as np

arr = np.array([10, 20, 30, 40, 50])

print(f"配列: {arr}")
print()
print(f"形(shape): {arr.shape}")
print(f"次元数(ndim): {arr.ndim}")
print(f"要素数(size): {arr.size}")
print(f"データ型(dtype): {arr.dtype}")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

配列: [10 20 30 40 50]

形(shape): (5,)
次元数(ndim): 1
要素数(size): 5
データ型(dtype): int64

💡 (5,) の意味

(5,) は「1次元で、要素が5個」という意味です。

カンマがあるのは、Pythonのタプル(変更できないリスト)の書き方です。

(5) だと単なる数字の5になってしまうため、(5,) と書きます。

📘 2次元配列の情報を確認

コード:2次元配列の属性

import numpy as np

# 3行4列の2次元配列
arr_2d = np.array([
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9, 10, 11, 12]
])

print("配列:")
print(arr_2d)
print()
print(f"形(shape): {arr_2d.shape}")
print(f"→ {arr_2d.shape[0]}行 × {arr_2d.shape[1]}列")
print(f"次元数(ndim): {arr_2d.ndim}")
print(f"要素数(size): {arr_2d.size}")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

配列:
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]

形(shape): (3, 4)
→ 3行 × 4列
次元数(ndim): 2
要素数(size): 12

💡 shapeの読み方

shape[0] → 行数(縦の数)

shape[1] → 列数(横の数)

Excelで「3行4列」と言うのと同じ感覚です。

📘 実践例:テストの点数データ

コード:実際のデータで属性を確認

import numpy as np

# 5人の生徒の3科目(国語、数学、英語)の点数
scores = np.array([
    [85, 92, 78],  # 太郎くん
    [90, 88, 95],  # 花子さん
    [78, 85, 82],  # 次郎くん
    [92, 90, 88],  # 美咲さん
    [88, 86, 90]   # 健太くん
])

print("点数データ:")
print(scores)
print()
print(f"データの形: {scores.shape}")
print(f"→ {scores.shape[0]}人の生徒、{scores.shape[1]}科目")
print(f"合計データ数: {scores.size}個")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

点数データ:
[[85 92 78]
 [90 88 95]
 [78 85 82]
 [92 90 88]
 [88 86 90]]

データの形: (5, 3)
→ 5人の生徒、3科目
合計データ数: 15個

🎨 6. 配列の要素にアクセスする

配列の特定の要素を取り出す方法を学びましょう。リストと同じようにインデックスを使います。

🔰 1次元配列のインデックス

📝 書き方:インデックスでアクセス

配列[インデックス]

・インデックスは0から始まる(最初の要素は0番目)

・負のインデックスは後ろから数える(-1が最後)

コード:インデックスで要素を取得

import numpy as np

arr = np.array([10, 20, 30, 40, 50])

print(f"配列: {arr}")
print()
print(f"最初の要素 [0]: {arr[0]}")
print(f"3番目の要素 [2]: {arr[2]}")
print(f"最後の要素 [-1]: {arr[-1]}")
print(f"最後から2番目 [-2]: {arr[-2]}")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

配列: [10 20 30 40 50]

最初の要素 [0]: 10
3番目の要素 [2]: 30
最後の要素 [-1]: 50
最後から2番目 [-2]: 40

📘 スライスで複数要素を取得

スライスを使うと、連続した複数の要素を一度に取得できます。

📝 書き方:スライス

配列[開始:終了] → 開始から終了-1まで

配列[:終了] → 最初から終了-1まで

配列[開始:] → 開始から最後まで

配列[::間隔] → 指定した間隔で取得

コード:スライスで複数要素を取得

import numpy as np

arr = np.array([10, 20, 30, 40, 50, 60, 70, 80, 90, 100])

print(f"配列: {arr}")
print()
print(f"最初の3つ [:3]:    {arr[:3]}")
print(f"3番目から5番目 [2:5]: {arr[2:5]}")
print(f"5番目以降 [4:]:    {arr[4:]}")
print(f"2つ飛ばし [::2]:   {arr[::2]}")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

配列: [ 10  20  30  40  50  60  70  80  90 100]

最初の3つ [:3]:    [10 20 30]
3番目から5番目 [2:5]: [30 40 50]
5番目以降 [4:]:    [ 50  60  70  80  90 100]
2つ飛ばし [::2]:   [ 10  30  50  70  90]

📘 2次元配列のアクセス

2次元配列では、[行, 列]の形式で要素を指定します。

📝 書き方:2次元配列のアクセス

配列[行, 列] → 特定の1つの要素

配列[行] → 行全体(1次元配列として)

配列[:, 列] → 列全体(1次元配列として)

コード:2次元配列の要素にアクセス

import numpy as np

arr_2d = np.array([
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9, 10, 11, 12]
])

print("配列全体:")
print(arr_2d)
print()

# 特定の要素
print(f"1行目、2列目 [0, 1]: {arr_2d[0, 1]}")
print(f"2行目、3列目 [1, 2]: {arr_2d[1, 2]}")
print()

# 行全体
print(f"2行目全体 [1]: {arr_2d[1]}")
print()

# 列全体
print(f"3列目全体 [:, 2]: {arr_2d[:, 2]}")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

配列全体:
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]

1行目、2列目 [0, 1]: 2
2行目、3列目 [1, 2]: 7

2行目全体 [1]: [5 6 7 8]

3列目全体 [:, 2]: [ 3  7 11]

💡 [:, 2] の意味

: は「全部」という意味

[:, 2] は「全ての行の、2列目」という意味

つまり、縦方向に1列分のデータを取り出せます。

📝 練習問題

ここまで学んだことを、実際に手を動かして確認しましょう。

問題1:NumPy配列を作成(初級)

📋 問題

1から10までの整数を含むNumPy配列を作成し、その配列の形(shape)、次元数(ndim)、要素数(size)を表示してください。

解答例を見る

コード

import numpy as np

# 1から10までの配列を作成
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
# または np.arange(1, 11) でも作れる

# 情報を表示
print(f"配列: {arr}")
print(f"形(shape): {arr.shape}")
print(f"次元数(ndim): {arr.ndim}")
print(f"要素数(size): {arr.size}")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

配列: [ 1  2  3  4  5  6  7  8  9 10]
形(shape): (10,)
次元数(ndim): 1
要素数(size): 10

問題2:配列の計算(初級)

📋 問題

[5, 10, 15, 20, 25]という配列を作成し、全ての要素を2倍にした結果と、10を足した結果を表示してください。

解答例を見る

コード

import numpy as np

# 配列を作成
arr = np.array([5, 10, 15, 20, 25])

# 計算
doubled = arr * 2
added = arr + 10

print(f"元の配列: {arr}")
print(f"2倍:      {doubled}")
print(f"10を足す: {added}")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

元の配列: [ 5 10 15 20 25]
2倍:      [10 20 30 40 50]
10を足す: [15 20 25 30 35]

問題3:便利な配列作成関数(中級)

📋 問題

以下の配列を作成してください:

1. 0で埋められた長さ8の配列

2. 1で埋められた長さ6の配列

3. 0から20までの連続した整数の配列

解答例を見る

コード

import numpy as np

# 1. ゼロで埋められた配列
zeros_arr = np.zeros(8)
print(f"ゼロの配列: {zeros_arr}")

# 2. 1で埋められた配列
ones_arr = np.ones(6)
print(f"1の配列: {ones_arr}")

# 3. 0から20までの連続した整数
range_arr = np.arange(21)  # 21を指定すると0-20になる
print(f"0-20の配列: {range_arr}")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

ゼロの配列: [0. 0. 0. 0. 0. 0. 0. 0.]
1の配列: [1. 1. 1. 1. 1. 1.]
0-20の配列: [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20]

問題4:2次元配列の作成と操作(中級)

📋 問題

3行3列の2次元配列を作成し(値は自由)、以下を実行してください:

1. 配列の形(shape)を表示

2. 2行目を表示

3. 2列目を表示

解答例を見る

コード

import numpy as np

# 3行3列の配列を作成
arr_2d = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])

print("配列:")
print(arr_2d)
print()

# 1. 配列の形
print(f"配列の形: {arr_2d.shape}")

# 2. 2行目(インデックス1)
print(f"2行目: {arr_2d[1]}")

# 3. 2列目(インデックス1)
print(f"2列目: {arr_2d[:, 1]}")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

配列:
[[1 2 3]
 [4 5 6]
 [7 8 9]]

配列の形: (3, 3)
2行目: [4 5 6]
2列目: [2 5 8]

問題5:配列同士の計算(上級)

📋 問題

[10, 20, 30, 40, 50]という配列と[5, 15, 25, 35, 45]という配列を作成し、以下を計算してください:

1. 2つの配列の足し算

2. 2つの配列の要素ごとの掛け算

3. 最初の配列の各要素を2乗した結果

解答例を見る

コード

import numpy as np

# 2つの配列を作成
arr1 = np.array([10, 20, 30, 40, 50])
arr2 = np.array([5, 15, 25, 35, 45])

print(f"配列1: {arr1}")
print(f"配列2: {arr2}")
print()

# 1. 足し算
result_add = arr1 + arr2
print(f"足し算: {result_add}")

# 2. 掛け算(要素ごと)
result_mul = arr1 * arr2
print(f"掛け算: {result_mul}")

# 3. 2乗
result_square = arr1 ** 2
print(f"配列1の2乗: {result_square}")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

配列1: [10 20 30 40 50]
配列2: [ 5 15 25 35 45]

足し算: [15 35 55 75 95]
掛け算: [ 50 300 750 1400 2250]
配列1の2乗: [ 100  400  900 1600 2500]

問題6:実践:売上データの計算(上級)

📋 問題

ある店の1週間の売上データ [50000, 62000, 58000, 71000, 65000, 88000, 92000](単位:円)があります。

1. 売上に消費税10%を加えた金額を計算

2. 各日の売上から目標売上60000円との差を計算

3. すべての値を1000で割って「千円単位」で表示

解答例を見る

コード

import numpy as np

# 売上データ(円)
sales = np.array([50000, 62000, 58000, 71000, 65000, 88000, 92000])

print(f"元の売上(円): {sales}")
print()

# 1. 消費税10%を加える(×1.1 する)
sales_with_tax = sales * 1.1
print(f"税込売上(円): {sales_with_tax}")

# 2. 目標60000円との差
target = 60000
diff_from_target = sales - target
print(f"目標との差(円): {diff_from_target}")

# 3. 千円単位で表示(÷1000 する)
sales_in_thousands = sales / 1000
print(f"売上(千円): {sales_in_thousands}")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

元の売上(円): [50000 62000 58000 71000 65000 88000 92000]

税込売上(円): [ 55000.  68200.  63800.  78100.  71500.  96800. 101200.]
目標との差(円): [-10000   2000  -2000  11000   5000  28000  32000]
売上(千円): [50. 62. 58. 71. 65. 88. 92.]

🎯 このステップのまとめ

✅ 学んだこと

NumPyはデータ分析に必須のライブラリ

import numpy as np でインポートするのが標準

np.array() でリストから配列を作成できる

np.zeros(), np.ones(), np.arange(), np.linspace() で便利に配列を作成

✓ 配列はリストより計算が簡単で速い

✓ 配列全体に一度に計算ができる(ブロードキャスト

shape, ndim, size, dtype で配列の情報がわかる

インデックススライスで要素にアクセスできる

💡 次のステップに進む前に確認

以下のことができるようになったか確認しましょう:

□ NumPyをインポートできる

□ np.array()で配列を作成できる

□ 配列全体に計算を適用できる

□ 配列の基本情報(shape, size等)を確認できる

□ インデックスとスライスで要素にアクセスできる

これらができたら、次のステップに進みましょう!

❓ よくある質問

Q1: NumPyはなぜリストより速いのですか?

A: NumPyは内部でC言語を使って実装されており、データがメモリ上に連続して配置されています。また、全て同じ型のデータなので最適化された計算ができます。リストは柔軟ですが、その分遅くなります。

Q2: なぜ「np」という名前を使うのですか?

A: 毎回「numpy」と書くのは長くて面倒なので、npという短い名前(エイリアス)を使うのが世界中の共通ルールになっています。誰が書いても同じ形式なので、コードが読みやすくなります。

Q3: リストとNumPy配列はどう使い分けますか?

A: 数値計算やデータ分析をするときはNumPy配列を使いましょう。異なる型のデータを扱う、要素の追加削除が多い場合はリストが便利です。データ分析では基本的にNumPyを使います。

Q4: 配列の中に異なる型のデータは入れられますか?

A: 入れることはできますが、全て同じ型に変換されます。例えば、整数と文字列を混ぜると全て文字列になります。NumPyは同じ型で統一することで高速な計算を実現しているため、基本的には同じ型のデータだけを入れるようにしましょう。

Q5: float64やint64って何ですか?

A: データ型の詳細な情報です。float64は64ビットの浮動小数点数(小数)、int64は64ビットの整数という意味です。数字が大きいほど、より大きな数や精度の高い数を扱えます。通常は気にしなくて大丈夫です。

📝

学習メモ

Pythonデータ分析入門 - Step 18

📋 過去のメモ一覧
#artnasekai #学習メモ
LINE