{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "ba9e5acd-e17d-4318-9272-04c9f6706186", "metadata": {}, "outputs": [], "source": [ "import pandas as pd \n", "import spacy" ] }, { "cell_type": "code", "execution_count": 13, "id": "e4f0b3f0-5255-46f1-822f-e455087ba315", "metadata": {}, "outputs": [], "source": [ "phab_path = \"/mmfs1/gscratch/comdata/users/mjilg/mw-repo-lifecycles/case1/0312_resolved_ve_phab_comments.csv\"\n", "phab_df = pd.read_csv(phab_path)" ] }, { "cell_type": "code", "execution_count": 14, "id": "d449164e-1d28-4580-9eb1-f0f69978f114", "metadata": {}, "outputs": [], "source": [ "#find gerrit phab PHID: PHID-USER-idceizaw6elwiwm5xshb\n", "phab_df['isGerrit'] = phab_df['AuthorPHID'] == 'PHID-USER-idceizaw6elwiwm5xshb'\n", "#cleaning df\n", "phab_df['id'] = phab_df.index + 1\n", "#may have to build out the reply_to column \n", "phab_df['reply_to'] = phab_df.groupby('TaskPHID')['id'].shift()\n", "phab_df['reply_to'] = phab_df['reply_to'].where(pd.notnull(phab_df['reply_to']), None)\n", "\n", "phab_df = phab_df.rename(columns={\n", " 'AuthorPHID': 'speaker',\n", " 'TaskPHID': 'conversation_id',\n", " 'WMFaffil':'meta.affil',\n", " 'isGerrit': 'meta.gerrit'\n", "})\n", "\n", "# after 11-1-2012 before 11-1-2013\n", "phab_df['timestamp'] = pd.to_datetime(phab_df['date_created'], unit='s', origin='unix', utc=True)\n", "filtered_phab_df = phab_df[(phab_df['date_created'] < 1383264000) & (phab_df['date_created'] > 1351728000)]\n", "\n", "#removing headless conversations\n", "task_phab_df = filtered_phab_df[filtered_phab_df['comment_type']==\"task_description\"]\n", "headed_task_phids = task_phab_df['conversation_id'].unique()\n", "filtered_phab_df = filtered_phab_df[filtered_phab_df['conversation_id'].isin(headed_task_phids)]\n", "\n", "#removing gerrit comments \n", "comment_phab_df = filtered_phab_df[filtered_phab_df['meta.gerrit'] != True]" ] }, { "cell_type": "code", "execution_count": 15, "id": "942344db-c8f5-4ed6-a757-c97f8454f18b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Unique conversation_ids: 2081\n", "Unique ids: 8804\n", "Unique speakers: 230\n" ] } ], "source": [ "unique_conversation_ids = len(comment_phab_df['conversation_id'].unique())\n", "unique_ids = len(comment_phab_df['id'].unique())\n", "unique_speakers = len(comment_phab_df['speaker'].unique())\n", "\n", "print(f\"Unique conversation_ids: {unique_conversation_ids}\")\n", "print(f\"Unique ids: {unique_ids}\")\n", "print(f\"Unique speakers: {unique_speakers}\")" ] }, { "cell_type": "code", "execution_count": 16, "id": "c0aade6b-f425-4f9b-ae2a-721ea49712ee", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
task_titlecomment_textdate_createdspeakermeta.affilconversation_idcomment_typestatustextresolved_textmeta.gerritidreply_tofirst_commenttimestamp
708VisualEditor: [Regression] \"More\" menu gets sh...Tested on both the Italian and the English Wik...1380976920PHID-USER-wil4b5lylrvf3krixlklTruePHID-TASK-64s56xzrc22ustp2z7wxtask_descriptionresolvedTested on both the Italian and the English Wik...Tested on both the Italian and the English Wik...False709NaNFalse2013-10-05 12:42:00+00:00
709VisualEditor: [Regression] \"More\" menu gets sh...Note that this is fixed and has been deployed ...1381281033PHID-USER-ydswvwhh5pm4lshahjjeTruePHID-TASK-64s56xzrc22ustp2z7wxtask_subcommentNaNNote that this is fixed and has been deployed ...Note that this is fixed and has been deployed ...False710709.0False2013-10-09 01:10:33+00:00
712VisualEditor: [Regression] \"More\" menu gets sh...*** Bug 55362 has been marked as a duplicate o...1381267451PHID-USER-ydswvwhh5pm4lshahjjeTruePHID-TASK-64s56xzrc22ustp2z7wxtask_subcommentNaN*** Bug 55362 has been marked as a duplicate o...*** Bug 55362 has been marked as a duplicate o...False713712.0False2013-10-08 21:24:11+00:00
717VisualEditor: [Regression] \"More\" menu gets sh...(In reply to comment #6)\\n> Krinkle, do I need...1381168024PHID-USER-sai77mtxmpqnm6pycyvzTruePHID-TASK-64s56xzrc22ustp2z7wxtask_subcommentNaN(In reply to comment #6)\\n> Krinkle, do I need...(In reply to comment #6)\\n> Krinkle, do I need...False718717.0False2013-10-07 17:47:04+00:00
718VisualEditor: [Regression] \"More\" menu gets sh...Krinkle, do I need to file a different bug for...1381142922PHID-USER-wil4b5lylrvf3krixlklTruePHID-TASK-64s56xzrc22ustp2z7wxtask_subcommentNaNKrinkle, do I need to file a different bug for...Krinkle, do Krinkle need to file a different b...False719718.0False2013-10-07 10:48:42+00:00
................................................
32172Setup wikibugs and gerrit-wm for #mediawiki-vi...Puppet config for wikibugs:\\n\\nhttps://gerrit....1354738560PHID-USER-ydswvwhh5pm4lshahjjeTruePHID-TASK-ciosa56mnibqn4lx27ubtask_descriptionresolvedPuppet config for wikibugs:\\n\\nhttps://gerrit....Puppet config for wikibugs:\\n\\nhttps://gerrit....False32173NaNFalse2012-12-05 20:16:00+00:00
32178Setup wikibugs and gerrit-wm for #mediawiki-vi...gerrit-wm is done, but wikibugs is \"an almight...1360206228PHID-USER-ydswvwhh5pm4lshahjjeTruePHID-TASK-ciosa56mnibqn4lx27ubtask_subcommentNaNgerrit-wm is done, but wikibugs is \"an almight...gerrit-wm is done, but wikibugs is \"an almight...False3217932178.0False2013-02-07 03:03:48+00:00
32179Setup wikibugs and gerrit-wm for #mediawiki-vi...Attempted fixes in Gerrit 37566 and Gerrit 37570.1354926921PHID-USER-ydswvwhh5pm4lshahjjeTruePHID-TASK-ciosa56mnibqn4lx27ubtask_subcommentNaNAttempted fixes in Gerrit 37566 and Gerrit 37570.Attempted fixes in Gerrit 37566 and Gerrit 37570.False3218032179.0False2012-12-08 00:35:21+00:00
32180VisualEditor: Two replacements within the same...Test case:\\n\\n+ 'removin...1353134520PHID-USER-fovtl67ew4l4cc3oeypcFalsePHID-TASK-guukovmsjsnlpphgujcvtask_descriptioninvalidTest case:\\n\\n+ 'removin...Test case:\\n\\n+ 'removin...False32181NaNFalse2012-11-17 06:42:00+00:00
32181VisualEditor: Two replacements within the same...With bug 45061 all change marker code has been...1360975473PHID-USER-it53o2f2kyryqyj33uztFalsePHID-TASK-guukovmsjsnlpphgujcvtask_subcommentNaNWith bug 45061 all change marker code has been...With bug 45061 all change marker code has been...False3218232181.0False2013-02-16 00:44:33+00:00
\n", "

8804 rows × 15 columns

\n", "
" ], "text/plain": [ " task_title \\\n", "708 VisualEditor: [Regression] \"More\" menu gets sh... \n", "709 VisualEditor: [Regression] \"More\" menu gets sh... \n", "712 VisualEditor: [Regression] \"More\" menu gets sh... \n", "717 VisualEditor: [Regression] \"More\" menu gets sh... \n", "718 VisualEditor: [Regression] \"More\" menu gets sh... \n", "... ... \n", "32172 Setup wikibugs and gerrit-wm for #mediawiki-vi... \n", "32178 Setup wikibugs and gerrit-wm for #mediawiki-vi... \n", "32179 Setup wikibugs and gerrit-wm for #mediawiki-vi... \n", "32180 VisualEditor: Two replacements within the same... \n", "32181 VisualEditor: Two replacements within the same... \n", "\n", " comment_text date_created \\\n", "708 Tested on both the Italian and the English Wik... 1380976920 \n", "709 Note that this is fixed and has been deployed ... 1381281033 \n", "712 *** Bug 55362 has been marked as a duplicate o... 1381267451 \n", "717 (In reply to comment #6)\\n> Krinkle, do I need... 1381168024 \n", "718 Krinkle, do I need to file a different bug for... 1381142922 \n", "... ... ... \n", "32172 Puppet config for wikibugs:\\n\\nhttps://gerrit.... 1354738560 \n", "32178 gerrit-wm is done, but wikibugs is \"an almight... 1360206228 \n", "32179 Attempted fixes in Gerrit 37566 and Gerrit 37570. 1354926921 \n", "32180 Test case:\\n\\n+ 'removin... 1353134520 \n", "32181 With bug 45061 all change marker code has been... 1360975473 \n", "\n", " speaker meta.affil \\\n", "708 PHID-USER-wil4b5lylrvf3krixlkl True \n", "709 PHID-USER-ydswvwhh5pm4lshahjje True \n", "712 PHID-USER-ydswvwhh5pm4lshahjje True \n", "717 PHID-USER-sai77mtxmpqnm6pycyvz True \n", "718 PHID-USER-wil4b5lylrvf3krixlkl True \n", "... ... ... \n", "32172 PHID-USER-ydswvwhh5pm4lshahjje True \n", "32178 PHID-USER-ydswvwhh5pm4lshahjje True \n", "32179 PHID-USER-ydswvwhh5pm4lshahjje True \n", "32180 PHID-USER-fovtl67ew4l4cc3oeypc False \n", "32181 PHID-USER-it53o2f2kyryqyj33uzt False \n", "\n", " conversation_id comment_type status \\\n", "708 PHID-TASK-64s56xzrc22ustp2z7wx task_description resolved \n", "709 PHID-TASK-64s56xzrc22ustp2z7wx task_subcomment NaN \n", "712 PHID-TASK-64s56xzrc22ustp2z7wx task_subcomment NaN \n", "717 PHID-TASK-64s56xzrc22ustp2z7wx task_subcomment NaN \n", "718 PHID-TASK-64s56xzrc22ustp2z7wx task_subcomment NaN \n", "... ... ... ... \n", "32172 PHID-TASK-ciosa56mnibqn4lx27ub task_description resolved \n", "32178 PHID-TASK-ciosa56mnibqn4lx27ub task_subcomment NaN \n", "32179 PHID-TASK-ciosa56mnibqn4lx27ub task_subcomment NaN \n", "32180 PHID-TASK-guukovmsjsnlpphgujcv task_description invalid \n", "32181 PHID-TASK-guukovmsjsnlpphgujcv task_subcomment NaN \n", "\n", " text \\\n", "708 Tested on both the Italian and the English Wik... \n", "709 Note that this is fixed and has been deployed ... \n", "712 *** Bug 55362 has been marked as a duplicate o... \n", "717 (In reply to comment #6)\\n> Krinkle, do I need... \n", "718 Krinkle, do I need to file a different bug for... \n", "... ... \n", "32172 Puppet config for wikibugs:\\n\\nhttps://gerrit.... \n", "32178 gerrit-wm is done, but wikibugs is \"an almight... \n", "32179 Attempted fixes in Gerrit 37566 and Gerrit 37570. \n", "32180 Test case:\\n\\n+ 'removin... \n", "32181 With bug 45061 all change marker code has been... \n", "\n", " resolved_text meta.gerrit id \\\n", "708 Tested on both the Italian and the English Wik... False 709 \n", "709 Note that this is fixed and has been deployed ... False 710 \n", "712 *** Bug 55362 has been marked as a duplicate o... False 713 \n", "717 (In reply to comment #6)\\n> Krinkle, do I need... False 718 \n", "718 Krinkle, do Krinkle need to file a different b... False 719 \n", "... ... ... ... \n", "32172 Puppet config for wikibugs:\\n\\nhttps://gerrit.... False 32173 \n", "32178 gerrit-wm is done, but wikibugs is \"an almight... False 32179 \n", "32179 Attempted fixes in Gerrit 37566 and Gerrit 37570. False 32180 \n", "32180 Test case:\\n\\n+ 'removin... False 32181 \n", "32181 With bug 45061 all change marker code has been... False 32182 \n", "\n", " reply_to first_comment timestamp \n", "708 NaN False 2013-10-05 12:42:00+00:00 \n", "709 709.0 False 2013-10-09 01:10:33+00:00 \n", "712 712.0 False 2013-10-08 21:24:11+00:00 \n", "717 717.0 False 2013-10-07 17:47:04+00:00 \n", "718 718.0 False 2013-10-07 10:48:42+00:00 \n", "... ... ... ... \n", "32172 NaN False 2012-12-05 20:16:00+00:00 \n", "32178 32178.0 False 2013-02-07 03:03:48+00:00 \n", "32179 32179.0 False 2012-12-08 00:35:21+00:00 \n", "32180 NaN False 2012-11-17 06:42:00+00:00 \n", "32181 32181.0 False 2013-02-16 00:44:33+00:00 \n", "\n", "[8804 rows x 15 columns]" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "comment_phab_df" ] }, { "cell_type": "code", "execution_count": 17, "id": "d226d781-b002-4842-a3ae-92d4851a5878", "metadata": {}, "outputs": [], "source": [ "import re\n", "\n", "def preprocess_text(text):\n", " text = str(text)\n", " text = text.replace('*', ' ')\n", " text = text.replace('-', ' ')\n", " text = re.sub(r'http\\S+', '', text)\n", " return text" ] }, { "cell_type": "code", "execution_count": 18, "id": "3ae40d24-bbe8-49c3-a3a9-70bde1b4d559", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_49967/3649688126.py:1: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", " comment_phab_df['processed_text'] = comment_phab_df['text'].apply(preprocess_text)\n" ] } ], "source": [ "comment_phab_df['processed_text'] = comment_phab_df['text'].apply(preprocess_text)" ] }, { "cell_type": "code", "execution_count": 19, "id": "b8eddf40-1fe2-4fce-be74-b32552b40c57", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_49967/1316816771.py:1: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", " comment_phab_df['processed_resolved_text'] = comment_phab_df['resolved_text'].apply(preprocess_text)\n" ] } ], "source": [ "comment_phab_df['processed_resolved_text'] = comment_phab_df['resolved_text'].apply(preprocess_text)" ] }, { "cell_type": "code", "execution_count": 20, "id": "a8469b16-4ae6-4b06-bf1b-1f2f6c736cab", "metadata": {}, "outputs": [], "source": [ "nlp = spacy.load(\"en_core_web_sm\")\n", "\n", "def extract_dependency_tree(sentence):\n", " doc = nlp(sentence)\n", " return [(token.text, token.lemma_, token.dep_, token.head.text, token.ancestors, token.subtree, token.children) for token in doc]" ] }, { "cell_type": "code", "execution_count": 21, "id": "8b9a12f9-71bf-4bc9-bcfd-c73aab4be920", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_49967/2805711855.py:1: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", " comment_phab_df['dependency_tree'] = comment_phab_df['processed_text'].apply(extract_dependency_tree)\n" ] } ], "source": [ "comment_phab_df['dependency_tree'] = comment_phab_df['processed_text'].apply(extract_dependency_tree)" ] }, { "cell_type": "code", "execution_count": 22, "id": "337a528a-5667-4e1f-ac9a-37caabc03a18", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_49967/2117289791.py:1: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", " comment_phab_df['resolved_dependency_tree'] = comment_phab_df['processed_resolved_text'].apply(extract_dependency_tree)\n" ] } ], "source": [ "comment_phab_df['resolved_dependency_tree'] = comment_phab_df['processed_resolved_text'].apply(extract_dependency_tree)" ] }, { "cell_type": "code", "execution_count": 32, "id": "a3f5d40b-f56e-4e31-a7f9-40b7ddb4d2a4", "metadata": {}, "outputs": [], "source": [ "#get VAD scores\n", "import numpy as np\n", "#https://saifmohammad.com/WebPages/nrc-vad.html\n", "column_headings = ['Word', 'Valence', 'Arousal', 'Domination']\n", "vad_lexicon = pd.read_csv('NRC-VAD-Lexicon.txt', delimiter='\\t', header=None, names=column_headings)\n", "vad_dict = vad_lexicon.set_index('Word').T.to_dict()\n", "\n", "def vad_scoring(dependency_tree):\n", " valence = []\n", " arousal = []\n", " dominance = []\n", " for token, lemma, dep, head, ancestors, subtree, children in dependency_tree:\n", " if lemma in vad_dict:\n", " valence.append(vad_dict[lemma]['Valence'])\n", " arousal.append(vad_dict[lemma]['Arousal'])\n", " dominance.append(vad_dict[lemma]['Domination'])\n", "\n", " # Compute average scores across the comment\n", " avg_valence = np.mean(valence) if valence else 0\n", " avg_arousal = np.mean(arousal) if arousal else 0\n", " avg_dominance = np.mean(dominance) if dominance else 0\n", "\n", " return [avg_valence, avg_arousal, avg_dominance]\n", "\n", "def dominance_prevail(dependency_tree):\n", " dominant_words = 0 \n", " for token, lemma, dep, head, ancestors, subtree, children in dependency_tree:\n", " if lemma in vad_dict:\n", " if vad_dict[lemma]['Domination'] >= 0.75:\n", " dominant_words += 1\n", " return dominant_words\n", " " ] }, { "cell_type": "code", "execution_count": 33, "id": "828fb57a-e152-42ef-9c60-660648898532", "metadata": {}, "outputs": [], "source": [ "#establishing per-comment VAD scores \n", "comment_phab_df['avg_vad_scores'] = comment_phab_df['dependency_tree'].apply(vad_scoring)\n", "comment_phab_df['dominant_wc'] = comment_phab_df['dependency_tree'].apply(dominance_prevail)" ] }, { "cell_type": "code", "execution_count": 34, "id": "27e47f6f-0257-4b70-b222-e91ef888c900", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
task_titlecomment_textdate_createdspeakermeta.affilconversation_idcomment_typestatustextresolved_text...first_commenttimestampprocessed_textprocessed_resolved_textdependency_treeresolved_dependency_treeaverage_v_scoreaverage_a_scoreaverage_d_scoredominant_wc
708VisualEditor: [Regression] \"More\" menu gets sh...Tested on both the Italian and the English Wik...1380976920PHID-USER-wil4b5lylrvf3krixlklTruePHID-TASK-64s56xzrc22ustp2z7wxtask_descriptionresolvedTested on both the Italian and the English Wik...Tested on both the Italian and the English Wik......False2013-10-05 12:42:00+00:00Tested on both the Italian and the English Wik...Tested on both the Italian and the English Wik...[(Tested, test, advcl, Reach, <generator objec...[(Tested, test, advcl, Reach, <generator objec...0.5753040.3979130.4759132
709VisualEditor: [Regression] \"More\" menu gets sh...Note that this is fixed and has been deployed ...1381281033PHID-USER-ydswvwhh5pm4lshahjjeTruePHID-TASK-64s56xzrc22ustp2z7wxtask_subcommentNaNNote that this is fixed and has been deployed ...Note that this is fixed and has been deployed ......False2013-10-09 01:10:33+00:00Note that this is fixed and has been deployed ...Note that this is fixed and has been deployed ...[(Note, note, ROOT, Note, <generator object at...[(Note, note, ROOT, Note, <generator object at...0.6231000.4229000.5435000
712VisualEditor: [Regression] \"More\" menu gets sh...*** Bug 55362 has been marked as a duplicate o...1381267451PHID-USER-ydswvwhh5pm4lshahjjeTruePHID-TASK-64s56xzrc22ustp2z7wxtask_subcommentNaN*** Bug 55362 has been marked as a duplicate o...*** Bug 55362 has been marked as a duplicate o......False2013-10-08 21:24:11+00:00Bug 55362 has been marked as a duplicate o...Bug 55362 has been marked as a duplicate o...[( , , dep, Bug, <generator object at 0...[( , , dep, Bug, <generator object at 0...0.5018330.3916670.4295000
717VisualEditor: [Regression] \"More\" menu gets sh...(In reply to comment #6)\\n> Krinkle, do I need...1381168024PHID-USER-sai77mtxmpqnm6pycyvzTruePHID-TASK-64s56xzrc22ustp2z7wxtask_subcommentNaN(In reply to comment #6)\\n> Krinkle, do I need...(In reply to comment #6)\\n> Krinkle, do I need......False2013-10-07 17:47:04+00:00(In reply to comment #6)\\n> Krinkle, do I need...(In reply to comment #6)\\n> Krinkle, do I need...[((, (, punct, comment, <generator object at 0...[((, (, punct, comment, <generator object at 0...0.5694500.4056000.4376501
718VisualEditor: [Regression] \"More\" menu gets sh...Krinkle, do I need to file a different bug for...1381142922PHID-USER-wil4b5lylrvf3krixlklTruePHID-TASK-64s56xzrc22ustp2z7wxtask_subcommentNaNKrinkle, do I need to file a different bug for...Krinkle, do Krinkle need to file a different b......False2013-10-07 10:48:42+00:00Krinkle, do I need to file a different bug for...Krinkle, do Krinkle need to file a different b...[(Krinkle, Krinkle, npadvmod, need, <generator...[(Krinkle, Krinkle, npadvmod, need, <generator...0.6145560.4324440.4376671
..................................................................
32172Setup wikibugs and gerrit-wm for #mediawiki-vi...Puppet config for wikibugs:\\n\\nhttps://gerrit....1354738560PHID-USER-ydswvwhh5pm4lshahjjeTruePHID-TASK-ciosa56mnibqn4lx27ubtask_descriptionresolvedPuppet config for wikibugs:\\n\\nhttps://gerrit....Puppet config for wikibugs:\\n\\nhttps://gerrit.......False2012-12-05 20:16:00+00:00Puppet config for wikibugs:\\n\\n\\n\\nPuppet conf...Puppet config for wikibugs:\\n\\n\\n\\nPuppet conf...[(Puppet, puppet, compound, config, <generator...[(Puppet, puppet, compound, config, <generator...0.5253330.4293330.4013330
32178Setup wikibugs and gerrit-wm for #mediawiki-vi...gerrit-wm is done, but wikibugs is \"an almight...1360206228PHID-USER-ydswvwhh5pm4lshahjjeTruePHID-TASK-ciosa56mnibqn4lx27ubtask_subcommentNaNgerrit-wm is done, but wikibugs is \"an almight...gerrit-wm is done, but wikibugs is \"an almight......False2013-02-07 03:03:48+00:00gerrit wm is done, but wikibugs is \"an almight...gerrit wm is done, but wikibugs is \"an almight...[(gerrit, gerrit, compound, wm, <generator obj...[(gerrit, gerrit, compound, wm, <generator obj...0.5958180.5120910.5662733
32179Setup wikibugs and gerrit-wm for #mediawiki-vi...Attempted fixes in Gerrit 37566 and Gerrit 37570.1354926921PHID-USER-ydswvwhh5pm4lshahjjeTruePHID-TASK-ciosa56mnibqn4lx27ubtask_subcommentNaNAttempted fixes in Gerrit 37566 and Gerrit 37570.Attempted fixes in Gerrit 37566 and Gerrit 37570....False2012-12-08 00:35:21+00:00Attempted fixes in Gerrit 37566 and Gerrit 37570.Attempted fixes in Gerrit 37566 and Gerrit 37570.[(Attempted, attempt, amod, fixes, <generator ...[(Attempted, attempt, amod, fixes, <generator ...0.6925000.5145000.4750000
32180VisualEditor: Two replacements within the same...Test case:\\n\\n+ 'removin...1353134520PHID-USER-fovtl67ew4l4cc3oeypcFalsePHID-TASK-guukovmsjsnlpphgujcvtask_descriptioninvalidTest case:\\n\\n+ 'removin...Test case:\\n\\n+ 'removin......False2012-11-17 06:42:00+00:00Test case:\\n\\n+ 'removin...Test case:\\n\\n+ 'removin...[(Test, test, compound, case, <generator objec...[(Test, test, compound, case, <generator objec...0.5675090.4485610.5350534
32181VisualEditor: Two replacements within the same...With bug 45061 all change marker code has been...1360975473PHID-USER-it53o2f2kyryqyj33uztFalsePHID-TASK-guukovmsjsnlpphgujcvtask_subcommentNaNWith bug 45061 all change marker code has been...With bug 45061 all change marker code has been......False2013-02-16 00:44:33+00:00With bug 45061 all change marker code has been...With bug 45061 all change marker code has been...[(With, with, prep, change, <generator object ...[(With, with, prep, change, <generator object ...0.5304290.4120000.5095710
\n", "

8804 rows × 23 columns

\n", "
" ], "text/plain": [ " task_title \\\n", "708 VisualEditor: [Regression] \"More\" menu gets sh... \n", "709 VisualEditor: [Regression] \"More\" menu gets sh... \n", "712 VisualEditor: [Regression] \"More\" menu gets sh... \n", "717 VisualEditor: [Regression] \"More\" menu gets sh... \n", "718 VisualEditor: [Regression] \"More\" menu gets sh... \n", "... ... \n", "32172 Setup wikibugs and gerrit-wm for #mediawiki-vi... \n", "32178 Setup wikibugs and gerrit-wm for #mediawiki-vi... \n", "32179 Setup wikibugs and gerrit-wm for #mediawiki-vi... \n", "32180 VisualEditor: Two replacements within the same... \n", "32181 VisualEditor: Two replacements within the same... \n", "\n", " comment_text date_created \\\n", "708 Tested on both the Italian and the English Wik... 1380976920 \n", "709 Note that this is fixed and has been deployed ... 1381281033 \n", "712 *** Bug 55362 has been marked as a duplicate o... 1381267451 \n", "717 (In reply to comment #6)\\n> Krinkle, do I need... 1381168024 \n", "718 Krinkle, do I need to file a different bug for... 1381142922 \n", "... ... ... \n", "32172 Puppet config for wikibugs:\\n\\nhttps://gerrit.... 1354738560 \n", "32178 gerrit-wm is done, but wikibugs is \"an almight... 1360206228 \n", "32179 Attempted fixes in Gerrit 37566 and Gerrit 37570. 1354926921 \n", "32180 Test case:\\n\\n+ 'removin... 1353134520 \n", "32181 With bug 45061 all change marker code has been... 1360975473 \n", "\n", " speaker meta.affil \\\n", "708 PHID-USER-wil4b5lylrvf3krixlkl True \n", "709 PHID-USER-ydswvwhh5pm4lshahjje True \n", "712 PHID-USER-ydswvwhh5pm4lshahjje True \n", "717 PHID-USER-sai77mtxmpqnm6pycyvz True \n", "718 PHID-USER-wil4b5lylrvf3krixlkl True \n", "... ... ... \n", "32172 PHID-USER-ydswvwhh5pm4lshahjje True \n", "32178 PHID-USER-ydswvwhh5pm4lshahjje True \n", "32179 PHID-USER-ydswvwhh5pm4lshahjje True \n", "32180 PHID-USER-fovtl67ew4l4cc3oeypc False \n", "32181 PHID-USER-it53o2f2kyryqyj33uzt False \n", "\n", " conversation_id comment_type status \\\n", "708 PHID-TASK-64s56xzrc22ustp2z7wx task_description resolved \n", "709 PHID-TASK-64s56xzrc22ustp2z7wx task_subcomment NaN \n", "712 PHID-TASK-64s56xzrc22ustp2z7wx task_subcomment NaN \n", "717 PHID-TASK-64s56xzrc22ustp2z7wx task_subcomment NaN \n", "718 PHID-TASK-64s56xzrc22ustp2z7wx task_subcomment NaN \n", "... ... ... ... \n", "32172 PHID-TASK-ciosa56mnibqn4lx27ub task_description resolved \n", "32178 PHID-TASK-ciosa56mnibqn4lx27ub task_subcomment NaN \n", "32179 PHID-TASK-ciosa56mnibqn4lx27ub task_subcomment NaN \n", "32180 PHID-TASK-guukovmsjsnlpphgujcv task_description invalid \n", "32181 PHID-TASK-guukovmsjsnlpphgujcv task_subcomment NaN \n", "\n", " text \\\n", "708 Tested on both the Italian and the English Wik... \n", "709 Note that this is fixed and has been deployed ... \n", "712 *** Bug 55362 has been marked as a duplicate o... \n", "717 (In reply to comment #6)\\n> Krinkle, do I need... \n", "718 Krinkle, do I need to file a different bug for... \n", "... ... \n", "32172 Puppet config for wikibugs:\\n\\nhttps://gerrit.... \n", "32178 gerrit-wm is done, but wikibugs is \"an almight... \n", "32179 Attempted fixes in Gerrit 37566 and Gerrit 37570. \n", "32180 Test case:\\n\\n+ 'removin... \n", "32181 With bug 45061 all change marker code has been... \n", "\n", " resolved_text ... first_comment \\\n", "708 Tested on both the Italian and the English Wik... ... False \n", "709 Note that this is fixed and has been deployed ... ... False \n", "712 *** Bug 55362 has been marked as a duplicate o... ... False \n", "717 (In reply to comment #6)\\n> Krinkle, do I need... ... False \n", "718 Krinkle, do Krinkle need to file a different b... ... False \n", "... ... ... ... \n", "32172 Puppet config for wikibugs:\\n\\nhttps://gerrit.... ... False \n", "32178 gerrit-wm is done, but wikibugs is \"an almight... ... False \n", "32179 Attempted fixes in Gerrit 37566 and Gerrit 37570. ... False \n", "32180 Test case:\\n\\n+ 'removin... ... False \n", "32181 With bug 45061 all change marker code has been... ... False \n", "\n", " timestamp \\\n", "708 2013-10-05 12:42:00+00:00 \n", "709 2013-10-09 01:10:33+00:00 \n", "712 2013-10-08 21:24:11+00:00 \n", "717 2013-10-07 17:47:04+00:00 \n", "718 2013-10-07 10:48:42+00:00 \n", "... ... \n", "32172 2012-12-05 20:16:00+00:00 \n", "32178 2013-02-07 03:03:48+00:00 \n", "32179 2012-12-08 00:35:21+00:00 \n", "32180 2012-11-17 06:42:00+00:00 \n", "32181 2013-02-16 00:44:33+00:00 \n", "\n", " processed_text \\\n", "708 Tested on both the Italian and the English Wik... \n", "709 Note that this is fixed and has been deployed ... \n", "712 Bug 55362 has been marked as a duplicate o... \n", "717 (In reply to comment #6)\\n> Krinkle, do I need... \n", "718 Krinkle, do I need to file a different bug for... \n", "... ... \n", "32172 Puppet config for wikibugs:\\n\\n\\n\\nPuppet conf... \n", "32178 gerrit wm is done, but wikibugs is \"an almight... \n", "32179 Attempted fixes in Gerrit 37566 and Gerrit 37570. \n", "32180 Test case:\\n\\n+ 'removin... \n", "32181 With bug 45061 all change marker code has been... \n", "\n", " processed_resolved_text \\\n", "708 Tested on both the Italian and the English Wik... \n", "709 Note that this is fixed and has been deployed ... \n", "712 Bug 55362 has been marked as a duplicate o... \n", "717 (In reply to comment #6)\\n> Krinkle, do I need... \n", "718 Krinkle, do Krinkle need to file a different b... \n", "... ... \n", "32172 Puppet config for wikibugs:\\n\\n\\n\\nPuppet conf... \n", "32178 gerrit wm is done, but wikibugs is \"an almight... \n", "32179 Attempted fixes in Gerrit 37566 and Gerrit 37570. \n", "32180 Test case:\\n\\n+ 'removin... \n", "32181 With bug 45061 all change marker code has been... \n", "\n", " dependency_tree \\\n", "708 [(Tested, test, advcl, Reach, " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(10, 6))\n", "task_phab_df = phab_df[phab_df['comment_type']==\"task_description\"]\n", "task_phab_df['first_comment'] = task_phab_df.groupby('speaker')['timestamp'].rank(method='first') == 1\n", "task_phab_df = task_phab_df[(task_phab_df['date_created'] < 1383264000) & (task_phab_df['date_created'] > 1351728000)]\n", "\n", "task_phab_df['week'] = task_phab_df['timestamp'].dt.to_period('W').dt.start_time\n", "unique_taskPHIDs = task_phab_df.groupby('week')['conversation_id'].nunique()\n", "\n", "wmf_task_phab_df = task_phab_df[task_phab_df['meta.affil'] == True]\n", "wmf_tasks = wmf_task_phab_df.groupby('week')['conversation_id'].nunique()\n", "\n", "other_task_phab_df = task_phab_df[task_phab_df['meta.affil'] != True]\n", "other_tasks = other_task_phab_df.groupby('week')['conversation_id'].nunique()\n", "\n", "new_tasks_phab_df = task_phab_df[task_phab_df['first_comment'] == True]\n", "new_tasks = new_tasks_phab_df.groupby('week')['conversation_id'].nunique()\n", "\n", "sns.lineplot(x=unique_taskPHIDs.index, y=unique_taskPHIDs.values, color='black', label='Total', marker='o')\n", "sns.lineplot(x=wmf_tasks.index, y=wmf_tasks.values, color='#c7756a', label='WMF-affiliated authors', marker='o')\n", "sns.lineplot(x=other_tasks.index, y=other_tasks.values, color='#5da2d8', label='Nonaffiliated authors', marker='o')\n", "sns.lineplot(x=new_tasks.index, y=new_tasks.values, color=\"green\", label=\"first-timers\", marker='o')\n", "\n", "plt.title('New Phabricator Tasks Indexed with \"VisualEditor\"')\n", "plt.xlabel('Timestamp')\n", "plt.ylabel('Unique taskPHIDs')\n", "plt.xticks(rotation=45)\n", "plt.grid(True)\n", "plt.tight_layout()\n", "plt.show()\n" ] }, { "cell_type": "code", "execution_count": 50, "id": "b7cfad77-d48a-4708-91f3-89ae1179b90c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABD4AAAHqCAYAAADswI5LAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAACiVklEQVR4nOzdd5hU5f3+8ff0me2F3ptiRUURQREsEY1R0cSoMWKNmoDG2BKTaMAkolETNSZqiqJJlGhi+X3tioJSVRQUC5EFBIGlbC/Tz/n9cXZnWdiF2dnZnbL367r2Ys/MKc+g7Jm95/N8HptpmiYiIiIiIiIiIlnInuoBiIiIiIiIiIh0FQUfIiIiIiIiIpK1FHyIiIiIiIiISNZS8CEiIiIiIiIiWUvBh4iIiIiIiIhkLQUfIiIiIiIiIpK1FHyIiIiIiIiISNZS8CEiIiIiIiIiWUvBh4iIiIiIiIhkLQUfItLlZs2aRd++fbHZbDz//PNtPnbJJZcwbdq02DFTpkzhuuuuS8l492XDhg3YbDZWrlyZ6qGIiEgPkG33URGR7uZM9QBEpPtNmTKFww8/nPvuu6/Lr/X5558ze/ZsnnvuOY455hiKi4vbfOyEE07ANM0uH0+zuXPncumll+7x+F//+leuuOKKbhuHiIhknp5+H50yZQoLFy5s9/nJkyezYMGCbhmLiEg8FHyISJcqKysD4KyzzsJms7X7mMfj6faxFRQUsGbNmlaPFRYWdvs4RERE2pOO99Fnn32WUCgEwKZNmzj66KN58803OfjggwFwu92t9g+Hw7hcrm4bn4jI7jTVRSSNTZkyhWuuuYbrrruO4uJi+vbty1//+lcaGhq49NJLyc/PZ9SoUbzyyiutjlu9ejWnnXYaeXl59O3bl4suuoidO3cCcMkll7Bw4ULuv/9+bDYbNpuNDRs2EI1Gufzyyxk+fDg+n4/Ro0dz//3373V8+zpm1qxZnHHGGQDY7XZsNlubjzWPa9cS3e5gs9no169fqy+fz8err77KcccdR1FREaWlpXzrW9+KvclsS1VVFRdeeCG9e/fG5/Ox33778dhjj8We37RpE9/97ncpKiqipKSEs846iw0bNnTDKxQR6dl0H+0aJSUlsftm7969ASgtLY09VlpaykMPPcSZZ55Jbm4uv/3tb5k7dy5FRUWtzvP888/Hxt/shRdeYOzYsXi9XkaMGMHs2bOJRCLd8rpEJHsp+BBJc48//ji9evXivffe45prruGHP/wh5557LhMnTuTDDz/klFNO4aKLLqKxsRGA6upqTjzxRI444gg++OADXn31VbZt28Z3v/tdAO6//34mTJjAD37wA7Zu3crWrVsZPHgwhmEwaNAgnnnmGT777DNuu+02fv7zn/P000+3O7Z9HXPjjTfGAoDma7X1WCLeffdd8vLy9vr1r3/9K6FzNzQ0cP311/PBBx8wf/587HY7Z599NoZhtLn/rbfeymeffcYrr7zC559/zkMPPUSvXr0A61OuqVOnkp+fz7vvvsvixYvJy8vj1FNPjX1aJiIiXUf30bZ15X0UrNDm7LPP5pNPPuGyyy6Le0zTp0/nxz/+MZ999hmPPPIIc+fO5be//W3C4xARAcAUkbQ1efJk87jjjottRyIRMzc317zoootij23dutUEzKVLl5qmaZq//vWvzVNOOaXVeTZt2mQC5po1a2Ln/fGPf7zP68+YMcP89re/3aEx737Mc889Z+7+o6atxy6++GLzrLPOim3va4yNjY3ml19+udev2trado9/7LHHTMDMzc2NffXt27fNfXfs2GEC5ieffGKapmmuX7/eBMyPPvrINE3TPOOMM8xLL720zWP/8Y9/mKNHjzYNw4g9FgwGTZ/PZ7722mvtjk9ERDpP99H2x9jZ+2iz3e+JpmmagHnddde12u+xxx4zCwsL9/o6TjrpJPOOO+5otc8//vEPs3///vsch4jI3qjHh0iaGzNmTOx7h8NBaWkphx56aOyxvn37ArB9+3YAVq1axdtvv01eXt4e5yorK2P//fdv91p/+tOfePTRR9m4cSN+v59QKMThhx++1/Elckwy+Hw+Ro0a1alz5Ofn8+GHH8a27XarCO7LL7/ktttuY/ny5ezcuTNW6bFx40YOOeSQPc7zwx/+kG9/+9uxTw6nTZvGxIkTAeu/x9q1a8nPz291TCAQ2Ov0GRERSQ7dR9uWjPvo3hx11FEdPmbVqlUsXry4VYVHNBolEAjQ2NhITk5OMocoIj2Igg+RNLd7MzCbzdbqsea5sc2/nNfX13PGGWdw11137XGu/v37t3udefPmceONN3LvvfcyYcIE8vPzufvuu1m+fHlSj0mWd999l9NOO22v+zzyyCNceOGF7T5vt9vbfNN3xhlnMHToUP76178yYMAADMPgkEMOaXdqymmnncZXX33Fyy+/zBtvvMFJJ53EjBkzuOeee6ivr+fII49ss1y4eV60iIh0Hd1H25aM++je5Obmttq22+17rDoTDodbbdfX1zN79mzOOeecPc7n9XoTGoeICCj4EMk6Y8eO5b///S/Dhg3D6Wz7n7jb7SYajbZ6bPHixUycOJEf/ehHscf2VZGQyDHJctRRR7Fy5cq97tP8KV5HVFRUsGbNGv76178yadIkABYtWrTP43r37s3FF1/MxRdfzKRJk7jpppu45557GDt2LP/+97/p06cPBQUFHR6PiIh0L91HWyRyH21P7969qauro6GhIRaK7H79sWPHsmbNmi6tRBGRnknNTUWyzIwZM6isrOSCCy7g/fffp6ysjNdee41LL7009iZt2LBhLF++nA0bNsSmcuy333588MEHvPbaa/zvf//j1ltv5f3332917ueee44DDjggth3PMV2luUR3b1+7Ty+JR3FxMaWlpfzlL39h7dq1vPXWW1x//fV7Pea2227jhRdeYO3atXz66ae8+OKLHHjggQBceOGF9OrVi7POOot3332X9evXs2DBAq699lq+/vrrhF67iIh0Hd1HO3cfbc/48ePJycnh5z//OWVlZTz55JPMnTu31T633XYbTzzxBLNnz+bTTz/l888/Z968efzyl79M2jhEpGdS8CGSZQYMGMDixYuJRqOccsopHHrooVx33XUUFRXFeljceOONOBwODjroIHr37s3GjRu56qqrOOecczjvvPMYP348FRUVrT6BAqipqWHNmjWx7XiOyTR2u5158+axYsUKDjnkEH7yk59w99137/UYt9vNLbfcwpgxYzj++ONxOBzMmzcPgJycHN555x2GDBnCOeecw4EHHsjll19OIBBQBYiISBrSfbRrlJSU8M9//pOXX36ZQw89lKeeeopZs2a12mfq1Km8+OKLvP7664wbN45jjjmGP/zhDwwdOjQ1gxaRrGEzd59sJyIiIiIiIiKSJVTxISIiIiIiIiJZS8GHiIiIiIiIiGQtBR8iIiIiIiIikrUUfIiIiIiIiIhI1lLwISIiIiIiIiJZS8GHiIiIiIiIiGStlAYfc+bMYdy4ceTn59OnTx+mTZvWam3ztkyZMgWbzbbH1+mnnx7b55JLLtnj+VNPPTXucZmmSW1tLVrpV0REJD66d4qIiEi6SmnwsXDhQmbMmMGyZct44403CIfDnHLKKTQ0NLR7zLPPPsvWrVtjX6tXr8bhcHDuuee22u/UU09ttd9TTz0V97jq6uooLCykrq4u4dcmIiLSk+jeKSIiIunKmcqLv/rqq622586dS58+fVixYgXHH398m8eUlJS02p43bx45OTl7BB8ej4d+/fold8AiIiIiIiIiklFSGnzsrqamBtgz3Nibv//975x//vnk5ua2enzBggX06dOH4uJiTjzxRH7zm99QWlra5jmCwSDBYDC2XVtbm8DoRUREeg7dO0VERCRTpE1zU8MwuO666zj22GM55JBD4jrmvffeY/Xq1VxxxRWtHj/11FN54oknmD9/PnfddRcLFy7ktNNOIxqNtnmeOXPmUFhYGPsaPHhwp1+PiIhINtO9U0RERDKFzUyTLmQ//OEPeeWVV1i0aBGDBg2K65irrrqKpUuX8vHHH+91v3Xr1jFy5EjefPNNTjrppD2eb+tTq8GDB1NTU0NBQUHHXoiIiEgPoHuniIiIZIq0mOoyc+ZMXnzxRd555524Q4+GhgbmzZvH7bffvs99R4wYQa9evVi7dm2bwYfH48Hj8XR43CIiIj2V7p0iIiKSKVIafJimyTXXXMNzzz3HggULGD58eNzHPvPMMwSDQb7//e/vc9+vv/6aiooK+vfv35nhioiIiIiIiEiGSWmPjxkzZvDPf/6TJ598kvz8fMrLyykvL8fv98f2mT59Orfccssex/79739n2rRpezQsra+v56abbmLZsmVs2LCB+fPnc9ZZZzFq1CimTp3a5a9JRERERERERNJHSis+HnroIQCmTJnS6vHHHnuMSy65BICNGzdit7fOZ9asWcOiRYt4/fXX9zinw+Hg448/5vHHH6e6upoBAwZwyimn8Otf/1oluSIiIiIiIiI9TNo0N00ntbW1FBYWqkGbiIhInHTvFBERkXSVNsvZioiIiIiIiIgkm4IPEREREREREclaCj5EREREREREJGsp+BARERERERGRrKXgQ0RERERERESyloIPEREREREREclaCj5EREREREREJGsp+BARERERERGRrKXgQ0RERERERESyloIPERGRTBFqSPUIRERERDKOgg8REZFMEKyDaCjVoxARERHJOAo+REREMoG/KtUjEBEREclICj5ERETSXbAeIqr2EBEREUmEgg8REZF0p2oPERERkYQp+BAREUlnoUaIBFM9ChEREZGMpeBDREQknanaQ0RERKRTFHyIiIikq3AAwv5Uj0JEREQkoyn4EBERSVeq9hARERHpNAUfIiIi6SgShFBDqkchIiIikvEUfIiIiKQjVXuIiIiIJIWCDxERkXQTDUOwPtWjEBEREckKCj5ERETSjao9RERERJJGwYeIiEg6iUYgWJfqUYiIiIhkDQUfIiIi6SRQDaaZ6lGIiIiIZA0FHyIiIunCiEKgJtWjEBEREckqCj5ERETShb9a1R4iIiIiSabgQ0REJB0YhjXNRURERESSSsGHiIhIOlBvDxEREZEuoeBDREQk1UxT1R4iIiIiXUTBh4iISKoFaqypLiIiIiKSdAo+REREUsk0wV+V6lGIiIiIZC0FHyIiIqkUrLOWsRURERGRLqHgQ0REJJVU7SEiIiLSpRR8iIiIpEqwDqLhVI9CREREJKsp+BAREUkVVXuIiIiIdDkFHyIiIqkQrIdIKNWjEBEREcl6Cj5ERERSwV+Z6hGIiIiI9AgKPkRERLpbsE7VHiIiIiLdRMGHiIhId1NvDxEREZFuo+BDRESkO6m3h4iIiEi3UvAhIiLSndTbQ0RERKRbKfgQERHpLqEGVXuIiIiIdDMFHyIiIt1FvT1EREREul1Kg485c+Ywbtw48vPz6dOnD9OmTWPNmjV7PWbu3LnYbLZWX16vt9U+pmly22230b9/f3w+HyeffDJffvllV74UERGRvQv7IRxI9ShEREREepyUBh8LFy5kxowZLFu2jDfeeINwOMwpp5xCQ0PDXo8rKChg69atsa+vvvqq1fO/+93veOCBB3j44YdZvnw5ubm5TJ06lUBAbzhFRCRFGtXbQ0RERCQVnKm8+Kuvvtpqe+7cufTp04cVK1Zw/PHHt3uczWajX79+bT5nmib33Xcfv/zlLznrrLMAeOKJJ+jbty/PP/88559/fvJegIiISDzCAaviQ0RERES6XVr1+KipqQGgpKRkr/vV19czdOhQBg8ezFlnncWnn34ae279+vWUl5dz8sknxx4rLCxk/PjxLF26tGsGLiIisjdayUVEREQkZVJa8bErwzC47rrrOPbYYznkkEPa3W/06NE8+uijjBkzhpqaGu655x4mTpzIp59+yqBBgygvLwegb9++rY7r27dv7LndBYNBgsFgbLu2tjYJr0hERASIBCHUmOpRJJ3unSIiIpIp0qbiY8aMGaxevZp58+btdb8JEyYwffp0Dj/8cCZPnsyzzz5L7969eeSRRxK+9pw5cygsLIx9DR48OOFziYiItJKlK7no3ikiIiKZIi2Cj5kzZ/Liiy/y9ttvM2jQoA4d63K5OOKII1i7di1ArPfHtm3bWu23bdu2dvuC3HLLLdTU1MS+Nm3alMCrEBER2U0kBMH6VI+iS+jeKSIiIpkipcGHaZrMnDmT5557jrfeeovhw4d3+BzRaJRPPvmE/v37AzB8+HD69evH/PnzY/vU1tayfPlyJkyY0OY5PB4PBQUFrb5EREQ6LUurPUD3ThEREckcKe3xMWPGDJ588kleeOEF8vPzYz04CgsL8fl8AEyfPp2BAwcyZ84cAG6//XaOOeYYRo0aRXV1NXfffTdfffUVV1xxBWCt+HLdddfxm9/8hv3224/hw4dz6623MmDAAKZNm5aS1ykiIj1QNAzBulSPQkRERKTHS2nw8dBDDwEwZcqUVo8/9thjXHLJJQBs3LgRu72lMKWqqoof/OAHlJeXU1xczJFHHsmSJUs46KCDYvvcfPPNNDQ0cOWVV1JdXc1xxx3Hq6++itfr7fLXJCIiAmR1tYeIiIhIJrGZpmmmehDppra2lsLCQmpqalS6KyIiHReNQPVXkOxbbG4p+IqTe84k0b1TRERE0lVaNDcVERHJKv6q5IceIiIiIpIQBR8iIiLJZEQhWJvqUYiIiIhIEwUfIiIiyeSvVrWHiIiISBpR8CEiIpIsRhQC1akehYiIiIjsQsGHiIhIsgRqVO0hIiIikmYUfIiIiCSDYajaQ0RERCQNKfgQERFJhmCNFX6IiIiISFpR8CEiItJZpmktYSsiIiIiaUfBh4iISGcFVO0hIiIikq4UfIiIiHSGqj1ERERE0pqCDxERkc4I1FjL2IqIiIhIWlLwISIikihVe4iIiIikPQUfIiIiiQrWqtpDREREJM0p+BAREUmEaUJjZapHISIiIiL7oOBDREQkEar2EBEREckICj5EREQ6Sr09RERERDKGgg8REZGOCtZCNNK91wzUQuX67r2miIiISBZQ8CEiItIRqar2WHQvPHYaLP2TptiIiIiIdICCDxERkY5IRbXHV4vhixchEoDXfg6r5nXv9UVEREQymIIPERGReKWi2iNYB2//tmV7wFgYc173jkFEREQkgyn4EBERiVewrvurPRbfD/XbrO/tLjjrT+Bwdu8YRERERDKYgg8REZF4Baq793obl8Fnz7VsH3st9D2oe8cgIiIikuEUfIiIiMQj1AiRUDderwHe/k3Ldu/RMP7q7ru+iIiISJZQ8CEiIhKP7q72WPIA1G21vrc74MRfgcPVvWMQERERyQIKPkRERPYlErQqPrrL1x/A6v+0bB95mVXxISIiIiIdpuBDRERkX/zV3XetsB/eur1lu3QUHHV5911fREREJMso+BAREdmbaARC9d13vaUPQu1m63ubA06apSkuIiIiIp2g4ENERGRv/FVgmt1zrS0fwcfzWrbHXgx9Duyea4uIiIhkKQUfIiIi7TGiEKztnmuF/TB/dst2yUg4+gfdc20RERGRLKbgQ0REpD3+6u6r9lj+ENRssr632eGk28Dh7p5ri4iIiGQxBR8iIiJtMaLdt4Tt1o9h5ZMt24d/H/oe0j3XFhEREclyCj5ERETaEqjpnmqPSADmzwKarlU0FMZf1fXXFREREekhFHyIiIjszjC6r9rjvb9A9VdNGzY46Vfg9HbPtUVERER6AAUfIiIiuwvWWOFHV9u2Gj76R8v2Yd+D/od1/XVFREREehAFHyIiIrsyTWsJ264WDcH828FsClgKB8MxP+z664qIiIj0MAo+REREdhXopmqP9/8GlWUt2yfeBi5f119XREREpIdR8CEiItKsu6o9tn8OK+a2bB96Hgwc2/XXFREREemBFHyIiIg0C9Zay9h2pWjYWsXFbLpOwUCYeE3XXlNERESkB1PwISIi0sxf3fXX+OBRqFjbsn3irZriIiIiItKFFHyIiIgABOusaoyutPN/sOLvLduHfBsGjevaa4qIiIj0cAo+REREoOt7ezRPcWmeSpPfDyZe27XXFBEREREFHyIiIgTrIRLq2mt89ATsWNOyfcIvwZ3XtdcUEREREQUfIiIi+Cu79vwVa+G9v7RsH3QWDJnQtdcUEREREUDBh4iI9HShhq6t9jAiMH+29SdAXl849idddz0RERERaSWlwcecOXMYN24c+fn59OnTh2nTprFmzZq9HvPXv/6VSZMmUVxcTHFxMSeffDLvvfdeq30uueQSbDZbq69TTz21K1+KiIhkqsYurvb46J+w/bOW7Sk/B09+115T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CHeO1VPE7uje66aI7p0iItJpkaC1dK1IF0voI6mioiKOP/54br31Vt566y38fn+nBjFz5kxefPFF3n77bQYNGrTXffv168e2bdtaPbZt2zb69esXe775sfb22d0tt9xCTU1N7GvTpk2JvhQREUlEsD7xEteqr2DZQy3bo78JwxOvQEyIJw/y+/eY0AN07xQRkU4yompmKt0moeDjzTff5NRTT2X58uWceeaZFBcXc9xxx/GLX/yCN954I+7zmKbJzJkzee6553jrrbcYPnz4Po+ZMGEC8+fPb/XYG2+8wYQJEwAYPnw4/fr1a7VPbW0ty5cvj+2zO4/HQ0FBQasvERHpRolWexhReGs2RJumXOSUwqQbkzeueHjyIb8f2Gzde90U071TREQ6pX6btZKLSDdIaFWXXUUiEd5//30eeeQR/vWvf2EYBtFoNK5jf/SjH/Hkk0/ywgsvMHr06NjjhYWF+Hw+AKZPn87AgQOZM2cOYC1nO3nyZO68805OP/105s2bxx133MGHH34Y6w1y1113ceedd/L4448zfPhwbr31Vj7++GM+++wzvF7vPselzvQiIt0oUAP1OxI7duWTsOjelu1v3gMjTkjOuOLhybNCD9G9U0RE4tdYaX11B63qIiTY4wPgf//7HwsWLIh9BYNBvvWtbzFlypS4z/HQQ1Zp8u7HPPbYY1xyySUAbNy4EfsuTeImTpzIk08+yS9/+Ut+/vOfs99++/H888+3aoh6880309DQwJVXXkl1dTXHHXccr776alyhh4iIdCPDSPyNT80mWLbL0rX7Te3e0MOda/X0EBERkfiFGrov9BBpklDFx8CBA/H7/UyZMoUpU6YwefJkxowZgy1Lynz1qZWISDdJ9BMf04DnroItH1rbvmL43jPWn93B5bWWrM2S+14y6N4pIiL7FA1D9cbu7euhig8hwR4fvXv3prGxkfLycsrLy9m2bVunG5yKiEgPYxgQqE7s2NX/aQk9ACb/tPtCD4fLamSq0ENERCR+pqlmppIyCQUfK1eupLy8nJ/97GcEg0F+/vOf06tXLyZOnMgvfvGLZI9RRESyUbDGCj86qnYzLHmgZXvkSTDqG8kb197Y7T1u9RYREZGkqN8GkVCqRyE9VKebm1ZUVLBgwQJeeOEFnnrqqQ41N01XKtcVEelipglVG6xVWTp63As/gq/fs7a9hdYUl5zSpA9xDzYbFAwAl6/rr5WBdO8UEZF2+augIcEV3DpLU12EBJubPvvss7Gmpp999hklJSUcd9xx3HvvvUyePDnZYxQRkWwTqOl46AHw6XMtoQfA8Td3T+gBkNtboYeIiEhHhf1qZiopl1DwcfXVV3P88cdz5ZVXMnnyZA499NBkj0tERLKVaVqf/HRUXTksvq9le/hkayWX7pBbCl5VMYiIiHRINKK+HpIWEgo+tm/fHtd+d955J1dffTVFRUWJXEZERLJRItUepglv/wbCDda2pwCm3NI9DUZzSrqvcaqIiEi2aG5mmkg/L5EkS6i5abzuuOMOKitV1iQiIk0MI7Fqj8//H2xc2rI96QZr6klXyy21gg8RERHpmIYdEAmmehQiQIIVH/HqZN9UERHJNoHqjld71G+HRb9v2R56HIw+PanDalNuL/AVdf11REREsk2gBgK1qR6FSEyXBh8iIiIxpmkFHx095u3fQqje2nbnwQm/6PopLnm9rRVjREREpGPCAWjYmepRiLSi4ENERLpHoLrj83zXvAxfLWrZPu56yOuT1GHtIa+PGpmKiIgkQs1MJU11aY8PERERoGkll+qOHdOwA969p2V78DFw4JlJHdYeFHqIiIgkxjShbktiy9WLdDEFHyIi0vX8VR17I2SasGAOBJvmB7ty4cRfdu0Ul9xeCj1EREQSVb8NIqFUj0KkTV0afEyaNAmfz9eVlxARkXQXjXR8JZcvX4P1C1u2j/0x5PdP7rh2lVuqRqYiIiKJaqyEYH2qRyHSroSCD4fDwfbt2/d4vKKiAofDEdt++eWX6d+/C9+oiohI+mvY0bG5vo0V8M7vWrYHjYODz0n+uJrlloKvuOvOLyIiks2C9VbwIZLGEgo+2lumNhgM4na7OzUgERHJIsF6CDV07JiFd1nL4AG4fHDirV03xSWnRKGHiIhIoiJBa4qLSJrr0KouDzzwAAA2m42//e1v5OXlxZ6LRqO88847HHDAAckdoYiIZCbDsKo9OmLtG1A2v2V7wjVQMDC542rmybeCDxEREek4I6oVXDpoypQpHH744dx3330Jn+P555/nxhtvZP369VxzzTWdOldXW7x4MVdffTVffPEFp59+Os8//3zKxtKh4OMPf/gDYFV8PPzww62mtbjdboYNG8bDDz+c3BGKiEhmatzZsYam/iqr2qPZgLFw6LnJHxeAy9v1y+KKiIhks4YdVh8v6VZXXXUVl156Kddeey35+fmpHs5eXX/99Rx++OG88sor5OXlMWvWLJ5//nlWrlzZ7WPpUPCxfv16AE444QSeffZZiotVHiwiIm0IByBQ27Fj3rm7pQmq0wMn3ga2LujB7fRA/oCuXSFGREQkmwXr1Mw0Berr69m+fTtTp05lwIABCZ8nFAp1S4uKsrIyrr76agYNGpTU8yYy/oTeUb799tsKPUREpH3+DjY5W/e2tZJLswkzoWhwcscE4HBBwQCwazV3ERGRhERCUL/nQhcSn0gkwsyZMyksLKRXr17ceuutsR6awWCQG2+8kYEDB5Kbm8v48eNZsGABAAsWLIhVeJx44onYbLbYc//97385+OCD8Xg8DBs2jHvvvbfVNYcNG8avf/1rpk+fTkFBAVdeeSUAixYtiq3EOnjwYK699loaGuLrzfaPf/yDo446ivz8fPr168f3vve92AIoGzZswGazUVFRwWWXXYbNZmPu3LnMnj2bVatWYbPZYo8BVFdXc8UVV9C7d28KCgo48cQTWbVqVexas2bN4vDDD+dvf/sbw4cPx+v1dvjvPaF3ftFolL///e9873vf4+STT+bEE09s9SUiIj1YOAChxvj3D9TAgjkt2/0Pg0PPS/64HC6rX4jdse99RUREZE9GFOrL1dejEx5//HGcTifvvfce999/P7///e/529/+BsDMmTNZunQp8+bN4+OPP+bcc8/l1FNP5csvv2TixImsWbMGsIKOrVu3MnHiRFasWMF3v/tdzj//fD755BNmzZrFrbfeGgsVmt1zzz0cdthhfPTRR9x6662UlZVx6qmn8u1vf5uPP/6Yf//73yxatIiZM2fG9TrC4TC//vWvWbVqFc8//zwbNmzgkksuAWDw4MFs3bqVgoIC7rvvPrZu3cp5553HDTfcwMEHH8zWrVtjjwGce+65bN++nVdeeYUVK1YwduxYTjrpJCorWz5IW7t2Lf/973959tlnE5oqYzPbW6JlL2bOnMncuXM5/fTT6d+/P7bdyoWbe4FkqtraWgoLC6mpqaGgoCDVwxERySy1Wzu2kssbt8Gal6zvHR44/ykoHprcMTndCj26mO6dIiJZLhqB2s0QDad6JB1TPNT68CMNTJkyhe3bt/Ppp5/Gfof+2c9+xv/7f/+PV199lREjRrBx48ZW01hOPvlkjj76aO644w6qq6spLi7m7bffZsqUKQBceOGF7Nixg9dffz12zM0338xLL73Ep59+ClgVH0cccQTPPfdcbJ8rrrgCh8PBI488Ents0aJFTJ48mYaGhg5XVXzwwQeMGzeOurq62CIoRUVF3HfffbFApK0eH4sWLeL0009n+/bteDye2OOjRo3i5ptv5sorr2TWrFnccccdbN68md69e3doXM061OOj2bx583j66af55je/mdBFe6Kd9UFcDjsFXuceQZGISNaIhDoWeqx/pyX0ABh/dfJDD7vD6umh0ENERCQxRjQzQ480dMwxx7T6fXDChAnce++9fPLJJ0SjUfbff/9W+weDQUpLS9s93+eff85ZZ53V6rFjjz2W++67j2g0GluQ5Kijjmq1z6pVq/j444/517/+FXvMNE0Mw2D9+vUceOCBe30dK1asYNasWaxatYqqqioMwwBg48aNHHTQQXs9dvdx1NfX7/Ea/X4/ZWVlse2hQ4cmHHpAgsGH2+1m1KhRCV+0JzIMkwp/kFp/mNI8NznuhP7qRUTSW3Nz0ngE62DBHS3bfQ+Gwy9M7nhsNsjvDw79zBUREUmIaULtFoUeXay+vh6Hw8GKFStarZ4KxCooOiM3N3eP61111VVce+21e+w7ZMiQvZ6roaGBqVOnMnXqVP71r3/Ru3dvNm7cyNSpUwmFQh0aV319Pf3794/1K9lVUVFRu+PvqITeCd5www3cf//9PPjgg6pe6KBw1KC8JoDP7aAk143HqU8gRSRLRIIQ6kCH90W/t5bCA7C74KRZya3KaA49XB1vgCUiIiJNGnZY93hJiuXLl7faXrZsGfvttx9HHHEE0WiU7du3M2nSpLjPd+CBB7J48eJWjy1evJj9999/jwBlV2PHjuWzzz5LqKDhiy++oKKigjvvvJPBg61m9B988ME+j3O73USj0T3GUV5ejtPpZNiwYR0eS7wSCj4WLVrE22+/zSuvvMLBBx+My9V6ztSzzz6blMFlM38oyuaQn3yvi5JcNw67AiQRyXANO+NvdvbVEvj8/7Vsj78KSkYkbyw2G+T3A3dO8s4pIiLS0wRqOr48vezVxo0buf7667nqqqv48MMP+eMf/8i9997L/vvvz4UXXsj06dO59957OeKII9ixYwfz589nzJgxnH766W2e74YbbmDcuHH8+te/5rzzzmPp0qU8+OCD/PnPf97rOH76059yzDHHMHPmTK644gpyc3P57LPPeOONN3jwwQf3euyQIUNwu9388Y9/5Oqrr2b16tX8+te/3udrHzZsGOvXr2flypUMGjSI/Px8Tj75ZCZMmMC0adP43e9+x/7778+WLVt46aWXOPvss/eYopOohFZ1KSoq4uyzz2by5Mn06tWLwsLCVl8Sv7pAmE2VjVQ3hkigz6yISHoI1kPYH9++oXp4+zct270PhCMuSu54cnuDu3MlkSIiIj1aOGB9qCFJNX36dPx+P0cffTQzZszgxz/+cWx52ccee4zp06dzww03MHr0aKZNm8b777+/16knY8eO5emnn2bevHkccsgh3Hbbbdx+++2xhqLtGTNmDAsXLuR///sfkyZN4ogjjuC2225r1Vi1Pb1792bu3Lk888wzHHTQQdx5553cc889+zzu29/+NqeeeionnHACvXv35qmnnsJms/Hyyy9z/PHHc+mll7L//vtz/vnn89VXX9G3b999njNeCa3qku26ojP99toA9cHIXvdxOewU57rJ82guuohkmKqv4p/7+/Zv4dOmykC7E777T+i1X/LGktsLfEXJO5/ERau6iIhkESMK1RutPzNdGq3qIqmTUMWHdI1w1GB7bYDN1X4C4Sz4ISMiPUOgJv7QY9PyltAD4KjLkxt65JQo9BAREekM04T6bdkReog0Sbi04D//+Q9PP/00Gzdu3KNz64cfftjpgfVkwXCULdV+8jxOinPduBzKp0QkTZkmNFbGt2+oAd7aZf5nr9Fw5KXJG4uv2Ao+REREJHENOyDUmOpRSAq9++67nHbaae0+X1/fgWb2aSKh4OOBBx7gF7/4BZdccgkvvPACl156KWVlZbz//vvMmDEj2WPsseqDERpCUSsAyXHhVAAiIukmUB3/J0JL/wh1W63v7Q446VfJKz31FkJu+2vci4iISBwaK9XMVDjqqKNYuXJlqoeRVAkFH3/+85/5y1/+wgUXXMDcuXO5+eabGTFiBLfddhuVlXF+8idxMU2TukCY+mCEIp+LohyXlhAWkfRgRMFfFd++X38AnzzTsn3kpdB7dHLG4c6FvN7JOZeIiEhPFWqIv4pTsprP50tomdt0llAJwcaNG5k4cSJg/aXU1dUBcNFFF/HUU08lb3QSY5omVY0hvq7y0xjae5NU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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "comment_phab_df['before_after'] = comment_phab_df['timestamp'] > pd.Timestamp('2013-07-01 00:00:01+00:00')\n", "plt.figure(figsize=(10, 6))\n", "\n", "sns.lmplot(data=comment_phab_df, x=\"date_created\", y=\"dominant_wc\", hue=\"before_after\", col=\"meta.affil\", scatter=False)\n", "\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 53, "id": "d2d67d38-f005-4c94-be3c-39eb6b22686f", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_49967/3455565877.py:2: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", " filtered_dependencies = dependency_relations_df[dependency_relations_df['token'].str.contains(pattern, regex=True)]\n", "/tmp/ipykernel_49967/3455565877.py:3: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", " resolved_filtered_dependencies = resolved_dependency_relations_df[resolved_dependency_relations_df['token'].str.contains(pattern, regex=True)]\n", "/tmp/ipykernel_49967/3455565877.py:18: UserWarning: Converting to PeriodArray/Index representation will drop timezone information.\n", " filtered_dependencies['week'] = filtered_dependencies['timestamp'].dt.to_period('W').dt.start_time\n", "/tmp/ipykernel_49967/3455565877.py:18: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", " filtered_dependencies['week'] = filtered_dependencies['timestamp'].dt.to_period('W').dt.start_time\n", "/tmp/ipykernel_49967/3455565877.py:37: UserWarning: Converting to PeriodArray/Index representation will drop timezone information.\n", " resolved_filtered_dependencies['week'] = resolved_filtered_dependencies['timestamp'].dt.to_period('W').dt.start_time\n", "/tmp/ipykernel_49967/3455565877.py:37: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", " resolved_filtered_dependencies['week'] = resolved_filtered_dependencies['timestamp'].dt.to_period('W').dt.start_time\n", "/tmp/ipykernel_49967/3455565877.py:40: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", " resolved_wmf_filtered_dependencies = resolved_filtered_dependencies[filtered_dependencies['wmfAffil'] == True]\n" ] }, { "ename": "IndexingError", "evalue": "Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match).", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mIndexingError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[53], line 40\u001b[0m\n\u001b[1;32m 37\u001b[0m resolved_filtered_dependencies[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mweek\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m resolved_filtered_dependencies[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtimestamp\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;241m.\u001b[39mdt\u001b[38;5;241m.\u001b[39mto_period(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mW\u001b[39m\u001b[38;5;124m'\u001b[39m)\u001b[38;5;241m.\u001b[39mdt\u001b[38;5;241m.\u001b[39mstart_time\n\u001b[1;32m 38\u001b[0m resolved_median_depth \u001b[38;5;241m=\u001b[39m resolved_filtered_dependencies\u001b[38;5;241m.\u001b[39mgroupby(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mweek\u001b[39m\u001b[38;5;124m'\u001b[39m)[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdepth\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;241m.\u001b[39mmedian()\u001b[38;5;241m.\u001b[39mreset_index()\n\u001b[0;32m---> 40\u001b[0m resolved_wmf_filtered_dependencies \u001b[38;5;241m=\u001b[39m \u001b[43mresolved_filtered_dependencies\u001b[49m\u001b[43m[\u001b[49m\u001b[43mfiltered_dependencies\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mwmfAffil\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m==\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m]\u001b[49m\n\u001b[1;32m 41\u001b[0m resolved_wmf_median_depth \u001b[38;5;241m=\u001b[39m resolved_wmf_filtered_dependencies\u001b[38;5;241m.\u001b[39mgroupby(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mweek\u001b[39m\u001b[38;5;124m'\u001b[39m)[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdepth\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;241m.\u001b[39mmedian()\u001b[38;5;241m.\u001b[39mreset_index()\n\u001b[1;32m 43\u001b[0m resolved_other_filtered_dependencies \u001b[38;5;241m=\u001b[39m resolved_filtered_dependencies[filtered_dependencies[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mwmfAffil\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m!=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m]\n", "File \u001b[0;32m/gscratch/scrubbed/mjilg/jupyter-notebook/lib/python3.9/site-packages/pandas/core/frame.py:4093\u001b[0m, in \u001b[0;36mDataFrame.__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 4091\u001b[0m \u001b[38;5;66;03m# Do we have a (boolean) 1d indexer?\u001b[39;00m\n\u001b[1;32m 4092\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m com\u001b[38;5;241m.\u001b[39mis_bool_indexer(key):\n\u001b[0;32m-> 4093\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_getitem_bool_array\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 4095\u001b[0m \u001b[38;5;66;03m# We are left with two options: a single key, and a collection of keys,\u001b[39;00m\n\u001b[1;32m 4096\u001b[0m \u001b[38;5;66;03m# We interpret tuples as collections only for non-MultiIndex\u001b[39;00m\n\u001b[1;32m 4097\u001b[0m is_single_key \u001b[38;5;241m=\u001b[39m \u001b[38;5;28misinstance\u001b[39m(key, \u001b[38;5;28mtuple\u001b[39m) \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m is_list_like(key)\n", "File \u001b[0;32m/gscratch/scrubbed/mjilg/jupyter-notebook/lib/python3.9/site-packages/pandas/core/frame.py:4149\u001b[0m, in \u001b[0;36mDataFrame._getitem_bool_array\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 4143\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[1;32m 4144\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mItem wrong length \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mlen\u001b[39m(key)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m instead of \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mlen\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mindex)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 4145\u001b[0m )\n\u001b[1;32m 4147\u001b[0m \u001b[38;5;66;03m# check_bool_indexer will throw exception if Series key cannot\u001b[39;00m\n\u001b[1;32m 4148\u001b[0m \u001b[38;5;66;03m# be reindexed to match DataFrame rows\u001b[39;00m\n\u001b[0;32m-> 4149\u001b[0m key \u001b[38;5;241m=\u001b[39m \u001b[43mcheck_bool_indexer\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mindex\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 4151\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m key\u001b[38;5;241m.\u001b[39mall():\n\u001b[1;32m 4152\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcopy(deep\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m)\n", "File \u001b[0;32m/gscratch/scrubbed/mjilg/jupyter-notebook/lib/python3.9/site-packages/pandas/core/indexing.py:2662\u001b[0m, in \u001b[0;36mcheck_bool_indexer\u001b[0;34m(index, key)\u001b[0m\n\u001b[1;32m 2660\u001b[0m indexer \u001b[38;5;241m=\u001b[39m result\u001b[38;5;241m.\u001b[39mindex\u001b[38;5;241m.\u001b[39mget_indexer_for(index)\n\u001b[1;32m 2661\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m \u001b[38;5;129;01min\u001b[39;00m indexer:\n\u001b[0;32m-> 2662\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m IndexingError(\n\u001b[1;32m 2663\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUnalignable boolean Series provided as \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 2664\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mindexer (index of the boolean Series and of \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 2665\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mthe indexed object do not match).\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 2666\u001b[0m )\n\u001b[1;32m 2668\u001b[0m result \u001b[38;5;241m=\u001b[39m result\u001b[38;5;241m.\u001b[39mtake(indexer)\n\u001b[1;32m 2670\u001b[0m \u001b[38;5;66;03m# fall through for boolean\u001b[39;00m\n", "\u001b[0;31mIndexingError\u001b[0m: Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match)." ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA/0AAAFaCAYAAABMuT0fAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAABsgElEQVR4nO3dd1gU1/s28HvpHSxUBcGOJRDFXpCIolhiLKhRAbtGNBaMEmNPRI3YY4z+Els0Gmwx1tgrRoMlVqJGxIbYAAGl7Xn/8GW+rkvZhYWFzf25rr3injln5jmzZzc8U87IhBACRERERERERKRz9LQdABEREREREREVDyb9RERERERERDqKST8RERERERGRjmLST0RERERERKSjmPQTERERERER6Sgm/UREREREREQ6ikk/ERERERERkY5i0k9ERERERESko5j0ExEREREREekoJv1E9J/g6uqK4OBg6f2xY8cgk8lw7NgxrcVUWrVp0wb16tUrkW19++23qFq1KvT19eHp6Vki2yxIcHAwXF1dS3y7OWNy69atGltncHAwLCwsirSO2NhYyGQyrF27VjNBEZVh/D4QUVnEpJ+ISszatWshk8kgk8lw6tQppeVCCDg7O0Mmk6Fz585aiLBktGnTRtoPenp6sLKyQq1atTBgwAAcPHiwRGJ49OgRZsyYgUuXLpXI9nLzxx9/4IsvvkCLFi2wZs0azJkzR6lOZmYmKlasiJYtW+a5npxx06BBAwD/S57zem3evLnY+pSb9+MxNDRE1apVERgYiH///bdEYymNrl+/jhkzZiA2NrZEt3vq1Cl07NgRlSpVgomJCVxcXNClSxds2rSpWLerrf4Wl3d/12UyGUxMTODk5AQ/Pz8sXboUr1690naI9I6cgxaqvHRljBIRYKDtAIjov8fExASbNm1SSuSOHz+OBw8ewNjYuNhjaN26NV6/fg0jI6Ni31ZuKleujPDwcABAamoqbt++je3bt+Pnn39GQEAAfv75ZxgaGhbb9h89eoSZM2fC1dVVa2fYjxw5Aj09Pfz44495fg6Ghobo1asXfvjhB9y7dw9VqlRRqnPixAk8ePAA48aNUygfM2YMGjVqpFS/WbNm+ca1evVqyOVyNXqimpx4MjMzceHCBaxatQp79uzBlStX4OTkpPHtaUqVKlXw+vXrYhuP169fx8yZM9GmTZsS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wsDAQKGPeT1S8P1H2eUlMzNTzJw5U7i5uQlDQ0Ph7OwswsLCFB5nlbM+VR/Z965evXoJAOKLL77IdXlBj+ybPn16vuvP65F93377rVJdVdaXE09kZGSh6uX2yDx1x+qdO3dE+/bthZmZmbC3txfTp09XeDxdfn3MbftCCHH16lXxySefCBsbG2FiYiJq1aolpk6dKi1/+fKlGDhwoKhYsaKwsLAQfn5+4ubNm0rfRSGEWL16tahatarQ19dX+l4uX75c1K5dWxgaGgp7e3sxcuRI8fLlS4X2BT0G832//PKL6NOnj6hWrZowNTUVJiYmok6dOmLKlCkiOTlZqb4qvz15/W55e3sLb29vlft79OhR4efnJ6ytrYWJiYmoVq2aCA4OFn/99ZdUR53foKysLPHtt9+K2rVrCyMjI2Frays6duwooqOjFeqp8vuSm5zf9ZyXkZGRcHBwEO3atRNLlizJdX8KIcSdO3dEYGCgcHBwEIaGhqJSpUqic+fOYuvWrUrrPn78uBg2bJgoV66csLCwEP369RPPnz9XWqem993z58/FgAEDhJWVlbC2thYDBgwQFy9ezPX7oE5/3v9/YG7/PxJCiF27donmzZsLU1NTYWVlJRo3bix++eUXpdjPnTsnAIj27dsr72gV5PXIvtzGsxBvH5EYFhYmqlevLoyMjETFihVF8+bNxYIFCxQerShEwd+dCxcuiL59+woXFxdhbGws7OzsROfOnRU+MyIqOpkQas4aQkREpVabNm3w7NmzAu+3JiIq7dauXYuBAwfi/PnzSo+2pP+5fPkyPD09sX79egwYMEDb4RBRKcR7+omIiIiIyqjVq1fDwsIC3bt313YoRFRK8Z5+IiIiIqIy5vfff8f169exatUqhISEKDyxhYjoXUz6iYiIiIjKmNGjR+PJkyfw9/fP9QkNREQ5eE8/ERERERERkY7iPf1EREREREREOopJPxEREREREZGO4j39GiCXy/Ho0SNYWlpCJpNpOxwiIiIiIiLScUIIvHr1Ck5OTtDTy/t8PpN+DXj06BGcnZ21HQYRERERERH9x9y/fx+VK1fOczmTfg2wtLQE8HZnW1lZaTkaIiIiIiIi0nXJyclwdnaW8tG8MOnXgJxL+q2srJj0ExERERERUYkp6BZzTuRHREREREREpKOY9BMRERERERHpKCb9RERERERE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FHsM+vr6uHHjhvTv91laWiI0NBTjxo2DXC5Hy5YtkZSUhNOnT8PKygpBQUEYMWIEIiIiMHHiRAwZMgTR0dEKs+TnpkaNGti+fTu6dOkCmUyGqVOnauwseHp6OuLj45GdnY0nT55g//79CA8PR+fOnREYGAgA8PX1RbNmzdCtWzfMnz8fNWvWxKNHj7Bnzx588skn8PLyAgCYmJggKCgICxYsQHJyMsaMGYOAgADp0n5XV1ccOHAAMTExqFChAqytrTXSB1INk34iIiIiIirVTExM8MUXX2DKlClISkqCtbU1MjMzSyThz2FlZZXv8tmzZ8PW1hbh4eH4999/YWNjIz0KD3h73/u2bdswbtw4LFu2DI0bN5YetZeXhQsXYtCgQWjevDkqVqyISZMmITk5WSP92b9/PxwdHWFgYIBy5crBw8MDS5cuRVBQEPT03j7kTSaTYe/evZgyZQoGDhwozZ/QunVr2NvbS+uqXr06unfvDn9/f7x48QKdO3fGihUrpOVDhw7FsWPH4OXlhZSUFBw9ejTfKwdIs2RCFOK5FaQgOTkZ1tbWSEpKKvDHgIiIiIjov+TNmze4e/cu3NzcSjRJp5IxY8YM7Ny5E5cuXdJ2KDopv++PqnmoXnEHSURERERERETawaSfiIiIiIiISEcx6SciIiIiIqJCmTFjBi/tL+WY9BMRERERERHpKCb9RERERERERDqKST8RERERERGRjmLST0RERERERKSjmPQTERERERER6Sgm/UREREREREQ6qswl/d999x1cXV1hYmKCJk2a4Ny5c/nWj4yMRO3atWFiYoL69etj7969edYdMWIEZDIZFi9erOGoiYiIiIiISs6qVavg7OwMPT09Kb95v2zGjBnw9PSU2gQHB6Nbt27S+zZt2mDs2LElGneOY8eOQSaTITExscS3HRsbC5lMpjOPIixTSf+WLVswfvx4TJ8+HRcuXICHhwf8/PyQkJCQa/0zZ86gb9++GDx4MC5evIhu3bqhW7duuHr1qlLdHTt24OzZs3BycirubhARERERUSm2cuVKWFpaIisrSypLSUmBoaEh2rRpo1A3Jzm9c+cOAMDV1RUymQybN29WWm/dunUhk8mwdu1aqSyn/ruvypUrFyn+5ORkhISEYNKkSXj48CGGDRuWa1loaCgOHz6c53q2b9+O2bNnq7xdbSbqhfX+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XV1dceDAAcTExKBChQqwtrZWaX9MmDABjRo1wuzZs9G7d29ERUVh+fLlBc4nsHDhQjg6OuLDDz+Enp4eIiMj4eDgIM2BUBzKzD39OUJCQnDv3j2kp6fjzz//VLj349ixY0qDo1evXoiJiUF6ejquXr0Kf3//fNcfGxurcDsAERERERH9N/n4+OD169eoXr26wlPBvL298erVK+nRfvmpUKECTE1NNRZT165dMW7cOISEhMDT0xNnzpyRJpMrTra2tli7di0iIyNRp04dzJ07FwsWLFCoU6lSJcycOROTJ0+Gvb29dBv27NmzMXXqVISHh8Pd3R0dOnTAnj174ObmBuDtAYVt27Zh586d8PDwwMqVKzFnzpx84/Hw8MDChQsxb9481KtXDxs3blR69J27uztWrFiB7777Dh4eHjh37pzS7RJDhw5FrVq14OXlBVtbW6Wz93lp0KABfv31V2zevBn16tXDtGnTMGvWLIVJ/HJjaWmJ+fPnw8vLC40aNUJsbCz27t2rcPJa02RCnedWUK6Sk5NhbW2NpKQkTupHRERERPSON2/e4O7du3Bzc4OJiYm2wyEqU/L7/qiah5a5M/1EREREREREpBom/UREREREREQ6ikk/ERERERERkY5i0k9ERERERESko5j0ExEREREREekoJv1EREREREREOopJPxEREREREZGOYtJPREREREREpKOY9BMRERERERHpKCb9REREREREZcCqVavg7OwMPT09LF68ONeyGTNmwNPTU2oTHByMbt26Se/btGmDsWPHlmjcOY4dOwaZTIbExMQS33ZsbCxkMhkuXbpU4tvWNib9RERERERE7wkODoZMJsPcuXMVynfu3AmZTFbi8SQnJyMkJASTJk3Cw4cPMWzYsFzLQkNDcfjw4TzXs337dsyePVvl7WozUS+s9w90/Ncx6SciIiIiIsqFiYkJ5s2bh5cvX2o7FMTFxSEzMxOdOnWCo6MjzMzMci2zsLBAhQoV8lxP+fLlYWlpWYKR67aMjAxth1AgJv1ERERERES58PX1hYODA8LDw/Ott23bNtStWxfGxsZwdXVFRESEwnJXV1fMmTMHgwYNgqWlJVxcXLBq1SqFOpMmTULNmjVhZmaGqlWrYurUqcjMzAQArF27FvXr1wcAVK1aFTKZLNey2NhYpcv73/f+5f0bNmyAl5cXLC0t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+CH09PQQGRkJBwcHaQ4EbeM9/URERERERCqYNWuW0qXgDRo0wK+//orNmzejXr16mDZtGmbNmqXWbQBdu3bFuHHjEBISAk9PT5w5c0aaTK442draYu3atYiMjESdOnUwd+5cLFiwQKFOpUqVMHPmTEyePBn29vYICQkBAMyePRtTp05FeHg43N3d0aFDB+zZswdubm4A3h5Q2LZtG3bu3AkPDw+sXLkSc+bMyTceDw8PLFy4EPPmzUO9evWwceNGpUffubu7Y8WKFfjuu+/g4eGBc+fOITQ0VKHO0KFDUatWLXh5ecHW1lbp7H1eCvtZWlpaYv78+fDy8kKjRo0QGxuLvXv3SlcraJtMqPvcClKSnJwMa2trJCUlKRxhIiIiIiL6r3vz5g3u3r0LNzc3mJiYaDscojIlv++Pqnlo6Tj0QEREREREREQax6SfiIiIiIiISEcx6SciIiIiIiLSUUz6iYiIiIiIiHQUk34iIiIiIip2nD+cSH2a+N4w6SciIiIiomJjaGgIAEhLS9NyJERlT873Jud7VBgGmgqGiIiIiIjoffr6+rCxsUFCQgIAwMzMDDKZTMtREZVuQgikpaUhISEBNjY20NfXL/S6mPQTEREREVGxcnBwAAAp8Sci1djY2Ejfn8Ji0k9ERERERMVKJpPB0dERdnZ2yMzM1HY4RGWCoaFhkc7w52DST0REREREJUJfX18jSQwRqY4T+RERERERERHpKCb9RERERERERDqKST8RERERERGRjmLST0RERERERKSjmPQTERERERER6Sgm/UREREREREQ6ikk/ERERERERkY5i0k9ERERERESko8pc0v/dd9/B1dUVJiYmaNKkCc6dO5dv/cjISNSuXRsmJiaoX78+9u7dKy3LzMzEpEmTUL9+fZibm8PJyQmBgYF49OhRcXeDiIiIiIiIqNiVqaR/y5YtGD9+PKZPn44LFy7Aw8MDfn5+SEhIyLX+mTNn0LdvXwwePBgXL15Et27d0K1bN1y9ehUAkJaWhgsXLmDq1Km4cOECtm/fjpiYGHTt2rUku0VERERERERULGRCCKHtIFTVpEkTNGrUCMuXLwcAyOVyODs7Y/To0Zg8ebJS/d69eyM1NRW7d++Wypo2bQpPT0+sXLky122cP38ejRs3xr179+Di4qJSXMnJybC2tkZSUhKsrKwK0TMiIiIiIiIi1amah5aZM/0ZGRmIjo6Gr6+vVKanpwdfX19ERUXl2iYqKkqhPgD4+fnlWR8AkpKSIJPJYGNjk2ed9PR0JCcnK7yIiIiIiIiISpsyk/Q/e/YM2dnZsLe3Vyi3t7dHfHx8rm3i4+PVqv/mzRtMmjQJffv2zfdISXh4OKytraWXs7Ozmr0hIiIiIiIiKn5lJukvbpmZmQgICIAQAt9//32+dcPCwpCUlCS97t+/X0JREhEREREREanOQNsBqKpixYrQ19fHkydPFMqfPHkCBweHXNs4ODioVD8n4b937x6OHDlS4H35xsbGMDY2LkQviIiIiIiIiEpOmTnTb2RkhIYNG+Lw4cNSmVwux+HDh9GsWbNc2zRr1kyhPgAcPHhQoX5Own/r1i0cOnQIFSpUKJ4OEBEREREREZWwQp3pl8vluH37NhISEiCXyxWWtW7dWiOB5Wb8+PEICgqCl5cXGjdujMWLFyM1NRUDBw4EAAQGBqJSpUoIDw8HAHz++efw9vZGREQEOnXqhM2bN+Ovv/7CqlWrALxN+Hv27IkLFy5g9+7dyM7Olu73L1++PIyMjIqtL0RERERERETFTe2k/+zZs/j0009x7949vP+0P5lMhuzsbI0F977evXvj6dOnmDZtGuLj4+Hp6Yn9+/dLk/XFxcVBT+9/Fy80b94cmzZtwldffYUvv/wSNWrUwM6dO1GvXj0AwMOHD7Fr1y4AgKenp8K2jh49ijZt2hRbX4iIiIiIiIiKm0y8n7kXwNPTEzVr1sTMmTPh6OgImUymsNza2lqjAZYFqj4fkYiIiIiIiEgTVM1D1T7Tf+vWLWzduhXVq1cvUoBEREREREREVLzUnsivSZMmuH37dnHEQkREREREREQapNKZ/r///lv69+jRozFhwgTEx8ejfv36MDQ0VKj7wQcfaDZCIiIiIiIiIioUle7p19PTg0wmU5q4T1rJ/19W3BP5lVa8p5+IiIiIiIhKkkbv6b97967GAiMiIiIiIiKikqFS0l+lShXp3ydOnEDz5s1hYKDYNCsrC2fOnFGoS0RERERERETao/ZEfj4+Pnjx4oVSeVJSEnx8fDQSFBEREREREREVndpJf869++97/vw5zM3NNRIUERERERERERWdSpf3A0D37t0BvJ20Lzg4GMbGxtKy7Oxs/P3332jevLnmIyQiIiIiIiKiQlE56be2tgbw9ky/paUlTE1NpWVGRkZo2rQphg4dqvkIiYiIiIiIiKhQVE7616xZAwBwdXVFaGgoL+UnIiIiIiIiKuVkQghRmIYJCQmIiYkBANSqVQt2dnYaDawsUfX5iERERERERESaoGoeqvZEfq9evcKAAQNQqVIleHt7w9vbG5UqVUL//v2RlJRUpKCJiIiIiIiISHPUTvqHDBmCP//8E7t370ZiYiISExOxe/du/PXXXxg+fHhxxEhEREREREREhaD25f3m5uY4cOAAWrZsqVB+8uRJdOjQAampqRoNsCzg5f1ERERERERUkort8v4KFSpIM/m/y9raGuXKlVN3dURERERERERUTNRO+r/66iuMHz8e8fHxUll8fDwmTpyIqVOnajQ4IiIiIiIiIio8tS/v//DDD3H79m2kp6fDxcUFABAXFwdjY2PUqFFDoe6FCxc0F2kpxsv7iYiIiIiIqCSpmocaqLvibt26FSUuIiIiIiIiIiohap/pJ2U8009EREREREQlqdgm8gOAxMRE/N///R/CwsLw4sULAG8v5X/48GHhoiUiIiIiIiIijVP78v6///4bvr6+sLa2RmxsLIYOHYry5ctj+/btiIuLw/r164sjTiIiIiIiIiJSk9pn+sePH4/g4GDcunULJiYmUrm/vz9OnDih0eCIiIiIiIiIqPDUTvrPnz+P4cOHK5VXqlRJ4TF+RERERERERKRdaif9xsbGSE5OVir/559/YGtrq5GgiIiIiIiIiKjo1E76u3btilmzZiEzMxMAIJPJEBcXh0mTJqFHjx4aD5CIiIiIiIiICkftpD8iIgIpKSmws7PD69ev4e3tjerVq8PS0hLffPNNccRIRERERERERIWg9uz91tbWOHjwIE6dOoW///4bKSkpaNCgAXx9fYsjPiIiIiIiIiIqJJkQQmg7iLIuOTkZ1tbWSEpKgpWVlbbDISIiIiIiIh2nah6q1pl+uVyOtWvXYvv27YiNjYVMJoObmxt69uyJAQMGQCaTFTlwIiIiIiIiItIMle/pF0Kga9euGDJkCB4+fIj69eujbt26uHfvHoKDg/HJJ58UZ5xEREREREREpCaVz/SvXbsWJ06cwOHDh+Hj46Ow7MiRI+jWrRvWr1+PwMBAjQdJREREREREROpT+Uz/L7/8gi+//FIp4QeAjz76CJMnT8bGjRs1GhwR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xKDt9qUhBk30oaQV20R+gwcPRqNGjTBixAh1mmnEli1bEBQUhB9++AGNGzfG4sWL8euvv+LmzZuwt7dHYGAgKlWqhPDwcABvH9nn7e2NuXPnolOnTti8eTPmzJmDCxcuoF69egCAefPmYe7cuVi3bh3c3NwwdepU/P3337h+/TpMTExUikvVCRS0KTU1FYaGhkhKSoK1tTUyMzNhbm5eZtqXhhi03b40xKDt9qUhBm23Lw0xaLt9aYhB2+1LQwzsA/eBJtqXhhi03b40xKDt9qUhBm23Lw0xaLt9aYhBE30oSarmoWon/eHh4Vi4cCE6deqE+vXrw9DQUGH5mDFjChexipYvX45vv/0W8fHx8PT0xNKlS9GkSRMAQJs2beDq6oq1a9dK9SMjI/HVV18hNjYWNWrUwPz58+Hv7y8tF0Jg+vTpWLVqFRITE9GyZUusWLECNWvWVDmmspD0ExERERERke4otqTfzc0t75XJZPj333/VWZ1OYNJPREREREREJanYHtl39+7dIgVGRERERERERCVDT9sBEBEREREREVHxUPtMPwA8ePAAu3btQlxcHDIyMhSWLVy4UCOBEREREREREVHRqJ30Hz58GF27dkXVqlVx8+ZN1KtXD7GxsRBCoEGDBsURIxEREREREREVgtqX94eFhSE0NBRXrlyBiYkJtm3bhvv378Pb2xu9evUqjhiJiIiIiIiIqBDUTvpv3LiBwMBAAICBgQFev34NCwsLzJo1C/PmzdN4gERERERERERUOGon/ebm5tJ9/I6Ojrhz54607NmzZ5qLjIiIiIiIiIiKRO17+ps2bYpTp07B3d0d/v7+mDBhAq5cuYLt27ejadOmxREjERERERERERWC2kn/woULkZKSAgCYOXMmUlJSsGXLFtSoUYMz9xMRERERERGVIjIhhNB2EGVdcnIyrK2tkZSUBCsrK22HQ0RERERERDpO1TxU7Xv6iYiIiIiIiKhsUOny/vLly+Off/5BxYoVUa5cOchksjzrvnjxQmPBEREREREREVHhqZT0L1q0CJaWlgCAxYsXF2c8RERERERERKQhvKdfA3hPPxEREREREZUkVfNQlc70Jycnq7xhJr1EREREREREpYNKSb+NjU2+9/G/Kzs7u0gBEREREREREZFmqJT0Hz16VPp3bGwsJk+ejODgYDRr1gwAEBUVhXXr1iE8PLx4oiQiIiIiIiIital9T3/btm0xZMgQ9O3bV6F806ZNWLVqFY4dO6bJ+MoE3tNPREREREREJUnVPFRP3RVHRUXBy8tLqdzLywvnzp1Td3VEREREREREVEzUTvqdnZ2xevVqpfL/+7//g7Ozs0aCIiIiIiIiIqKiU+me/nctWrQIPXr0wL59+9CkSRMAwLlz53Dr1i1s27ZN4wESERERERERUeGofabf398f//zzD7p06YIXL17gxYsX6NKlC/755x/4+/sXR4xEREREREREVAhqT+RHyjiRHxEREREREZWkYpvIDwBOnjyJ/v37o3nz5nj48CEAYMOGDTh16lThoiUiIiIiIiIijVM76d+2bRv8/PxgamqKCxcuID09HQCQlJSEOXPmaDxAIiIiIiIiIioctZP+r7/+GitXrsTq1athaGgolbdo0QIXLlzQaHBEREREREREVHhqJ/0xMTFo3bq1Urm1tTUSExM1ERMRERERERERaYDaSb+DgwNu376tVH7q1ClUrVpVI0ERERERERERUdGpnfQPHToUn3/+Of7880/IZDI8evQIGzduRGhoKEaOHFkcMRIRERERERFRIRio22Dy5MmQy+Vo27Yt0tLS0Lp1axgbGyM0NBSjR48ujhiJiIiIiIiIqBBkQghRmIYZGRm4ffs2UlJSUKdOHVhYWGg6tjJD1ecjEhEREREREWmCqnmo2mf6cxgZGaFOnTqFbU5ERERERERExUzlpH/QoEEq1fvpp58KHQwRERERERERaY7KSf/atWtRpUoVfPjhhyjkHQFEREREREREVIJUTvpHjhyJX375BXfv3sXAgQPRv39/lC9fvjhjIyIiIiIiIqIiUPmRfd999x0eP36ML774Ar///jucnZ0REBCAAwcO8Mw/ERERERERUSlU6Nn77927h7Vr12L9+vXIysrCtWvX/rMz+HP2fiIiIiIiIipJquahKp/pV2qopweZTAYhBLKzswu7GiIiIiIiIiIqJmol/enp6fjll1/Qrl071KxZE1euXMHy5csRFxf3nz3LT0RERERERFRaqTyR32effYbNmzfD2dkZgwYNwi+//IKKFSsWZ2xEREREREREVAQqn+lfuXIlrKysULVqVRw/fhzDhg1D9+7dlV7F5cWLF+jXrx+srKxgY2ODwYMHIyUlJd82b968wahRo1ChQgVYWFigR48eePLkibT88uXL6Nu3L5ydnWFqagp3d3csWbKk2PpAREREREREVJJUPtMfGBgImUxWnLHkq1+/fnj8+DEOHjyIzMxMDBw4EMOGDcOmTZvybDNu3Djs2bMHkZGRsLa2RkhICLp3747Tp08DAKKjo2FnZ4eff/4Zzs7OOHPmDIYNGwZ9fX2EhISUVNeIiIiIiIiIikWhZ+8vSTdu3ECdOnVw/vx5eHl5AQD2798Pf39/PHjwAE5OTkptkpKSYGtri02bNqFnz54AgJs3b8Ld3R1RUVFo2rRprtsaNWoUbty4gSNHjqgcH2fvJyIiIiIiopJU7LP3l6SoqCjY2NhICT8A+Pr6Qk9PD3/++WeubaKjo5GZmQlfX1+prHbt2nBxcUFUVFSe20pKSkL58uXzjSc9PR3JyckKLyIiIiIiIqLSpkwk/fHx8bCzs1MoMzAwQPny5REfH59nGyMjI9jY2CiU29vb59nmzJkz2LJlC4YNG5ZvPOHh4bC2tpZezs7OqneGiIiIiIiIqIRoNemfPHkyZDJZvq+bN2+WSCxXr17Fxx9/jOnTp6N9+/b51g0LC0NSUpL0un//fonESERERERERKQOlSfyKw4TJkxAcHBwvnWqVq0KBwcHJCQkKJRnZWXhxYsXcHBwyLWdg4MDMjIykJiYqHC2/8mTJ0ptrl+/jrZt22LYsGH46quvCozb2NgYxsbGBdYjIiIiIiIi0iatJv22trawtbUtsF6zZs2QmJiI6OhoNGzYEABw5MgRyOVyNGnSJNc2DRs2hKGhIQ4fPowePXoAAGJiYhAXF4dmzZpJ9a5du4aPPvoIQUFB+OabbzTQKyIiIiIiIqLSoUzM3g8AHTt2xJMnT7By5UrpkX1eXl7SI/sePnyItm3bYv369WjcuDEAYOTIkdi7dy/Wrl0LKysrjB49GsDbe/eBt5f0f/TRR/Dz88O3334rbUtfX1+lgxE5OHs/ERERERERlSRV81CtnulXx8aNGxESEoK2bdtCT08PPXr0wNKlS6XlmZmZiImJQVpamlS2aNEiqW56ejr8/PywYsUKafnWrVvx9OlT/Pzzz/j555+l8ipVqiA2NrZE+kVERERERERUXMrMmf7SjGf6iYiIiIiIqCSpmoeWiUf2EREREREREZH6mPQTERERERER6Sgm/UREREREREQ6ikk/ERERERERkY5i0k9ERERERESko5j0ExEREREREekoJv1EREREREREOopJPxEREREREZGOYtJPREREREREpKOY9BMRERERERHpKCb9RERERERERDqKST8RERERERGRjmLST0RERERERKSjmPQTERERERER6Sgm/UREREREREQ6ikk/ERERERERkY5i0k9ERERERESko5j0ExEREREREekoJv1EREREREREOopJPxEREREREZGOYtJPREREREREpKOY9BMRERERERHpKCb9RERERERERDqKST8RERERERGRjmLST0RERERERKSjmPQTERERERER6Sgm/UREREREREQ6ikk/ERERERERkY5i0k9ERERERESko5j0ExEREREREekoJv1EREREREREOopJPxEREREREZGOYtJPREREREREpKOY9BMRERERERHpKCb9RERERERERDqKST8RERERERGRjmLST0RERERERKSjmPQTERERERER6Sgm/UREREREREQ6ikk/ERERERERkY4qM0n/ixcv0K9fP1hZWcHGxgaDBw9GSkpKvm3evHmDUaNGoUKFCrCwsECPHj3w5MmTXOs+f/4clStXhkwmQ2JiYjH0gIiIiIiIiKhklZmkv1+/frh27RoOHjyI3bt348SJExg2bFi+bcaNG4fff/8dkZGROH78OB49eoTu3bvnWnfw4MH44IMPiiN0IiIiIiIiIq2QCSGEtoMoyI0bN1CnTh2cP38eXl5eAID9+/fD398fDx48gJOTk1KbpKQk2NraYtOmTejZsycA4ObNm3B3d0dUVBSaNm0q1f3++++xZcsWTJs2DW3btsXLly9hY2OjcnzJycmwtrZGUlISrKysitZZIiIiIiIiogKomoeWiTP9UVFRsLGxkRJ+APD19YWenh7+/PPPXNtER0cjMzMTvr6+Ulnt2rXh4uKCqKgoqez69euYNWsW1q9fDz091XZHeno6kpOTFV5EREREREREpU2ZSPrj4+NhZ2enUGZgYIDy5csjPj4+zzZGRkZKZ+zt7e2lNunp6ejbty++/fZbuLi4qBxPeHg4rK2tpZezs7N6HSIiIiIiIiIqAVpN+idPngyZTJbv6+bNm8W2/bCwMLi7u6N///5qt0tKSpJe9+/fL6YIiYiIiIiIiArPQJsbnzBhAoKDg/OtU7VqVTg4OCAhIUGhPCsrCy9evICDg0Ou7RwcHJCRkYHExESFs/1PnjyR2hw5cgRXrlzB1q1bAQA50xtUrFgRU6ZMwcyZM3Ndt7GxMYyNjVXpIhEREREREZHWaDXpt7W1ha2tbYH1mjVrhsTERERHR6Nhw4YA3ibscrkcTZo0ybVNw4YNYWhoiMOHD6NHjx4AgJiYGMTFxaFZs2YAgG3btuH169dSm/Pnz2PQoEE4efIkqlWrVtTuEREREREREWmVVpN+Vbm7u6NDhw4YOnQoVq5ciczMTISEhKBPnz7SzP0PHz5E27ZtsX79ejRu3BjW1tYYPHgwxo8fj/Lly8PKygqjR49Gs2bNpJn730/snz17Jm1Pndn7iYiIiIiIiEqjMpH0A8DGjRsREhKCtm3bQk9PDz169MDSpUul5ZmZmYiJiUFaWppUtmjRIqlueno6/Pz8sGLFCm2ET0RERERERFTiZCLnRnYqNFWfj0hERERERESkCarmoWXikX1EREREREREpD4m/UREREREREQ6ikk/ERERERERkY5i0k9ERERERESko5j0ExEREREREekoJv1EREREREREOopJPxEREREREZGOYtJPREREREREpKOY9BMRERERERHpKCb9RERERERERDqKST8RERERERGRjmLST0RERERERKSjmPQTERERERER6Sgm/UREREREREQ6ikk/ERERERERkY5i0k9ERERERESko5j0ExEREREREekoJv1EREREREREOopJPxEREREREZGOYtJPREREREREpKOY9BMRERERERHpKCb9RERERERERDqKST8RERERERGRjmLST0RERERERKSjmPQTERERERER6Sgm/UREREREREQ6ikk/ERERERERkY5i0k9ERERERESko5j0ExEREREREekoJv1EREREREREOspA2wHoAiEEACA5OVnLkRAREREREdF/QU7+mZOP5oVJvwa8evUKAODs7KzlSIiIiIiIiOi/5NWrV7C2ts5zuUwUdFiACiSXy/Ho0SNYWlpCJpNpO5xCSU5OhrOzM+7fvw8rKytth0NlAMcMFYRjhAqD44YKg+OGioLjhwqjNIwbIQRevXoFJycn6Onlfec+z/RrgJ6eHipXrqztMDTCysqKP3akFo4ZKgjHCBUGxw0VBscNFQXHDxWGtsdNfmf4c3AiPyIiIiIiIiIdxaSfiIiIiIiISEcx6ScAgLGx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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pattern = r'\\b(ve|VE|visualeditor|VisualEditor)\\b'\n", "filtered_dependencies = dependency_relations_df[dependency_relations_df['token'].str.contains(pattern, regex=True)]\n", "resolved_filtered_dependencies = resolved_dependency_relations_df[resolved_dependency_relations_df['token'].str.contains(pattern, regex=True)]\n", "\n", "plt.figure(figsize=(12, 8))\n", "gs = GridSpec(2, 1, height_ratios=[6, 6])\n", "\n", "# Main plot: Token depth by timestamp\n", "'''\n", "ax0 = plt.subplot(gs[0])\n", "sns.scatterplot(data=filtered_dependencies, x='timestamp', y='dependency', hue='wmfAffil', style='dependency', markers=True, s=100, ax=ax0)\n", "ax0.set_title('VE Depth by Timestamp w/o URLS')\n", "ax0.set_xlabel('')\n", "ax0.set_ylabel('Dependency Type')\n", "ax0.legend().set_visible(False)\n", "'''\n", "# Calculate the median depth over time\n", "filtered_dependencies['week'] = filtered_dependencies['timestamp'].dt.to_period('W').dt.start_time\n", "median_depth = filtered_dependencies.groupby('week')['depth'].median().reset_index()\n", "\n", "wmf_filtered_dependencies = filtered_dependencies[filtered_dependencies['wmfAffil'] == True]\n", "wmf_median_depth = wmf_filtered_dependencies.groupby('week')['depth'].median().reset_index()\n", "\n", "other_filtered_dependencies = filtered_dependencies[filtered_dependencies['wmfAffil'] != True]\n", "other_median_depth = other_filtered_dependencies.groupby('week')['depth'].median().reset_index()\n", "\n", "# Plot the median depth over time\n", "ax0 = plt.subplot(gs[0])\n", "sns.lineplot(data=median_depth, x='week', y='depth', ax=ax0, color='black', label='Median Depth', marker='o')\n", "sns.lineplot(data=wmf_median_depth, x='week', y='depth', ax=ax0, color='#c7756a', label='WMF-affiliated authors', marker='x')\n", "sns.lineplot(data=other_median_depth, x='week', y='depth', ax=ax0, color='#5da2d8', label='Nonaffiliated authors', marker='x')\n", "ax0.set_title('Median Depth of VE in Phabricator Sentence Dependency Trees')\n", "ax0.set_ylabel('Median Depth')\n", "ax0.set_xlabel('')\n", "\n", "# Calculate the median depth over time\n", "resolved_filtered_dependencies['week'] = resolved_filtered_dependencies['timestamp'].dt.to_period('W').dt.start_time\n", "resolved_median_depth = resolved_filtered_dependencies.groupby('week')['depth'].median().reset_index()\n", "\n", "resolved_wmf_filtered_dependencies = resolved_filtered_dependencies[filtered_dependencies['wmfAffil'] == True]\n", "resolved_wmf_median_depth = resolved_wmf_filtered_dependencies.groupby('week')['depth'].median().reset_index()\n", "\n", "resolved_other_filtered_dependencies = resolved_filtered_dependencies[filtered_dependencies['wmfAffil'] != True]\n", "resolved_other_median_depth = resolved_other_filtered_dependencies.groupby('week')['depth'].median().reset_index()\n", "\n", "# Plot the median depth over time\n", "ax1 = plt.subplot(gs[1])\n", "sns.lineplot(data=resolved_median_depth, x='week', y='depth', ax=ax1, color='black', label='Median Depth', marker='o')\n", "sns.lineplot(data=resolved_wmf_median_depth, x='week', y='depth', ax=ax1, color='#c7756a', label='WMF-affiliated authors', marker='x')\n", "sns.lineplot(data=resolved_other_median_depth, x='week', y='depth', ax=ax1, color='#5da2d8', label='Nonaffiliated authors', marker='x')\n", "ax1.set_title('Median Depth of VE in Coreference-resolved Phabricator Sentence Dependency Trees')\n", "ax1.set_ylabel('Median Depth')\n", "ax1.set_xlabel('')\n", "\n", "plt.tight_layout()\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.21" } }, "nbformat": 4, "nbformat_minor": 5 }