View difference between Paste ID: CkFhHzFG and GN3vYWUV
SHOW: | | - or go back to the newest paste.
1
import pandas as pd
2
3-
data = pd.read_csv("/datasets/visits.csv", sep="\    ")
3+
data = pd.read_csv("/datasets/visits.csv", sep="\t")
4
data['local_time'] = (
5
     pd.to_datetime(data['date_time'], format='%Y-%m-%dT%H:%M:%S')
6
    + pd.Timedelta(hours=3)
7
)
8
data['date_hour'] = data['local_time'].dt.round('1H')
9
data['too_fast'] = data['time_spent'] < 60
10
data['too_slow'] = data['time_spent'] > 1000
11
12
too_fast_stat = data.pivot_table(index='id', values='too_fast')
13
good_ids = too_fast_stat.query('too_fast < 0.5')
14
good_data = data.query('id in @good_ids.index')
15
good_data = good_data.query('60 <= time_spent <= 1000')
16
17
station_stat = data.pivot_table(index="id", values="time_spent", aggfunc="median")
18
good_station_stat = good_data.pivot_table(index="id", values="time_spent", aggfunc="median")
19
20
stat = data.pivot_table(index='name', values='time_spent')
21
good_stat = good_data.pivot_table(index='name', values='time_spent', aggfunc='median')
22
stat['good_time_spent'] = good_stat['time_spent']
23
24
name_stat = data.pivot_table(index='name', values='time_spent')
25
good_name_stat = good_data.pivot_table(index='name', values='time_spent', aggfunc='median')
26
name_stat['good_time_spent'] = good_name_stat['time_spent']
27
28
id_name = good_data.pivot_table(index='id', values='name', aggfunc=['first', 'count'])
29
id_name.columns = ['name', 'count']
30
station_stat_full = id_name.join(good_station_stat)
31
32
good_stat2 = (
33
    station_stat_full
34
    .query('count > 30')
35
    .pivot_table(index='name', values='time_spent', aggfunc=['median', 'count'])
36
)
37
good_stat2.columns = ['median_time', 'stations']
38
final_stat = stat.join(good_stat2)
39
40
big_nets_stat = final_stat.query('stations > 10')
41
station_stat_full['group_name'] = (
42
    station_stat_full['name']
43
    .where(station_stat_full['name'].isin(big_nets_stat.index), 'Другие')
44
)
45
stat_grouped = (
46
    station_stat_full
47
    .query('count > 30')
48
    .pivot_table(index='group_name', values='time_spent', aggfunc=['median', 'count'])
49
)
50
stat_grouped.columns = ['time_spent', 'count']
51
stat_grouped.sort_values('time_spent', inplace=True)
52
print(stat_grouped)