SoftwareDesign 2020年2月号 テキスト処理の始め方 5章 躓いたところメモ

(超初心者向け) SoftwareDesigneの上記特集を試していて、躓いたところのメモ。

雑誌の特集記事になので、記事の頭からやっていけばきちんとできるようになっている。 それでも紙面の都合等で説明が足りなかったり、記事掲載時とは状況が変わったり、 初心者にとっては躓くことがある。

初心者=つまり私。永遠の初心者。この二つ名を解消することはいつになるのやら・・・

表題の第5章で躓いたところは以下の2点。

  • ライブラリが足りない
  • Dataframeのデータがキャスト(asftype)できない

ライブラリが足りない

5章ではグラフ等の描画ライブラリであるplotlyを使って人工密度を表示する演習を行う。 5章 1行目のpandasで躓いた。 pandas をimportとあるので pipでpandas をインストールするわけだが、それではまだエラーがでる。 そもそもpandasでurlのリードを使うためにはpandasだけでなく他のライブラリも必要。 インストールする必要がある。

$ pip install lxml html5lib beautifulsoup4

インストール後、記事に従って進めていくと、今度はplotlyを使うところでエラーがでる。 エラー "Mime type rendering requires nbformat>=4.2.0 but it is not installed" 今度は nbformat がないといわれてこちらもインストールする必要がある。

$ pip install nbformat

Anacondaとか入れている人は躓かないのだろうけど。

Dataframeのデータがキャストできない

ライブラリが足りない問題以外に記事記載のソースだとどうもうまく動かなかった。 具体的には以下の部分。人口の表と人口密度の表をくっつけて新たに作った表(Dataframe)は各列のデータがObject形式になっているので数値に変換する部分である。 記事のコードは以下。

int_columns = ["Area", "Population", "Density"]
merged_data[int_columns] = merged_data[int_columns].astype("int32")
merged_data.dtypes

これでやるとエラーになる。 各列を一つずつ試してみると、Densityの列が原因であることがわかる。 object形式からint32への変換なのだから、大丈夫な気がするけどエラーになる。 中身のデータを見ると小数点のあるデータがある。 なので、Density列は 一度floatにして、それをさらにintに変換することで対処できた。

上記対応の後、無事にグラフ化まで確認することができた。

f:id:ignisdios:20210606213246p:plain
人口密度グラフ