Files
MesParis/main.py
2024-12-02 23:28:34 +09:00

136 lines
4.2 KiB
Python

import json
from datetime import datetime, timedelta
from dateutil import parser
from matplotlib import pyplot as plt
import pandas as pd
import glob, os
#consts
valo = 'user452708124'
starttime = datetime(2018, 9, 16)
endtime = datetime(2024, 11, 4)
colors = ['red', 'orange', 'yellow', 'blue', 'black', 'green', 'purple', 'pink', 'cyan', 'grey', 'magenta', 'brown']
with open('/home/valoka/Downloads/Telegram Desktop/nsfw/result.json', 'r') as file:
json_file = json.load(file)
def get_by_date(json_file, date):
table = []
for i in json_file["messages"]:
if i["date"].find(date) != -1:
table.append(i["text"])
return table
def process(input_file):
count0 = 0; count11 = 0
count1 = 0; count01 = 0
main_dict = {}
#get partner name
#"name": "Анастэйша"
partner_name = input_file["name"]
partner_id = "user" + str(input_file["id"])
for i in input_file["messages"]:
#count messages
if i['type'] == 'message':
if i['from_id'] == valo:
count0 += 1
else:
count1 += 1
main_dict.update(mes0 = count0, mes1 = count1)
#count emoji
try:
for o in i["reactions"]:
if o['type'] == "emoji" and o["emoji"] == "":
for p in o['recent']:
#print(p['from_id'])
if p['from_id'] == valo:
count01 += 1
if p['from_id'] == partner_id:
count11 += 1
except:
pass
main_dict.update(emj0 = count01, emj1 = count11)
return partner_name, main_dict
def dateF(oldDate, days):
dateBefore = parser.parse(str(oldDate))
return dateBefore + timedelta(days)
def get_partner_name(filepath: str) -> str:
with open(filepath, 'r') as name:
json_file = json.load(name)
try:
return "Liza" if str(json_file["name"]) == "🍭" else str(json_file["name"])
except:
return str("Saved messages")
# print(process(json_file))
name_list = [glob.glob(f'{os.getcwd()}/chats/*')]
nicknames = []
sums = [0 for _ in name_list[0]]
print(process(json_file))
for i in range(0,73):
print(dateF(datetime(2024,9,11), i).strftime("%Y-%m-%d"), len(get_by_date(json_file, dateF(datetime(2024,9,11), i).strftime("%Y-%m-%d"))))
exit(0)
for i in name_list[0]:
nicknames.append(get_partner_name(i))
print(nicknames)
for i in range((endtime - starttime).days):
for o in range(len(name_list[0])):
with open(name_list[0][o], 'r') as file:
json_file = json.load(file)
sums[o] += len(get_by_date(json_file, dateF(starttime, i).strftime("%Y-%m-%d")))
data = {'Чаты' : nicknames,
'Количество' : sums,
'Colors': colors}
dataFrame = pd.DataFrame(data=data)
dataFrame.sort_values(by='Количество', inplace=True)
#df = pd.DataFrame({'Чаты' : nicknames, 'Количество' : sums})
#df_sorted = df.sort_values('Количество')
dataFrame.plot.barh(x = 'Чаты', y = 'Количество', color = dataFrame['Colors'],
title="Chat Statistics", ylabel="Nickname",
xlabel = "Amount of messages (number)", figsize=(16,9),
label=f"Total: {sum(sums)}\nDate: {dateF(starttime, i).strftime("%Y-%m-%d")}")
#dataFrame.plot(title="Chat Statistics", ylabel="Chat name (nickname)",
# xlabel = "Amount of messages (number)", figsize=(16,9))
#dataFrame.plot.figure(figsize=(16,9), dpi=100)
# plt.title("Chat Statistics")
# plt.xlabel("Amount of messages (number)")
# plt.ylabel("Chat name (nickname)")
# plt.plot([], [], ' ', label=f"Total: {sum(sums)}")
# plt.legend(loc="upper right")
#plt.yticks(ticks=[i for i in range(12)], labels=nicknames)
#plt.show()
#plt.barh(df_sorted['Чаты'], df_sorted['Количество'], data=df_sorted, color=colors)
plt.savefig(f'/home/valoka/SomeCode/pethon/figs/{i:05}-{dateF(starttime, i).strftime("%Y-%m-%d")}.png')
plt.close()
print(dateF(starttime, i))
print(sums)
file.close()