{"action":"created","comment":{"url":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls/comments/29996095","id":29996095,"diff_hunk":"@@ -0,0 +1,342 @@\n+\"\"\"KDDCUP 99 dataset.\n+\n+A classic dataset for anomaly detection.\n+\n+The dataset page is available from UCI Machine Learning Repository\n+\n+https://archive.ics.uci.edu/ml/machine-learning-databases/kddcup99-mld/kddcup.data.gz\n+\n+\"\"\"\n+\n+import sys\n+import errno\n+from gzip import GzipFile\n+from io import BytesIO\n+import logging\n+import os\n+from os.path import exists, join\n+try:\n+    from urllib2 import urlopen\n+except ImportError:\n+    from urllib.request import urlopen\n+\n+import numpy as np\n+import pandas as pd\n+\n+from .base import get_data_home\n+from .base import Bunch\n+from .mldata import fetch_mldata\n+from ..externals import joblib\n+from ..utils import check_random_state\n+\n+\n+# URL = ('http://archive.ics.uci.edu/ml/'\n+#        'machine-learning-databases/kddcup99-mld/kddcup.data_10_percent.gz')\n+\n+URL = ('http://archive.ics.uci.edu/ml/'\n+       'machine-learning-databases/kddcup99-mld/kddcup.data.gz')\n+\n+\n+logger = logging.getLogger()\n+\n+\n+def load_kddcup99(subset=None, shuffle=False, random_state=None):\n+    \"\"\"Load and return the kddcup 99 dataset (regression).\n+\n+    The KDD Cup '99 dataset was created by processing the tcpdump portions\n+    of the 1998 DARPA Intrusion Detection System (IDS) Evaluation dataset,\n+    created by MIT Lincoln Lab [1] . The artificial data was generated using\n+    a closed network and hand-injected attacks to produce a large number of\n+    different types of attack with normal activity in the background.\n+    As the initial goal was to produce a large training set for supervised\n+    learning algorithms, there is a large proportion (80.1%) of abnormal\n+    data which is unrealistic in real world, and inapropriate for unsupervised\n+    anomaly detection which aims at detecting 'abnormal' data, ie\n+    1) qualitatively different from normal data\n+    2) in large minority among the observations.\n+    We thus transform the KDD Data set into two differents data set: SA and SF.\n+    -SA is obtained by simply selecting all the normal data, and a small\n+    proportion of abnormal data to gives an anomaly proportion of 1%.\n+    -SF is obtained as in [2]\n+    by simply picking up the data whose attribute logged_in is positive, thus\n+    focusing on the intrusion attack, which gives a proportion of 0.3% of\n+    attack.\n+    -http and smtp are two subsets of SF corresponding with third feature\n+    equal to 'http' (resp. to 'smtp')\n+\n+\n+    General KDD structure :\n+    ==============      ==================\n+    Samples total       4898431\n+    Dimensionality      41\n+    Features            discrete (int) or continuous (float)\n+    Targets             str, 'normal' or name of the anomaly type\n+    ==============      ==================\n+\n+    SA structure :\n+    ==============      ==================\n+    Samples total       976158\n+    Dimensionality      41\n+    Features            discrete (int) or continuous (float)\n+    Targets             str, 'normal' or name of the anomaly type\n+    ==============      ==================\n+\n+    SF structure :\n+    ==============      ==================\n+    Samples total       699691\n+    Dimensionality      40\n+    Features            discrete (int) or continuous (float)\n+    Targets             str, 'normal' or name of the anomaly type\n+    ==============      ==================\n+\n+    http structure :\n+    ==============      ==================\n+    Samples total       619052\n+    Dimensionality      39\n+    Features            discrete (int) or continuous (float)\n+    Targets             str, 'normal' or name of the anomaly type\n+    ==============      ==================\n+\n+    smtp structure :\n+    ==============      ==================\n+    Samples total       95373\n+    Dimensionality      39\n+    Features            discrete (int) or continuous (float)\n+    Targets             str, 'normal' or name of the anomaly type\n+    ==============      ==================\n+    Parameters\n+    ----------\n+    subset : None, 'SA', 'SF', 'http', 'smtp'\n+        To return the corresponding classical subsets of kddcup 99\n+        If None, return the entire kddcup 99 dataset.\n+\n+    random_state : int, RandomState instance or None, optional (default=None)\n+        Random state for shuffling the dataset.\n+        If int, random_state is the seed used by the random number generator;\n+        If RandomState instance, random_state is the random number generator;\n+        If None, the random number generator is the RandomState instance used\n+        by `np.random`.\n+\n+    shuffle : bool, default=False\n+        Whether to shuffle dataset.\n+\n+\n+    Returns\n+    -------\n+    data : Bunch\n+        Dictionary-like object, the interesting attributes are:\n+        'data', the data to learn and 'target', the regression target for each\n+        sample.\n+    \"\"\"\n+    kddcup99 = fetch_kddcup99(shuffle=True)\n+\n+    data = np.c_[kddcup99.data, kddcup99.target]  # XXX to be removed\n+\n+    if subset == 'SA':\n+        s = data[:, -1] == 'normal.'\n+        t = np.array([not a for a in s])\n+        normal_samples = data[s, :]\n+        abnormal_samples = data[t, :]\n+\n+        n_samples_abnormal = abnormal_samples.shape[0]\n+        # selected abnormal samples:\n+        r = np.random.randint(0, n_samples_abnormal, 3377)\n+        abnormal_samples = abnormal_samples[r]\n+        data = np.r_[normal_samples, abnormal_samples]\n+        data = np.random.permutation(data)\n+\n+    if subset == 'SF' or subset == 'http' or subset == 'smtp':\n+        # select all samples with positive logged_in attribute:\n+        s = data[:, 11] == 1\n+        data = np.c_[data[s, :11], data[s, 12:]]\n+\n+        if subset == 'http':\n+            s = data[:, 2] == 'http'\n+            data = np.c_[data[s, :2], data[s, 3:]]\n+\n+        if subset == 'smtp':\n+            s = data[:, 2] == 'smtp'\n+            data = np.c_[data[s, :2], data[s, 3:]]\n+\n+    target = data[:, -1]\n+    data = data[:, :-1]\n+\n+    if shuffle:\n+        rng = check_random_state(random_state)\n+        indices = np.arange(target.shape[0])\n+        rng.shuffle(indices)\n+        data = data[indices]\n+        target = target[indices]\n+\n+    return Bunch(data=data, target=target)\n+\n+\n+def fetch_kddcup99(subset=None, data_home=None, download_if_missing=True,\n+                   random_state=None, shuffle=False):\n+\n+    \"\"\"Load the kddcup99 dataset, downloading it if necessary.\n+\n+    Parameters\n+    ----------\n+\n+    data_home : string, optional\n+        Specify another download and cache folder for the datasets. By default\n+        all scikit learn data is stored in '~/scikit_learn_data' subfolders.\n+\n+    download_if_missing : boolean, default=True\n+        If False, raise a IOError if the data is not locally available\n+        instead of trying to download the data from the source site.\n+\n+    random_state : int, RandomState instance or None, optional (default=None)\n+        Random state for shuffling the dataset.\n+        If int, random_state is the seed used by the random number generator;\n+        If RandomState instance, random_state is the random number generator;\n+        If None, the random number generator is the RandomState instance used\n+        by `np.random`.\n+\n+    shuffle : bool, default=False\n+        Whether to shuffle dataset.\n+\n+    Returns\n+    -------\n+    dataset : dict-like object with the following attributes:\n+\n+    dataset.data : numpy array of shape (581012, 41) XXX\n+        Each row corresponds to the 54XXX features in the dataset.\n+\n+    dataset.target : numpy array of shape (581012,) XXX\n+        Each value corresponds to one of the 21 attack types or to the label\n+        'normal.'.\n+\n+    dataset.DESCR : string\n+        Description of the kddcup99 dataset.\n+\n+    \"\"\"\n+\n+    data_home = get_data_home(data_home=data_home)\n+    if sys.version_info[0] == 3:\n+        # The zlib compression format use by joblib is not compatible when\n+        # switching from Python 2 to Python 3, let us use a separate folder\n+        # under Python 3:\n+        dir_suffix = \"-py3\"\n+    else:\n+        # Backward compat for Python 2 users\n+        dir_suffix = \"\"\n+    kddcup_dir = join(data_home, \"kddcup99\" + dir_suffix)\n+    samples_path = join(kddcup_dir, \"samples\")\n+    targets_path = join(kddcup_dir, \"targets\")\n+    available = exists(samples_path)\n+\n+    if download_if_missing and not available:\n+        _mkdirp(kddcup_dir)\n+        logger.warning(\"Downloading %s\" % URL)\n+        f = BytesIO(urlopen(URL).read())\n+        Xy = pd.io.parsers.read_csv(GzipFile(fileobj=f), engine='c',\n+                                    header=None)\n+        Xy = np.asarray(Xy)","path":"sklearn/datasets/kddcup99.py","position":236,"original_position":236,"commit_id":"18fa3d806632576136fb07cb9fd5cced1edffc35","original_commit_id":"18fa3d806632576136fb07cb9fd5cced1edffc35","user":{"login":"ngoix","id":5682433,"avatar_url":"https://avatars.githubusercontent.com/u/5682433?v=3","gravatar_id":"","url":"https://api.github.com/users/ngoix","html_url":"https://github.com/ngoix","followers_url":"https://api.github.com/users/ngoix/followers","following_url":"https://api.github.com/users/ngoix/following{/other_user}","gists_url":"https://api.github.com/users/ngoix/gists{/gist_id}","starred_url":"https://api.github.com/users/ngoix/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ngoix/subscriptions","organizations_url":"https://api.github.com/users/ngoix/orgs","repos_url":"https://api.github.com/users/ngoix/repos","events_url":"https://api.github.com/users/ngoix/events{/privacy}","received_events_url":"https://api.github.com/users/ngoix/received_events","type":"User","site_admin":false},"body":"Ok I will try to split the file to use it.","created_at":"2015-05-09T20:36:25Z","updated_at":"2015-05-09T20:36:25Z","html_url":"https://github.com/scikit-learn/scikit-learn/pull/4163#discussion_r29996095","pull_request_url":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls/4163","_links":{"self":{"href":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls/comments/29996095"},"html":{"href":"https://github.com/scikit-learn/scikit-learn/pull/4163#discussion_r29996095"},"pull_request":{"href":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls/4163"}}},"pull_request":{"url":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls/4163","id":28045812,"html_url":"https://github.com/scikit-learn/scikit-learn/pull/4163","diff_url":"https://github.com/scikit-learn/scikit-learn/pull/4163.diff","patch_url":"https://github.com/scikit-learn/scikit-learn/pull/4163.patch","issue_url":"https://api.github.com/repos/scikit-learn/scikit-learn/issues/4163","number":4163,"state":"open","locked":false,"title":"WIP: Iforest - new anomaly detection algo","user":{"login":"ngoix","id":5682433,"avatar_url":"https://avatars.githubusercontent.com/u/5682433?v=3","gravatar_id":"","url":"https://api.github.com/users/ngoix","html_url":"https://github.com/ngoix","followers_url":"https://api.github.com/users/ngoix/followers","following_url":"https://api.github.com/users/ngoix/following{/other_user}","gists_url":"https://api.github.com/users/ngoix/gists{/gist_id}","starred_url":"https://api.github.com/users/ngoix/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ngoix/subscriptions","organizations_url":"https://api.github.com/users/ngoix/orgs","repos_url":"https://api.github.com/users/ngoix/repos","events_url":"https://api.github.com/users/ngoix/events{/privacy}","received_events_url":"https://api.github.com/users/ngoix/received_events","type":"User","site_admin":false},"body":"Isolation Forest (iForest) algorithm\r\nBased on previous discussion \r\nhttp://sourceforge.net/p/scikit-learn/mailman/message/32485020\r\n","created_at":"2015-01-26T17:49:56Z","updated_at":"2015-05-09T20:36:25Z","closed_at":null,"merged_at":null,"merge_commit_sha":"94dac5cbbfbbab8aeba0e87896a7fb261666c0d9","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls/4163/commits","review_comments_url":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls/4163/comments","review_comment_url":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls/comments{/number}","comments_url":"https://api.github.com/repos/scikit-learn/scikit-learn/issues/4163/comments","statuses_url":"https://api.github.com/repos/scikit-learn/scikit-learn/statuses/18fa3d806632576136fb07cb9fd5cced1edffc35","head":{"label":"ngoix:iforest","ref":"iforest","sha":"18fa3d806632576136fb07cb9fd5cced1edffc35","user":{"login":"ngoix","id":5682433,"avatar_url":"https://avatars.githubusercontent.com/u/5682433?v=3","gravatar_id":"","url":"https://api.github.com/users/ngoix","html_url":"https://github.com/ngoix","followers_url":"https://api.github.com/users/ngoix/followers","following_url":"https://api.github.com/users/ngoix/following{/other_user}","gists_url":"https://api.github.com/users/ngoix/gists{/gist_id}","starred_url":"https://api.github.com/users/ngoix/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ngoix/subscriptions","organizations_url":"https://api.github.com/users/ngoix/orgs","repos_url":"https://api.github.com/users/ngoix/repos","events_url":"https://api.github.com/users/ngoix/events{/privacy}","received_events_url":"https://api.github.com/users/ngoix/received_events","type":"User","site_admin":false},"repo":{"id":20621109,"name":"scikit-learn","full_name":"ngoix/scikit-learn","owner":{"login":"ngoix","id":5682433,"avatar_url":"https://avatars.githubusercontent.com/u/5682433?v=3","gravatar_id":"","url":"https://api.github.com/users/ngoix","html_url":"https://github.com/ngoix","followers_url":"https://api.github.com/users/ngoix/followers","following_url":"https://api.github.com/users/ngoix/following{/other_user}","gists_url":"https://api.github.com/users/ngoix/gists{/gist_id}","starred_url":"https://api.github.com/users/ngoix/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ngoix/subscriptions","organizations_url":"https://api.github.com/users/ngoix/orgs","repos_url":"https://api.github.com/users/ngoix/repos","events_url":"https://api.github.com/users/ngoix/events{/privacy}","received_events_url":"https://api.github.com/users/ngoix/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/ngoix/scikit-learn","description":"scikit-learn: machine learning in Python","fork":true,"url":"https://api.github.com/repos/ngoix/scikit-learn","forks_url":"https://api.github.com/repos/ngoix/scikit-learn/forks","keys_url":"https://api.github.com/repos/ngoix/scikit-learn/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ngoix/scikit-learn/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ngoix/scikit-learn/teams","hooks_url":"https://api.github.com/repos/ngoix/scikit-learn/hooks","issue_events_url":"https://api.github.com/repos/ngoix/scikit-learn/issues/events{/number}","events_url":"https://api.github.com/repos/ngoix/scikit-learn/events","assignees_url":"https://api.github.com/repos/ngoix/scikit-learn/assignees{/user}","branches_url":"https://api.github.com/repos/ngoix/scikit-learn/branches{/branch}","tags_url":"https://api.github.com/repos/ngoix/scikit-learn/tags","blobs_url":"https://api.github.com/repos/ngoix/scikit-learn/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ngoix/scikit-learn/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ngoix/scikit-learn/git/refs{/sha}","trees_url":"https://api.github.com/repos/ngoix/scikit-learn/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ngoix/scikit-learn/statuses/{sha}","languages_url":"https://api.github.com/repos/ngoix/scikit-learn/languages","stargazers_url":"https://api.github.com/repos/ngoix/scikit-learn/stargazers","contributors_url":"https://api.github.com/repos/ngoix/scikit-learn/contributors","subscribers_url":"https://api.github.com/repos/ngoix/scikit-learn/subscribers","subscription_url":"https://api.github.com/repos/ngoix/scikit-learn/subscription","commits_url":"https://api.github.com/repos/ngoix/scikit-learn/commits{/sha}","git_commits_url":"https://api.github.com/repos/ngoix/scikit-learn/git/commits{/sha}","comments_url":"https://api.github.com/repos/ngoix/scikit-learn/comments{/number}","issue_comment_url":"https://api.github.com/repos/ngoix/scikit-learn/issues/comments{/number}","contents_url":"https://api.github.com/repos/ngoix/scikit-learn/contents/{+path}","compare_url":"https://api.github.com/repos/ngoix/scikit-learn/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ngoix/scikit-learn/merges","archive_url":"https://api.github.com/repos/ngoix/scikit-learn/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ngoix/scikit-learn/downloads","issues_url":"https://api.github.com/repos/ngoix/scikit-learn/issues{/number}","pulls_url":"https://api.github.com/repos/ngoix/scikit-learn/pulls{/number}","milestones_url":"https://api.github.com/repos/ngoix/scikit-learn/milestones{/number}","notifications_url":"https://api.github.com/repos/ngoix/scikit-learn/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ngoix/scikit-learn/labels{/name}","releases_url":"https://api.github.com/repos/ngoix/scikit-learn/releases{/id}","created_at":"2014-06-08T16:42:05Z","updated_at":"2015-03-29T18:11:06Z","pushed_at":"2015-05-08T22:28:22Z","git_url":"git://github.com/ngoix/scikit-learn.git","ssh_url":"git@github.com:ngoix/scikit-learn.git","clone_url":"https://github.com/ngoix/scikit-learn.git","svn_url":"https://github.com/ngoix/scikit-learn","homepage":"http://scikit-learn.org","size":61165,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"scikit-learn:master","ref":"master","sha":"302305310e3e7321410be3f0db8e0e62f3ec3d44","user":{"login":"scikit-learn","id":365630,"avatar_url":"https://avatars.githubusercontent.com/u/365630?v=3","gravatar_id":"","url":"https://api.github.com/users/scikit-learn","html_url":"https://github.com/scikit-learn","followers_url":"https://api.github.com/users/scikit-learn/followers","following_url":"https://api.github.com/users/scikit-learn/following{/other_user}","gists_url":"https://api.github.com/users/scikit-learn/gists{/gist_id}","starred_url":"https://api.github.com/users/scikit-learn/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scikit-learn/subscriptions","organizations_url":"https://api.github.com/users/scikit-learn/orgs","repos_url":"https://api.github.com/users/scikit-learn/repos","events_url":"https://api.github.com/users/scikit-learn/events{/privacy}","received_events_url":"https://api.github.com/users/scikit-learn/received_events","type":"Organization","site_admin":false},"repo":{"id":843222,"name":"scikit-learn","full_name":"scikit-learn/scikit-learn","owner":{"login":"scikit-learn","id":365630,"avatar_url":"https://avatars.githubusercontent.com/u/365630?v=3","gravatar_id":"","url":"https://api.github.com/users/scikit-learn","html_url":"https://github.com/scikit-learn","followers_url":"https://api.github.com/users/scikit-learn/followers","following_url":"https://api.github.com/users/scikit-learn/following{/other_user}","gists_url":"https://api.github.com/users/scikit-learn/gists{/gist_id}","starred_url":"https://api.github.com/users/scikit-learn/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scikit-learn/subscriptions","organizations_url":"https://api.github.com/users/scikit-learn/orgs","repos_url":"https://api.github.com/users/scikit-learn/repos","events_url":"https://api.github.com/users/scikit-learn/events{/privacy}","received_events_url":"https://api.github.com/users/scikit-learn/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/scikit-learn/scikit-learn","description":"scikit-learn: machine learning in Python","fork":false,"url":"https://api.github.com/repos/scikit-learn/scikit-learn","forks_url":"https://api.github.com/repos/scikit-learn/scikit-learn/forks","keys_url":"https://api.github.com/repos/scikit-learn/scikit-learn/keys{/key_id}","collaborators_url":"https://api.github.com/repos/scikit-learn/scikit-learn/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/scikit-learn/scikit-learn/teams","hooks_url":"https://api.github.com/repos/scikit-learn/scikit-learn/hooks","issue_events_url":"https://api.github.com/repos/scikit-learn/scikit-learn/issues/events{/number}","events_url":"https://api.github.com/repos/scikit-learn/scikit-learn/events","assignees_url":"https://api.github.com/repos/scikit-learn/scikit-learn/assignees{/user}","branches_url":"https://api.github.com/repos/scikit-learn/scikit-learn/branches{/branch}","tags_url":"https://api.github.com/repos/scikit-learn/scikit-learn/tags","blobs_url":"https://api.github.com/repos/scikit-learn/scikit-learn/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/scikit-learn/scikit-learn/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/scikit-learn/scikit-learn/git/refs{/sha}","trees_url":"https://api.github.com/repos/scikit-learn/scikit-learn/git/trees{/sha}","statuses_url":"https://api.github.com/repos/scikit-learn/scikit-learn/statuses/{sha}","languages_url":"https://api.github.com/repos/scikit-learn/scikit-learn/languages","stargazers_url":"https://api.github.com/repos/scikit-learn/scikit-learn/stargazers","contributors_url":"https://api.github.com/repos/scikit-learn/scikit-learn/contributors","subscribers_url":"https://api.github.com/repos/scikit-learn/scikit-learn/subscribers","subscription_url":"https://api.github.com/repos/scikit-learn/scikit-learn/subscription","commits_url":"https://api.github.com/repos/scikit-learn/scikit-learn/commits{/sha}","git_commits_url":"https://api.github.com/repos/scikit-learn/scikit-learn/git/commits{/sha}","comments_url":"https://api.github.com/repos/scikit-learn/scikit-learn/comments{/number}","issue_comment_url":"https://api.github.com/repos/scikit-learn/scikit-learn/issues/comments{/number}","contents_url":"https://api.github.com/repos/scikit-learn/scikit-learn/contents/{+path}","compare_url":"https://api.github.com/repos/scikit-learn/scikit-learn/compare/{base}...{head}","merges_url":"https://api.github.com/repos/scikit-learn/scikit-learn/merges","archive_url":"https://api.github.com/repos/scikit-learn/scikit-learn/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/scikit-learn/scikit-learn/downloads","issues_url":"https://api.github.com/repos/scikit-learn/scikit-learn/issues{/number}","pulls_url":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls{/number}","milestones_url":"https://api.github.com/repos/scikit-learn/scikit-learn/milestones{/number}","notifications_url":"https://api.github.com/repos/scikit-learn/scikit-learn/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/scikit-learn/scikit-learn/labels{/name}","releases_url":"https://api.github.com/repos/scikit-learn/scikit-learn/releases{/id}","created_at":"2010-08-17T09:43:38Z","updated_at":"2015-05-09T16:51:56Z","pushed_at":"2015-05-08T22:28:24Z","git_url":"git://github.com/scikit-learn/scikit-learn.git","ssh_url":"git@github.com:scikit-learn/scikit-learn.git","clone_url":"https://github.com/scikit-learn/scikit-learn.git","svn_url":"https://github.com/scikit-learn/scikit-learn","homepage":"http://scikit-learn.org","size":124204,"stargazers_count":5940,"watchers_count":5940,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":3552,"mirror_url":null,"open_issues_count":648,"forks":3552,"open_issues":648,"watchers":5940,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls/4163"},"html":{"href":"https://github.com/scikit-learn/scikit-learn/pull/4163"},"issue":{"href":"https://api.github.com/repos/scikit-learn/scikit-learn/issues/4163"},"comments":{"href":"https://api.github.com/repos/scikit-learn/scikit-learn/issues/4163/comments"},"review_comments":{"href":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls/4163/comments"},"review_comment":{"href":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls/4163/commits"},"statuses":{"href":"https://api.github.com/repos/scikit-learn/scikit-learn/statuses/18fa3d806632576136fb07cb9fd5cced1edffc35"}}}}