YutaKaのPython教室

Python の文法やライブラリ、API、環境構築について画像・動画・ソースコード付きで徹底解説!

【スクショで解説】PyCharmのインストール・日本語化方法

今回はPyCharmのインストール方法と日本語化方法について紹介します。

PyCharmはPythonの強力な統合開発環境(IDE)の一つです。

Pythonで快適な開発ライフを楽しむためのおススメツールの一つですね。

Pycharmのインストール

① JET BRAINSのウェブサイトからPyCharmのインストーラをダウンロード

JET BRAINSのサイトからインストーラをダウンロードして、インストールします。

www.jetbrains.com

有償のProfessional版と無償のCommunity版があります。

初めての方はまずは無償版で機能を確認するといいと思います。

PyCharm無償版のダウロード(JetBrainより引用)

② PyCharmのインストール

インストーラを入手出来たらインストールしていきます。

PyCharmインストール画面

特別なこだわりがなければ、インストール場所はデフォルトのままでOK。

PyCharmインストール画面②

次の画面で「Create Associations」にチェックを入れると、「.py」ファイルを開くときに自動でPyCharmが起動するようになります。

PyCharmインストール画面③

他の設定は基本的にデフォルトでいいでしょう。「Install」をクリックして、インストールします。

PyCharmインストール画面④

これでインストール完了です。

PyCharmインストール画面⑤

おつかれさまでした!

スタートメニューから、PyCharmを起動しましょう。

PyCharm起動

初回起動時は、TERMSの確認と情報提供についての画面が表示されます。

内容を確認して、同意できる場合は同意して使用します。

同意画面

同意画面(情報提供)

最後に初回起動画面が表示されます。

初回起動画面

やっと完了ですね。

さっそくプロジェクトを作成したい人は「New Project」からプロジェクトを作成しましょう。

その前に、PyCharmを日本語化したい人は次の手順を踏みます。

PyCharmの日本語化

PyCharmの日本語化はプラグインで可能です。

  • 左のメニューからPluginsを選択
  • Marketplaceが選択されていることを確認
  • 検索バーに「japanese」と入力
  • 「Japanese Laungage Pack」を選んで「Install」をクリック

PluginによるPyCharmの日本語化

これで日本語化完了です。

また、プラグインの追加はSettings Windowからも可能です。

Setting windowの開き方

Setting windowの真ん中やや上にPluginsがあります。

Setting windowの中のPluginsの位置

 

Python テキストファイルの任意の行を読み込む方法

テキスト操作は、データ処理の中でも重要な作業の一つですね。

Pythonを使えば、テキストファイルの読み込みが簡単に行えます。

しかし、条件を指定してテキストを読み込む際には、処理方法がわからなくなってしまうことも…

  • 特定の行を読み込むにはどうすればいいの?
  • 条件を満たす行を抽出する方法は?
  • 読み込みを高速化する方法はある?

この記事では条件を指定して、テキストファイルから特定の行を読み込む方法を解説します。

特定の行を読み込む方法

特定の行番の行を読み込む基本的な方法としては、次の4つの方法を紹介します。

  • 先にテキスト全体を読み込むパターン
  • 指定行までfor文でスキップするパターン
  • isliceで複数行を指定するパターン
  • ファイルをキャッシュに保存するパターン

各方法のメリット、デメリットは次の通りです。

方法 メリット デメリット
先に全体読み込み ・簡単に特定の行を取得できる
・後から前の行に戻れる
・ファイルが大きいとメモリ不足の可能性
指定行までスキップ ・ファイルが大きくても処理可
・対象行が前半にある処理が速い
・対象行が後半にある場合
・処理が遅い可能性がある
isliceで複数行 ・ファイルが大きくても処理可
・比較的安定して処理が速い
・条件分岐不可
キャッシュ利用 ・記述が極めて簡潔
・テキストを何度も読むとき高速
・条件分岐不可
・ファイルが大きいとメモリ不足の可能性

次のサンプルファイルを使用して、実行例を確認してみましょう。

text_lines = [ f"{n+1}行目\n" for n in range(1000000)]
with open("sample.txt", "w", encoding="utf-8") as f:
    f.writelines(text_lines)

ファイルの中身は次のようになっています。

先にテキスト全体を読み込むパターン

テキストファイル全体を読み込んだ後に、特定の行を指定して抽出する方法です。

fileオブジェクト.readlines()メソッドで、各行をリストとしてテキストを読み込めます。

  • lines = f.readlines():ファイル全体を読み込み

後はリストのインデックスで必要な行にアクセスすればOKです。

サンプルファイルで実行例を確認してみましょう。

with open("sample.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()

lines[50000]
# 50001行目\n

lines[100000]
# '100001行目\n'

f.readlines()は、行末の改行文字を削除してくれません。

改行文字が不要な場合は、.rstrip()で削除しましょう。

with open("sample.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()

lines[50000].rstrip()
# 50001行目

lines[100000].rstrip()
# '100001行目
  • 【参考】ファイルの読み込み方法については次の記事で詳しく解説しています。
≫Python テキストファイル読み込み・テキスト処理まとめ
Pythonでは簡単にテキストファイルを読み込むことができます。しかし、実際にテキストファイルを読み込もうとすると、次のような問題に直面することも…①ファイルの読み込みってどうやるんだっけ?②エンコーディングのエラーがでた!③テキストの出力方法にも種類があって、使い分けがよくわからない!そこで、この記事ではPythonでのテキストファイル読み込み、よく使うテキスト処理について、図解付きで徹底解説しています!
www.yutaka-note.com/entry/bf_openfile
 

指定行までfor文でスキップするパターン

指定行までfor文で読み飛ばすパターンです。

next()関数を使用すると、fileオブジェクトを一行進めることができることを利用します。

  • next(f):ファイルオブジェクトを一行進める

サンプルファイルで実行例を確認してみましょう。

with open("sample.txt", "r", encoding="utf-8") as f:
    for _ in range(100000): 
        next(f)
        
    line = f.readline()
    
line
# '100001行目\n'

上記の例では、next()関数で不要な行をスキップしています。

余計な読み込みはせずにシンプルにスキップして、少しでも高速化を目指しています。

fileは、ジェネレータとしても扱うと一行ずつ進むことを利用しています。

isliceで複数行を指定するパターン

fileのジェネレータの性質を利用すると、テキスト内の複数行を指定すること簡単にできます。

組み込みモジュールitertools内のislice()を使うと、特定の要素をスライス(抽出)できます。

  • islice(f, stop): 0 → stop-1までの要素
  • islice(f, start, stop): start → stop-1までの要素

ファイルの一部がスライスされるので、結果として特定の行のみをスライスできます。

サンプルコードで挙動を確認してみましょう。

from itertools import islice

# 3行目まで
with open("sample.txt", "r", encoding="utf-8") as f:
    lines = islice(f, 3)
    
    for line in lines:
        print(line.rstrip())
    # 1行目
    # 2行目
    # 3行目
    
# 1001行目~1003行目まで
with open("sample.txt", "r", encoding="utf-8") as f:
    lines = islice(f, 1000, 1003)
    
    for line in lines:
        print(line.rstrip())
    # 1001行目
    # 1002行目
    # 1003行目

メモリ使用量も少ないですし、実行速度も速いのこの方法が個人的にはおススメです。

ファイルをキャッシュに保存するパターン

linecacheモジュールを使用して、ファイルの内容をキャッシュする方法です。

キャッシュに保存するので、同じ行を何度も読み込む場合でも高速処理できる可能性が高いです。

  • getline("ファイル名", 行番号)

サンプルコードで挙動を確認してみましょう。

import linecache

line = linecache.getline('sample.txt', 1000)
print(line)
# 1000行目

# キャッシュの削除

# linecache.clearcache()

記述がシンプルでわかりやすい点も、この方法のメリットの一つです。

ただし、ファイルの内容をキャッシュしているため、大容量ファイルを扱う場合はメモリ使用量に注意が必要です。

キャッシュが不要になったら、.clearcache()でキャッシュを削除しましょう。

条件を見たす行を抽出する方法

条件を見たす行を抽出する基本処理は、次のいずれかです。

  1. リスト内包表記で条件を指定
  2. for文で一行ずつ読み取り、if文で条件分岐

いずれもPythonの基本文法ですね。次のように使い分けると良いと思います。

方法 特徴 使いやすい状況
リスト内包表記 全行を処理 テキストファイル全体を処理する場合
for文で読み取り 一行ずつ処理 途中で処理をやめる場合

リスト内包表記で条件を指定

テキスト全体をリストとして読み取り、リスト内包表記で条件を指定します。

  1. lines = f.readlines()
  2. target_lines = [line for line in lines if 条件文]

サンプルコードで実行例を確認してみましょう。

with open("sample.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()
    target_lines = [line for line in lines if line[0]=="1" ]
    # ['1行目\n',
    #  '10行目\n',
    #  '11行目\n',
    #  ...
    #  '1000000行目\n']

上記の例では、一文字目が"1"で始まる行を抽出しています。

正規表現を使用して、複雑な条件を指定することも可能です。

import re
# 1から始まり9で終わる数字のパターン
p = re.compile("1\d*9")

with open("sample.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()
    target_lines = [line for line in lines if p.match(line) ]
    # ['19行目\n',
    #  '109行目\n',
    #  ...
    #  '199999行目\n']

正規表現のパターンについては、次の記事で詳しく解説しています。

≫Python正規表現パターンを図解&サンプルで本当にわかりやすく解説
Pythonのreモジュールで正規表現パターンを作成する際に重要な3つのポイントを解説します。①特定の文字の繰り返しを指定 ②数値や文字、空白など条件による文字条件の指定 ③グループ化によるパターン内の特定部分の抽出
www.yutaka-note.com/entry/regex_01
 

for文で一行ずつ読み取り、if文で条件分岐

for文で一行ずつ読み取り、条件に合った箇所で処理する方法です。

特別なテクニックはなく、基本的なプログラミングですね。

サンプルコードで実行例を確認してみましょう。

with open("sample.txt", "r", encoding="utf-8") as f:
    
    for line in f:
        if line.startswith("100"):
            print(line)
            break
"100行目"

必要な部分だけ読み込んで処理を終える場合などに便利ですね。

ただし、読み込み行数が多い場合は処理に時間がかかるようになります。

行番号で読み込んだり、キャッシュを利用したり、代替案がないか考えることもあると思います。

また、テキスト処理の条件分岐には正規表現を使うことも多いです。

サンプルコードで正規表現を使う例を確認してみましょう。

import re
# 1から始まり9で終わる数字のパターン
p = re.compile("1\d*9")

with open("sample.txt", "r", encoding="utf-8") as f:
    for line in f:
        if p.match(line):
            break
line
# '19行目\n'

正規表現を使った検索、マッチについては、次の記事で詳しく解説しています。

≫Python 正規表現の検索を本当にわかりやすく解説
Pythonで正規表現を使用して、パターン検索する方法をわかりやすく解説しています。① 検索メソッド(関数)の実行方法② 各メソッドの紹介(単独検索search()、全体検索findallなど)③ 検索結果の出力であるMatchオブジェクトの内容
www.yutaka-note.com/entry/regex_02
 

正規表現で条件を見たす行を抽出

テキスト処理では正規表現のパターンを使用できるかどうかで、作業効率が大きく違ってきます。

複数行にまたがった条件を判定する場合には、正規表現は必須とも言えるでしょう。

例えば、次のようなテキストを考えてみましょう。

正規表現を使えば、各テーブルのデータを抽出するのも簡単です。

サンプルコードで実装例を見てみましょう。

import re
p = re.compile("TABLE(\d+)\s(.*?)/", re.DOTALL)

with open("tables.txt", "r", encoding="utf-8") as f:
    text = f.read()
    res = p.findall(text)
    
res
# [('1', '1 1\n2 4\n3 9\n'), ('2', '1 1\n2 8\n3 27\n')]

簡単にテーブル部分を抽出できましたね。

あとは必要に応じて成形して処理していけば良さそうです。

正規表現については、次の記事で詳しく解説しています。

≫Python正規表現パターンを図解&サンプルで本当にわかりやすく解説
Pythonのreモジュールで正規表現パターンを作成する際に重要な3つのポイントを解説します。①特定の文字の繰り返しを指定 ②数値や文字、空白など条件による文字条件の指定 ③グループ化によるパターン内の特定部分の抽出
www.yutaka-note.com/entry/regex_01
 
≫Python 正規表現の検索を本当にわかりやすく解説
Pythonで正規表現を使用して、パターン検索する方法をわかりやすく解説しています。① 検索メソッド(関数)の実行方法② 各メソッドの紹介(単独検索search()、全体検索findallなど)③ 検索結果の出力であるMatchオブジェクトの内容
www.yutaka-note.com/entry/regex_02
 

オススメ|データ分析の勉強方法

今回はPythonでテキストファイルを読み込む方法について解説しました。

データ分析初心者の方にはこちらの記事もおススメです。

≫独学でデータ分析を勉強するオススメ学習本
独学でのpythonデータ分析勉強に役立ったおススメ書籍を紹介していきます。業務でそれなりにデータ分析を行えるまで、いろいろな試行錯誤をしてきましたが、もし自分が今ゼロから勉強する立場ならどうするのがいいのか考えてみました。以下では、入門書、個別モジュール用、実践用の3つの視点でおススメ本を紹介していきます。
www.yutaka-note.com/entry/data_analysis
 

Pythonで作業の効率化を目指している方には、次の記事がおススメです。

≫【レビュー】退屈なことはPythonにやらせよう | 単純作業は自動化
名著「退屈なことはPythonにやらせよう 」をレビュー!単純作業を自動化して、自分が本当にしたいことのために時間を確保していこう!所要時間やできるようになったことを紹介!この本を参考にして作成した、自作自動化スクリプトも紹介しています!
www.yutaka-note.com/entry/python_jido
 
≫【レビュー】Python自動処理 全部入り。 | 即効性重視!Pythonによる自動化事例集!
今回は、Pythonの作業自動処理の解説本『Python自動処理全部入り』をレビュー!この本は、特定の作業に特化した即効性の重視の自動化解説本です。よくある作業から自動化しやすい作業を抽出して、それらの自動化を集中的に解説した本という印象です。本の中に自分のニーズに合った自動化処理が見つかれば、その日からすぐ使える事例集のような印象です。
www.yutaka-note.com/entry/python_jido_zenbu
 

matplotlib 画像の保存方法|savefigの使い方

Pythonのデータ可視化ライブラリといえば、Matplotlibですね。

Matplotlibで作成した画像は様々なファイル形式で保存することができます。

しかし、実際に画像を保存しようとすると、次のような問題に直面することも…

  • 画像として保存するにはどのメソッドを実行すればいいの?
  • ファイルの種類を指定することはできる?
  • 画像の見た目を調整してから保存したい!

この記事では、Matplotlib.savefig()を使って画像を保存する方法について、分かりやすく解説していきます。

savefig()による画像の保存方法

Matplotlibで作成したプロットを保存するには、plt.savefig()を使用します。

次のようにファイル名と拡張子を指定します。

  • plt.savefig('ファイル名.拡張子')

次のようにグラフを作成した後に、plt.savefig()を実行しましょう。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-2,2)
y = x**2
plt.plot(x,y)

plt.savefig('sample.png')

下図のように作業フォルダに画像が保存されます。

保存形式や解像度など保存条件を変更する場合は、savefig()の引数で指定することも可能です。

この記事では、plt.savefig()の詳しい設定内容、保存時に役立つ設定について解説していきます。

figureオブジェクトのsavefig()を使うパターン

plt.savefig()の詳細設定を確認する前に、オブジェクト志向でプロットしている場合の画像保存方法についても解説しておきます。

figureオブジェクトを生成している場合は、figuresavefig()メソッドで保存することもできます。

  • figure.savefig('ファイル名.拡張子')

オブジェクト指向のプロットについての詳細は、次の記事を参考にしてください。

≫Matplotlib plt.subplots()の使い方|FigureとAxesを同時生成!
Matplotlibでグラフを描くとき「fig, ax = plt.subplots()って、よく見るけど何してるの?」「plt.subplots()の便利な使い方を知りたい! 」という方のために、plt.subplots()でFigureとAxesを作ると何が便利なのか、plt.subplots()の基本的な使い方、覚えておくと便利なplt.subplots()の引数を図解付きで解説します!plt.subplotsはオブジェクト指向のプロット作成の基本なので使い方をぜひ覚えましょう!
www.yutaka-note.com/entry/matplotlib_subplots
 

オブジェクト指向の場合の画像保存のサンプルコードを確認してみましょう。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-2,2)
y = x**2

fig, ax = plt.subplots()
ax.plot(x,y)

fig.savefig('sample.png')
plt.close(fig)

オブジェクト指向でグラフを描画する際は、スクリプト内で描画→保存を繰り返すことも多いです。

保存して不要になったプロットはplt.close(fig)で閉じて、リソースを解放すると良いです。

fig.savefig()の引き数はplt.savefig()と共通なので、以下ではplt.savefig()を例に詳細設定について解説していきます。

savefigメソッドの詳細設定

savefig()では、次のような引数を取ることができます。

設定内容 引数名 設定例
保存名(省略可) fname 保存先のファイル名またはパスを指定
拡張子で保存形式を指定可能
解像度 dpi 解像度を数値で指定
デフォルト:100
余白の削除 bbox_inches bbox_inches='tight'で余白を削除
余白の調整 pad_inches 余白サイズを明示的に指定
例)pad_inches=1
背景の色 facecolor 色名等を指定
例)facecolor='blue'
枠線の色 edgecolor 色名等を指定
例)edgecolor='blue'
背景の透明化 transparent True or False
デフォルト:False

以下で各引数を使用した設定方法について詳しく解説していきます。

ファイル名の指定, fname

保存する画像のファイル名はfnameで指定します。fnameの引数名は省略可能です。

  • plt.savefig(fname='ファイル名') or
  • plt.savefig('ファイル名')

Matplotlibで対応している拡張子を指定すれば、指定した形式で出力してくれます。

fnameの指定内容 出力ファイル
"ファイル名.拡張子" "ファイル名.拡張子"
Matplotlibで対応する拡張子のみ
"ファイル名" "ファイル名.png"
→ 省略するとpngで保存される

対応している拡張子

Matplotlibで対応している基本的な拡張子は以下の通りです。

ファイルの種類 拡張子 形式
PNGファイル .png ラスタ形式
JPGファイル .jpeg, .jpg
TIFFファイル .tiff, .tif
SVGファイル .svg ベクタ形式
PDFファイル .pdf

ラスタ形式とベクタ形式を簡単にまとめると次の様な違いがあります。

比較内容 ラスタ形式 ベクタ形式
概要 ピクセルの集合として画像を表現 点や線などの集合で画像を表現
向き不向き 写真などの高解像度な画像も表示可 写真などの複雑な画像に向かない
拡大時の特徴 拡大すると画像が荒くなる 拡大しても画像が荒くならない

拡大してみると、ラスタ形式は粗くなりますが、ベクタ形式は粗くなりません。

また、ファイル形式によって画像のサイズにも違いが出てきます。

上記の二次曲線のグラフを各形式で出力してみると、次のようなファイルサイズになります。

ファイルの種類 ファイルサイズ, kB
PNGファイル 22
JPGファイル 18
TIFFファイル 1,201
SVGファイル 16
PDFファイル 7

今回の場合は、TIFF形式のサイズが圧倒的に大きく、PDFのサイズが一番小さくなりました。

用途に応じて出力ファイルの形式を設定するようにしましょう。

解像度の設定, dpi

引数dpiで画像の解像度を指定することができます。デフォルトは100です。

  • plt.savefig('sample.png', dpi=300)

解像度を増やすと、画像がより高品質になりますが、ファイルサイズが大きくなります。

サンプルコードで実行例を確認してみましょう。

x = np.linspace(-2,2)
y = x**2

plt.plot(x,y)

plt.savefig('sample.png', dpi=300)

上記の例では、解像度に応じて次のように画像サイズが大きくなりました。

解像度, dpi ファイルサイズ, kB
100 22
300 81
500 147

用途に応じて適切な値を設定しましょう。

また、解像度の設定が反映されるのは、ラスタ形式(jpg, png, tiff)のみです。

ベクタ形式では解像度を指定しても特に何も影響ありません。

余白の削除, bbox_inches

デフォルトでは、グラフの周りに若干の余白ができますが、引数でこの余白を最小限に縮めることができます。

  • bbox_inches="tight"

余白を削除すると、画像がスッキリしてみえます、

サンプルファイルで実行例を確認してみましょう。

x = np.linspace(-2,2)
y = x**2

plt.plot(x,y)

plt.savefig("sample_normal.png")
plt.savefig("sample_tight.png", bbox_inches="tight")

2つの画像を比較してみましょう。

bbox_inchesは、figureの特定の部分を切り出すために使用することもできますが、この使い方はほとんど使用しないと思います。

from matplotlib.transforms import Bbox

x = np.linspace(-2,2)
y = x**2

plt.figure(figsize=(5,5))
plt.plot(x,y)

plt.savefig("part_of_sample.png",  bbox_inches=Bbox([[0, 0], [2.5, 2.5]]))

次のように画像の左下から2.5inchの領域だけが切り出されます。

余白サイズの設定

pad_inches引数で、余白のサイズを調整することができます。

  • pad_inches = 余白の大きさ

pad_inchesで余白を指定する場合は、bbox_inches="tight"と併用する必要があります。

x = np.linspace(-2,2)
y = x**2

plt.plot(x,y)

plt.savefig("sample_tight.png", bbox_inches="tight")
plt.savefig('sample_padding.png',bbox_inches="tight", pad_inches=2)

この例では、グラフの周りに2インチの余白が設定されています。

余白が大きすぎると、グラフが小さく見にくくなってしまいます。

適切な余白の大きさを設定して、グラフを見やすくしましょう。

色を変更する方法

.savefig()の引数設定で、保存時に背景色、枠線の色を変更することができます。

画像の保存時に設定できる色関連の引数は次の通りです。

設定内容 引数名 設定例
背景色 facecolor "blue":背景色を青にする。
背景の透過度 transparent True:背景を透過させる
画像の枠線 edgecolor "red":枠線を赤にする

facecolor単独だとグラフ外に色がつき、transparentと組み合わせると全体に色がつきます。

サンプルコードで挙動を確認してみましょう。

x = np.linspace(-2,2)
y = x**2

plt.plot(x,y)

plt.savefig("sample_facecolor.png", facecolor="lightgray")
plt.savefig("sample_transparent.png", transparent=True)
plt.savefig("sample_transparent_facecolor.png", transparent=True, facecolor="lightgray")

それぞれ下図のように背景色が設定されます。

グラフの外側の枠線の色はedgecolorで指定します。

ただし、デフォルトでは枠線の太さが指定されていないので、枠線の太さも事前に指定しましょう。

  • plt.figure(linewidth=枠線の太さ)
  • plt.savefig("sample.png", edgecolor=色)

サンプルコードで挙動を確認してみましょう。

x = np.linspace(-2,2)
y = x**2

plt.figure(linewidth=5)
plt.plot(x,y)

plt.savefig("sample_edgecolor.png", transparent=True, edgecolor="red")

次のように枠線に色がつきます。

細い枠線だと、一部欠ける場合があるので注意しましょう。

その他の画像保存関連の設定

.savefig()の引数とは異なりますが、画像保存に関連する設定として以下の内容を解説します。

  • 画像サイズの変更
  • 軸の範囲の変更
  • 色の変更
  • フォントの変更

画像サイズの変更

画像のサイズは、figureオブジェクトのfigsizeを指定して変更します。

  • plt.figure(figsize=(width, height)) または
  • fig, axes = plt.subplots(figsize=(width, height))

pltでプロットする場合は前者、オブジェクト指向の場合は後者を使用しましょう。

デフォルトのサイズは、(6.4 inch, 4.8 inch)です。

サンプルコードで挙動を確認してみましょう。

x = np.linspace(-2,2)
y = x**2

plt.figure(figsize=(5,5))
plt.plot(x,y)

plt.savefig("sample_rectangle.png")

次のような5inch×5inchの画像になります。

  • 【参考】plt.figure()を使った設定については次の記事で詳しく解説しています。
≫Matplotlib plt.figure()を使う理由|FigureとAxesの関係を把握しよう
Matplotlibでグラフを描くとき「FigureとかAxesとかMatplotlib独特の単語が多くてよくわからない」、「Figureを作った後、結局どうやってプロットすればいいの?」という方のために、FigureとAxesの関係性を図解!FigureにAxesを追加する方法厳選3パターンを解説します!覚えておきたいFigureの設定・操作(サイズ変更、レイアウト調整など)も画像・サンプルコード付きで解説!
www.yutaka-note.com/entry/matplotlib_figure
 

フォントを変更する方法

Matplotlibでフォントを変更する場合は、主に次の3つの方法があります。

  • fontnameを指定
  • rcParamsを設定
  • matplotlibrcファイルを書き換え

それぞれの方法のメリットデメリットは次の通りです。

設定方法 メリット デメリット
fontname指定 テキストごとに個別設定可能 個別設定に手間がかかる
rcParamsを変更 スクリプト冒頭で一括設定可能 毎回設定するのがめんどう
fontnameほどではない)
matplotlibrcを書き換え 一度設定したら半永久的にOK 設定ファイルの書き換えのため、
コードでは変更点がわからない

具体的な方法は以下の記事で解説しています。

≫Matplotlib 日本語の表示方法|簡単にいろんな日本語フォントを使う方法
pythonのプロット作成ライブラリといえば、Matplotlibが有名ですが、デフォルト設定では日本語は表示できません。そこで、この記事では簡単な方法から様々な状況に対応できる方法まで、詳しく手順を解説していきます。①「Matplotlibで日本語を表示する方法」、②「すぐに使用できる日本語フォントのチェック方法」、③「任意の日本語フォントを追加して使用する方法」。これで日本語化で困ることもなくなると思います!
www.yutaka-note.com/entry/matplotlib_japanese
 

色を変更する方法

色の設定は個別のグラフの色の設定、カラーサイクルの設定があります。

個別の設定はcolor="色名"などで指定することができます。次の記事で詳しく解説しています。

≫Matplotlib color 色の指定 | 一文字指定からカラーマップの使い方まで徹底解説
伝わるグラフを作るためのポイントはなんでしょうか?いかに視覚的にわかりやすいか、これが大切です。それには重要な要素に色をつけて、視覚的にうったえることが超大切!この記事では、matplotlibでの色の指定方法について、基本から応用まで徹底解説!
www.yutaka-note.com/entry/matplotlib_color
 

カラーサイクルは複数のグラフを描いた際に自動で設定される色のことです。次の記事で詳しく解説しています。

≫Matplotlib 日本語の表示方法|簡単にいろんな日本語フォントを使う方法
pythonのプロット作成ライブラリといえば、Matplotlibが有名ですが、デフォルト設定では日本語は表示できません。そこで、この記事では簡単な方法から様々な状況に対応できる方法まで、詳しく手順を解説していきます。①「Matplotlibで日本語を表示する方法」、②「すぐに使用できる日本語フォントのチェック方法」、③「任意の日本語フォントを追加して使用する方法」。これで日本語化で困ることもなくなると思います!
www.yutaka-note.com/entry/matplotlib_japanese
 

軸の範囲を設定する方法

軸の範囲はplt.xlim(), plt.ylim()で設定が可能です。

例えば、次のように設定します。

x = np.linspace(-10,10)
y = x**2

plt.xlim(-5,5)
plt.xlim(-20,20)
plt.plot(x,y)

plt.savefig("sample_xlim.png")

下図のように表示範囲が制限されます。

軸周りの詳しい設定については次の記事を参考にしてください。

≫Matplotlib 軸周り完璧マスターガイド | 軸・軸目盛・目盛り線の設定
Matplotlibで大変なのが軸周りの設定!グラフの「この要素」を変更するには、「どのメソッド」を使えばいいのかわからない…。という方のために、Matplotlibの軸・目盛り・目盛り線の設定について総まとめしました!これで軸周りの設定がだいぶ楽になります。軸周り完ぺきマスターガイド!
www.yutaka-note.com/entry/matplotlib_axis
 

オススメ|matplotlibとデータ分析の勉強方法

今回は、Matplotlibの日本語化方法について、簡単な方法から様々な状況に対応できる方法まで解説しました。

Matplotlibは奥の深いモジュールですが、なかなかわかりにくい部分もあります…。

そこで、グラフの作成方法、種類変更、凡例、タイトルの設定など網羅的にわかりやすく整理した記事を作りました。ぜひ参考にしてみてください。

≫【初心者向け】Matplotlibの特徴と使い方をわかりやすく解説!
脱初心者のためのMatplotlibマスターガイドです。そもそもどういう流れでプロットするのか?どんな種類のグラフが描けるのか?日本語設定は?タイトルや軸の設定は?オブジェクト指向って何?そんな疑問を解決します!この記事で、脱Matplotlib初心者を目指そう!
www.yutaka-note.com/entry/matplotlib_guid
 

また、データ分析初心者の方にはこちらの記事もおススメです。

私がこれまで勉強してきた経験をもとに考えたおススメの勉強本の紹介記事です。

何から始めて、どうやってレベルアップしていけばいいのか、初心者の方にぜひおススメしたい本を紹介しました。

≫独学でデータ分析を勉強するオススメ学習本
独学でのpythonデータ分析勉強に役立ったおススメ書籍を紹介していきます。業務でそれなりにデータ分析を行えるまで、いろいろな試行錯誤をしてきましたが、もし自分が今ゼロから勉強する立場ならどうするのがいいのか考えてみました。以下では、入門書、個別モジュール用、実践用の3つの視点でおススメ本を紹介していきます。
www.yutaka-note.com/entry/data_analysis
 

Python PDFの結合方法|すぐ使えるサンプルコード付き!

Pythonでは外部ライブラリpypdfを使うと、簡単にPDFを結合することができます。

しかし、実際に使おうとすると次のような問題に直面することも…

  • pypdfのインストール方法は?
  • 結合にはどのメソッドを使うの?
  • フォルダ内のPDFを一括で結合するには?

そこで、この記事ではpypdfを使用したPDFの結合方法についてわかりやすく解説していきます。

PDFの結合の方法

PythonでPDFを結合する場合は、PDF操作用の外部ライブラリpypdfを使うと便利です。

pypdfでPDFを結合する場合には、次の手順を踏んでいきます。

  1. PDF結合用ライブラリのインストール
  2. pypdfモジュールからPdfMerger()import
  3. PdfMerger()オブジェクトを作成
  4. .append()メソッドでPDFを結合
  5. .write()メソッドで書き出し、.close()メソッドでPDFを閉じる

例として、sample1.pdfsample2.pdfを結合するサンプルコードを見てみましょう。

from pypdf import PdfMerger

# PdfMerger()オブジェクトを作成
merger = PdfMerger()

# 結合するPDFのパスをリストで準備
pdfs = ["sample1.pdf", "sample2.pdf"]

# for文で結合
for pdf in pdfs:
    merger.append(pdf)
    
# 書き出し
merger.write("merged.pdf")
merger.close()

sample1.pdfsample2.pdfが結合されたmerged.pdfがカレントフォルダに出力されます。

簡単にPDFの結合ができますね。

以下では、次の内容についてさらに詳しく解説していきます。

pypdfのインストール方法

まずはPDF操作用の外部ライブラリpypdfをインストールしましょう。

pipでインストールする場合は、ターミナルで以下のコマンドを実行します。

pip install pypdf

Anacondaの場合は、conda-forgeからインストールできます。

次のコマンドでインストールしましょう。

conda install pypdf -c conda-forge

結合手順の詳しい解説

pypdfをインストールしたら、PdfMergerクラスを使用してPDFを結合します。

from pypdf import PdfMerger
merger = PdfMerger()

PdfMerger.append()メソッドにPDFを渡して結合していきましょう。

.append()メソッドにPDFを渡すと、末尾にPDFが追加されていきます。

pdfs = ["sample1.pdf", "sample2.pdf", "sample3.pdf"]

for pdf in pdfs:
    merger.append(pdf)

最後に結合後のPDFを書き出します。

merger.write("merged.pdf")
merger.close()

書き出し後はリソースを開放するために.close()するのを忘れないようにしましょう。

.close()を忘れがちな人は、初めからwith open()構文を使ってもOKです。

with open("merged.pdf", "wb") as f:
    merger.write(f)
  • 【参考】作業の効率化や自動化については、次の記事も参考にしてみてください。
≫【レビュー】退屈なことはPythonにやらせよう | 単純作業は自動化
名著「退屈なことはPythonにやらせよう 」をレビュー!単純作業を自動化して、自分が本当にしたいことのために時間を確保していこう!所要時間やできるようになったことを紹介!この本を参考にして作成した、自作自動化スクリプトも紹介しています!
www.yutaka-note.com/entry/python_jido
 

PDFファイルの指定方法

ここまでの例では、文字列でカレントフォルダ内のPDFファイルを指定しました。

これ以外にも.append()メソッドでは、次のようにPDFを指定できます。

形式
パスの文字列 'sample.pdf'
'./file_name/sample.pdf'
Pathオブジェクト Path('./file_name/sample.pdf')
PdfReaderオブジェクト PdfReader('sample.pdf')

Pathオブジェクトを直接渡せるので、ファイル探索とも相性がいいです。

以下で.glob()メソッドで、特定のフォルダ内のPDFを探索する例を見てみましょう。

特定のフォルダ内のPDFファイルを全て結合

Pathオブジェクトのファイル検索メソッド.glob()を使用すると、特定のフォルダ内のPDFファイルを検索することが可能です。

まずはPathオブジェクトを生成します。

  • path = Path("FOLDER_PATH")

次に以下のようなテンプレで.pdfを検索します。

検索先 パターンテンプレ
Pathフォルダ内 Path.glob("*.pdf")
サブフォルダ内 Path.glob("*/*.pdf")
Pathフォルダ+サブフォルダ内 Path.glob("**/*.pdf")

例として、./sourceフォルダ内の全てのPDFを探索・結合してみます。

from pathlib import Path
from pypdf import PdfMerger

folder = Path("./source")
merger = PdfMerger()

# folder内のPDFファイルを探索 → 結合
for pdf in folder.glob("*.pdf"):
    merger.append(pdf)
    
# 結合したPDFを出力
with open(folder / "merged.pdf", "wb") as f:
    merger.write(f)
  • 【参考】.glob()でのファイル探索は、次の記事で詳しく解説しています。
≫Python フォルダ内ファイル検索方法まとめ|pathlib.glob
Pythonのファイル操作用のモジュールpathlibというものがあります。pathlibを使用すれば、様々な条件でのファイル・フォルダの検索を行うことが可能です。しかし、実際にファイル検索する際には、次のような問題に直面することも…①pathlibを使って、ファイル検索するには具体的にどうすればいいの?②特定の条件に合ったファイルを検索する方法は?③サブフォルダも含めて、全ファイル検索するにはどうするの?こういった疑問を解決するために、この記事ではpathlibの.glob()メソッドを使用したファイル検索方法について、図解付きで解説していきます。
www.yutaka-note.com/entry/pathlib_glob
 

指定のページにPDFを挿入

ここまで紹介してきた.append()メソッドでは、末尾にPDFが追加されます。

PDFの特定の位置に新規PDFを挿入する場合は.merge()メソッドを使用します。

.merge()のその他の引数は.append()と同じです。

2ページ目にPDFを追加する例をサンプルコードで確認してみましょう。

from pypdf import PdfMerger

merger = PdfMerger()
pdfs = ["sample1.pdf", "sample2.pdf"]

for pdf in pdfs:
    merger.merge(2, pdf)
    
merger.write("merged.pdf")
merger.close()

PDFに表紙がある場合や、章立てがある場合に便利ですね。

結合するページの指定

pages引数を指定すると、特定のページのみを結合することが可能です。

pagesの指定方法は次の通りです。

指定方法 指定例
[結合するページのリスト] [1, 5] → 0, 4ページ
[0, 1, 0, 1] → 1, 2, 1, 2ページ(同一ページの指定もOK)
range形式のタプル
(start, end [,step] )
(2, 10) → 3~10ページ
pypdf.PageRangeオブジェクト PageRange(2, 10) → 3~10ページ
PageRange("1:") → 2ページ目から末尾まで

Pythonは数字を0からカウントするので、ページ番号と1ずれます。

そのため、結果としてrange関係は始点のページが含まれなくなります。

例として、PageRangeを使って2ページ目移行を結合する例を見てみましょう。

from pypdf import PageRange
merger = PdfMerger()

merger.append("sample.pdf", pages=PageRange("1:"))
merger.write("res.pdf")
merger.close()

PDFの結合方法まとめ

今回はPythonの外部ライブラリpypdfを使ってPDFを結合する方法を紹介しました。

Pythonは豊富な外部ライブラリのおかげで、様々なファイルやソフトを簡単に操作できます。

作業の効率化や自動化については、次の記事も参考にしてみてください。

≫【レビュー】退屈なことはPythonにやらせよう | 単純作業は自動化
名著「退屈なことはPythonにやらせよう 」をレビュー!単純作業を自動化して、自分が本当にしたいことのために時間を確保していこう!所要時間やできるようになったことを紹介!この本を参考にして作成した、自作自動化スクリプトも紹介しています!
www.yutaka-note.com/entry/python_jido
 

Pythonで APIキーやパスワードを環境変数に置いて使う方法

Pythonに限らず、APIキーやパスワードなどの機密情報はコードに直接書き込まない方が良いと言われています。

この記事では、Pythonコードで環境変数に保存したAPIキーやパスワードを読み込む方法について次の内容を解説しています。

  • そもそもなぜ、環境変数にキーやパスワードを置くのでしょう?
  • 環境変数に置いたキーやパスワードを保存する方法は?
  • 保存した環境変数をPythonコードの中で読み取る方法は?

これらの内容を理解して、環境変数においたキーやパスワードを適切に扱えるようになりましょう!

環境変数にキーやパスを置く理由

APIキーやパスワードなどの機密情報を直接プログラムに書き込むことは、基本的に避けた方が良いと言われています。

そもそも、なぜわざわざ環境変数を使用するのでしょうか?

これには次のような理由があります。

  • コードを公開/共有等する際に、機密情報が漏洩する危険性がある
  • キーやパスが変更される度に、コード自体を書き換えないといけない

そのため、APIキーやパスワードは環境変数に保存し、それをプログラムから読み込むが方法を取ることが多いです。

以下では、次の順番で手順を詳しく解説していきます。

  • 環境変数にキーを登録する方法
  • Pythonコードの中で環境変数の値を取得する方法

ステップ1:環境変数にキーを登録

まずは、プログラムから読み取りたい機密情報(キーやパスワード)を環境変数に登録しましょう。

環境変数を登録するには、「環境変数」の編集ウィンドウを開いて、手入力で登録するのが楽です。

① タスクバーの検索ボックスに「環境変数」と入力 ② 「システム環境変数を編集」をクリック

③「システムのプロパティ」ウィンドウ内の「環境変数」をクリック

④「ユーザー環境変数」または「システム環境変数」の新規をクリック

各環境変数の主な違いは次の通りです。個人で使用している分には、どちらでも大差ないです。

  ユーザー環境変数 システム環境変数
編集に管理者権限が必要か 不要 必要
アクセスできる人の範囲 ログインしたユーザ 同じPCを使用する人

⑤「変数の編集」ダイアログボックスで、変数名と変数値を追加しましょう

ステップ2:Pythonコードで環境変数を読み込む

Pythonコードで、環境変数を読み込む方法を紹介します。

osモジュールのgetenv()関数を使用します。

  • os.getenv('環境変数名')

api_keyという変数に"API_KEY_SAMPLE"という環境変数を読み込むサンプルコードを実行してみます。

import os

api_key = os.getenv('API_KEY_SAMPLE')

print(api_key)
# sample_value

APIキーやパスワードなどの機密情報は、このようにして環境変数からPythonコードに渡すようにするといいですね

環境変数を使ったプログラムの実装例

天気情報を取得できるOpenWeatherというサービスのAPIを使用してみる例を紹介します。

このコードの中でも環境変数からAPIキーを取得している点に注目してください。

import os
import requests

# 環境変数にあるAPI_KEYを取得
api_key = os.getenv('API_KEY')

# 都市名を入れると、OpenWeatherから天気情報を取得する関数
def get_weather_data(city):
    url = f'https://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}'
    response = requests.get(url)
    return response.json()

# 実行例:東京の天気を取得
res = get_weather_data("tokyo")
# 天気は?
res["weather"]
# [{'id': 803, 'main': 'Clouds', 'description': 'broken clouds', 'icon': '04n'}]
# 気温は?
res["main"]["temp"]
# 289

コードにAPIキーを記入していないので、元のコードをそのまま記載することができていますね。

まとめ

今回は、PythonでAPIキーやパスワードなどの機密情報を環境変数に保存して、os.getenv()を使用して読み込む方法を紹介しました。

初めは環境変数を読み込むなんてどうするんだ?!と思うかもしれませんが、慣れてしまうと簡単ですね。

この方法をしっかりマスターして、プログラム上に直接書き込むことのないよう、注意してください!