こんな悩みにお答えします。
>>【Python】位置情報(緯度・経度)を可視化する方法(答えはfoliumライブラリ)
>>【Python】foliumのマーカーアイコンを自由に変更する方法
1. Aidemy
・・・AIエンジニアとしてのスキルを身に付けたい。その延長で就職、転職できたら嬉しい方におすすめ。
2.侍エンジニア塾
・・・基礎力と即戦力を身に付けられる、満足度No.1スクール
3. TechAcademy
・・・副業に向けてスキルアップしたい。フリーランスなどを目指している方向け。
4. AIジョブカレッジ
・・・コスパ良く、質の高い講座を受けたい方におすすめ。
本記事の信頼性
現在はデータサイエンティストとして大企業で活動しています。
1.
近年、データ分析が一般的になりつつあり、コンペ(競技会)をはじめ各企業や団体からもデータを一般公開しているケースが多くみられるようになりました。今後はそのような公開されたデータを利用して、データ分析やアプリ作成を行うことも少なくないと思います。
そこで今回は、データ形式として多く採用されている、ExcelとCSVファイルをPythonで読み込む方法をご紹介します。
ファイルを読み込んだ後にデータを扱うことを考慮して、Pythonの数値計算ライブラリであるPandasのメソッドを利用して読み込みたいと思います。
- pandas.read_excel
- pandas.read_csv
>>pandas.read_excel()公式HP
>>pandas.read_csv()公式HP
a. インストール方法
今回はPandasライブラリを利用するため利用するために複雑な準備は不要です。以下の計3種のライブラリをインストールしましょう。
- メインで扱う①Pandas
- read_excelの内部で利用されている②openpyxlと③xlrd
$ pip install pandas
$ pip install openpyxl
$ pip install xlrd
無事インストールが終わったら、Pythonをたたいてインストールできていることを確認してみましょう。
import pandas
import openpyxl
import xlrd
print(pandas.__version__)
print(openpyxl.__version__)
print(xlrd.__version__)
#実行結果
'1.1.5' #pandas
'3.0.9' #openpyxl
'2.0.1' #xlrd
エラーが出なければ問題なし!これで、foliumを使う準備は万端です!
2. pandas.
まずはExcelファイルの読み込みです。ここではExcelファイルを読み込む際の注意点や頻繁に利用される引数に着目し利用方法を確認していきます。
a. サンプルデータの準備
説明にあたりサンプルデータを準備しておきます。こちらを参考に2つのSheetを持つ”smple.xlsx”を用意しました。
Sheet1
A B C
one 11 12 13
two 21 22 23
three 31 32 33
Sheet2
AA BB CC
ONE 11 12 13
TWO 21 22 23
THREE 31 32 33
import pandas as pd
df = pd.read_excel("sample.xlsx",index_col=0)
print(df)
#実行結果
A B C
one 11 12 13
two 21 22 23
three 31 32 33
引数として外部ファイルを指定することで簡単にpandas形式で読み込むことが可能です。また、index_col=0とすることで最初の列をインデックスとして利用することができます(後述:c. index_col, header)。
そして、複数シートがある場合最初のシートが優先して読み込まれます(後述:e. 複数シートの読み込み)。
c. index_col, header
引数を変更することで読み込み方を自由に変更することができます。
引数 | 概要 | デフォルト |
index_col | インデックス指定 | None |
header | ヘッダー指定 | 0 |
df = pd.read_excel("sample.xlsx",index_col=None,header=0)
print(df)
#実行結果
A B C
0 one 11 12 13
1 two 21 22 23
2 three 31 32 33
df = pd.read_excel("sample.xlsx",index_col=None,header=None)
print(df)
#実行結果
0 1 2 3
0 NaN A B C
1 one 11 12 13
2 two 21 22 23
3 three 31 32 33
先頭行と先頭列はヘッダーとインデックスとして利用することが多いため理解しておくと便利です!
d.usecols, skiprows, skipfooter
また、読み込む段階で必要な列や行のみを抽出することも可能です(あまり利用する機会はないと思いますが)。
引数 | 概要 | デフォルト |
usecols | 読み込む列(列番号)を指定 | None |
skiprows | 読み込まない行(行番号)を指定 | None |
skipfooter | 読み込まない末尾の行(行数)を指定 | 0 |
df = pd.read_excel("sample.xlsx",usecols=[0,2,3],skiprows=[1],skipfooter=1) print(df) #実行結果 B C two 22 23
全てのデータを読み込んだ上でpandas上で行や列の削除を行っても結果は同じ。ただデータサイズが大きくなると読み込みに時間がかかったり後の処理が重くなったりするため注意が必要です。
今回のようにファイルを読み込む段階で必要な部分のみを抽出することができるという引き出しだけ持っておくと良いでしょう。
e. 複数シートの読み込み
シートが複数存在する場合、どのシートを読み込むのかそれとも全てのシートを読み込むのかを選択することができます。デフォルトでは0でありシート番号0、つまり最初のシートが読み込まれることになります。
引数 | 概要 | デフォルト |
sheetname | 読み込むシートを指定 | 0 |
import pandas as pd
#シート番号で指定した場合
df = pd.read_excel("sample.xlsx",index_col=0,sheetname=0)
print(df)
#実行結果
A B C
one 11 12 13
two 21 22 23
three 31 32 33
#シート名で指定した場合
df = pd.read_excel("sample.xlsx",index_col=0,sheetname="Sheet2")
print(df)
#実行結果
AA BB CC
ONE 11 12 13
TWO 21 22 23
THREE 31 32 33
また、複数のシートを一度に読み込むことも可能で、辞書型として読み込まれます。
import pandas as pd #複数のシートを一度に読み込む場合 df = pd.read_excel("sample.xlsx",index_col=0,sheetname=[0,1]) print(df[0]) print(df[1]) #実行結果 A B C one 11 12 13 two 21 22 23 three 31 32 33 AA BB CC ONE 11 12 13 TWO 21 22 23 THREE 31 32 33
最後に、シートを指定することなく全てのシートを読み込む場合にはsheetname=Noneとしましょう。この場合、キーはシート名になることに注意!
import pandas as pd
#複数のシートを一度に読み込む場合
df = pd.read_excel("sample.xlsx",index_col=0,sheetname=None)
print(df["Sheet1"])
print(df["Sheet2"])
#実行結果
A B C
one 11 12 13
two 21 22 23
three 31 32 33
AA BB CC
ONE 11 12 13
TWO 21 22 23
THREE 31 32 33
3. pandas.
次にCSVファイルの読み込みです。read_csv()メソッドの利用方法は引数含めread_excel()とほぼ同様のため省略し、利用頻度が高いものを中心に表にまとめます。
引数 | 概要 | デフォルト |
インデックス指定 | None | |
header | ヘッダー指定 | 0 |
読み込む列(列番号)を指定 | None | |
読み込まない行(行番号)を指定 | None | |
読み込まない末尾の行(行数)を指定 | 0 | |
読み込む行数を指定 | None | |
データ型を指定(int, strなど) | None | |
エンコーディングを指定(shift_jisなど) | None |
詳細は色々なサイトにまとまっているためそちらを参考にしてみてください。おすすめはこちら。
4.
ここでは実際にread_xlsxを利用して外部ファイルの読み込みを実施し、Pythonライブラリであるfoliumで可視化まで行ってみます。
a. 自作データの作成
今回は位置情報を表すデータを用意しました。
カラム | データ型 | 概要 |
name | str | 氏名 |
lat | float | 緯度 |
lon | float | 経度 |
作成したデータは以下のとおりです(sample_1.xlsx)。
name lat lon
fushiguro 35.662951 139.702690
gojo 35.660126 139.697719
少年ジャンプに掲載されている「呪術廻戦」より、2名の方にご協力いただこうと思います。
b. データ読み込み
それではデータを読み込んでいきましょう。今回のデータではカラムのインデックスは不要としています。
import pandas as pd
#ヘッダーは考慮するが、インデックスは作成しないように読み込み
df = pd.read_excel("sample_1.xlsx", header=0, index_col=None,engine='openpyxl')
print(df)
#実行結果
name lat lon
0 fushiguro 35.662951 139.702690
1 gojo 35.660126 139.697719
c. データの可視化
今回は位置情報に関するデータであったため、以下の内容を参考に地図上に可視化を行ってみます。
サンプルコードはこちらです。
import folium
from folium.features import CustomIcon
#地図上にマーカーを配置する関数
def character_view(map,img_name,icon_latlon,popup):
icon = get_image(img_name)
folium.Marker(location = icon_latlon,icon = icon,popup=popup).add_to(map)
#アイコンを作成する関数
def get_image(img_name):
icon = CustomIcon(
icon_image = img_name
,icon_size = (55, 65)
,icon_anchor = (30, 30)
,popup_anchor = (3, 3)
)
return icon
#ベースとなる地図を作成
map = folium.Map([35.658034, 139.701636], tiles="Stamen Terrain", zoom_start=16)
#マーカーをプロット
for i in range(len(df)):
img_name = "./pic/" + str(df[i:i+1]["name"].values[0]) + ".png"
icon_latlon = df[i:i+1][["lat","lon"]].values.reshape(-1).tolist()
popup =forcus_data[i:i+1]["name"].values[0]
character_view(map,img_name,icon_latlon,popup):
#地図を保存
map_file = "map_1.html"
map.save(map_file)
作成された結果はこちらです。確かに地図上に2名の方が配置されていることが確認できます。
CSVでも同じ要領で実施することができます。あなたも是非試してみてください!
5.
今回は、
しました。後続処理を考慮すると、外部ファイルの読み込みにPandasのメソッドであるpandas.read_excel()やpandas.read_csv()を用いることは最適解になり得ると思います。
プログラミングが身近になりつつある現代において、外部ファイルを扱う機会は多く出てくるでしょう。大量のデータや大量のファイルを扱う際に手作業で実施するわけにもいきません。
これからを生きるための一つのスキルとして身に付けておくと良いのではないでしょうか。
・【株式投資】Pythonでスクリーニングする方法
・【Python】【株式投資】TA-Libによるテクニカル指標算出方法(移動平均、ボリンジャーバンド、MACD、RSI)
・【初心者向け】20分でできる!Pythonで銘柄スクリーニング結果をスマホへ通知する方法
・【Python】銘柄スクリーニング結果を定期的に通知する方法(無料)【30分でできる!】
本ブログでは、株式やプログラミングに関する記事を投稿しています。
プログラミング(Python)を学びたい方におすすめの書籍やプログラミングスクール、おすすめの学習方法などをご紹介しておりますのでぜひご覧ください。
は、プログラミングスクールという方法がおすすめです。
私の一押しは『TechAcademy』です。
質問することですぐに分からないところをクリアにできますし、進捗をサポートしてくれるため確実に成長することができます。
無料相談を実施しているため、まずは話を聞いてあなたのスタイルに合っているかどうか確認してみるのが良いと思います。
コメント