рдкрд╛рдпрдерди рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕

рдлрд┐рд▓рд╣рд╛рд▓, рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯреНрд╕ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдЙрдЫрд╛рд▓ рдлреАрдХрд╛ рдкрдбрд╝рдиреЗ рд▓рдЧрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдХреА рд░рдЪрдирд╛ рдХрд╛ рд╡рд┐рд╖рдп рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдирд╣реАрдВ рдЦреЛрддрд╛ рд╣реИред рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдХрдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓рд┐рдЦреА рдЧрдИ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмреЙрдЯ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж рднреА рдореБрдЭреЗ рдмреЙрдЯ рдХреЗ рдЖрдБрдХрдбрд╝реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ (рд▓рд╛рдЗрдмреНрд░реЗрд░реА) рдирд╣реАрдВ рдорд┐рд▓реАред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдкрд╛рдпрдерди рдореЗрдВ рд╕рднреА рдмреЙрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд▓реЙрдЧ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХреЗ рд╕реЗ рд▓реЙрдЧ рдХрд░рдХреЗ рдЖрдВрдХрдбрд╝реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред

рдкрд░реНрдпрд╛рд╡рд░рдгреАрдп рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ


рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

pip install datetime
pip install pandas

рдЕрдкрдиреЗ рдмреЙрдЯ рдореЗрдВ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдХреЛ рдХреИрд╕реЗ рдПрдореНрдмреЗрдб рдХрд░реЗрдВ?


рдЕрдкрдиреЗ OS рдФрд░ data.csv рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рднрдВрдбрд╛рд░ рд╕реЗ рдкрд╛рдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ ред рдЙрдиреНрд╣реЗрдВ рдЙрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд░рдЦреЗрдВ рдЬрд╣рд╛рдБ рдЖрдкрдХрд╛ рдмреЙрдЯ рд╕реНрдерд┐рдд рд╣реИред

рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдмреЙрдЯ рдмреЙрдбреА рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рд▓рд╛рдЗрди рдЬреЛрдбрд╝реЗрдВ:

import tg_analytic

рдмреЙрдЯ рдХрдорд╛рдВрдб рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж:

tg_analytic.statistics(<id >, <>)

рдпрджрд┐ рдЖрдк рдЯреЗрд▓реАрдмреЙрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмреЙрдЯ рд╕реЗ рд╕реАрдзреЗ рдЖрдВрдХрдбрд╝реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ message_handler (content_types = ['text]] рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:

if message.text[:(  )] == '< >':
        st = message.text.split(' ')
        if 'txt' in st or '' in st:
            tg_analytic.analysis(st,message.chat.id)
            with open('%s.txt' %message.chat.id ,'r',encoding='UTF-8') as file:
                bot.send_document(message.chat.id,file)
                tg_analytic.remove(message.chat.id)
        else:
            messages = tg_analytic.analysis(st,message.chat.id)
            bot.send_message(message.chat.id, messages)

рдХреАрд╡рд░реНрдб рдХреЛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдФрд░ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдХреЗрд╡рд▓ рдЖрдк рдЕрдкрдиреЗ рдмреЙрдЯ рдХреЗ рдЖрдВрдХрдбрд╝реЗ рджреЗрдЦ рд╕рдХреЗрдВред рдкрд╣рд▓реЗ рд╕реЗ рд▓рд╛рдЧреВ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯ рднреА рднрдВрдбрд╛рд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЖрдк рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд░ рд╕рдХреЗрдВ рдХрд┐ рдЗрд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдЖрдВрдХрдбрд╝реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЖрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ?


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреАрд╡рд░реНрдб "рдЖрдВрдХрдбрд╝реЗ" рд╣реЛрдВрдЧреЗ:

    if message.text[:10] == '' or message.text[:10] == 'C':
        st = message.text.split(' ')
        if 'txt' in st or '' in st:
            tg_analytic.analysis(st,message.chat.id)
            with open('%s.txt' %message.chat.id ,'r',encoding='UTF-8') as file:
                bot.send_document(message.chat.id,file)
                tg_analytic.remove(message.chat.id)
        else:
            messages = tg_analytic.analysis(st,message.chat.id)
            bot.send_message(message.chat.id, messages)

рдмреЙрдЯ рдХрдорд╛рдВрдб рдХрд╛ рд╢рд░реАрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
рдЖрдБрдХрдбрд╝реЗ <рджрд┐рдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛> <рдЕрдиреБрд░реЛрдз рдкреИрд░рд╛рдореАрдЯрд░ * >>

* - рдЯреАрдореЗрдВ рд╣реИрдВ: "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛", "рдЯреАрдореЗрдВ" рдФрд░ "рдЯреИрдХрдЯ"ред рдПрдХ рд╕рд╛рде рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛" рдЖрд╡рд╢реНрдпрдХ рджрд┐рдиреЛрдВ рдХреЗ рд▓рд┐рдП рд▓реЛрдЧреЛрдВ рдкрд░ рдЖрдВрдХрдбрд╝реЗ рджреЗрддреЗ рд╣реИрдВред "рдЯреАрдо" рдЖрдкрдХреЛ рдЬрд┐рддрдиреЗ рджрд┐рдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрд╕рдХреЗ рд▓рд┐рдП рдЯреАрдореЛрдВ рдкрд░ рдЖрдВрдХрдбрд╝реЗ рджреЗрддреА рд╣реИред Txt рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреА, рдЕрдиреНрдпрдерд╛ рдЬрд╡рд╛рдм рдПрдХ рддрд╛рд░ рдореЗрдВ рд╣реИред

рдХрдорд╛рдВрдб рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг


рд╕рд╛рдВрдЦреНрдпрд┐рдХреА 2 рдЯреАрдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ


рд╕рд╛рдВрдЦреНрдпрд┐рдХреА 2 рдЯреАрдо


рд╕рд╛рдВрдЦреНрдпрд┐рдХреА 2 рдЯреАрдо рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛


рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ?


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрджрд┐ рдЖрдкрдХреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдЖрдк рд▓реЗрдЦ рдХреЛ рдкрдврд╝рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдмреЙрдЯ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдкрд╣рд▓рд╛ рднрд╛рдЧ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рджрд┐рдирд╛рдВрдХ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдИрдбреА рдФрд░ рдЙрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рдХрдорд╛рдВрдб рдХреЛ рдмрдЪрд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛:

def statistics(user_id, command):
    data = datetime.datetime.today().strftime("%Y-%m-%d")
    with open('data.csv', 'a', newline="", encoding='UTF-8') as fil:
        wr = csv.writer(fil, delimiter=';')
        wr.writerow([data, user_id, command])

рджреВрд╕рд░рд╛ рднрд╛рдЧ рдорд╛рдВрдЧ рдкрд░ рдбреЗрдЯрд╛ рдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдЖрдБрдХрдбрд╝реЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рд╣реИред рд╣рдо рдкрдВрдбреЛрдВ рдореЗрдВ рд╕реАрдПрд╕рд╡реА рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рддреЗ рд╣реИрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдФрд░ рдЖрджреЗрд╢реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдореВрд╣:

season = int(bid[1])
#   Dataframe
df = pd.read_csv('data.csv', delimiter=';', encoding='utf8')
#     
number_of_users = len(df['id'].unique())
number_of_days = len(df['data'].unique())
#      
df_user = df.groupby(['data', 'id']).count().reset_index().groupby('data').count().reset_index()
list_of_dates_in_df_user = list(df_user['data'])
list_of_number_of_user_in_df_user = list(df_user['id'])
list_of_dates_in_df_user = list_of_dates_in_df_user[-season:]
list_of_number_of_user_in_df_user = list_of_number_of_user_in_df_user[-season:]
#      
df_command = df.groupby(['data', 'command']).count().reset_index()
unique_commands = df['command'].unique()
commands_in_each_day = []
list_of_dates_in_df_command = list(df_command['data'])
list_of_number_of_user_in_df_command = list(df_command['id'])
list_of_name_of_command_in_df_command = list(df_command['command'])
commands_in_this_day = dict()
for i in range(len(list_of_dates_in_df_command)):
     commands_in_this_day[list_of_name_of_command_in_df_command[i]] = list_of_number_of_user_in_df_command[i]
     if i + 1 >= len(list_of_dates_in_df_command) or list_of_dates_in_df_command[i] != list_of_dates_in_df_command[i + 1]:
     commands_in_each_day.append(commands_in_this_day)
     commands_in_this_day = dict()
commands_in_each_day = commands_in_each_day[-season:]

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рдХреЗ рдбреЗрдЯрд╛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ:


message_to_user = '    %s %s: \n' % (season, day_type.get(season, ''))
message_to_user += '    %s %s: \n' % (number_of_days, day_type.get(season, ''))
if season > number_of_days:
     season = number_of_days
     message_to_user += '    , \n' \
                        '      \n'
if '' in bid:
    message_to_user += '    : ' + '%s' % number_of_users \
    + ' %s ' % users_type.get(number_of_users, '') + '\n' \
    '   %s %s: \n' % (season, day_type.get(season, ''))
    for days, number, comm_day in zip(list_of_dates_in_df_user, list_of_number_of_user_in_df_user, 
    commands_in_each_day):
      message_to_user += ':%s :%d   :%s\n' % (days, number, comm_day.get('/start', 0))
if '' in bid:
    message_to_user += '    %s %s: \n' %  
    (season,day_type.get(season, ''))
    for days, commands in zip(list_of_dates_in_df_user, commands_in_each_day):
       message_to_user += ':%s\n' % days
       for i in unique_commands:
           if i in commands:
                message_to_user += '%s - %s \n' % (i, commands.get(i))
          else:
                message_to_user += '%s - 0 \n' % i

рдЕрдВрдд рдореЗрдВ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдВрджреЗрд╢ рдХреА рд░рдЪрдирд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо "txt" рдХрдорд╛рдВрдб рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рдХрд┐рд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЬрд╡рд╛рдм рджрд┐рдпрд╛ рдЬрд╛рдП:

if 'txt' in bid or '' in bid:
    with open('%s.txt' % user_id, 'w', encoding='UTF-8') as fil:
        fil.write(message_to_user)
        fil.close()
    else:
        return message_to_user

рдирд┐рд╖реНрдХрд░реНрд╖


рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдпрд╣ рджреЗрдЦрдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреЙрдЯ рдкрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдореЗрд░реЗ рдХрд┐рд╕реА рднреА рдмреЙрдЯ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: @exchange_minsk_bot, @pogoda_belarus_bot, @fast_translate_botред

рдХреАрд╡рд░реНрдб: "рдЖрдВрдХрдбрд╝реЗ"ред

рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ!

Source: https://habr.com/ru/post/undefined/


All Articles