はじめに
去年BIの研修を受ける機会を頂きました。研修ではPythonに触れる必要があり、苦労しながらも修了したので、せっかくならPythonも習得したいと思うようになり、学んだことを記事にします。
最近、学ぶ動機は自分軸で考えるべきなのかなって思ってます。
- Pythonってエンジニアが扱うものでしょ?
- オペレーション部門なのにそこまでする?
- 属人化するんじゃないの?
そんな声が聞こえそうで葛藤したこともありましたが、自分はどうしたいのか?
業務であまり使えなかったとしても、内面の声を聞いて学びたいと思うようになりました。
脱線しましたが、最初はCSVファイルの読込です。
今まで使用していたPower QueryのM式と比較してアウトプットしたいと思います。
前提条件
Pandasのモジュールのインストールが必要となります。
もしインストールされていない場合は、以下コマンドで実行が必要です。
pip install pandas
文字コード:Shift_JISのCSV読込
Shift-JISとは日本語向けに作られた文字コードです。
Python Pandasで読込む場合
Pandasのread_csv関数を使います。
引数は相対パスが使えます。
文字コードのパラメータ「encoding="cp932"」とすることでShift-JISが読み込めます。
import pandas as pd
df = pd.read_csv(
r'Data\student_data_shiftjis.csv',
encoding="cp932",
)
print(df.shape)
display(df.head())
Power Queryで読込む場合
File.Contents関数、Csv.Document関数を使います。
Csv.Document関数の引数は以下としています。
- Columnsはnull:列数を自動計算
- Encoding=932:文字コードがShift-JIS
- QuoteStyel=Csv:"..."をCSVの引用符とする
let
ソース = Csv.Document(
File.Contents("C:\Python\データ収集\Data\student_data_shiftjis.csv"),
[Delimiter=",", Columns=null, Encoding=932, QuoteStyle=QuoteStyle.Csv]),
昇格されたヘッダー数 = Table.PromoteHeaders(ソース, [PromoteAllScalars=true])
in
昇格されたヘッダー数
文字コード:UTF-8のCSV読込
UTF-8とは世界中の文字を扱える標準文字コードです。
Python Pandasで読込む場合
同じくPandasのread_csv関数を使います。
文字コードのパラメータ「encoding="utf-8-sig"」とすることでUTF-8が読み込めます。
※encoding="utf-8"ではなく="utf-8-sig"としているのはBOM付、BOM無の両方を読込むためです。
BOM…UTF-8であってもCSVファイルを文字化けせず開くためのもの
import pandas as pd
df = pd.read_csv(
r'Data\StudentScore_UTF-8.csv',
encoding="utf-8-sig",
)
print(df.shape)
display(df.head())
Power Queryで読込む場合
同じくFile.Contents関数、Csv.Document関数を使います。
Csv.Document関数の引数は以下としています。
- Columnsはnull:列数を自動計算
- Encoding=65001:文字コードがUTF-8
- QuoteStyel=Csv:"..."をCSVの引用符とする
let
ソース = Csv.Document(File.Contents("C:\Python\データ収集\Data\StudentScore_UTF-8.csv"),
[Delimiter=",", Columns=null, Encoding=65001, QuoteStyle=QuoteStyle.Csv]),
昇格されたヘッダー数 = Table.PromoteHeaders(ソース, [PromoteAllScalars=true])
in
昇格されたヘッダー数
文字コード:Shift_JISかUTF-8か分からないCSVの場合
Power Queryの場合は読込の際に、自動的に文字コードを認識できますので割愛します。
Pythonの場合は、try文を指定する方法がいいのかなぁと思いました。
UTF-8で読込もうとして文字コードエラーが発生したら、Shift-JISと判断して再読込みします。
import pandas as pd
file_path = r'Data\StudentScore_UTF-8.csv'
try:
df = pd.read_csv(
file_path,
encoding="utf-8-sig",
)
except UnicodeDecodeError:
df = pd.read_csv(
file_path,
encoding="cp932",
)
print(df.shape)
display(df.head())
勉強会のおかげで
Pythonは研修で学んで少し身近になりましたが、非エンジニアにとってインストールして使うには、ハードルが高いと感じておりました。
そんな中、Makinoさん主催のPython勉強会に参加させていただき、Pythonのインストールや、仮想環境の設定、VSCodeの設定など導入に関する内容を学ばせていただきました。
Jupyterの拡張機能やipykernelのインストールも初めて知ったので、一人で試していると大変だったと思います。
本当にありがとうございます(__)
次回の内容
今度はExcelファイルの読込をPython PandasとPower Queryで試して記事にしてみたいと思います。