Если снова решат ввести логарифмический дроп

Тема в разделе "Библиотека", создана пользователем Miluda, 22 июн 2021.

  1. Miluda

    Miluda Игрок

    на любом дистрибутиве анаконды, данные использовались из https://bit.ly/FixedRagindex, который у меня распакован в D:\Downloads.

    import pandas as pd
    import gc
    gc.enable()
    from tqdm import tqdm
    tqdm.pandas()
    pd.options.display.max_rows=99999
    import numpy as np

    #подготовка инфы по предметам
    items_raw = open(r'D:\Downloads\Ragindex v0.3.1 Full\Data\PRE\item_db.txt').readlines()[1:]
    items_raw = [x.strip() for x in items_raw]
    items_df = pd.DataFrame(columns=['id','price'])
    for row in tqdm(items_raw):
    items_df.loc[len(items_df)] = [row.split(',')[0],row.split(',')[4]]​
    items_df.id = items_df.id.progress_map(lambda x: x.replace('=',''))

    #подготовка инфы по мобам
    mobs_raw = open(r'D:\Downloads\Ragindex v0.3.1 Full\Data\PRE\mob_db.txt').readlines()[1:]
    mobs_df = pd.DataFrame(columns=['mob_id','item_id','drop_rate','mob_name'])
    for mob in tqdm(mobs_raw):
    mi = mob.split(',')[0].replace('=','')
    mn = mob.split(',')[1]
    ii = ''
    dr = ''
    for i in range(37,len(mob.split(','))):
    if i % 2 != 0:
    ii = mob.split(',').strip()​
    else:
    dr = mob.split(',').strip()​

    if ii != '' and dr != '':
    mobs_df.loc[len(mobs_df)] = [mi,ii,dr,mn]
    ii = ''
    dr = ''​
    mobs_df = mobs_df[mobs_df.drop_rate!='0']
    mobs_df = mobs_df.drop_duplicates(keep='first').reset_index(drop=True)

    #сведение мобов и предметов
    df = pd.merge(mobs_df,items_df,how='left',left_on='item_id',right_on='id')
    df.drop_rate = df.drop_rate.map(lambda x: float(x)/100)
    df.price = df.price.map(lambda x: float(x))

    #функция перевода 1х в логарифмический
    def make_logarithmic(rate):
    return np.round(rate*(3-np.log10(rate))**(np.log(4)/np.log(5)),decimals=2)​

    #применение данной функции, а также обычного среднего
    df['log_drop'] = df.drop_rate.progress_map(lambda x: make_logarithmic(x))
    df['mean_value'] = df.progress_apply(lambda x: x.price*x.log_drop/100, axis=1)

    #определение MVP
    boss = open(r'D:\Downloads\Ragindex v0.3.1 Full\Data\miniMVP.txt').readlines()+open(r'D:\Downloads\Ragindex v0.3.1 Full\Data\MVP.txt').readlines()
    boss = [x.strip() for x in boss]
    df['MVP'] = df.mob_id.map(lambda x: x in boss)

    #различные статистики
    by_mob_total = pd.DataFrame(df.groupby(['mob_id','MVP','mob_name'])['mean_value'].sum()).reset_index()
    by_mob_total = by_mob_total.sort_values('mean_value',ascending=False)
    by_mob_total[~by_mob_total.MVP].reset_index().drop('index',axis=1)

    #ссылка на РМС по ИД моба
    a = 1154
    print(f'https://ratemyserver.net/mob_db.php?mob_id={a}&small=1&back=1')

    Всю аналитическую часть по тому, на ком выгоднее - это уже сами
    Владимир и AlexaWhite нравится это.
  2. YellowBeam

    YellowBeam Игрок

    Я ничего не понял. Походу я супер тупой.
  3. Miluda

    Miluda Игрок

    покажи цитатами, где стало сложно?
  4. Maxwell

    Maxwell Игрок

    За сам факт, что в начале питоном импортируются панды, уже охота поставить плюсодин.
  5. Miluda

    Miluda Игрок

    я - человек ленивый, если в питоне можно экселить командами, я буду экселить командами