はじめに
この記事では、Pythonのライブラリの一つであるPandasの使い方をオープンデータを利用しながら学んでいく。
今回はcsvファイルを読み込むところまで。
データ解析のときに、二次元リストやnumpyの二次元配列を使うのではなく、データフレームの機能を使いこなせるようになりたい。
この記事は、以下の著作物を改変して利用しています。
あいちの人口(2024年9月1日現在) 愛知県人口動向調査結果 月報、愛知県、クリエイティブ・コモンズ・ライセンス
表示2.1日本(http://creativecommons.org/licenses/by/2.1/jp/)
実行環境
マシン:MacBook Air
チップ:Apple M3
Python:Python3.12.5
pip:pip 24.2
Pandasのインストール
pipを使うだけ
$ pip3 install pandas
データのダウンロード
今回は、愛知県の推計人口データ(csvファイル)を利用する。
https://www.pref.aichi.jp/soshiki/toukei/jinko1new.html
他にも、「オープンデータ」で検索すると、政府や自治体の統計情報が利用できるので、興味をもったものをダウンロードするといいと思う。
ダウンロードしたら、ソースコードと同じディレクトリに移動し、ついでにファイル名も分かりやすいように変更しておく(今回はpopulation.csv)
データを読み込んで表示するプログラム
以下のプログラムは、人口データをデータフレームに読み込み、データフレーム、values、colums、indexを表示するプログラム
import pandas as pd
# csvファイルをデータフレームに読み込む
df = pd.read_csv('population.csv', encoding='shift_jis')
# データフレームの中身を表示
print(df)
print('\n')
print('df.valuesの型:',type(df.values))
print(df.values)
print('\n')
print('df.columsの型:',type(df.columns))
print(df.columns)
print('\n')
print('df.indexの型:',type(df.index))
print(df.index)
注意点
csvファイルを読み込むときに文字コードが間違っているとエラーが発生する。
今回、初めはutf-8で読み込んでいたせいでうまく動かなかった。
実行結果(長いので一部省略)
コード 県 ブロック 郡市 区町村 ... 20240501 20240601 20240701 20240801 20240901
0 23000.0 愛知県 ― ― ― ... 7468102.0 7468844.0 7467278.0 7467704.0 7465512.0
1 23100.0 愛知県 名古屋 名古屋市 ― ... 2328397.0 2329553.0 2329438.0 2330296.0 2330385.0
(省略)
638 23563.0 愛知県 東三河 北設楽郡 豊根村 ... 12.0 12.0 12.0 12.0 12.0
639 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN
[640 rows x 20 columns]
df.valuesの型: <class 'numpy.ndarray'>
[[23000.0 '愛知県' '―' ... 7467278.0 7467704.0 7465512.0]
[23100.0 '愛知県' '名古屋' ... 2329438.0 2330296.0 2330385.0]
(省略)
[23563.0 '愛知県' '東三河' ... 12.0 12.0 12.0]
[nan nan nan ... nan nan nan]]
df.columsの型: <class 'pandas.core.indexes.base.Index'>
Index(['コード', '県', 'ブロック', '郡市', '区町村', '国籍区分', '性別', '年齢区分', '内容', '20231101',
'20231201', '20240101', '20240201', '20240301', '20240401', '20240501',
'20240601', '20240701', '20240801', '20240901'],
dtype='object')
df.indexの型: <class 'pandas.core.indexes.range.RangeIndex'>
RangeIndex(start=0, stop=640, step=1)
valuesがデータ、columsが列ラベル、indexが行ラベルだと考えればよさそう
おわりに
今後はソートや、グラフで可視化ができたらと考えている
次の記事→Pandasで条件を満たす行を抽出する|Python
コメントを残す