libs.utils.formatter

libs/utils/formatter.py

  1"""
  2libs/utils/formatter.py
  3"""
  4
  5import os
  6import random
  7import re
  8
  9import pandas as pd
 10
 11import libs.global_value as g
 12from libs.data import lookup
 13from libs.utils import textutil
 14
 15
 16def floatfmt_adjust(df: pd.DataFrame, index: bool = False) -> list:
 17    """カラム名に応じたfloatfmtのリストを返す
 18
 19    Args:
 20        df (pd.DataFrame): チェックするデータ
 21        index (bool, optional): リストにIndexを含める. Defaults to False.
 22
 23    Returns:
 24        list: floatfmtに指定するリスト
 25    """
 26
 27    fmt: list = []
 28    if df.empty:
 29        return fmt
 30
 31    field: list = df.columns.tolist()
 32    if index:
 33        field.insert(0, df.index.name)
 34
 35    for x in field:
 36        match x:
 37            case "ゲーム数" | "game_count":
 38                fmt.append(".0f")
 39            case "win" | "lose" | "draw" | "top2" | "top3" | "gs_count":
 40                fmt.append(".0f")
 41            case "通算" | "通算ポイント" | "point_sum":
 42                fmt.append("+.1f")
 43            case "平均" | "平均ポイント" | "point_avg" | "区間ポイント" | "区間平均":
 44                fmt.append("+.1f")
 45            case "1st" | "2nd" | "3rd" | "4th" | "1位" | "2位" | "3位" | "4位" | "rank1" | "rank2" | "rank3" | "rank4":
 46                fmt.append(".0f")
 47            case "1st(%)" | "2nd(%)" | "3rd(%)" | "4th(%)" | "1位率" | "2位率" | "3位率" | "4位率":
 48                fmt.append(".2f")
 49            case "トビ" | "flying":
 50                fmt.append(".0f")
 51            case "トビ率":
 52                fmt.append(".2f")
 53            case "平均順位" | "平順" | "rank_avg":
 54                fmt.append(".2f")
 55            case "順位差" | "トップ差":
 56                fmt.append(".1f")
 57            case "レート":
 58                fmt.append(".1f")
 59            case "順位偏差" | "得点偏差":
 60                fmt.append(".0f")
 61            case "rpoint_max" | "rpoint_min" | "rpoint_mean":
 62                fmt.append(".0f")
 63            case _:
 64                fmt.append("")
 65
 66    return fmt
 67
 68
 69def column_alignment(df: pd.DataFrame, header: bool = False, index: bool = False) -> list:
 70    """カラム位置
 71
 72    Args:
 73        df (pd.DataFrame): チェックするデータ
 74        header (bool, optional): ヘッダを対象にする
 75        index (bool, optional): リストにIndexを含める. Defaults to False.
 76
 77    Returns:
 78        list: colalignに指定するリスト
 79    """
 80
 81    fmt: list = []  # global, right, center, left, decimal, None
 82    if df.empty:
 83        return fmt
 84
 85    field: list = df.columns.tolist()
 86    if index:
 87        field.insert(0, df.index.name)
 88
 89    if header:  # ヘッダ(すべて左寄せ)
 90        fmt = ["left"] * len(field)
 91    else:
 92        for x in field:
 93            match x:
 94                case "ゲーム数":
 95                    fmt.append("right")
 96                case "通算" | "平均" | "1位" | "2位" | "3位" | "4位" | " 平順" | "トビ":
 97                    fmt.append("right")
 98                case "通算" | "順位差" | "トップ差":
 99                    fmt.append("right")
100                case "レート" | "平均順位" | "順位偏差" | "平均素点" | "得点偏差":
101                    fmt.append("right")
102                case _:
103                    fmt.append("left")
104
105    return fmt
106
107
108def save_output(df: pd.DataFrame, kind: str, filename: str, headline: str | None = None) -> str | None:
109    """指定されたフォーマットでdfを保存する
110
111    Args:
112        df (pd.DataFrame): _description_
113        kind (str): フォーマット
114        filename (str): 保存ファイル名
115        headline (str | None, optional): 集計情報(ヘッダコメント). Defaults to None.
116
117    Returns:
118        Union[str, None]
119        - str: 保存したファイルパス
120        - None: 指定したフォーマットで保存できなかった場合
121    """
122
123    match kind.lower():
124        case "csv":
125            data = df.to_csv(index=False)
126        case "text" | "txt":
127            data = df.to_markdown(
128                index=False,
129                tablefmt="outline",
130                floatfmt=floatfmt_adjust(df),
131                colalign=column_alignment(df, False),
132                # headersalign=column_alignment(df, True),  # ToDo: python-tabulate >= 0.10.0
133            )
134        case _:
135            return None
136
137    # 保存
138    save_file = os.path.join(g.cfg.setting.work_dir, filename)
139    with open(save_file, "w", encoding="utf-8") as writefile:
140        if headline is not None:  # ヘッダ書き込み
141            for line in headline.splitlines():
142                writefile.writelines(f"# {line}\n")
143            writefile.writelines("\n")
144
145        writefile.writelines(data)
146
147    return save_file
148
149
150def debug_out(msg1: str | list, msg2: str | dict | list | bool | None = None) -> None:
151    """メッセージ標準出力(テスト用)
152
153    Args:
154        msg1 (str | list): メッセージ1
155        msg2 (str | dict | list | bool | None, optional): メッセージ2. Defaults to None.
156    """
157
158    print(msg1)
159    if isinstance(msg2, dict):
160        for _, val in msg2.items():
161            print(val)
162    elif msg2:
163        print(msg2)
164
165
166def name_replace(pname: str, add_mark: bool = False) -> str:
167    """表記ブレ修正(正規化)
168
169    Args:
170        pname (str): 対象プレイヤー名
171        add_mark (bool, optional): ゲストマークを付与する. Defaults to False.
172
173    Returns:
174        str: 表記ブレ修正後のプレイヤー名
175    """
176
177    check_list = list(set(g.member_list.keys()))  # 別名を含むリスト
178    check_team = lookup.internal.get_team()
179
180    def _judge(check: str) -> str:
181        if g.params.get("individual"):
182            if check in check_list:
183                return g.member_list.get(check, check)
184        else:
185            if check in check_team:
186                return check
187        return ""
188
189    if (ret_name := _judge(textutil.str_conv(pname, "h2z"))):  # 半角数字 -> 全角数字
190        return ret_name
191
192    pname = honor_remove(pname)  # 敬称削除
193
194    if (ret_name := _judge(pname)):
195        return ret_name
196
197    if (ret_name := _judge(textutil.str_conv(pname, "k2h"))):  # カタカナ -> ひらがな
198        return ret_name
199
200    if (ret_name := _judge(textutil.str_conv(pname, "h2k"))):  # ひらがな -> カタカナ
201        return ret_name
202
203    # メンバーリストに見つからない場合
204    if g.params.get("unregistered_replace"):
205        pname = g.cfg.member.guest_name
206    elif add_mark:
207        pname = f"{pname}({g.cfg.setting.guest_mark})"
208
209    return pname
210
211
212def honor_remove(name: str) -> str:
213    """敬称削除
214
215    Args:
216        name (str): 対象の名前
217
218    Returns:
219        str: 敬称を削除した名前
220    """
221
222    honor = r"(くん|さん|ちゃん|クン|サン|チャン|君)$"
223    if re.match(fr".*{honor}", name):
224        if not re.match(fr".*(っ|ッ|ー){honor}", name):
225            name = re.sub(fr"{honor}", "", name)
226
227    return name
228
229
230def anonymous_mapping(name_list: list, initial: int = 0) -> dict:
231    """名前リストから変換用辞書を生成
232
233    Args:
234        name_list (list): 名前リスト
235        initial (int, optional): インデックス初期値. Defaults to 0.
236
237    Returns:
238        dict: マッピング用辞書
239    """
240
241    ret: dict = {}
242
243    if g.params.get("individual", True):
244        prefix = "Player"
245        id_list = lookup.db.get_member_id()
246    else:
247        prefix = "Team"
248        id_list = {x["team"]: x["id"] for x in g.team_list}
249
250    if len(name_list) == 1:
251        name = name_list[0]
252        if name in id_list:
253            idx = id_list[name]
254        else:
255            idx = int(random.random() * 100 + 100)
256        ret[name] = f"{prefix}_{idx + initial:03d}"
257    else:
258        random.shuffle(name_list)
259        for idx, name in enumerate(name_list):
260            ret[name] = f"{prefix}_{idx + initial:03d}"
261
262    return ret
263
264
265def df_rename(df: pd.DataFrame, short=True) -> pd.DataFrame:
266    """カラム名をリネームする
267
268    Args:
269        df (pd.DataFrame): 対象データフレーム
270        short (bool, optional): 略語にリネーム. Defaults to True.
271
272    Returns:
273        pd.DataFrame: リネーム後のデータフレーム
274    """
275
276    rename_dict: dict = {
277        "playtime": "日時",
278        "rate": "レート",
279        #
280        "rpoint": "素点",
281        "point": "獲得ポイント",
282        "rpoint_avg": "平均素点",
283        "point_dev": "得点偏差", "rank_dev": "順位偏差",
284        "grade": "段位",
285        # レコード
286        "max_top": "連続トップ", "max_top2": "連続連対", "max_top3": "連続ラス回避",
287        "max_low": "連続トップなし", "max_low2": "連続逆連対", "max_low4": "連続ラス",
288        "max_point": "最大獲得ポイント", "min_point": "最小獲得ポイント",
289        "max_rpoint": "最大素点", "min_rpoint": "最小素点",
290        # 直接対決
291        "results": "対戦結果", "win%": "勝率",
292        "my_point_sum": "獲得ポイント(自分)", "my_point_avg": "平均ポイント(自分)",
293        "vs_point_sum": "獲得ポイント(相手)", "vs_point_avg": "平均ポイント(相手)",
294        "my_rpoint_avg": "平均素点(自分)", "my_rank_avg": "平均順位(自分)", "my_rank_distr": "順位分布(自分)",
295        "vs_rpoint_avg": "平均素点(相手)", "vs_rank_avg": "平均順位(相手)", "vs_rank_distr": "順位分布(相手)",
296    }
297
298    for x in df.columns:
299        match x:
300            case "rank":
301                rename_dict[x] = "#" if short else "順位"
302            case "name" | "player":
303                rename_dict[x] = "名前" if short else "プレイヤー名"
304            case "team":
305                rename_dict[x] = "チーム" if short else "チーム名"
306            case "count" | "game":
307                rename_dict[x] = "ゲーム数"
308            case "pt_total" | "total_point" | "point_sum" | "total_mix":
309                rename_dict[x] = "通算" if short else "通算ポイント"
310            case "pt_avg" | "avg_point" | "point_avg" | "avg_mix":
311                rename_dict[x] = "平均" if short else "平均ポイント"
312            case "ex_point":
313                rename_dict[x] = "卓外" if short else "卓外ポイント"
314            case "rank_distr" | "rank_distr1" | "rank_distr2":
315                rename_dict[x] = "順位分布"
316            case "rank_avg":
317                rename_dict[x] = "平順" if short else "平均順位"
318            case "1st" | "rank1" | "1st_mix":
319                rename_dict[x] = "1位"
320            case "2nd" | "rank2" | "2nd_mix":
321                rename_dict[x] = "2位"
322            case "3rd" | "rank3" | "3rd_mix":
323                rename_dict[x] = "3位"
324            case "4th" | "rank4" | "4th_mix":
325                rename_dict[x] = "4位"
326            case "1st(%)" | "1st_%" | "rank1_rate":
327                rename_dict[x] = "1位率"
328            case "2nd(%)" | "2nd_%" | "rank2_rate":
329                rename_dict[x] = "2位率"
330            case "3rd(%)" | "3rd_%" | "rank3_rate":
331                rename_dict[x] = "3位率"
332            case "4th(%)" | "4th_%" | "rank4_rate":
333                rename_dict[x] = "4位率"
334            case "1st_count":
335                rename_dict[x] = "1位数"
336            case "2nd_count":
337                rename_dict[x] = "2位数"
338            case "3rd_count":
339                rename_dict[x] = "3位数"
340            case "4th_count":
341                rename_dict[x] = "4位数"
342            case "flying" | "flying_mix":
343                rename_dict[x] = "トビ"
344            case "flying_count":
345                rename_dict[x] = "トビ数"
346            case "flying_rate" | "flying_%":
347                rename_dict[x] = "トビ率"
348            case "pt_diff":
349                rename_dict[x] = "差分"
350            case "diff_from_above":
351                rename_dict[x] = "順位差"
352            case "diff_from_top":
353                rename_dict[x] = "トップ差"
354            case "yakuman_mix" | "grandslam":
355                rename_dict[x] = "役満和了"
356            case "yakuman_count":
357                rename_dict[x] = "役満和了数"
358            case "yakuman_%":
359                rename_dict[x] = "役満和了率"
360
361    if not g.params.get("individual"):
362        rename_dict.update(name="チーム" if short else "チーム名")
363
364    return df.rename(columns=rename_dict)
def floatfmt_adjust(df: pandas.core.frame.DataFrame, index: bool = False) -> list:
17def floatfmt_adjust(df: pd.DataFrame, index: bool = False) -> list:
18    """カラム名に応じたfloatfmtのリストを返す
19
20    Args:
21        df (pd.DataFrame): チェックするデータ
22        index (bool, optional): リストにIndexを含める. Defaults to False.
23
24    Returns:
25        list: floatfmtに指定するリスト
26    """
27
28    fmt: list = []
29    if df.empty:
30        return fmt
31
32    field: list = df.columns.tolist()
33    if index:
34        field.insert(0, df.index.name)
35
36    for x in field:
37        match x:
38            case "ゲーム数" | "game_count":
39                fmt.append(".0f")
40            case "win" | "lose" | "draw" | "top2" | "top3" | "gs_count":
41                fmt.append(".0f")
42            case "通算" | "通算ポイント" | "point_sum":
43                fmt.append("+.1f")
44            case "平均" | "平均ポイント" | "point_avg" | "区間ポイント" | "区間平均":
45                fmt.append("+.1f")
46            case "1st" | "2nd" | "3rd" | "4th" | "1位" | "2位" | "3位" | "4位" | "rank1" | "rank2" | "rank3" | "rank4":
47                fmt.append(".0f")
48            case "1st(%)" | "2nd(%)" | "3rd(%)" | "4th(%)" | "1位率" | "2位率" | "3位率" | "4位率":
49                fmt.append(".2f")
50            case "トビ" | "flying":
51                fmt.append(".0f")
52            case "トビ率":
53                fmt.append(".2f")
54            case "平均順位" | "平順" | "rank_avg":
55                fmt.append(".2f")
56            case "順位差" | "トップ差":
57                fmt.append(".1f")
58            case "レート":
59                fmt.append(".1f")
60            case "順位偏差" | "得点偏差":
61                fmt.append(".0f")
62            case "rpoint_max" | "rpoint_min" | "rpoint_mean":
63                fmt.append(".0f")
64            case _:
65                fmt.append("")
66
67    return fmt

カラム名に応じたfloatfmtのリストを返す

Arguments:
  • df (pd.DataFrame): チェックするデータ
  • index (bool, optional): リストにIndexを含める. Defaults to False.
Returns:

list: floatfmtに指定するリスト

def column_alignment( df: pandas.core.frame.DataFrame, header: bool = False, index: bool = False) -> list:
 70def column_alignment(df: pd.DataFrame, header: bool = False, index: bool = False) -> list:
 71    """カラム位置
 72
 73    Args:
 74        df (pd.DataFrame): チェックするデータ
 75        header (bool, optional): ヘッダを対象にする
 76        index (bool, optional): リストにIndexを含める. Defaults to False.
 77
 78    Returns:
 79        list: colalignに指定するリスト
 80    """
 81
 82    fmt: list = []  # global, right, center, left, decimal, None
 83    if df.empty:
 84        return fmt
 85
 86    field: list = df.columns.tolist()
 87    if index:
 88        field.insert(0, df.index.name)
 89
 90    if header:  # ヘッダ(すべて左寄せ)
 91        fmt = ["left"] * len(field)
 92    else:
 93        for x in field:
 94            match x:
 95                case "ゲーム数":
 96                    fmt.append("right")
 97                case "通算" | "平均" | "1位" | "2位" | "3位" | "4位" | " 平順" | "トビ":
 98                    fmt.append("right")
 99                case "通算" | "順位差" | "トップ差":
100                    fmt.append("right")
101                case "レート" | "平均順位" | "順位偏差" | "平均素点" | "得点偏差":
102                    fmt.append("right")
103                case _:
104                    fmt.append("left")
105
106    return fmt

カラム位置

Arguments:
  • df (pd.DataFrame): チェックするデータ
  • header (bool, optional): ヘッダを対象にする
  • index (bool, optional): リストにIndexを含める. Defaults to False.
Returns:

list: colalignに指定するリスト

def save_output( df: pandas.core.frame.DataFrame, kind: str, filename: str, headline: str | None = None) -> str | None:
109def save_output(df: pd.DataFrame, kind: str, filename: str, headline: str | None = None) -> str | None:
110    """指定されたフォーマットでdfを保存する
111
112    Args:
113        df (pd.DataFrame): _description_
114        kind (str): フォーマット
115        filename (str): 保存ファイル名
116        headline (str | None, optional): 集計情報(ヘッダコメント). Defaults to None.
117
118    Returns:
119        Union[str, None]
120        - str: 保存したファイルパス
121        - None: 指定したフォーマットで保存できなかった場合
122    """
123
124    match kind.lower():
125        case "csv":
126            data = df.to_csv(index=False)
127        case "text" | "txt":
128            data = df.to_markdown(
129                index=False,
130                tablefmt="outline",
131                floatfmt=floatfmt_adjust(df),
132                colalign=column_alignment(df, False),
133                # headersalign=column_alignment(df, True),  # ToDo: python-tabulate >= 0.10.0
134            )
135        case _:
136            return None
137
138    # 保存
139    save_file = os.path.join(g.cfg.setting.work_dir, filename)
140    with open(save_file, "w", encoding="utf-8") as writefile:
141        if headline is not None:  # ヘッダ書き込み
142            for line in headline.splitlines():
143                writefile.writelines(f"# {line}\n")
144            writefile.writelines("\n")
145
146        writefile.writelines(data)
147
148    return save_file

指定されたフォーマットでdfを保存する

Arguments:
  • df (pd.DataFrame): _description_
  • kind (str): フォーマット
  • filename (str): 保存ファイル名
  • headline (str | None, optional): 集計情報(ヘッダコメント). Defaults to None.
Returns:

Union[str, None]

  • str: 保存したファイルパス
  • None: 指定したフォーマットで保存できなかった場合
def debug_out(msg1: str | list, msg2: str | dict | list | bool | None = None) -> None:
151def debug_out(msg1: str | list, msg2: str | dict | list | bool | None = None) -> None:
152    """メッセージ標準出力(テスト用)
153
154    Args:
155        msg1 (str | list): メッセージ1
156        msg2 (str | dict | list | bool | None, optional): メッセージ2. Defaults to None.
157    """
158
159    print(msg1)
160    if isinstance(msg2, dict):
161        for _, val in msg2.items():
162            print(val)
163    elif msg2:
164        print(msg2)

メッセージ標準出力(テスト用)

Arguments:
  • msg1 (str | list): メッセージ1
  • msg2 (str | dict | list | bool | None, optional): メッセージ2. Defaults to None.
def name_replace(pname: str, add_mark: bool = False) -> str:
167def name_replace(pname: str, add_mark: bool = False) -> str:
168    """表記ブレ修正(正規化)
169
170    Args:
171        pname (str): 対象プレイヤー名
172        add_mark (bool, optional): ゲストマークを付与する. Defaults to False.
173
174    Returns:
175        str: 表記ブレ修正後のプレイヤー名
176    """
177
178    check_list = list(set(g.member_list.keys()))  # 別名を含むリスト
179    check_team = lookup.internal.get_team()
180
181    def _judge(check: str) -> str:
182        if g.params.get("individual"):
183            if check in check_list:
184                return g.member_list.get(check, check)
185        else:
186            if check in check_team:
187                return check
188        return ""
189
190    if (ret_name := _judge(textutil.str_conv(pname, "h2z"))):  # 半角数字 -> 全角数字
191        return ret_name
192
193    pname = honor_remove(pname)  # 敬称削除
194
195    if (ret_name := _judge(pname)):
196        return ret_name
197
198    if (ret_name := _judge(textutil.str_conv(pname, "k2h"))):  # カタカナ -> ひらがな
199        return ret_name
200
201    if (ret_name := _judge(textutil.str_conv(pname, "h2k"))):  # ひらがな -> カタカナ
202        return ret_name
203
204    # メンバーリストに見つからない場合
205    if g.params.get("unregistered_replace"):
206        pname = g.cfg.member.guest_name
207    elif add_mark:
208        pname = f"{pname}({g.cfg.setting.guest_mark})"
209
210    return pname

表記ブレ修正(正規化)

Arguments:
  • pname (str): 対象プレイヤー名
  • add_mark (bool, optional): ゲストマークを付与する. Defaults to False.
Returns:

str: 表記ブレ修正後のプレイヤー名

def honor_remove(name: str) -> str:
213def honor_remove(name: str) -> str:
214    """敬称削除
215
216    Args:
217        name (str): 対象の名前
218
219    Returns:
220        str: 敬称を削除した名前
221    """
222
223    honor = r"(くん|さん|ちゃん|クン|サン|チャン|君)$"
224    if re.match(fr".*{honor}", name):
225        if not re.match(fr".*(っ|ッ|ー){honor}", name):
226            name = re.sub(fr"{honor}", "", name)
227
228    return name

敬称削除

Arguments:
  • name (str): 対象の名前
Returns:

str: 敬称を削除した名前

def anonymous_mapping(name_list: list, initial: int = 0) -> dict:
231def anonymous_mapping(name_list: list, initial: int = 0) -> dict:
232    """名前リストから変換用辞書を生成
233
234    Args:
235        name_list (list): 名前リスト
236        initial (int, optional): インデックス初期値. Defaults to 0.
237
238    Returns:
239        dict: マッピング用辞書
240    """
241
242    ret: dict = {}
243
244    if g.params.get("individual", True):
245        prefix = "Player"
246        id_list = lookup.db.get_member_id()
247    else:
248        prefix = "Team"
249        id_list = {x["team"]: x["id"] for x in g.team_list}
250
251    if len(name_list) == 1:
252        name = name_list[0]
253        if name in id_list:
254            idx = id_list[name]
255        else:
256            idx = int(random.random() * 100 + 100)
257        ret[name] = f"{prefix}_{idx + initial:03d}"
258    else:
259        random.shuffle(name_list)
260        for idx, name in enumerate(name_list):
261            ret[name] = f"{prefix}_{idx + initial:03d}"
262
263    return ret

名前リストから変換用辞書を生成

Arguments:
  • name_list (list): 名前リスト
  • initial (int, optional): インデックス初期値. Defaults to 0.
Returns:

dict: マッピング用辞書

def df_rename( df: pandas.core.frame.DataFrame, short=True) -> pandas.core.frame.DataFrame:
266def df_rename(df: pd.DataFrame, short=True) -> pd.DataFrame:
267    """カラム名をリネームする
268
269    Args:
270        df (pd.DataFrame): 対象データフレーム
271        short (bool, optional): 略語にリネーム. Defaults to True.
272
273    Returns:
274        pd.DataFrame: リネーム後のデータフレーム
275    """
276
277    rename_dict: dict = {
278        "playtime": "日時",
279        "rate": "レート",
280        #
281        "rpoint": "素点",
282        "point": "獲得ポイント",
283        "rpoint_avg": "平均素点",
284        "point_dev": "得点偏差", "rank_dev": "順位偏差",
285        "grade": "段位",
286        # レコード
287        "max_top": "連続トップ", "max_top2": "連続連対", "max_top3": "連続ラス回避",
288        "max_low": "連続トップなし", "max_low2": "連続逆連対", "max_low4": "連続ラス",
289        "max_point": "最大獲得ポイント", "min_point": "最小獲得ポイント",
290        "max_rpoint": "最大素点", "min_rpoint": "最小素点",
291        # 直接対決
292        "results": "対戦結果", "win%": "勝率",
293        "my_point_sum": "獲得ポイント(自分)", "my_point_avg": "平均ポイント(自分)",
294        "vs_point_sum": "獲得ポイント(相手)", "vs_point_avg": "平均ポイント(相手)",
295        "my_rpoint_avg": "平均素点(自分)", "my_rank_avg": "平均順位(自分)", "my_rank_distr": "順位分布(自分)",
296        "vs_rpoint_avg": "平均素点(相手)", "vs_rank_avg": "平均順位(相手)", "vs_rank_distr": "順位分布(相手)",
297    }
298
299    for x in df.columns:
300        match x:
301            case "rank":
302                rename_dict[x] = "#" if short else "順位"
303            case "name" | "player":
304                rename_dict[x] = "名前" if short else "プレイヤー名"
305            case "team":
306                rename_dict[x] = "チーム" if short else "チーム名"
307            case "count" | "game":
308                rename_dict[x] = "ゲーム数"
309            case "pt_total" | "total_point" | "point_sum" | "total_mix":
310                rename_dict[x] = "通算" if short else "通算ポイント"
311            case "pt_avg" | "avg_point" | "point_avg" | "avg_mix":
312                rename_dict[x] = "平均" if short else "平均ポイント"
313            case "ex_point":
314                rename_dict[x] = "卓外" if short else "卓外ポイント"
315            case "rank_distr" | "rank_distr1" | "rank_distr2":
316                rename_dict[x] = "順位分布"
317            case "rank_avg":
318                rename_dict[x] = "平順" if short else "平均順位"
319            case "1st" | "rank1" | "1st_mix":
320                rename_dict[x] = "1位"
321            case "2nd" | "rank2" | "2nd_mix":
322                rename_dict[x] = "2位"
323            case "3rd" | "rank3" | "3rd_mix":
324                rename_dict[x] = "3位"
325            case "4th" | "rank4" | "4th_mix":
326                rename_dict[x] = "4位"
327            case "1st(%)" | "1st_%" | "rank1_rate":
328                rename_dict[x] = "1位率"
329            case "2nd(%)" | "2nd_%" | "rank2_rate":
330                rename_dict[x] = "2位率"
331            case "3rd(%)" | "3rd_%" | "rank3_rate":
332                rename_dict[x] = "3位率"
333            case "4th(%)" | "4th_%" | "rank4_rate":
334                rename_dict[x] = "4位率"
335            case "1st_count":
336                rename_dict[x] = "1位数"
337            case "2nd_count":
338                rename_dict[x] = "2位数"
339            case "3rd_count":
340                rename_dict[x] = "3位数"
341            case "4th_count":
342                rename_dict[x] = "4位数"
343            case "flying" | "flying_mix":
344                rename_dict[x] = "トビ"
345            case "flying_count":
346                rename_dict[x] = "トビ数"
347            case "flying_rate" | "flying_%":
348                rename_dict[x] = "トビ率"
349            case "pt_diff":
350                rename_dict[x] = "差分"
351            case "diff_from_above":
352                rename_dict[x] = "順位差"
353            case "diff_from_top":
354                rename_dict[x] = "トップ差"
355            case "yakuman_mix" | "grandslam":
356                rename_dict[x] = "役満和了"
357            case "yakuman_count":
358                rename_dict[x] = "役満和了数"
359            case "yakuman_%":
360                rename_dict[x] = "役満和了率"
361
362    if not g.params.get("individual"):
363        rename_dict.update(name="チーム" if short else "チーム名")
364
365    return df.rename(columns=rename_dict)

カラム名をリネームする

Arguments:
  • df (pd.DataFrame): 対象データフレーム
  • short (bool, optional): 略語にリネーム. Defaults to True.
Returns:

pd.DataFrame: リネーム後のデータフレーム