Giter VIP home page Giter VIP logo

mnelab's Introduction

Python PyPI Docs DOI License

MNELAB

MNELAB is a graphical user interface (GUI) for MNE-Python, a Python package for EEG/MEG analysis.

Documentation

Instructions for installing and using MNELAB as well as step-by-step examples for different use cases are available in the documentation. Check out the changelog to learn what we added, changed, or fixed.

Installation

You can install MNELAB with pip:

pip install mnelab

If you want to use all MNELAB features, the full package including optional dependencies can be installed with:

pip install "mnelab[full]"

You can also use pipx to install MNELAB in a completely isolated environment:

pipx install mnelab

If you want the latest development version, use the following command:

pip install git+https://github.com/cbrnr/mnelab

Running MNELAB

MNELAB must be started from a terminal with the following command:

mnelab

If you get an error, try the following alternative:

python -m mnelab

Dependencies

MNELAB requires Python ≥ 3.9 and the following packages:

Optional dependencies provide additional features:

  • mne-qt-browser ≥ 0.6.2 (alternative raw plot backend)
  • pybv ≥ 0.7.4 (BrainVision VHDR/VMRK/EEG export)
  • python-picard ≥ 0.7.0 (ICA computation with PICARD)
  • scikit-learn ≥ 1.3.0 (ICA computation with FastICA)

Contributing

The contributing guide contains detailed instructions on how to contribute to MNELAB.

mnelab's People

Contributors

abcsds avatar cbrnr avatar chrismullins avatar dependabot[bot] avatar gdolle avatar guillaumefavelier avatar hoechenberger avatar hofaflo avatar jfrey-xx avatar johmedr avatar marsipu avatar musicinmybrain avatar rob-luke avatar stralu avatar tywr avatar vferat avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mnelab's Issues

Average epochs

Summary of feature requests from this discussion:

  • epoching (fixed in #45)
  • epoch selection (by condition/event)
  • epochs concatenation (will be fixed in #131)
  • epochs averaging (evoked)
  • ERP plotting - this should work once epochs averaging is implemented

Get rid of resource file

It would be better if MNELAB didn't use a .qrc file, but included icons directly. One of the reasons is that PyQt5 and PySide2 use slightly different command line tools (pyrcc5 vs. pyside2-rcc) and produce files which include PyQt5.QtCore or PySide2.QtCore. This is problematic when using QtPy, because these automatically generated files would need to be edited manually. Therefore, getting rid of the resource system completely would probably be the best solution in the long run.

Improve the Bad Channels picker dialog box

From the associated PR #4:

Currently, the channel picker dialog does a good job of allowing the user to
choose bad channels, but has a few shortcomings:

(1) It's difficult to see, at a glance, which channels have already been marked
as bad.

(2) When the user begins clicking on new channels to mark as bad, any
previously marked channels become unselected. Thus, making sure you've selected
everything you want requires careful scrolling.

This change introduces a few new files (including a .ui file from QtDesigner and generated .py from the pyuic5 tool) and @cbrnr might have preferences about how this sort of thing is organized/implemented. Since this might entail multiple PR's, an issue might be a better place for discussion.

Please feel free to review my code and/or let me know your thoughts and ideas.

Installation problems on Windows

Using the default command pip install mnelab on Windows I get:

Installing collected packages: PyQt5, mnelab
Could not install packages due to an EnvironmentError: [WinError 5] Access is denied: 'C:\\Users\\mmagn\\Continuum\\anaconda3\\Lib\\site-packages\\PyQt5\\Qt.pyd'
Consider using the `--user` option or check the permissions.

strangely, I get it even when I run it in command prompt with administrator privileges. When I run using pip install mnelab --user the script the mnelab.exe is put in a separate directory and does not do anything. When I then first activate my base anaconda env (it is my default python so I don't know why it makes any difference) and then do pip install mnelab - I get everything installed in one directory but mnelab.exe still does not work.
When I try to import mnelab in python I get:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\mmagn\Continuum\anaconda3\lib\site-packages\mnelab\__init__.py", line 1, in <module>
    from .mainwindow import MainWindow
  File "C:\Users\mmagn\Continuum\anaconda3\lib\site-packages\mnelab\mainwindow.py", line 7, in <module>
    from PyQt5.QtCore import (pyqtSlot, QStringListModel, QModelIndex, QSettings,
ModuleNotFoundError: No module named 'PyQt5.sip'

I might have been unlucky - I can test tomorrow on other Windows computers.

Visual programming UI

Consider providing a visual programming interface for building on/offline EEG analysis flows.

User story

As an end user
I would appreciate a visual programming UI
so I can easily build pipelines for my EEG data analysis

Goal

Allow MNE-Lab users to create EEG analysis flows by dragging, dropping, connecting, and configuring modules via a visual programming interface.

Examples

PyQtGraph

PyQtGraph has modules to allow visual programming with flowcharts (and is used in the, somewhat related, ACQ4 Neurophysiology Acquisition and Analysis System:

PyQtGraph example application

OpenViBE Designer

OpenViBE Designer offers a visual programming environment for creating EEG analysis pipelines:

OpenViBE screenshot

Orange

Another relevant tool is Orange:

Open source machine learning and data visualization for novice and expert. Interactive data analysis workflows with a large toolbox.

Orange screenshot

RuntimeError('context has already been set')

after installing 0.5.1 on Ubuntu I got following error:

Traceback (most recent call last):
  File "/home/daniel/.local/bin/mnelab", line 8, in <module>
    sys.exit(main())
  File "/home/daniel/.local/lib/python3.6/site-packages/mnelab/__main__.py", line 27, in main
    mp.set_start_method("spawn")  # required for Linux/macOS
  File "/usr/lib/python3.6/multiprocessing/context.py", line 242, in set_start_method
    raise RuntimeError('context has already been set')
RuntimeError: context has already been set

Factor out IO into separate module

To make the model module shorter, we could factor out all IO-related stuff (i.e. _load_XXX functions) including the special treatment of XDF.

Strange text is printed when epoching error dialog is shown

When I supply invalid epoching values (e.g. tmin > tmax) in the dialog, an error dialog is shown. However, a bunch of strange unreadable text is also printed in the main window:

Screen Shot 2019-07-11 at 09 52 52

I have no idea why this is happening and I'd appreciate any help.

Add ability to run history scripts

In some situations, using a GUI is just slower than typing a command, for example when renaming a bunch of channels according to a specific scheme. In such cases, the ability to enter Python commands would be very useful.

Crashes when trying to open incomplete BrainVision dataset

BrainVision recordings typically consist of three data files:

  • the actual EEG data, .eeg
  • the event marker file, .vmrk
  • a header file, .vhdr, that contains references to the EEG and event marker files

For loading the EEG data into MNE, one passes the location of the .vhdr file to mne.io.read_raw_brainvision(). In case a dataset is incomplete (i.e., a .vmrk or .eeg file is missing / cannot be found), MNELAB crashes, as it doesn't handle the exception raised by MNE:

Extracting parameters from /Users/hoechenberger/Google Drive/TaLa/EEG_Analysis_outdated/1_DataEEG/Sub_721_071217/TaLa_721_01.vhdr...
Traceback (most recent call last):
  File "/Users/hoechenberger/miniconda3/envs/mnelab/lib/python3.7/site-packages/mnelab/mainwindow.py", line 322, in open_raw
    self.model.load(fname)
  File "/Users/hoechenberger/miniconda3/envs/mnelab/lib/python3.7/site-packages/mnelab/model.py", line 38, in wrapper
    f(*args, **kwargs)
  File "/Users/hoechenberger/miniconda3/envs/mnelab/lib/python3.7/site-packages/mnelab/model.py", line 119, in load
    raw = self._load_brainvision(fname)
  File "/Users/hoechenberger/miniconda3/envs/mnelab/lib/python3.7/site-packages/mnelab/model.py", line 141, in _load_brainvision
    raw = mne.io.read_raw_brainvision(fname, preload=True)
  File "/Users/hoechenberger/miniconda3/envs/mnelab/lib/python3.7/site-packages/mne/io/brainvision/brainvision.py", line 833, in read_raw_brainvision
    stim_channel=stim_channel, verbose=verbose)
  File "</Users/hoechenberger/miniconda3/envs/mnelab/lib/python3.7/site-packages/mne/externals/decorator.py:decorator-gen-146>", line 2, in __init__
  File "/Users/hoechenberger/miniconda3/envs/mnelab/lib/python3.7/site-packages/mne/utils/_logging.py", line 89, in wrapper
    return function(*args, **kwargs)
  File "/Users/hoechenberger/miniconda3/envs/mnelab/lib/python3.7/site-packages/mne/io/brainvision/brainvision.py", line 82, in __init__
    orig_units) = _get_vhdr_info(vhdr_fname, eog, misc, scale, montage)
  File "/Users/hoechenberger/miniconda3/envs/mnelab/lib/python3.7/site-packages/mne/io/brainvision/brainvision.py", line 479, in _get_vhdr_info
    with open(mrk_fname, 'r') as tmp_mrk_f:
FileNotFoundError: [Errno 2] No such file or directory: '/Users/hoechenberger/Google Drive/TaLa/EEG_Analysis_outdated/1_DataEEG/Sub_721_071217/TaLa_721_01.vmrk'
[1]    3283 abort      mnelab

Epochs/Evoked data handling

As mentionned in #34 , I could work on the handling of Epochs and Evoked data.

A suggestion for the changes in the structure of the code would be

  • Change model.current['raw'] to model.current['data']
  • Add a new keyword model.current['type'] set to 'raw', 'epochs' or 'evoked' depending on the type of data loaded.
  • Add an epoching window close to

Screenshot from 2019-07-04 15-47-57

Sample Files

@cbrnr Clemens! :)

Do you have a few sample .bdf / .edf files for me to play around with?

MNELAB cannot locate toolbar icons

The icons added in #61 cannot be found by MNELAB on startup, apparently the specified search path is not correct:

$ mnelab
qt.svg: Cannot open file '/Users/hoechenberger/Development/mnelab/images/outline-folder_open-24px.svg', because: No such file or directory
qt.svg: Cannot open file '/Users/hoechenberger/Development/mnelab/images/outline-folder_open-24px.svg', because: No such file or directory
qt.svg: Cannot open file '/Users/hoechenberger/Development/mnelab/images/outline-view_list-24px.svg', because: No such file or directory
qt.svg: Cannot open file '/Users/hoechenberger/Development/mnelab/images/outline-view_list-24px.svg', because: No such file or directory
qt.svg: Cannot open file '/Users/hoechenberger/Development/mnelab/images/outline-waves-24px.svg', because: No such file or directory
qt.svg: Cannot open file '/Users/hoechenberger/Development/mnelab/images/outline-waves-24px.svg', because: No such file or directory
qt.svg: Cannot open file '/Users/hoechenberger/Development/mnelab/images/outline-poll-24px.svg', because: No such file or directory
qt.svg: Cannot open file '/Users/hoechenberger/Development/mnelab/images/outline-poll-24px.svg', because: No such file or directory
qt.svg: Cannot open file '/Users/hoechenberger/Development/mnelab/images/outline-blur_on-24px.svg', because: No such file or directory
qt.svg: Cannot open file '/Users/hoechenberger/Development/mnelab/images/outline-blur_on-24px.svg', because: No such file or directory
qt.svg: Cannot open file '/Users/hoechenberger/Development/mnelab/images/outline-filter_list-24px.svg', because: No such file or directory
qt.svg: Cannot open file '/Users/hoechenberger/Development/mnelab/images/outline-filter_list-24px.svg', because: No such file or directory
qt.svg: Cannot open file '/Users/hoechenberger/Development/mnelab/images/outline-youtube_searched_for-24px.svg', because: No such file or directory
qt.svg: Cannot open file '/Users/hoechenberger/Development/mnelab/images/outline-youtube_searched_for-24px.svg', because: No such file or directory
qt.svg: Cannot open file '/Users/hoechenberger/Development/mnelab/images/outline-grain-24px.svg', because: No such file or directory
qt.svg: Cannot open file '/Users/hoechenberger/Development/mnelab/images/outline-grain-24px.svg', because: No such file or directory
qt.svg: Cannot open file '/Users/hoechenberger/Development/mnelab/images/outline-view_stream-24px.svg', because: No such file or directory
qt.svg: Cannot open file '/Users/hoechenberger/Development/mnelab/images/outline-view_stream-24px.svg', because: No such file or directory

This is with master, I installed via pip install . and ran MNELAB via python -m mnelab

EDIT
Changed the working directory, and apparently MNELAB is looking for an the icons in the current working directory (to be specific, in an images/ subdir in the current working directory). Platform is macOS.

Loading fif.gz doesn't work

Currently, .fif.gz files cannot be loaded because (1) the file filter prevents users from selecting such files, and (2) dragging and dropping such files onto MNELAB crashes the app.

Errors in running mnelab.py

I cloned the mnelab directly from github. I installed mne and other packages through Anaconda under 'mne' environment. When I run mnelab.py as intructed, I faced the following error. Any quick fix?

(mne) F:\GitHub-Projects\mnelab\mnelab>python mnelab.py
Traceback (most recent call last):
File "mnelab.py", line 16, in
from .dialogs.filterdialog import FilterDialog
ModuleNotFoundError: No module named 'main.dialogs'; 'main' is not a package

Allow conversion of annotations to events (required for BrainVision)

In the data recorded using our BrainProducts system, there is no separate "stim channel", and I extract the events via

mne.find_events(raw_data)

This is not possible using MNELAB, as the "Find events..." dialog insists I select a "stim channel", which doesn't make sense in my case. There should be the option to leave the stim channel blank, in which case mne.find_events() would be called with stim_channel=None.

I'm sorry, the original issue description doesn't make sense anymore with recent versions of mne-python. Here's an updated, corrected description:

The events of BrainVision data have to be generated from the annotations of the raw data:

import mne

data = mne.io.read_raw_brainvision('eeg_recording.vhdr')
events = mne.events_from_annotations(data)

This work flow is currently not supported in MNELAB.

error when installing: No such file or directory: '/System/Library/CoreServices/SystemVersion.plist'

when updating to 5.0 on Ubuntu 18.04 and python3.6

   ERROR: Command errored out with exit status 1:
     command: /usr/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-543k_rpn/pyobjc-framework-Cocoa/setup.py'"'"'; __file__='"'"'/tmp/pip-install-543k_rpn/pyobjc-framework-Cocoa/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-install-543k_rpn/pyobjc-framework-Cocoa/pip-egg-info
         cwd: /tmp/pip-install-543k_rpn/pyobjc-framework-Cocoa/
    Complete output (15 lines):
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-install-543k_rpn/pyobjc-framework-Cocoa/setup.py", line 25, in <module>
        extra_link_args=["-framework", "CoreFoundation"],
      File "/tmp/pip-install-543k_rpn/pyobjc-framework-Cocoa/pyobjc_setup.py", line 408, in Extension
        os_level = get_os_level()
      File "/tmp/pip-install-543k_rpn/pyobjc-framework-Cocoa/pyobjc_setup.py", line 218, in get_os_level
        pl = plistlib.readPlist("/System/Library/CoreServices/SystemVersion.plist")
      File "/usr/lib/python3.6/plistlib.py", line 162, in readPlist
        with _maybe_open(pathOrFile, 'rb') as fp:
      File "/usr/lib/python3.6/contextlib.py", line 81, in __enter__
        return next(self.gen)
      File "/usr/lib/python3.6/plistlib.py", line 120, in _maybe_open
        with open(pathOrFile, mode) as fp:
    FileNotFoundError: [Errno 2] No such file or directory: '/System/Library/CoreServices/SystemVersion.plist'
    ----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.

``

Add documentation

Documentation is urgently needed. Ideally, this should be a dedicated website describing how to install, start, and interact with MNELAB.

Size on disk incorrect for BrainVision files

When loading a BrainVision file (*.vhdr), the size on disk shown is the size of the .vhdr file. However, this is not correct, because the EEG data resides in a file with the same base name but extension .eeg. The info widget should correctly show the size of the .eeg file.

Add tooltips for dialogs

Dialogs should have tooltips for all fields, i.e. when hovering over a field a short explanation should pop up.

Exporting to .eeg crashes with BAD or EDGE annotations

An MNELAB user reported that the app crashes when creating some annotations and then exporting to BrainVision format.

Used Annotations descriptions: ['1', '2', '3', '4', '8']
Traceback (most recent call last):
  File "C:\Python\Anaconda\envs\mnelab\lib\site-packages\mnelab\mainwindow.py", line 431, in export_file
    f(fname, ffilter)
  File "C:\Python\Anaconda\envs\mnelab\lib\site-packages\mnelab\model.py", line 253, in export_data
    self._export_bv(fname)
  File "C:\Python\Anaconda\envs\mnelab\lib\site-packages\mnelab\model.py", line 340, in _export_bv
    events = np.column_stack([events[:, [0, 2]], dur.astype(int)])
  File "<__array_function__ internals>", line 6, in column_stack
  File "C:\Python\Anaconda\envs\mnelab\lib\site-packages\numpy\lib\shape_base.py", line 641, in column_stack
    return _nx.concatenate(arrays, 1)
  File "<__array_function__ internals>", line 6, in concatenate
ValueError: all the input array dimensions for the concatenation axis must match exactly, but along dimension 0, the array at index 0 has size 90 and the array at index 1 has size 93

Crashes when trying to open non-existent file

I tried to open a file via Open -> Recent; however that file had recently been moved to a different directory, so didn't exist in its original location anymore. MNELAB just crashes in this case, where it should handle the FileNotFoundError exception:

QWidget::insertAction: Attempt to insert null action
Extracting parameters from /Users/hoechenberger/Google Drive/TaLa/EEG_Analysis_outdated/1_DataEEG/Sub_902_211117/TaLa_902_01.vhdr...
Traceback (most recent call last):
  File "/Users/hoechenberger/miniconda3/envs/mnelab/lib/python3.7/site-packages/mnelab/mainwindow.py", line 652, in _load_recent
    self.open_raw(fname=action.text())
  File "/Users/hoechenberger/miniconda3/envs/mnelab/lib/python3.7/site-packages/mnelab/mainwindow.py", line 322, in open_raw
    self.model.load(fname)
  File "/Users/hoechenberger/miniconda3/envs/mnelab/lib/python3.7/site-packages/mnelab/model.py", line 38, in wrapper
    f(*args, **kwargs)
  File "/Users/hoechenberger/miniconda3/envs/mnelab/lib/python3.7/site-packages/mnelab/model.py", line 119, in load
    raw = self._load_brainvision(fname)
  File "/Users/hoechenberger/miniconda3/envs/mnelab/lib/python3.7/site-packages/mnelab/model.py", line 141, in _load_brainvision
    raw = mne.io.read_raw_brainvision(fname, preload=True)
  File "/Users/hoechenberger/miniconda3/envs/mnelab/lib/python3.7/site-packages/mne/io/brainvision/brainvision.py", line 833, in read_raw_brainvision
    stim_channel=stim_channel, verbose=verbose)
  File "</Users/hoechenberger/miniconda3/envs/mnelab/lib/python3.7/site-packages/mne/externals/decorator.py:decorator-gen-146>", line 2, in __init__
  File "/Users/hoechenberger/miniconda3/envs/mnelab/lib/python3.7/site-packages/mne/utils/_logging.py", line 89, in wrapper
    return function(*args, **kwargs)
  File "/Users/hoechenberger/miniconda3/envs/mnelab/lib/python3.7/site-packages/mne/io/brainvision/brainvision.py", line 82, in __init__
    orig_units) = _get_vhdr_info(vhdr_fname, eog, misc, scale, montage)
  File "/Users/hoechenberger/miniconda3/envs/mnelab/lib/python3.7/site-packages/mne/io/brainvision/brainvision.py", line 449, in _get_vhdr_info
    settings, cfg, cinfostr, info = _aux_vhdr_info(vhdr_fname)
  File "/Users/hoechenberger/miniconda3/envs/mnelab/lib/python3.7/site-packages/mne/io/brainvision/brainvision.py", line 348, in _aux_vhdr_info
    with open(vhdr_fname, 'rb') as f:
FileNotFoundError: [Errno 2] No such file or directory: '/Users/hoechenberger/Google Drive/TaLa/EEG_Analysis_outdated/1_DataEEG/Sub_902_211117/TaLa_902_01.vhdr'
[1]    3235 abort      mnelab

Crash when plotting ICs computed without montage

It is possible to run ICA without a montage. However, when loading a montage afterwards, it should be possible to plot IC topoplots, but currently MNELAB crashes because the montage is not propagated to the ICA object. Maybe something to fix in MNE directly.

Per-dataset history?

Currently, the history is a list of all commands that were executed in the GUI. However, when switching back and forth between different datasets, it might make more sense to have a per-dataset history.

Apply ICA

As mentioned in #34, and way to use ica.apply() would be a nice feature.

Add option to append data sets

This could be a dialog showing all currently opened raw objects, so users first need to open all desired files, which they can then concatenate in the dialog window. This creates a new dataset.

MNELAB crashes if open file is deleted

If a file that has been opened with MNELAB (i.e. it shows up in the list on the left side) is deleted from disk, MNELAB crashes. This also happens if e.g. I open files A, B, and C, then activate file A in the list, delete file B from disk, and then switch to file B in the list.

Related projects

I just wanted to point out two related projects that mnelab might benefit from:

I didn't investigate any of these projects beyond what is shown on the main github page, but thought it might be useful to notify you.

Add option to crop raw

Cropping a raw object is pretty essential (and should be straightforward to implement because we only need to know tmin and tmax).

Add toolbar

Maybe it would be nice to have a toolbar (with the option to show/hide it).

Create export submenu

Currently it is not possible to see which export format MNELAB supports. To fix this, I suggest to create a submenu as follows:

Export data -> Export to FIF...
               Export to EEGLAB SET...
               Export to EDF/BDF...

Use QFormLayout where appropriate

Using QFormLayout could simplify many dialogs, so MNELAB should use that when appropriate (instead of nested QHBoxLayout/QVBoxLayout/QGridLayout).

MNELAB closes when trying to open .gdf files.

Hello all,
Can MNELAB open .gdf files? Are there certain files that it cannot open? I tries to open a dataset and it close the program instead of giving me an error that said it cannot open the file. Any help on this is appreciated.
Thanks.

Add CHANGELOG

Now that an initial release is available, it's time to track changes.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.