Project: Discord logs¶
Project weight: 5 points
The JSON file discord_logs.json contains a log of activities on a Discord server created for an online course. The data has been anonymized to hide identities of users of the server, but it is unchanged otherwise.
Here is a fragment of this file. The highlighted lines contain information that the user Sean joined the voice channel ‘General Voice’ on March 4, 2021 at 21:45:38 GMT:
{'id': '817150823247118356',
'type': 'Default',
'timestamp': '2021-03-04T21:45:38.19+00:00',
'timestampEdited': None,
'isPinned': False,
'content': '',
'author': {'id': '803346258977882163',
'name': 'ProBot ✨',
'discriminator': '0000',
'isBot': True,
'avatarUrl': 'https://cdn.discordapp.com/embed/avatars/1.png'},
'attachments': [],
'embeds': [{'title': '',
'url': None,
'timestamp': '2021-03-04T21:45:38.052+00:00',
'description': '**@Unknown joined voice channel `General Voice` .**',
'author': {'name': 'Sean',
'url': None,
'iconUrl': 'https://cdn.discordapp.com/embed/avatars/1.png'},
'footer': {'text': 'MTH 306'},
'fields': []}],
'reactions': []}
Here is another fragment. This one shows that the user Jamya left the voice channel ‘voice xray’ on January 25 2021 at 20:57:58 GMT:
{'id': '803368089449136188',
'type': 'Default',
'timestamp': '2021-01-25T20:57:58.382+00:00',
'timestampEdited': None,
'isPinned': False,
'content': '',
'author': {'id': '803346258977882163',
'name': 'ProBot ✨',
'discriminator': '0000',
'isBot': True,
'avatarUrl': 'https://cdn.discordapp.com/embed/avatars/1.png'},
'attachments': [],
'embeds': [{'title': '',
'url': None,
'timestamp': '2021-01-25T20:57:58.186+00:00',
'description': '**@Unknown left voice channel `voice xray` .**',
'author': {'name': 'Jamya',
'url': None,
'iconUrl': 'https://cdn.discordapp.com/embed/avatars/1.png'},
'footer': {'text': 'MTH 306'},
'fields': []}
Objectives¶
Part 1¶
Use the log file to create a pandas dataframe with the record of all occurrences when a user either left or joined a voice channel. The dataframe should have three columns:
the column “name” should contain names of users
the column “event” should record if a user joined or left a channel
the column “time” should give the time of each event.
The rows of the dataframe should be ordered according to times of events: from the earliest to the latest.
Here is a sample of showing the structure of the dataframe:
[3]:
channels_df.tail(5)
[3]:
| name | event | time | |
|---|---|---|---|
| 627 | Jasmin | left | 2021-03-27 16:43:51.750000+00:00 |
| 628 | Ariana | joined | 2021-03-28 19:02:10.440000+00:00 |
| 629 | Kathy | joined | 2021-03-28 19:02:10.899000+00:00 |
| 630 | Kathy | left | 2021-03-28 19:20:37.529000+00:00 |
| 631 | Ariana | left | 2021-03-28 19:20:40.083000+00:00 |
Part 2¶
Create a dataframe that shows the total time each user spent in voice channels. Sort the rows alphabetically by user names. Here is a sample of results you should obtain:
[7]:
times_df.head(5)
[7]:
| name | time_in_channels | |
|---|---|---|
| 0 | Abagail | 3 days 22:22:09.153000 |
| 1 | Abram | 0 days 03:53:50.386000 |
| 2 | Ariana | 0 days 17:37:12.113000 |
| 3 | Ashanti | 0 days 01:49:14.898000 |
| 4 | Augustus | 0 days 03:04:14.154000 |
Note¶
This is a programming assignment. There is no required narrative, aside from code documentation and possible notes explaining how your code works. Reports will be graded based on
code correctness and completeness (80%)
report organization and code documentation (20%)