Как сделать этот код более подходящим для Pythonic? - PullRequest
0 голосов
/ 15 апреля 2019

Я построил график для блока данных и усов для моих данных, используя следующий код:

def make_labels(ax, boxplot):
    iqr = boxplot['boxes'][0]
    caps = boxplot['caps']
    med = boxplot['medians'][0]
    fly = boxplot['fliers'][0]
    xpos = med.get_xdata()
    xoff = 0.1 * (xpos[1] - xpos[0])
    xlabel = xpos[1] + xoff
    median = med.get_ydata()[1]
    pc25 = iqr.get_ydata().min()
    pc75 = iqr.get_ydata().max()
    capbottom = caps[0].get_ydata()[0]
    captop = caps[1].get_ydata()[0]
    ax.text(xlabel, median, 'Median = {:6.3g}'.format(median), va='center')
    ax.text(xlabel, pc25, '25th percentile = {:6.3g}'.format(pc25), va='center')
    ax.text(xlabel, pc75, '75th percentile = {:6.3g}'.format(pc75), va='center')
    ax.text(xlabel, capbottom, 'Bottom cap = {:6.3g}'.format(capbottom), va='center')
    ax.text(xlabel, captop, 'Top cap = {:6.3g}'.format(captop), va='center')
    for flier in fly.get_ydata():
        ax.text(1 + xoff, flier, 'Flier = {:6.3g}'.format(flier), va='center')  

, и это дает мне следующий график: enter image description here

Теперь, что я хочу сделать, это собрать все точки 'Flier', которые мы можем видеть на графике, и превратить их в список, и для этого я сделал следующее:

fliers_data = []    
def boxplots(boxplot):
    iqr = boxplot['boxes'][0]
    fly = boxplot['fliers'][0]
    pc25 = iqr.get_ydata().min()
    pc75 = iqr.get_ydata().max()
    inter_quart_range = pc75 - pc25
    max_q3 = pc75 + 1.5*inter_quart_range
    min_q1 = pc25 - 1.5*inter_quart_range   
    for flier in fly.get_ydata():
        if (flier > max_q3):
            fliers_data.append(flier)
        elif (flier < min_q1):
            fliers_data.append(flier)

Теперь яесть 2 запроса:

  1. В обеих функциях есть несколько похожих строк.Есть ли способ, которым я могу определить их один раз и использовать их в обеих функциях?
  2. Может ли вторая функция быть отредактирована или отредактирована более эффективным способом?

1 Ответ

1 голос
/ 15 апреля 2019

Я думаю, что в основном это довольно аккуратно, единственное, что я могу предложить, это пробелы между различными частями функций и, возможно, некоторые цитаты, чтобы сказать кому-то, читающему, что делает каждая часть?

Примерно так, например:

def myfunction(x):

# checking if x equals 10
    if x == 10:
        return True

# if equals 0 return string
    elif x == 0:
        return "equals zero"

# else return false
    else:
        return False

Кроме того, я думаю, что вы можете найти любые переменные, которые являются одинаковыми снаружи и перед обеими функциями (скажем, в самом начале вашего кода), они все еще должны быть доступны в функциях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...