Edit this page on our live server and create a PR by running command !create-pr in the console panel

Working with Ruby

  • Difficulty level: easy
  • Time need to lean: 10 minutes or less

Installation

After installing iRuby by following instructions from iRuby Kernel homepage, you will need to install daru and NMatrix with command:

gem install daru nmatrix

Ruby

Basic data types recognised in Ruby are similar with Python's data types and there is a one-to-one correspondence for these types.

The convertion of datatype from SoS to Ruby (e.g. %get from Ruby) is as followings:

Python condition Ruby
None nil
boolean TrueClass or FalseClass
integer Integer
float Float
complex Complex
str String
Sequence (list, tuple, ...) Array
set Set
dict Hash
range Range
numpy.ndarray Array
numpy.matrix NMatrix
pandas.Series Hash
pandas.DataFrame Daru::DataFrame

Python objects in other datatypes are transferred as string "Unsupported datatype". Please let us know if there is a natural corresponding data type in Ruby to convert this data type.

Conversion of datatypes from Ruby to SoS (%get var --from Ruby from SoS) follows the following rules:

Ruby condition Python
nil None
Float::NAN numpy.nan
TrueClass or FalseClass boolean
Integer integer
String str
Complex complex
Float float
Array numpy.ndarray
Range range
Set set
Hash dict
NMatrix numpy.matrix
Array numpy.ndarray
Daru::DataFrame pandas.DataFrame

Ruby objects in other datatypes are transferred as string "Unsupported datatype".

For example, the scalar data is converted from SoS to Ruby as follows:

In [1]:
In [2]:
[nil, 123, true, "1\"23", (1.0+2.0i)]

Ruby supports DataFrame from its daru (Data Analysis in RUby) library so you will need to install this library before using the Ruby kernel. For example, a R dataframe is transfered as Daru::DataFrame to Ruby.

In [3]:
Out[3]:
Daru::DataFrame(32x11)
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6.0 160.0 110.0 3.9 2.62 16.46 0.0 1.0 4.0 4.0
Mazda RX4 Wag 21.0 6.0 160.0 110.0 3.9 2.875 17.02 0.0 1.0 4.0 4.0
Datsun 710 22.8 4.0 108.0 93.0 3.85 2.32 18.61 1.0 1.0 4.0 1.0
Hornet 4 Drive 21.4 6.0 258.0 110.0 3.08 3.215 19.44 1.0 0.0 3.0 1.0
Hornet Sportabout 18.7 8.0 360.0 175.0 3.15 3.44 17.02 0.0 0.0 3.0 2.0
Valiant 18.1 6.0 225.0 105.0 2.76 3.46 20.22 1.0 0.0 3.0 1.0
Duster 360 14.3 8.0 360.0 245.0 3.21 3.57 15.84 0.0 0.0 3.0 4.0
Merc 240D 24.4 4.0 146.7 62.0 3.69 3.19 20.0 1.0 0.0 4.0 2.0
Merc 230 22.8 4.0 140.8 95.0 3.92 3.15 22.9 1.0 0.0 4.0 2.0
Merc 280 19.2 6.0 167.6 123.0 3.92 3.44 18.3 1.0 0.0 4.0 4.0
Merc 280C 17.8 6.0 167.6 123.0 3.92 3.44 18.9 1.0 0.0 4.0 4.0
Merc 450SE 16.4 8.0 275.8 180.0 3.07 4.07 17.4 0.0 0.0 3.0 3.0
Merc 450SL 17.3 8.0 275.8 180.0 3.07 3.73 17.6 0.0 0.0 3.0 3.0
Merc 450SLC 15.2 8.0 275.8 180.0 3.07 3.78 18.0 0.0 0.0 3.0 3.0
Cadillac Fleetwood 10.4 8.0 472.0 205.0 2.93 5.25 17.98 0.0 0.0 3.0 4.0
Lincoln Continental 10.4 8.0 460.0 215.0 3.0 5.424 17.82 0.0 0.0 3.0 4.0
Chrysler Imperial 14.7 8.0 440.0 230.0 3.23 5.345 17.42 0.0 0.0 3.0 4.0
Fiat 128 32.4 4.0 78.7 66.0 4.08 2.2 19.47 1.0 1.0 4.0 1.0
Honda Civic 30.4 4.0 75.7 52.0 4.93 1.615 18.52 1.0 1.0 4.0 2.0
Toyota Corolla 33.9 4.0 71.1 65.0 4.22 1.835 19.9 1.0 1.0 4.0 1.0
Toyota Corona 21.5 4.0 120.1 97.0 3.7 2.465 20.01 1.0 0.0 3.0 1.0
Dodge Challenger 15.5 8.0 318.0 150.0 2.76 3.52 16.87 0.0 0.0 3.0 2.0
AMC Javelin 15.2 8.0 304.0 150.0 3.15 3.435 17.3 0.0 0.0 3.0 2.0
Camaro Z28 13.3 8.0 350.0 245.0 3.73 3.84 15.41 0.0 0.0 3.0 4.0
Pontiac Firebird 19.2 8.0 400.0 175.0 3.08 3.845 17.05 0.0 0.0 3.0 2.0
Fiat X1-9 27.3 4.0 79.0 66.0 4.08 1.935 18.9 1.0 1.0 4.0 1.0
Porsche 914-2 26.0 4.0 120.3 91.0 4.43 2.14 16.7 0.0 1.0 5.0 2.0
Lotus Europa 30.4 4.0 95.1 113.0 3.77 1.513 16.9 1.0 1.0 5.0 2.0
Ford Pantera L 15.8 8.0 351.0 264.0 4.22 3.17 14.5 0.0 1.0 5.0 4.0
Ferrari Dino 19.7 6.0 145.0 175.0 3.62 2.77 15.5 0.0 1.0 5.0 6.0
... ... ... ... ... ... ... ... ... ... ... ...
Volvo 142E 21.4 4.0 121.0 109.0 4.11 2.78 18.6 1.0 1.0 4.0 2.0

Also, we choose NMatrix library in Ruby becuase its fast performance. Same as daru (Data Analysis in RUby), you will need to install nmatrix library before using the Ruby kernel.

In [4]:
Out[4]:
$$\left(\begin{array}{ccc} 2&3&4\\ 7&8&9\\ \end{array}\right)$$
In [5]:
'numpy.matrix([[2, 3, 4], [7, 8, 9]])'
In [6]:
Out[6]:
matrix([[2, 3, 4],
        [7, 8, 9]])