[PYTHON] Éliminez les caractères japonais brouillés dans les graphiques matplotlib avec Cloud Pak for Data Notebook

Lorsque vous dessinez un graphique avec matplotlib ou seaborn, les caractères japonais du graphique peuvent être déformés et devenir du tofu (□□□) comme indiqué ci-dessous. image.png

Il s'agit d'un problème spécifique à matplotlib / seaborn dû au fait que l'environnement n'a pas de polices japonaises ou est correctement configuré. La solution est également expliquée dans Autres articles, mais c'est une méthode pour résoudre ce problème sur Cloud Pak for Data (ci-après CP4D).

Environnement: CP4D v2.5, v3.0LA

Dans CP4D, l'environnement Python pour démarrer avec Notebook est préparé à l'avance, et il démarre dans l'état initial à chaque fois que le runtime est démarré, donc une fois que vous l'avez défini sur l'environnement Python, ce ne sera pas OK à l'avenir. À titre provisoire, nous mettrons en œuvre une solution (télécharger les polices et modifier les paramètres) dans Notebook.

Contre-mesures pour les caractères japonais déformés dans matplotlib (version CP4D)

Exécutez le code suivant au début de votre bloc-notes. La police est un exemple utilisant la police IPA mentionnée dans l'article précédent.

# download and install a Japanese font
!cd /tmp; curl -O https://ipafont.ipa.go.jp/IPAexfont/ipaexg00401.zip
!unzip -jo /tmp/ipaexg00401.zip -d ~/.fonts
# register the font
!fc-cache -fv; fc-list
# reset the matplotlib cache
!rm -rf ~/.cache/matplotlib

(Facultatif) Après avoir exécuté ce qui précède, vérifiez qu'IPAex Gothic a été ajouté aux polices que matplotlib peut reconnaître avec le code suivant. En regardant cela, nous pouvons voir qu'il n'y avait à l'origine que DejaVu Sans dans l'environnement Python par défaut de CP4D.

import matplotlib.font_manager;
[matplotlib.font_manager.FontProperties(fname=fname).get_name() for fname in matplotlib.font_manager.get_fontconfig_fonts()]
# -output-
#['DejaVu Sans',
# 'DejaVu Sans',
# 'DejaVu Sans',
# 'DejaVu Sans',
# 'DejaVu Sans',
# 'DejaVu Sans',
# 'DejaVu Sans',
# 'DejaVu Sans',
# 'DejaVu Sans',
# 'IPAexGothic']

Avant de dessiner le graphique, il est OK si vous spécifiez font.family dans rcParams.

from matplotlib import pyplot as plt
from matplotlib import rcParams
plt.rcParams['font.family'] = 'IPAexGothic'

Exemple d'exécution

# download and install a Japanese font
!cd /tmp; curl -O https://ipafont.ipa.go.jp/IPAexfont/ipaexg00401.zip
!unzip -jo /tmp/ipaexg00401.zip -d ~/.fonts
# register the font
!fc-cache -fv; fc-list
# reset the matplotlib cache
!rm -rf ~/.cache/matplotlib
# -output-
#réduction

Préparer des exemples de données


import pandas as pd
df = pd.DataFrame({
    'AIUEO' : [1,2,3,4,5],
    'Kakikukeko' : [0.1,0.2,0.3,0.4,0.5],
    'Sashisuseso' : [10,20,30,40,50],
    'Caractères chinois' : [100.1,100.2,100.3,100.4,100.5]
})
df
# -output-
#Aiueo Kakikukeko Sashisuseso Kanji
# 0	1	0.1	10	100.1
# 1	2	0.2	20	100.2
# 2	3	0.3	30	100.3
# 3	4	0.4	40	100.4
# 4	5	0.5	50	100.5

Dessinez un graphique


%matplotlib inline
from matplotlib import pyplot as plt
from matplotlib import rcParams
import seaborn as sns

# Specify font
plt.rcParams['font.family'] = 'IPAexGothic'

sns.pairplot(df)

résultat: image.png


(Ajout) Depuis CP4D v3.0.1, il semble que vous puissiez créer un environnement dans lequel les polices sont déjà installées en créant une image personnalisée de l'environnement Python. Espérons qu'il puisse être utilisé comme mesure permanente. Je contesterai si j'en ai l'occasion.

Recommended Posts

Éliminez les caractères japonais brouillés dans les graphiques matplotlib avec Cloud Pak for Data Notebook
Éliminez les caractères japonais brouillés dans les données JSON acquises par l'API.
Élimination des caractères japonais brouillés de matplotlib et NetworkX de la bibliothèque Python
Résolvez les caractères japonais brouillés dans matplotlib de Jupyter Notebook sur Docker
Comment éliminer les caractères déformés dans l'image de sortie matplotlib
Déployez des fonctions avec Cloud Pak for Data
Exemple d'opération d'objet Cloud Pak for Data en Python (client WML, project_lib)
Correction des caractères déformés lors du traitement du japonais dans les requêtes
Enregistrez les données pandas dans des actifs de données au format Excel avec Cloud Pak for Data (Watson Studio)
[Visual Studio Code] [Python] [Windows] Prise en charge des caractères japonais déformés dans la sortie de tâche / débogage VS Code
seaborn, matplotlib Élimination des caractères brouillés dans Windows10, environnement virtuel Anaconda
Intégrer le graphe matplotlib dans Tkinter