[Python] numpyを使ってCSVファイルを読み込む方法

Pythonのライブラリであるnumpyは、数値計算を効率的に行うための強力なツールです。

CSVファイルを読み込む際には、numpyの関数であるnumpy.genfromtxt()numpy.loadtxt()を使用することができます。

これらの関数は、CSVファイルからデータを配列として読み込み、数値データの解析や操作を容易にします。

特にnumpy.genfromtxt()は、欠損値の処理やデータ型の指定が可能で、柔軟なデータ読み込みをサポートします。

この記事でわかること
  • NumPyのgenfromtxtloadtxtを使ったCSVファイルの読み込み方法
  • 読み込んだデータの基本操作やスライシング
  • データの統計量(平均値や標準偏差)の計算方法
  • データのフィルタリングや視覚化(matplotlibを使用)
  • 複数のCSVファイルを結合する方法

目次から探す

numpyを使ってCSVファイルを読み込む方法

numpyのgenfromtxt関数

genfromtxt関数の基本的な使い方

genfromtxt関数は、CSVファイルを読み込むための非常に便利な関数です。

基本的な使い方は以下の通りです。

import numpy as np
data = np.genfromtxt('data.csv', delimiter=',')
print(data)

このコードでは、data.csvというCSVファイルをカンマ区切りで読み込み、dataという変数に格納しています。

最後に、読み込んだデータを表示します。

genfromtxt関数のオプション引数

genfromtxt関数には、いくつかのオプション引数があります。

主なものを以下の表にまとめました。

スクロールできます
引数名説明
delimiterデータの区切り文字(デフォルトは空白)
dtype読み込むデータの型
skip_headerヘッダー行をスキップする行数
missing_values欠損値として扱う値

これらの引数を使うことで、より柔軟にデータを読み込むことができます。

numpyのloadtxt関数

loadtxt関数の基本的な使い方

loadtxt関数もCSVファイルを読み込むための関数ですが、genfromtxtよりもシンプルな構文です。

基本的な使い方は以下の通りです。

import numpy as np
data = np.loadtxt('data.csv', delimiter=',')
print(data)

このコードも、data.csvというCSVファイルをカンマ区切りで読み込み、dataという変数に格納しています。

loadtxt関数のオプション引数

loadtxt関数にもいくつかのオプション引数があります。

主なものを以下の表にまとめました。

スクロールできます
引数名説明
delimiterデータの区切り文字(デフォルトは空白)
dtype読み込むデータの型
skiprowsスキップする行数
usecols読み込む列のインデックス

これらの引数を使用することで、特定の列や行を選択してデータを読み込むことができます。

実際のCSVファイルを読み込む例

サンプルCSVファイルの準備

まず、サンプルとして使用するCSVファイルを作成します。

以下の内容を持つdata.csvというファイルを用意してください。

名前,年齢,職業
田中,28,エンジニア
佐藤,34,デザイナー
鈴木,22,学生

このCSVファイルは、3つの列(名前、年齢、職業)を持ち、各行にはそれぞれのデータが含まれています。

genfromtxt関数を使った読み込み例

次に、genfromtxt関数を使ってこのCSVファイルを読み込む例を示します。

import numpy as np
data = np.genfromtxt('data.csv', delimiter=',', dtype=None, encoding='utf-8', skip_header=1)
print(data)

このコードでは、data.csvをカンマ区切りで読み込み、ヘッダー行をスキップしています。

dtype=Noneを指定することで、各列のデータ型を自動的に推測します。

実行結果は以下のようになります。

[(b'田中', 28, b'エンジニア') (b'佐藤', 34, b'デザイナー') (b'鈴木', 22, b'学生')]

loadtxt関数を使った読み込み例

次に、loadtxt関数を使って同じCSVファイルを読み込む例を示します。

import numpy as np
data = np.loadtxt('data.csv', delimiter=',', dtype=str, skiprows=1)
print(data)

このコードでは、data.csvをカンマ区切りで読み込み、ヘッダー行をスキップしています。

dtype=strを指定することで、すべてのデータを文字列として読み込みます。

実行結果は以下のようになります。

[['田中' '28' 'エンジニア']
 ['佐藤' '34' 'デザイナー']
 ['鈴木' '22' '学生']]

このように、genfromtxtloadtxtの両方を使ってCSVファイルを読み込むことができますが、データの型や扱い方に違いがあります。

用途に応じて使い分けましょう。

読み込んだデータの操作

データの基本操作

データの表示

読み込んだデータを表示するには、print関数を使います。

例えば、前の例で読み込んだデータを表示する場合は以下のようにします。

import numpy as np
data = np.genfromtxt('data.csv', delimiter=',', dtype=None, encoding='utf-8', skip_header=1)
print(data)

このコードを実行すると、データがタプルの形式で表示されます。

データのスライシング

NumPy配列では、スライシングを使って特定の行や列を選択することができます。

例えば、年齢のデータだけを取得する場合は以下のようにします。

ages = data['f1']  # 'f1'は年齢の列を指します
print(ages)

このコードを実行すると、年齢のデータが表示されます。

データの統計量計算

平均値の計算

年齢の平均値を計算するには、NumPyのmean関数を使用します。

以下のように記述します。

mean_age = np.mean(ages.astype(int))  # 年齢を整数型に変換してから計算
print("平均年齢:", mean_age)

このコードを実行すると、平均年齢が表示されます。

標準偏差の計算

年齢の標準偏差を計算するには、NumPyのstd関数を使用します。

以下のように記述します。

std_age = np.std(ages.astype(int))  # 年齢を整数型に変換してから計算
print("年齢の標準偏差:", std_age)

このコードを実行すると、年齢の標準偏差が表示されます。

これらの操作を通じて、読み込んだデータに対して基本的な操作や統計量の計算を行うことができます。

NumPyを使うことで、データの分析が非常に効率的に行えます。

応用例

CSVファイルのデータをフィルタリング

CSVファイルから読み込んだデータをフィルタリングすることで、特定の条件に合ったデータを抽出できます。

例えば、年齢が30歳以上の人をフィルタリングする場合は以下のようにします。

import numpy as np
data = np.genfromtxt('data.csv', delimiter=',', dtype=None, encoding='utf-8', skip_header=1)
filtered_data = data[data['f1'] >= 30]  # 年齢が30歳以上のデータを抽出
print(filtered_data)

このコードを実行すると、年齢が30歳以上の人のデータが表示されます。

CSVファイルのデータをプロット

matplotlibを使ったプロット方法

データを視覚化するために、matplotlibライブラリを使用します。

以下の例では、年齢の分布を棒グラフで表示します。

import numpy as np
import matplotlib.pyplot as plt
data = np.genfromtxt('data.csv', delimiter=',', dtype=None, encoding='utf-8', skip_header=1)
ages = data['f1'].astype(int)  # 年齢を整数型に変換
plt.hist(ages, bins=5, edgecolor='black')  # 年齢のヒストグラムを作成
plt.title('年齢の分布')
plt.xlabel('年齢')
plt.ylabel('人数')
plt.show()

このコードを実行すると、年齢の分布を示すヒストグラムが表示されます。

複数のCSVファイルを読み込んで結合

複数のCSVファイルを読み込んで結合することも可能です。

例えば、data1.csvdata2.csvという2つのファイルを結合する場合は以下のようにします。

import numpy as np
data1 = np.genfromtxt('data1.csv', delimiter=',', dtype=None, encoding='utf-8', skip_header=1)
data2 = np.genfromtxt('data2.csv', delimiter=',', dtype=None, encoding='utf-8', skip_header=1)
combined_data = np.concatenate((data1, data2))  # データを結合
print(combined_data)

このコードを実行すると、data1.csvdata2.csvのデータが結合された結果が表示されます。

これらの応用例を通じて、CSVファイルから読み込んだデータをフィルタリングしたり、視覚化したり、複数のファイルを結合したりする方法を学ぶことができます。

NumPyとmatplotlibを組み合わせることで、データ分析の幅が広がります。

よくある質問

genfromtxtとloadtxtの違いは何ですか?

genfromtxtloadtxtはどちらもCSVファイルを読み込むための関数ですが、主な違いはデータの型の扱いと欠損値の処理です。

genfromtxtは欠損値を自動的に処理でき、異なるデータ型を持つ列を読み込むことができます。

一方、loadtxtはすべてのデータを同じ型で読み込むため、データ型が統一されている場合に適しています。

読み込んだデータに欠損値がある場合の対処法は?

読み込んだデータに欠損値がある場合、genfromtxtを使用することで、missing_values引数を指定して欠損値を自動的に処理できます。

例えば、missing_values='NA'と指定することで、’NA’という文字列を欠損値として扱うことができます。

また、読み込んだ後にNumPyのnp.nanを使って欠損値を処理することも可能です。

大きなCSVファイルを効率的に読み込む方法は?

大きなCSVファイルを効率的に読み込むためには、chunksize引数を使用してデータを分割して読み込む方法があります。

これにより、メモリの使用量を抑えつつ、必要なデータを段階的に処理できます。

また、pandasライブラリを使用することで、より効率的に大きなデータセットを扱うことができます。

まとめ

この記事では、NumPyを使ってCSVファイルを読み込む方法や、データの操作、応用例について詳しく解説しました。

特に、genfromtxtloadtxtの使い分けや、データのフィルタリング、視覚化の方法を学ぶことができました。

これを機に、実際のデータ分析にNumPyを活用してみてください。

当サイトはリンクフリーです。出典元を明記していただければ、ご自由に引用していただいて構いません。

関連カテゴリーから探す

  • ファイル (70)
  • 標準入出力 (10)
  • URLをコピーしました!
目次から探す