<p>Définition de la présence</p>
<p>Je pense que le principal problème ici est une définition pertinente de la présence. Pour le cas d’utilisation spécifique enseignant (= organisateur) et étudiants, c’est simple :</p>
<p><strong>« La présence est la période pendant laquelle l’enseignant/organisateur et les étudiants sont tous présents. »</strong></p>
<p>Justification :</p>
<ul>
<li>
<p>Si les étudiants se connectent tôt, le cours n’a pas encore commencé. Ils n’assistent à rien.</p>
</li>
<li>
<p>Si les étudiants se déconnectent alors que l’enseignant est toujours connecté, ils manqueront quelque chose.</p>
</li>
<li>
<p>Peu importe si les étudiants se déconnectent/reconnectent pendant l’absence de l’enseignant, ils ne manquent rien. (Note : c’est une différence majeure entre la salle de classe virtuelle et réelle.)</p>
</li>
</ul>
<p>C’est exactement la façon dont MS Teams conçoit la présence. Depuis le <a href="https://support.microsoft.com/en-ie/office/download-attendance-reports-in-teams-ae7cf170-530c-47d3-84c1-3aedac74d310">site MS Office</a> :</p>
<p>Gardez à l’esprit que vous ne pourrez télécharger le rapport de présence que pendant que la réunion est en cours et que les participants sont encore présents. […] Si les participants rejoignent une réunion avant l’organisateur, leur heure d’arrivée correspondra à l’heure à laquelle l’organisateur a rejoint la réunion.</p>
<p>Les données ont un gros problème : l’heure de fin de la réunion est manquante. L’organisateur ne peut pas partir, car alors le rapport ne peut pas être téléchargé. Mais l’organisateur téléchargera toujours <em>après</em> la fin du cours. Vous devrez fournir la date de fin manuellement ou utiliser une</p>
<p>Réponse</p>
<p>Avec cette définition, nous pouvons centrer toutes les périodes de temps sur l’organisateur. Il se passe beaucoup de choses dans le code. J’ai commenté du mieux que j’ai pu.</p>
<p>` # neccessary inputs (not in original data)<br>
end_timestamp = pd.Timestamp(‘2020-03-08 17:40’)<br>
organizer_name = ‘Organiser Name’</p>
<pre><code># Pivot User Action values to columns; we don't need 'Join before'
df['Timestamp'] = pd.to_datetime(df['Timestamp'])
df['User Action'] = df['User Action'].str.replace('Joined before', 'Joined')
df = df.set_index(['Full Name', 'User Action'], append=True).unstack()
df.columns = df.columns.get_level_
</code></pre>
<p><em>(Réponse tronquée)</em></p>