Formuła Pandas: groupby part 1

In [1]:
import pandas as pd
import dateutil
import numpy as np

df = pd.read_csv('c:/1/phone_data.csv')
df.head(4)
Out[1]:
index date duration item month network network_type
0 0 15/10/14 06:58 34.429 data 2014-11 data data
1 1 15/10/14 06:58 13.000 call 2014-11 Vodafone mobile
2 2 15/10/14 14:46 23.000 call 2014-11 Meteor mobile
3 3 15/10/14 14:48 4.000 call 2014-11 Tesco mobile
In [2]:
df['date'] = df['date'].apply(dateutil.parser.parse, dayfirst=True)
In [3]:
# How many rows and columns the dataset
df.shape
Out[3]:
(830, 7)
In [4]:
# najdłuższa rozmowa telefoniczna
df['duration'].max()
Out[4]:
10528.0
In [5]:
# chce się dowiedzieć co to była za rozmowa
df[df['duration']==df['duration'].max()]
Out[5]:
index date duration item month network network_type
816 816 2015-03-04 12:29:00 10528.0 call 2015-03 landline landline
In [6]:
df['duration'][df['item'] == 'call'].sum()
Out[6]:
92321.0
In [7]:
## wyświetlam 10 największych rozmów
df['duration'][df['item'] == 'call'].nlargest(10)
Out[7]:
816    10528.0
742     2328.0
252     2120.0
59      1940.0
648     1863.0
398     1859.0
31      1714.0
809     1325.0
548     1247.0
105     1234.0
Name: duration, dtype: float64
In [8]:
# znajduje 10 najdłuższych rozmów
df.loc[(df['duration']>1200)&(df['item'] == 'call')]
Out[8]:
index date duration item month network network_type
31 31 2014-10-18 13:10:00 1714.0 call 2014-11 Three mobile
59 59 2014-10-23 08:34:00 1940.0 call 2014-11 landline landline
105 105 2014-10-31 13:27:00 1234.0 call 2014-11 Tesco mobile
171 171 2014-11-07 09:33:00 1205.0 call 2014-11 Vodafone mobile
252 252 2014-11-19 18:56:00 2120.0 call 2014-12 Three mobile
398 398 2014-12-17 18:08:00 1859.0 call 2015-01 Vodafone mobile
548 548 2015-01-08 20:31:00 1247.0 call 2015-01 Three mobile
648 648 2015-01-25 16:55:00 1863.0 call 2015-02 Three mobile
742 742 2015-02-17 19:09:00 2328.0 call 2015-03 Three mobile
809 809 2015-03-03 14:34:00 1325.0 call 2015-03 Vodafone mobile
816 816 2015-03-04 12:29:00 10528.0 call 2015-03 landline landline
In [9]:
# znajduje 10 najdłuższych rozmów dla sieci Tesco
df['duration'][df['item'] == 'call'][df['network'] == 'Tesco'].nlargest(10)
Out[9]:
105    1234.0
27      783.0
631     777.0
615     700.0
83      637.0
272     600.0
438     566.0
417     543.0
428     489.0
603     411.0
Name: duration, dtype: float64
In [10]:
## Wszystkie rozmowy z sieci TEsco - 10 najwiekszych drugi sposób
df.loc[(df['item'] == 'call')&(df['network'] == 'Tesco')]['duration'].nlargest(10)
Out[10]:
105    1234.0
27      783.0
631     777.0
615     700.0
83      637.0
272     600.0
438     566.0
417     543.0
428     489.0
603     411.0
Name: duration, dtype: float64
In [11]:
# ile było rozmawiane w każdym miesiącu
df['month'].value_counts()
Out[11]:
2014-11    230
2015-01    205
2014-12    157
2015-02    137
2015-03    101
Name: month, dtype: int64
In [12]:
# ile było rozmawiane w każdym miesiącu z każdej z sieci
df.pivot_table(index = ['month', 'network'], values='duration', columns='item', aggfunc=[np.sum])
Out[12]:
sum
item call data sms
month network
2014-11 Meteor 1521.0 NaN 10.0
Tesco 4045.0 NaN 3.0
Three 12458.0 NaN 25.0
Vodafone 4316.0 NaN 55.0
data NaN 998.441 NaN
landline 2906.0 NaN NaN
special NaN NaN 1.0
voicemail 301.0 NaN NaN
2014-12 Meteor 2010.0 NaN 12.0
Tesco 1819.0 NaN 1.0
Three 6316.0 NaN 13.0
Vodafone 1302.0 NaN 18.0
data NaN 1032.870 NaN
landline 1424.0 NaN NaN
voicemail 690.0 NaN NaN
world NaN NaN 4.0
2015-01 Meteor 2207.0 NaN 10.0
Tesco 2904.0 NaN 3.0
Three 6445.0 NaN 33.0
Vodafone 3626.0 NaN 40.0
data NaN 1067.299 NaN
landline 1603.0 NaN NaN
voicemail 285.0 NaN NaN
2015-02 Meteor 1188.0 NaN 1.0
Tesco 4087.0 NaN 2.0
Three 6279.0 NaN 11.0
Vodafone 1864.0 NaN 23.0
data NaN 1067.299 NaN
landline 730.0 NaN NaN
special NaN NaN 2.0
voicemail 268.0 NaN NaN
2015-03 Meteor 274.0 NaN NaN
Tesco 973.0 NaN 4.0
Three 4966.0 NaN 5.0
Vodafone 3513.0 NaN 13.0
data NaN 998.441 NaN
landline 11770.0 NaN NaN
voicemail 231.0 NaN NaN
world NaN NaN 3.0
In [13]:
## ilu miałem operatorów?
df['network'].nunique()
Out[13]:
9
In [14]:
df.describe()
Out[14]:
index duration
count 830.000000 830.000000
mean 414.500000 117.804036
std 239.744656 444.129560
min 0.000000 1.000000
25% 207.250000 1.000000
50% 414.500000 24.500000
75% 621.750000 55.000000
max 829.000000 10528.000000
In [15]:
df.pivot_table(index='network', values='duration', aggfunc=['sum', 'max','min', np.std, 'median'])
Out[15]:
sum max min std median
duration duration duration duration duration
network
Meteor 7233.00 1090.000 1.000 169.690291 5.000
Tesco 13841.00 1234.000 1.000 227.471611 72.500
Three 36551.00 2328.000 1.000 368.311638 4.000
Vodafone 14770.00 1859.000 1.000 232.527090 1.000
data 5164.35 34.429 34.429 0.000000 34.429
landline 18433.00 10528.000 3.000 1631.415609 75.000
special 3.00 1.000 1.000 0.000000 1.000
voicemail 1775.00 174.000 1.000 44.294984 63.000
world 7.00 1.000 1.000 0.000000 1.000
In [16]:
# statystyka rozmów
df['duration'].agg(['min', 'max', np.mean, np.median, np.std])
Out[16]:
min           1.000000
max       10528.000000
mean        117.804036
median       24.500000
std         444.129560
Name: duration, dtype: float64
In [17]:
df.columns
Out[17]:
Index(['index', 'date', 'duration', 'item', 'month', 'network',
       'network_type'],
      dtype='object')
In [18]:
# użycie wykresy rozwarstwień
import seaborn as sns
sns.relplot(x='month', y='duration',hue='network', size='item',  kind="line", data=df)
Out[18]:
<seaborn.axisgrid.FacetGrid at 0x1efe7764390>

Groupby

In [19]:
# jego sposób
df.groupby(['month']).groups.keys()
Out[19]:
dict_keys(['2014-11', '2014-12', '2015-01', '2015-02', '2015-03'])
In [20]:
# mój sposób
df['month'].unique()
Out[20]:
array(['2014-11', '2014-12', '2015-01', '2015-02', '2015-03'],
      dtype=object)
In [21]:
# jego sposób
len(df.groupby(['month']).groups['2014-11'])
Out[21]:
230
In [22]:
# mój sposób
df[df['month']=='2014-11']['month'].count()
Out[22]:
230
In [23]:
## pierwsze zapisy na rejestrze wg miesiąca
df.groupby('month').first()
Out[23]:
index date duration item network network_type
month
2014-11 0 2014-10-15 06:58:00 34.429 data data data
2014-12 228 2014-11-13 06:58:00 34.429 data data data
2015-01 381 2014-12-13 06:58:00 34.429 data data data
2015-02 577 2015-01-13 06:58:00 34.429 data data data
2015-03 729 2015-02-12 20:15:00 69.000 call landline landline
In [24]:
df.dtypes
Out[24]:
index                    int64
date            datetime64[ns]
duration               float64
item                    object
month                   object
network                 object
network_type            object
dtype: object
In [25]:
## dane są kompletne
df.isnull().sum()
Out[25]:
index           0
date            0
duration        0
item            0
month           0
network         0
network_type    0
dtype: int64
In [26]:
## 10 najdłyższych rozmów 
df.groupby('duration').first().tail(10)
Out[26]:
index date item month network network_type
duration
1234.0 105 2014-10-31 13:27:00 call 2014-11 Tesco mobile
1247.0 548 2015-01-08 20:31:00 call 2015-01 Three mobile
1325.0 809 2015-03-03 14:34:00 call 2015-03 Vodafone mobile
1714.0 31 2014-10-18 13:10:00 call 2014-11 Three mobile
1859.0 398 2014-12-17 18:08:00 call 2015-01 Vodafone mobile
1863.0 648 2015-01-25 16:55:00 call 2015-02 Three mobile
1940.0 59 2014-10-23 08:34:00 call 2014-11 landline landline
2120.0 252 2014-11-19 18:56:00 call 2014-12 Three mobile
2328.0 742 2015-02-17 19:09:00 call 2015-03 Three mobile
10528.0 816 2015-03-04 12:29:00 call 2015-03 landline landline
In [27]:
## ile trwały rozmowy w miesiącach
df.groupby('month')['duration'].sum()
Out[27]:
month
2014-11    26639.441
2014-12    14641.870
2015-01    18223.299
2015-02    15522.299
2015-03    22750.441
Name: duration, dtype: float64
In [28]:
# ile było połączeń w miesiącach
df.groupby('month')['date'].count()
Out[28]:
month
2014-11    230
2014-12    157
2015-01    205
2015-02    137
2015-03    101
Name: date, dtype: int64
In [29]:
# ile trwały tylko połączenia telefoniczne
df[df['item'] == 'call'].groupby('network')['duration'].sum()
Out[29]:
network
Meteor        7200.0
Tesco        13828.0
Three        36464.0
Vodafone     14621.0
landline     18433.0
voicemail     1775.0
Name: duration, dtype: float64
In [30]:
# ile było usług (m.in. połączeń) zależnie od typu w miesiącu
df.groupby(['month', 'item'])['date'].count()
Out[30]:
month    item
2014-11  call    107
         data     29
         sms      94
2014-12  call     79
         data     30
         sms      48
2015-01  call     88
         data     31
         sms      86
2015-02  call     67
         data     31
         sms      39
2015-03  call     47
         data     29
         sms      25
Name: date, dtype: int64
In [31]:
# # ile było usług (m.in. połączeń) zależnie od typu w miesiącu inny sposób
df.pivot_table(index=['month','item'], values='duration', aggfunc=['count'])
Out[31]:
count
duration
month item
2014-11 call 107
data 29
sms 94
2014-12 call 79
data 30
sms 48
2015-01 call 88
data 31
sms 86
2015-02 call 67
data 31
sms 39
2015-03 call 47
data 29
sms 25
In [32]:
## ile było usług według typu usług? TWORZENIE SERII
df.groupby(['month', 'network_type'])['date'].count()
Out[32]:
month    network_type
2014-11  data             29
         landline          5
         mobile          189
         special           1
         voicemail         6
2014-12  data             30
         landline          7
         mobile          108
         voicemail         8
         world             4
2015-01  data             31
         landline         11
         mobile          160
         voicemail         3
2015-02  data             31
         landline          8
         mobile           90
         special           2
         voicemail         6
2015-03  data             29
         landline         11
         mobile           54
         voicemail         4
         world             3
Name: date, dtype: int64
In [33]:
## ile było usług według typu usług? TWORZENIE TABELI DANYCH
df.groupby(['month', 'network_type'])[['date']].count()
Out[33]:
date
month network_type
2014-11 data 29
landline 5
mobile 189
special 1
voicemail 6
2014-12 data 30
landline 7
mobile 108
voicemail 8
world 4
2015-01 data 31
landline 11
mobile 160
voicemail 3
2015-02 data 31
landline 8
mobile 90
special 2
voicemail 6
2015-03 data 29
landline 11
mobile 54
voicemail 4
world 3
In [34]:
## ile było usług według operatorów?
df.pivot_table(index=['month','network_type'], values='duration', aggfunc=['count'])
Out[34]:
count
duration
month network_type
2014-11 data 29
landline 5
mobile 189
special 1
voicemail 6
2014-12 data 30
landline 7
mobile 108
voicemail 8
world 4
2015-01 data 31
landline 11
mobile 160
voicemail 3
2015-02 data 31
landline 8
mobile 90
special 2
voicemail 6
2015-03 data 29
landline 11
mobile 54
voicemail 4
world 3
In [35]:
# tworenie serii
df.groupby('month')['duration'].sum() 
Out[35]:
month
2014-11    26639.441
2014-12    14641.870
2015-01    18223.299
2015-02    15522.299
2015-03    22750.441
Name: duration, dtype: float64
In [36]:
# tworzenie DataFrame
df.groupby('month')[['duration']].sum()
Out[36]:
duration
month
2014-11 26639.441
2014-12 14641.870
2015-01 18223.299
2015-02 15522.299
2015-03 22750.441
In [37]:
# zadeklarowanie że nie chcemy indexu jako daty
df.groupby('month', as_index=False).agg({"duration": "sum"})
Out[37]:
month duration
0 2014-11 26639.441
1 2014-12 14641.870
2 2015-01 18223.299
3 2015-02 15522.299
4 2015-03 22750.441
In [38]:
## TEGO NIE UMIEM W TABELI PRZESTAWNEJ
## grupowanie zaawansowane
df.groupby(['month', 'item']).agg({'duration':sum, 'network_type': "count", 'date': 'first' })
Out[38]:
duration network_type date
month item
2014-11 call 25547.000 107 2014-10-15 06:58:00
data 998.441 29 2014-10-15 06:58:00
sms 94.000 94 2014-10-16 22:18:00
2014-12 call 13561.000 79 2014-11-14 17:24:00
data 1032.870 30 2014-11-13 06:58:00
sms 48.000 48 2014-11-14 17:28:00
2015-01 call 17070.000 88 2014-12-15 20:03:00
data 1067.299 31 2014-12-13 06:58:00
sms 86.000 86 2014-12-15 19:56:00
2015-02 call 14416.000 67 2015-01-15 10:36:00
data 1067.299 31 2015-01-13 06:58:00
sms 39.000 39 2015-01-15 12:23:00
2015-03 call 21727.000 47 2015-02-12 20:15:00
data 998.441 29 2015-02-13 06:58:00
sms 25.000 25 2015-02-19 18:46:00
In [39]:
## grupowanie zaawansowane
df.groupby(['month', 'network']).agg({'duration':sum,'item':"count"})
Out[39]:
duration item
month network
2014-11 Meteor 1531.000 23
Tesco 4048.000 23
Three 12483.000 64
Vodafone 4371.000 79
data 998.441 29
landline 2906.000 5
special 1.000 1
voicemail 301.000 6
2014-12 Meteor 2022.000 24
Tesco 1820.000 13
Three 6329.000 43
Vodafone 1320.000 28
data 1032.870 30
landline 1424.000 7
voicemail 690.000 8
world 4.000 4
2015-01 Meteor 2217.000 31
Tesco 2907.000 15
Three 6478.000 59
Vodafone 3666.000 55
data 1067.299 31
landline 1603.000 11
voicemail 285.000 3
2015-02 Meteor 1189.000 5
Tesco 4089.000 22
Three 6290.000 33
Vodafone 1887.000 30
data 1067.299 31
landline 730.000 8
special 2.000 2
voicemail 268.000 6
2015-03 Meteor 274.000 4
Tesco 977.000 11
Three 4971.000 16
Vodafone 3526.000 23
data 998.441 29
landline 11770.000 11
voicemail 231.000 4
world 3.000 3
In [40]:
df.pivot_table(index=['month', 'network'], values='duration', aggfunc=['sum','count'])
Out[40]:
sum count
duration duration
month network
2014-11 Meteor 1531.000 23
Tesco 4048.000 23
Three 12483.000 64
Vodafone 4371.000 79
data 998.441 29
landline 2906.000 5
special 1.000 1
voicemail 301.000 6
2014-12 Meteor 2022.000 24
Tesco 1820.000 13
Three 6329.000 43
Vodafone 1320.000 28
data 1032.870 30
landline 1424.000 7
voicemail 690.000 8
world 4.000 4
2015-01 Meteor 2217.000 31
Tesco 2907.000 15
Three 6478.000 59
Vodafone 3666.000 55
data 1067.299 31
landline 1603.000 11
voicemail 285.000 3
2015-02 Meteor 1189.000 5
Tesco 4089.000 22
Three 6290.000 33
Vodafone 1887.000 30
data 1067.299 31
landline 730.000 8
special 2.000 2
voicemail 268.000 6
2015-03 Meteor 274.000 4
Tesco 977.000 11
Three 4971.000 16
Vodafone 3526.000 23
data 998.441 29
landline 11770.000 11
voicemail 231.000 4
world 3.000 3
In [41]:
## grupowanie zaawansowane
df.groupby(['month', 'network','item']).agg({'duration':sum,'item':"count"})
Out[41]:
duration item
month network item
2014-11 Meteor call 1521.000 13
sms 10.000 10
Tesco call 4045.000 20
sms 3.000 3
Three call 12458.000 39
sms 25.000 25
Vodafone call 4316.000 24
sms 55.000 55
data data 998.441 29
landline call 2906.000 5
special sms 1.000 1
voicemail call 301.000 6
2014-12 Meteor call 2010.000 12
sms 12.000 12
Tesco call 1819.000 12
sms 1.000 1
Three call 6316.000 30
sms 13.000 13
Vodafone call 1302.000 10
sms 18.000 18
data data 1032.870 30
landline call 1424.000 7
voicemail call 690.000 8
world sms 4.000 4
2015-01 Meteor call 2207.000 21
sms 10.000 10
Tesco call 2904.000 12
sms 3.000 3
Three call 6445.000 26
sms 33.000 33
Vodafone call 3626.000 15
sms 40.000 40
data data 1067.299 31
landline call 1603.000 11
voicemail call 285.000 3
2015-02 Meteor call 1188.000 4
sms 1.000 1
Tesco call 4087.000 20
sms 2.000 2
Three call 6279.000 22
sms 11.000 11
Vodafone call 1864.000 7
sms 23.000 23
data data 1067.299 31
landline call 730.000 8
special sms 2.000 2
voicemail call 268.000 6
2015-03 Meteor call 274.000 4
Tesco call 973.000 7
sms 4.000 4
Three call 4966.000 11
sms 5.000 5
Vodafone call 3513.000 10
sms 13.000 13
data data 998.441 29
landline call 11770.000 11
voicemail call 231.000 4
world sms 3.000 3
In [42]:
df.dtypes
Out[42]:
index                    int64
date            datetime64[ns]
duration               float64
item                    object
month                   object
network                 object
network_type            object
dtype: object
In [43]:
#df['date'] = df.date.astype(int)
In [44]:
aggregations = {'duration': lambda x: max(x) - 1}
df.groupby('month').agg(aggregations)
Out[44]:
duration
month
2014-11 1939.0
2014-12 2119.0
2015-01 1858.0
2015-02 1862.0
2015-03 10527.0
In [45]:
# Najdłuższy czas połączeń wg miesięcy
aggregations = {'duration': lambda x: max(x)}
df.groupby('month').agg(aggregations)
Out[45]:
duration
month
2014-11 1940.0
2014-12 2120.0
2015-01 1859.0
2015-02 1863.0
2015-03 10528.0
In [46]:
# całkowity czas połączeń wg miesięcy
aggregations = {'duration': lambda x: sum(x)}
df.groupby('month').agg(aggregations)
Out[46]:
duration
month
2014-11 26639.441
2014-12 14641.870
2015-01 18223.299
2015-02 15522.299
2015-03 22750.441
In [47]:
# całkowity czas połączeń wg operatorów
aggregations = {'duration': lambda x: sum(x)}
df.groupby('network').agg(aggregations)
Out[47]:
duration
network
Meteor 7233.00
Tesco 13841.00
Three 36551.00
Vodafone 14770.00
data 5164.35
landline 18433.00
special 3.00
voicemail 1775.00
world 7.00
In [48]:
# boskie
df.groupby(['month', 'item']).agg({'duration': [min, max, sum],'network_type': "count", 'date': [min, 'first', 'nunique']})
Out[48]:
duration network_type date
min max sum count min first nunique
month item
2014-11 call 1.000 1940.000 25547.000 107 2014-10-15 06:58:00 2014-10-15 06:58:00 104
data 34.429 34.429 998.441 29 2014-10-15 06:58:00 2014-10-15 06:58:00 29
sms 1.000 1.000 94.000 94 2014-10-16 22:18:00 2014-10-16 22:18:00 79
2014-12 call 2.000 2120.000 13561.000 79 2014-11-14 17:24:00 2014-11-14 17:24:00 76
data 34.429 34.429 1032.870 30 2014-11-13 06:58:00 2014-11-13 06:58:00 30
sms 1.000 1.000 48.000 48 2014-11-14 17:28:00 2014-11-14 17:28:00 41
2015-01 call 2.000 1859.000 17070.000 88 2014-12-15 20:03:00 2014-12-15 20:03:00 84
data 34.429 34.429 1067.299 31 2014-12-13 06:58:00 2014-12-13 06:58:00 31
sms 1.000 1.000 86.000 86 2014-12-15 19:56:00 2014-12-15 19:56:00 58
2015-02 call 1.000 1863.000 14416.000 67 2015-01-15 10:36:00 2015-01-15 10:36:00 67
data 34.429 34.429 1067.299 31 2015-01-13 06:58:00 2015-01-13 06:58:00 31
sms 1.000 1.000 39.000 39 2015-01-15 12:23:00 2015-01-15 12:23:00 27
2015-03 call 2.000 10528.000 21727.000 47 2015-02-12 20:15:00 2015-02-12 20:15:00 47
data 34.429 34.429 998.441 29 2015-02-13 06:58:00 2015-02-13 06:58:00 29
sms 1.000 1.000 25.000 25 2015-02-19 18:46:00 2015-02-19 18:46:00 17
In [49]:
# to jest zrozumiałe
grouped = df.groupby('month').agg({'duration': [min, max, np.mean]})
#grouped.columns = ["min_duration","max_duration", "mean_duration"]
#grouped.columns = grouped.columns.droplevel(level=0)
grouped.rename(columns={ "min": "min_duration", "max": "max_duration", "mean": "mean_duration"},inplace=True)
grouped.head()
Out[49]:
duration
min_duration max_duration mean_duration
month
2014-11 1.0 1940.0 115.823657
2014-12 1.0 2120.0 93.260318
2015-01 1.0 1859.0 88.894141
2015-02 1.0 1863.0 113.301453
2015-03 1.0 10528.0 225.251891
In [50]:
grouped = df.groupby('month').agg({'duration': [min, max, np.mean]}) 
# Using ravel, and a string join, we can create better names for the columns:
grouped.columns = ["_".join(x) for x in grouped.columns.ravel()]
grouped
Out[50]:
duration_min duration_max duration_mean
month
2014-11 1.0 1940.0 115.823657
2014-12 1.0 2120.0 93.260318
2015-01 1.0 1859.0 88.894141
2015-02 1.0 1863.0 113.301453
2015-03 1.0 10528.0 225.251891
In [51]:
# Define the aggregation calculations
aggregations = {'duration': { 'total_duration': 'sum', 'average_duration': 'mean', 'num_calls': 'count'},
    'date': { 'max_date': 'max', 'min_date': 'min', 'num_days': lambda x: max(x) - min(x)},
    'network': ["count", "max"]}

df[df['item'] == 'call'].groupby('month').agg(aggregations)
C:ProgramDataAnaconda3libsite-packagespandascoregroupbygeneric.py:1315: FutureWarning: using a dict with renaming is deprecated and will be removed in a future version
  return super(DataFrameGroupBy, self).aggregate(arg, *args, **kwargs)
Out[51]:
duration date network
total_duration average_duration num_calls max_date min_date num_days count max
month
2014-11 25547.0 238.757009 107 2014-11-12 19:01:00 2014-10-15 06:58:00 28 days 12:03:00 107 voicemail
2014-12 13561.0 171.658228 79 2014-12-14 19:54:00 2014-11-14 17:24:00 30 days 02:30:00 79 voicemail
2015-01 17070.0 193.977273 88 2015-01-14 20:47:00 2014-12-15 20:03:00 30 days 00:44:00 88 voicemail
2015-02 14416.0 215.164179 67 2015-02-09 17:54:00 2015-01-15 10:36:00 25 days 07:18:00 67 voicemail
2015-03 21727.0 462.276596 47 2015-03-04 12:29:00 2015-02-12 20:15:00 19 days 16:14:00 47 voicemail