😇

PythonのTips集

2024/05/13に公開

はじめに

Pythonを書く際に、よく使うテクニックやツールについてまとめました。特に、自分が今まで困ってきた内容を中心に取り上げており、自分のためのメモとしても活用しています。

Seaborn

SeabornはPythonで利用可能なデータ可視化ライブラリです。Matplotlibのラッパーライブラリであるため、Matplotlibの機能を利用することができます。Seabornは、データの可視化を行う際に、Matplotlibよりも簡単に利用できるため、データの可視化を行う際には、Seabornをよく利用しています。

データの読み込み

seabornは、sns.load_dataset関数を用いて、データを読み込むことができます。以下のコードを実行することで、tipsデータを読み込むことができます。

import seaborn as sns

df = sns.load_dataset("tips")
データの詳細
total_bill tip sex smoker day time size
0 16.99 1.01 Female No Sun Dinner 2
1 10.34 1.66 Male No Sun Dinner 3
2 21.01 3.5 Male No Sun Dinner 3
3 23.68 3.31 Male No Sun Dinner 2
4 24.59 3.61 Female No Sun Dinner 4
5 25.29 4.71 Male No Sun Dinner 4
6 8.77 2 Male No Sun Dinner 2
7 26.88 3.12 Male No Sun Dinner 4
8 15.04 1.96 Male No Sun Dinner 2
9 14.78 3.23 Male No Sun Dinner 2
10 10.27 1.71 Male No Sun Dinner 2
11 35.26 5 Female No Sun Dinner 4
12 15.42 1.57 Male No Sun Dinner 2
13 18.43 3 Male No Sun Dinner 4
14 14.83 3.02 Female No Sun Dinner 2
15 21.58 3.92 Male No Sun Dinner 2
16 10.33 1.67 Female No Sun Dinner 3
17 16.29 3.71 Male No Sun Dinner 3
18 16.97 3.5 Female No Sun Dinner 3
19 20.65 3.35 Male No Sat Dinner 3
20 17.92 4.08 Male No Sat Dinner 2
21 20.29 2.75 Female No Sat Dinner 2
22 15.77 2.23 Female No Sat Dinner 2
23 39.42 7.58 Male No Sat Dinner 4
24 19.82 3.18 Male No Sat Dinner 2
25 17.81 2.34 Male No Sat Dinner 4
26 13.37 2 Male No Sat Dinner 2
27 12.69 2 Male No Sat Dinner 2
28 21.7 4.3 Male No Sat Dinner 2
29 19.65 3 Female No Sat Dinner 2
30 9.55 1.45 Male No Sat Dinner 2
31 18.35 2.5 Male No Sat Dinner 4
32 15.06 3 Female No Sat Dinner 2
33 20.69 2.45 Female No Sat Dinner 4
34 17.78 3.27 Male No Sat Dinner 2
35 24.06 3.6 Male No Sat Dinner 3
36 16.31 2 Male No Sat Dinner 3
37 16.93 3.07 Female No Sat Dinner 3
38 18.69 2.31 Male No Sat Dinner 3
39 31.27 5 Male No Sat Dinner 3
40 16.04 2.24 Male No Sat Dinner 3
41 17.46 2.54 Male No Sun Dinner 2
42 13.94 3.06 Male No Sun Dinner 2
43 9.68 1.32 Male No Sun Dinner 2
44 30.4 5.6 Male No Sun Dinner 4
45 18.29 3 Male No Sun Dinner 2
46 22.23 5 Male No Sun Dinner 2
47 32.4 6 Male No Sun Dinner 4
48 28.55 2.05 Male No Sun Dinner 3
49 18.04 3 Male No Sun Dinner 2
50 12.54 2.5 Male No Sun Dinner 2
51 10.29 2.6 Female No Sun Dinner 2
52 34.81 5.2 Female No Sun Dinner 4
53 9.94 1.56 Male No Sun Dinner 2
54 25.56 4.34 Male No Sun Dinner 4
55 19.49 3.51 Male No Sun Dinner 2
56 38.01 3 Male Yes Sat Dinner 4
57 26.41 1.5 Female No Sat Dinner 2
58 11.24 1.76 Male Yes Sat Dinner 2
59 48.27 6.73 Male No Sat Dinner 4
60 20.29 3.21 Male Yes Sat Dinner 2
61 13.81 2 Male Yes Sat Dinner 2
62 11.02 1.98 Male Yes Sat Dinner 2
63 18.29 3.76 Male Yes Sat Dinner 4
64 17.59 2.64 Male No Sat Dinner 3
65 20.08 3.15 Male No Sat Dinner 3
66 16.45 2.47 Female No Sat Dinner 2
67 3.07 1 Female Yes Sat Dinner 1
68 20.23 2.01 Male No Sat Dinner 2
69 15.01 2.09 Male Yes Sat Dinner 2
70 12.02 1.97 Male No Sat Dinner 2
71 17.07 3 Female No Sat Dinner 3
72 26.86 3.14 Female Yes Sat Dinner 2
73 25.28 5 Female Yes Sat Dinner 2
74 14.73 2.2 Female No Sat Dinner 2
75 10.51 1.25 Male No Sat Dinner 2
76 17.92 3.08 Male Yes Sat Dinner 2
77 27.2 4 Male No Thur Lunch 4
78 22.76 3 Male No Thur Lunch 2
79 17.29 2.71 Male No Thur Lunch 2
80 19.44 3 Male Yes Thur Lunch 2
81 16.66 3.4 Male No Thur Lunch 2
82 10.07 1.83 Female No Thur Lunch 1
83 32.68 5 Male Yes Thur Lunch 2
84 15.98 2.03 Male No Thur Lunch 2
85 34.83 5.17 Female No Thur Lunch 4
86 13.03 2 Male No Thur Lunch 2
87 18.28 4 Male No Thur Lunch 2
88 24.71 5.85 Male No Thur Lunch 2
89 21.16 3 Male No Thur Lunch 2
90 28.97 3 Male Yes Fri Dinner 2
91 22.49 3.5 Male No Fri Dinner 2
92 5.75 1 Female Yes Fri Dinner 2
93 16.32 4.3 Female Yes Fri Dinner 2
94 22.75 3.25 Female No Fri Dinner 2
95 40.17 4.73 Male Yes Fri Dinner 4
96 27.28 4 Male Yes Fri Dinner 2
97 12.03 1.5 Male Yes Fri Dinner 2
98 21.01 3 Male Yes Fri Dinner 2
99 12.46 1.5 Male No Fri Dinner 2
100 11.35 2.5 Female Yes Fri Dinner 2
101 15.38 3 Female Yes Fri Dinner 2
102 44.3 2.5 Female Yes Sat Dinner 3
103 22.42 3.48 Female Yes Sat Dinner 2
104 20.92 4.08 Female No Sat Dinner 2
105 15.36 1.64 Male Yes Sat Dinner 2
106 20.49 4.06 Male Yes Sat Dinner 2
107 25.21 4.29 Male Yes Sat Dinner 2
108 18.24 3.76 Male No Sat Dinner 2
109 14.31 4 Female Yes Sat Dinner 2
110 14 3 Male No Sat Dinner 2
111 7.25 1 Female No Sat Dinner 1
112 38.07 4 Male No Sun Dinner 3
113 23.95 2.55 Male No Sun Dinner 2
114 25.71 4 Female No Sun Dinner 3
115 17.31 3.5 Female No Sun Dinner 2
116 29.93 5.07 Male No Sun Dinner 4
117 10.65 1.5 Female No Thur Lunch 2
118 12.43 1.8 Female No Thur Lunch 2
119 24.08 2.92 Female No Thur Lunch 4
120 11.69 2.31 Male No Thur Lunch 2
121 13.42 1.68 Female No Thur Lunch 2
122 14.26 2.5 Male No Thur Lunch 2
123 15.95 2 Male No Thur Lunch 2
124 12.48 2.52 Female No Thur Lunch 2
125 29.8 4.2 Female No Thur Lunch 6
126 8.52 1.48 Male No Thur Lunch 2
127 14.52 2 Female No Thur Lunch 2
128 11.38 2 Female No Thur Lunch 2
129 22.82 2.18 Male No Thur Lunch 3
130 19.08 1.5 Male No Thur Lunch 2
131 20.27 2.83 Female No Thur Lunch 2
132 11.17 1.5 Female No Thur Lunch 2
133 12.26 2 Female No Thur Lunch 2
134 18.26 3.25 Female No Thur Lunch 2
135 8.51 1.25 Female No Thur Lunch 2
136 10.33 2 Female No Thur Lunch 2
137 14.15 2 Female No Thur Lunch 2
138 16 2 Male Yes Thur Lunch 2
139 13.16 2.75 Female No Thur Lunch 2
140 17.47 3.5 Female No Thur Lunch 2
141 34.3 6.7 Male No Thur Lunch 6
142 41.19 5 Male No Thur Lunch 5
143 27.05 5 Female No Thur Lunch 6
144 16.43 2.3 Female No Thur Lunch 2
145 8.35 1.5 Female No Thur Lunch 2
146 18.64 1.36 Female No Thur Lunch 3
147 11.87 1.63 Female No Thur Lunch 2
148 9.78 1.73 Male No Thur Lunch 2
149 7.51 2 Male No Thur Lunch 2
150 14.07 2.5 Male No Sun Dinner 2
151 13.13 2 Male No Sun Dinner 2
152 17.26 2.74 Male No Sun Dinner 3
153 24.55 2 Male No Sun Dinner 4
154 19.77 2 Male No Sun Dinner 4
155 29.85 5.14 Female No Sun Dinner 5
156 48.17 5 Male No Sun Dinner 6
157 25 3.75 Female No Sun Dinner 4
158 13.39 2.61 Female No Sun Dinner 2
159 16.49 2 Male No Sun Dinner 4
160 21.5 3.5 Male No Sun Dinner 4
161 12.66 2.5 Male No Sun Dinner 2
162 16.21 2 Female No Sun Dinner 3
163 13.81 2 Male No Sun Dinner 2
164 17.51 3 Female Yes Sun Dinner 2
165 24.52 3.48 Male No Sun Dinner 3
166 20.76 2.24 Male No Sun Dinner 2
167 31.71 4.5 Male No Sun Dinner 4
168 10.59 1.61 Female Yes Sat Dinner 2
169 10.63 2 Female Yes Sat Dinner 2
170 50.81 10 Male Yes Sat Dinner 3
171 15.81 3.16 Male Yes Sat Dinner 2
172 7.25 5.15 Male Yes Sun Dinner 2
173 31.85 3.18 Male Yes Sun Dinner 2
174 16.82 4 Male Yes Sun Dinner 2
175 32.9 3.11 Male Yes Sun Dinner 2
176 17.89 2 Male Yes Sun Dinner 2
177 14.48 2 Male Yes Sun Dinner 2
178 9.6 4 Female Yes Sun Dinner 2
179 34.63 3.55 Male Yes Sun Dinner 2
180 34.65 3.68 Male Yes Sun Dinner 4
181 23.33 5.65 Male Yes Sun Dinner 2
182 45.35 3.5 Male Yes Sun Dinner 3
183 23.17 6.5 Male Yes Sun Dinner 4
184 40.55 3 Male Yes Sun Dinner 2
185 20.69 5 Male No Sun Dinner 5
186 20.9 3.5 Female Yes Sun Dinner 3
187 30.46 2 Male Yes Sun Dinner 5
188 18.15 3.5 Female Yes Sun Dinner 3
189 23.1 4 Male Yes Sun Dinner 3
190 15.69 1.5 Male Yes Sun Dinner 2
191 19.81 4.19 Female Yes Thur Lunch 2
192 28.44 2.56 Male Yes Thur Lunch 2
193 15.48 2.02 Male Yes Thur Lunch 2
194 16.58 4 Male Yes Thur Lunch 2
195 7.56 1.44 Male No Thur Lunch 2
196 10.34 2 Male Yes Thur Lunch 2
197 43.11 5 Female Yes Thur Lunch 4
198 13 2 Female Yes Thur Lunch 2
199 13.51 2 Male Yes Thur Lunch 2
200 18.71 4 Male Yes Thur Lunch 3
201 12.74 2.01 Female Yes Thur Lunch 2
202 13 2 Female Yes Thur Lunch 2
203 16.4 2.5 Female Yes Thur Lunch 2
204 20.53 4 Male Yes Thur Lunch 4
205 16.47 3.23 Female Yes Thur Lunch 3
206 26.59 3.41 Male Yes Sat Dinner 3
207 38.73 3 Male Yes Sat Dinner 4
208 24.27 2.03 Male Yes Sat Dinner 2
209 12.76 2.23 Female Yes Sat Dinner 2
210 30.06 2 Male Yes Sat Dinner 3
211 25.89 5.16 Male Yes Sat Dinner 4
212 48.33 9 Male No Sat Dinner 4
213 13.27 2.5 Female Yes Sat Dinner 2
214 28.17 6.5 Female Yes Sat Dinner 3
215 12.9 1.1 Female Yes Sat Dinner 2
216 28.15 3 Male Yes Sat Dinner 5
217 11.59 1.5 Male Yes Sat Dinner 2
218 7.74 1.44 Male Yes Sat Dinner 2
219 30.14 3.09 Female Yes Sat Dinner 4
220 12.16 2.2 Male Yes Fri Lunch 2
221 13.42 3.48 Female Yes Fri Lunch 2
222 8.58 1.92 Male Yes Fri Lunch 1
223 15.98 3 Female No Fri Lunch 3
224 13.42 1.58 Male Yes Fri Lunch 2
225 16.27 2.5 Female Yes Fri Lunch 2
226 10.09 2 Female Yes Fri Lunch 2
227 20.45 3 Male No Sat Dinner 4
228 13.28 2.72 Male No Sat Dinner 2
229 22.12 2.88 Female Yes Sat Dinner 2
230 24.01 2 Male Yes Sat Dinner 4
231 15.69 3 Male Yes Sat Dinner 3
232 11.61 3.39 Male No Sat Dinner 2
233 10.77 1.47 Male No Sat Dinner 2
234 15.53 3 Male Yes Sat Dinner 2
235 10.07 1.25 Male No Sat Dinner 2
236 12.6 1 Male Yes Sat Dinner 2
237 32.83 1.17 Male Yes Sat Dinner 2
238 35.83 4.67 Female No Sat Dinner 3
239 29.03 5.92 Male No Sat Dinner 3
240 27.18 2 Female Yes Sat Dinner 2
241 22.67 2 Male Yes Sat Dinner 2
242 17.82 1.75 Male No Sat Dinner 2
243 18.78 3 Female No Thur Dinner 2

他にも、アヤメのデータirixや、タイタニックのデータtitanicなどがあります。
使用可能なデータセットは、sns.get_dataset_names()で確認できます。

catplotの使い方

catplotとは、洗練された可視化を短いコードで実現可能な関数です。
kindでグラフの種類を指定可能であり、散布図"strip"、箱ひげ図"box"、バイオリンプロット"violin"、棒グラフ"bar"、ポイントプロット"point"、カウントプロット"count"があります。

import seaborn as sns

df = sns.load_dataset("diamonds")

g = sns.catplot(
    data=df,         # データセットを指定
    kind="bar",      # グラフの種類を選択
    x="cut",         # X軸に"cut"を設定
    y="carat",       # Y軸に"carat"を設定
    hue="color",     # "color"に基づいて色分け
    col="clarity",   # "clarity"に基づいて列を分ける
    col_wrap=4,      # 一行あたりの列数を4に設定
    height=3,        # 各グラフの高さ
    aspect=1.0,      # 各グラフのアスペクト比 (大きいほど横長)
    errwidth=1.2,    # エラーバーの太さ
    # palette="Set2",  # カラーパレット(デフォルトが良いのでコメントアウト)
)
g.tick_params(axis="x", rotation=30)

凡例の位置を変更する方法

凡例はデフォルトで、グラフの右側に表示される。位置を変更したい時は、sns.move_legendを用いる。

sns.move_legend(
  obj=g,                        # g = sns.catplot()の戻り値
  loc="upper center",           # 凡例の位置を指定
  ncol=7,                       # 凡例の列数
  bbox_to_anchor=(0.51, 1.22),  # 凡例の位置を調整
  fontsize=14.5,                # 凡例のフォントサイズ
  frameon=True,                 # 凡例の枠線を表示
  columnspacing=0.5             # 凡例の列間のスペース
)

保存したpdfに凡例が表示されない時の対処法

グラフをg.fig.savefig()で保存した際に、凡例が表示されないことがある。その場合は、bbox_inches="tight"を追加する。

g.fig.savefig("name.pdf", bbox_inches="tight")
GitHubで編集を提案

Discussion