Jupyter notebook日本語文字化け
キーワード【windows10, Jupyter, conda, 仮想環境, 文字化け】
この件に関する記事は膨大にあるので、何をいまさらという感じかもしれませんが、それらの記事にはあまり載っていなかった初心者ならではの落とし穴についての備忘録です。
大本としては、Jupyter notebookでグラフなどに日本語を表示したいが、文字化けしたことがある人なら「あのことね!」となる件についてです。仮想環境でやろうとすると少しだけ注意点がありました。
最初に結論を書いておくと仮想環境がactivateされている状態で下記コードを実行し、そのディレクトリに対して通常の方法を行えば文字化けは解消されます。
import matplotlib as mpl mpl.__path__
以下は本問題の背景と解決方法の詳細です。
具体的に問題を表すと以下の通りです。
問題: condaの仮想環境下でJupyter notebookの日本語文字化けを解消するにはどうするか。
この問題を定義出来た時点でほぼ解決の道は見えてくるのですが、初心者にとっては数多ある記事を参考にしても解決するのが難しいと感じました。
理由は、多くの記事はPythonをcondaの仮想環境で使用していない前提での問題解決方法であるからです。仮想環境でない場合は以下のフローで解決可能。
1. IPAexGothicのttfファイルを手に入れる
2. Anaconda > Lib > site-packages > matplotlib > mpl-data > fonts に ttfファイルを置く
3. Anaconda > Lib > site-packages > matplotlib > mpl-data にある matplotlibrc に"font.family : IPAexGothic"を1行追加
4. 3で訂正したファイルをC > Users > *** にある .matplotlibディレクトリ内にコピーを配置
これで文字化けは解消できるはず。
ここからは上記でも解決しなかった場合のパターンです。
condaの仮想環境を実行している場合だと、上記の変更は効果がありません。なぜなら、上記ではAnacondaのオリジナルmatplotlibファイル群に対する変更であって、仮想環境として用意したmatplotlibファイル群への変更ではないためです。
それでは仮想環境用のmatplotlibファイル群はどこにあるのかというと、下記コードを実行するとわかります。ちなみに、下記コードは仮想環境上で実行してください。私の場合ではコマンドプロンプトで仮想環境をactivateした上でJupyterを起動している状態で下記コードを実行しています。
import matplotlib as mpl mpl.__path__
これで表示されているディレクトリに対して先に示したのと同様の対処を施せば問題は解決します。
PYthon環境再インストール
PCがクラッシュし、久しぶりにAnnacondaとかを再インストールしたら挙動が以前と違い困ったため、復旧するまでの備忘録を記しておきます。
python: 3.7.9
conda: 4.9.2
pandas: 1.2.1
■conda install が通らない
結論:
設定したがうまくいかず、設定ファイルを作成し、記載内容を空にしたら動作するようになった。
解決のプロセス:
社内ネットワークの関連でプロキシにはじかれているのかと思い、プロキシの設定をする。ネットワーク管理者のレスポンスが悪いため、適当に頻度の高いIPを設定することに。
Anacondaのルートディレクトリにある.condardというファイルにプロキシを書き込めば設定できるそうなのですが、Anacondaをインストールしたてばかりで、Anaconda3のルートディレクトリに.condarcが存在していませんでした。作成し、プロキシの設定値として頻出のIPを設定しましたが結果は同じ。
仕方なく、.condarcの中身を空っぽにしてcondaを実行したら何故かうまくいきました。
もしかして、設定ファイルの存在自体がないための問題だったかもしれません。ただし、PC自体の状態も少しずつアップデートが進んでいたので環境依存の可能性もありますがとりあえず動くから深くは追及せず。
■Pandasの行数表示が変更できない
結論:
最小表示行数をNoneに設定すると最大表示行数が有効になる
解決のプロセス:
以前は下記で変更可能な状態だった。
# Display area pd.set_option('display.max_rows',100)
再インストールしたら、上記設定では合計10行しか表示されない。
設定が反映されていないかと思い、確認したところ、どうやら最大表示数変更出来ている様子。
print(pd.get_option('display.max_rows')) >>100
調べたところ、最小表示設定が影響していそうなので、以下を設定したら表示行数が変更出来た。
pd.set_option('display.min_rows',None)
どうやらmin_rowsの設定値があるとそれで動いてしまうようで、Noneにするとmax_rowsの数字が反映されるようです。
PandasのDataframeにおける変換の罠
Dataframeで日付データをdatetime64のフォーマット処理する際に引っかかったことの備忘録。
エクセルファイルの日付データをPandasに取り込んだ際にdatetime64形式だと便利なので今まで下記で変換していた。
pd.to_datetime(df ,format='%Y-%M-%D %H:%M:%S')
大半の列については処理できたが、いくつかの列で下記エラーが出て処理できなかった。
Reindexing only valid with uniquely valued Index objects
処理できる列と出来ない列を見比べてみると、以下の通り
【処理できる列】
0 2019-10-08 00:00:00 1 2019-10-08 00:00:00 2 2019-10-08 00:00:00 3 2019-10-08 00:00:00 4 2019-10-08 00:00:00 5 2019-10-08 00:00:00 6 2019-10-08 00:00:00 7 2019-10-08 00:00:00 8 2019-10-08 00:00:00 9 2019-10-08 00:00:00 10 2019-10-08 00:00:00 11 2019-10-08 00:00:00 12 2019-10-08 00:00:00 13 2019-10-08 00:00:00 14 2019-10-08 00:00:00 15 2019-10-08 00:00:00 16 2019-10-08 00:00:00 17 2019-10-08 00:00:00 18 None 19 None 20 None 21 None 22 None 23 None 24 None 25 None 26 None 27 2019-10-22 00:00:00 28 2019-10-22 00:00:00 29 2019-10-22 00:00:00
【処理できない列】
0 2019-10-08 00:00:00 1 2019-10-08 00:00:00 2 2019-10-08 00:00:00 3 2019-10-08 00:00:00 4 2019-10-08 00:00:00 5 2019-10-08 00:00:00 6 2019-10-08 00:00:00 7 2019-10-08 00:00:00 8 2019-10-08 00:00:00 9 2019-10-08 00:00:00 10 2019-10-08 00:00:00 11 2019-10-08 00:00:00 12 2019-10-08 00:00:00 13 2019-10-08 00:00:00 14 2019-10-08 00:00:00 15 2019-10-08 00:00:00 16 2019-10-08 00:00:00 17 2019-10-08 00:00:00 18 NaN 19 NaN 20 NaN 21 NaN 22 NaN 23 NaN 24 NaN 25 NaN 26 NaN 27 2019-10-22 00:00:00 28 2019-12-16 00:00:00 29 2019-10-22 00:00:00
どうやら空白行がNoneだと処理できて、Nanだと処理できない様子。とりあえず前処理でNanをNoneに置換する以下を導入。
df.where(df.notna(), None)
無事に変換できるようになりました。
ランニング
つい最近、散歩がてら20キロくらい家の近くを走り回ったら面白いものを色々と発見できたので、さらにいろんなところに自分の足で行きたいなと思いました。
その時、ランニングシューズなど持っていなかったので適当に運動向きな形をしているパトリックのスニーカーで走ったのですが、これが全然ダメ。もちろんランニングが想定されていないのでしょうが、長時間の運動により問題が明らかになりました。
パトリックのシューズはソールがインソールよりも小さいです。そしてインソールの重心がやや内側にあるおかげで内側に足の底面が傾きます。その結果、足が傾いた状態で動くため、くるぶしにとてつもない負担がかかります。20キロ走った後に靴を脱いで室内を歩いた時に地面が傾いて感じるくらいです。
ということで、靴の大切さをひしひしと感じたので早速ランニングシューズを入手しようと思い立った訳です。
まずは一般的なスポーツ店に行き、どのブランドにするかの方向性を決めることにしました。
一通り見て、まずはやっぱりお洒落が欲しいということで残ったブランドはナイキとアシックス。
アシックスでは roadblastシリーズ
ナイキではzoomシリーズ
あたりがいいなと思ったので、とりあえずブランドはアシックスかナイキにします。
特に巷で話題のzoomシリーズがいい感じです。しかし、zoomシリーズのハイエンドシリーズを買うほどまだこだわりもなにも無いので、高価なハイエンドは買わずにローエンドのzoom系でまずはランニングになれることにしようと思います。
フィッティングですが、一般スポーツ用品店では28cmくらいまでのサイズしかなく、私はスニーカー系は29cm位なので確認できませんでした。
そうなると、アシックスかナイキにに行くしかないですね。
玄米実験
前から少し気になっていた玄米。
しばらく日常の食に組み込んでみて影響を見てみようかと思います。効果としては食物繊維豊富で炭水化物を体に供給するペースが緩やかで白米に対して効率が変わる。ビタミンにより体を整えるといったあたりを期待しています。
まずは玄米を炊くところからなのですが、どうやら白米とはいろいろと違うようです。
水につけるのが1晩とか書いてあるのですが、そんなに待っていられないので無視して普通の白米…とうより急速白米で炊いてみます。
何事も常識を疑えということで、あえて玄米の常識は無視します。
果たして炊き上がりはどうなるのか。
はい。
硬いです。
とりあえず食べてみましたがこれはダメですね。消化できる気がしない。
ということで、一晩つけて炊いてみました。これなら消化できそうな感じの柔らかさです。
3キロだけしか買えなかったのである分だけとりあえず継続してみます。結果は乞うご期待。
自身の表現
SNSを見ていて、そんな発言して欲しくなかったなどと言われるような発言をしているアカウントをよく見かけます。
そしてその発言をした本人は表現の自由だ、思ったことを言って何が悪い、言いたいこと言えないっておかしくないかという意見を言っています。
この現象について構造を考えてみましょう。
まずは発言の効果から。
例えば筋トレで名のしれたTwitterのアカウントなどがあったとします。
本質で言えば筋トレ関連だけ呟いてくれていたからフォロワーは増えたわけで、フォロワーの属性は筋トレ属性のみです。
ここで例えば政治的に偏った発言をしたとしましょう。
この瞬間に筋トレ×政治サイドという属性の掛け算になります。
したがって、筋トレという情報濃度は低下するもしくはその政治サイドのミスマッチにより、この掛け算によってフォロワーの中の一定数を切り捨てることになるのです。
これは簡単な話ですね。ネット検索の時に検索ワードを増やした方がヒット件数が減って見つけやすくなるのと似たような構造だと思います。
それを意図的に行うのであればとても良い手法でありましょう。
効果についてはこの辺にして、この発言への行動原理に対して解釈してみましょう。
おそらく発言者はアカウントを自己同一視していると思います。
すなわち、アカウント=自分と捉えているわけです。その表れとして、自身の思考のすべてを表現しても問題ないだろうと考えるのだと思います。
しかし、そんなことないですよね。だって、アカウントは自己を表現する場ではあっても自己の情報の一部しかでしかないのですから。しかも、フィルターが多分にかかった情報しか載せていないわけであります。したがって、アカウントはペルソナの一つで、見せたい自分の一側面でしかないというわけです。
その一側面が自己の思考を全て発信する場と考えなくて良いのは自然な発想でしょう。
つまり、そのアカウントの情報範囲をしっかりと認識して発信していくのがアカウントの人格を尊重した行動であり、その人格に従うフォロワーへのコミュニケーションのベースになるのだと思います。
以上より、その辺の弁えがある人にとってはなんてことのない話ですが、炎上というのはよくこういったことから発生していることを考えると、発言内容のフォロワーレスポンスに関する指標を置いて発信、受信の情報が適切にマッチングされる仕組みを作ることがSNSにおいては重要な機能の一つになるのではないかと感じます。
自然の美
近くの公園の孔雀。
自然からデザインを学ぶのも面白いですね。
ついでに、視点をずらした写真が好きです。
例えば金網で孔雀を綺麗に撮るのが難しいのですが、その邪魔な金網にフォーカスしてみるとか。
前ボケとしてわざと入れてみるとか。
そんな感じで、デザインの感覚確認でした。