Advertisement
maresin

Untitled

Dec 8th, 2022
778
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.17 KB | Source Code | 0 0
  1. # таблица суммарных продаж по платформам в разные годы
  2. platform_sales = df.pivot_table(index='platform', columns='year_of_release', values='total_sales', aggfunc='sum').copy()
  3. platform_sales.fillna(0, inplace=True)
  4. # функция проверки разрывов в данных
  5. def start_checking(data, row, col, num):
  6.     counter = 0
  7.     for i in range(num):
  8.         if data.iloc[row, col-i] > 0:
  9.             counter += 1
  10.     return counter == num
  11.  
  12. # функция расчета скользящего среднего
  13. def ma(data, row, col, period):
  14.     values = [data.iloc[row, col-n] for n in range(period) if col >= (period - 1)]
  15.     return sum(values) / period
  16.  
  17. ma_period = 3
  18. platform_interval = {}
  19. # цикл по индексам пивот-таблицы platform_sales
  20. for i in range(platform_sales.shape[0]):
  21.     flag_start = False
  22.     start = 0
  23.     # счетчик убыточных лет
  24.     counter = 0
  25.     # итерируемся со сдвигом значения вперед для фиксации отсутствия данных
  26.     for j in range(ma_period-1, platform_sales.shape[1]):
  27.         # начало продаж
  28.         if start_checking(platform_sales, i, j, ma_period) and flag_start == False:
  29.             flag_start = True
  30.             start = (j - (ma_period-1))
  31.             j = 0
  32.     # итерируемся со сдвигом значения вперед для сравнения с предыдущим
  33.     for j in range(start, platform_sales.shape[1]):
  34.         # фиксация спада продаж
  35.         if flag_start == True:
  36.             if  counter < 2:
  37.                 # сравниваем скользящие средние
  38.                 if ma(platform_sales, i, j, ma_period) < ma(platform_sales, i, j-1, ma_period):
  39.                     counter += 1
  40.                 else:
  41.                     counter = 0
  42.                     pass
  43.             # запись длины периода
  44.             elif counter == 2:                
  45.                 platform_interval[platform_sales.index[i]] = (j - 2) - start
  46.                 break
  47.             else:
  48.                 pass
  49. # конвертирум словарь с периодами в датафрейм
  50. platform_interval = pd.DataFrame.from_dict(platform_interval, orient='index')
  51. # добавим в датафрейм индекс с названиями платформ
  52. intervals = platform_interval.copy().reset_index()
  53. intervals.set_index(keys=platform_interval.index, inplace=True)
  54. intervals = intervals.set_axis(['platform', 'interval'], axis=1)
  55.  
  56. ###БОНУС - разноцветная картинка в Plotly
  57. import plotly.express as px
  58. # график периодов роста продаж для различных платформ
  59. fig = px.bar(intervals,
  60.              orientation='h',
  61.              color='platform',
  62.              title='Зафиксированный период роста продаж игр <br>для различных платформ')
  63. fig.update_xaxes(title_text='Кол-во лет, ед.')
  64. fig.update_yaxes(title_text='Игровая платформа')
  65. fig.show()
Tags: Practicum
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement