にほんブログ村 IT技術ブログへ
にほんブログ村

Linux ブログランキングへ

2018年06月25日

初めての #機械学習 勉強編 Python & Scikit-learn ExcelのCSVファイル読み込みのエンコード問題 その3


一通り市販の教科書を読むとscikit-learnの
サンプルプログラムでとりあえず機械学習出来るようになります。
あっさりと。ね。
ではExcelからマイCSVファイルをPythonに読み込ませようと・・・
フォントエンコードエラーが出ます。
Excelの仕様です。
ググれば沢山のブログ記事にあたって教えてもらえます。
誰もが最初にぶつかる壁なのでブログに残しておきます。

●Excelのエンコード問題
機械学習ではCSVファイルが良いよ、なんてよく言われますが
実際にエクセルのマイCSVファイルを読み込ませようと本を読むと
何故かまともな記載は殆どありません。
さらっと流してある程度です。不思議です。
PythonでエクセルCSVを読み込ませようとするとエラーが出ます。
「UnicodeDecodeError: 'utf-8' codec can't decode byte 0x83 in position 0: invalid start byte」
実はExcel側にこんな問題が・・・

・Excel2010と2013にはエンコードを指定して保存する機能がない
・UTF-8とShift-JIS、CP932の複数のエンコードがエクセルCSVファイルに混在する
・Byte Order Markファイルが入ってUTF-8などが見えない所に残ってしまう。

などがあり、単純にCSVと言ってもエクセルの仕様で
Pandasのエンコードエラーが多発します。
つまりPandasでエンコード指定しても別のエンコードエラーが出るというw
解決法としては、

・xlsxファイルを直接Pythonに読み込む
・Pandasじゃなくてcsv.reader(CSVファイル)を使う(文字化けする)
・一旦メモ帳などテキストエディタで開いてエンコード指定して保存w

が考えられます。
文字化けしたら修正するかエンコードします。
そうすればPandasでも読み込み出来るはずです。
実はこんなやりとりもw


Excel で UTF‐8 の CSV を作成したい


 手元の PC で確認したところ、Excel 2010、2013 で [名前を付けて保存] >
 [ファイルの種類 : CSV (カンマ区切り) (*.csv)] で保存する時に、
 文字コードを選択することは出来ないようです。

 そのため、Excel の通常の操作だけで、文字コードが UTF-8 の
 CSV ファイルを作成するのは難しいかもしれません。

 Windows XP のメモ帳で [名前を付けて保存] で、ファイルを保存する時に
 文字コードを選択することが出来ます。

ちょ、ちょっと。
MSサポートさんマジですか!?
と思ってしまいました。冗談じゃなく本当の記事です。

●単純に読み込むには
import csvしてcsv.reader()を使います。
こちらとか参考に。


PythonでCSVファイルを読み書きする方法


import csv

csvfile = 'csv1.csv'
f = open(csvfile, "r")
reader = csv.reader(f)
# header = next(reader)

for row in reader:
print row[1]

などなどでしょうか・・・
でも一部フォントが文字化けしますw
文字化けしたらエンコードを変換して修正しましょう。
そうすればPandasでも読める様になります。
教科書を読むと大抵pandasを使いたいですが・・・


●まとめ
色々なサイトにこの手の記事は沢山あるので
是非一通り読んでみましょう。
大抵似たような問題に当たっています。
エクセルとPandasの問題ですが、驚きます。
こんなの基本だよ、とは言わないで・・・勉強中です・・・
まずはエラーが出た際に落ち着いてググってみましょう。
ヤバイな。
posted by kapper at 20:53 | Comment(0) | 機械学習
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

にほんブログ村 IT技術ブログへ
にほんブログ村

Linux ブログランキングへ