[Python] numpyを使ってCSVファイルを読み込む方法
Pythonのライブラリであるnumpyは、数値計算を効率的に行うための強力なツールです。
CSVファイルを読み込む際には、numpyの関数であるnumpy.genfromtxt()
やnumpy.loadtxt()
を使用することができます。
これらの関数は、CSVファイルからデータを配列として読み込み、数値データの解析や操作を容易にします。
特にnumpy.genfromtxt()
は、欠損値の処理やデータ型の指定が可能で、柔軟なデータ読み込みをサポートします。
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' '学生']]
このように、genfromtxt
とloadtxt
の両方を使って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.csv
とdata2.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.csv
とdata2.csv
のデータが結合された結果が表示されます。
これらの応用例を通じて、CSVファイルから読み込んだデータをフィルタリングしたり、視覚化したり、複数のファイルを結合したりする方法を学ぶことができます。
NumPyとmatplotlibを組み合わせることで、データ分析の幅が広がります。
まとめ
この記事では、NumPyを使ってCSVファイルを読み込む方法や、データの操作、応用例について詳しく解説しました。
特に、genfromtxt
とloadtxt
の使い分けや、データのフィルタリング、視覚化の方法を学ぶことができました。
これを機に、実際のデータ分析にNumPyを活用してみてください。