require 'mikon'
true
path = File.expand_path("../iris.csv", __FILE__)
df = Mikon::DataFrame.from_csv(path)
sepal_length | sepal_width | petal_length | petal_width | species | |
---|---|---|---|---|---|
0 | 5.1 | 3.5 | 1.4 | 0.2 | setosa |
1 | 4.9 | 3.0 | 1.4 | 0.2 | setosa |
2 | 4.7 | 3.2 | 1.3 | 0.2 | setosa |
3 | 4.6 | 3.1 | 1.5 | 0.2 | setosa |
4 | 5.0 | 3.6 | 1.4 | 0.2 | setosa |
5 | 5.4 | 3.9 | 1.7 | 0.4 | setosa |
6 | 4.6 | 3.4 | 1.4 | 0.3 | setosa |
7 | 5.0 | 3.4 | 1.5 | 0.2 | setosa |
8 | 4.4 | 2.9 | 1.4 | 0.2 | setosa |
9 | 4.9 | 3.1 | 1.5 | 0.1 | setosa |
10 | 5.4 | 3.7 | 1.5 | 0.2 | setosa |
11 | 4.8 | 3.4 | 1.6 | 0.2 | setosa |
12 | 4.8 | 3.0 | 1.4 | 0.1 | setosa |
13 | 4.3 | 3.0 | 1.1 | 0.1 | setosa |
14 | 5.8 | 4.0 | 1.2 | 0.2 | setosa |
15 | 5.7 | 4.4 | 1.5 | 0.4 | setosa |
16 | 5.4 | 3.9 | 1.3 | 0.4 | setosa |
17 | 5.1 | 3.5 | 1.4 | 0.3 | setosa |
18 | 5.7 | 3.8 | 1.7 | 0.3 | setosa |
19 | 5.1 | 3.8 | 1.5 | 0.3 | setosa |
20 | 5.4 | 3.4 | 1.7 | 0.2 | setosa |
21 | 5.1 | 3.7 | 1.5 | 0.4 | setosa |
22 | 4.6 | 3.6 | 1.0 | 0.2 | setosa |
23 | 5.1 | 3.3 | 1.7 | 0.5 | setosa |
24 | 4.8 | 3.4 | 1.9 | 0.2 | setosa |
25 | 5.0 | 3.0 | 1.6 | 0.2 | setosa |
26 | 5.0 | 3.4 | 1.6 | 0.4 | setosa |
27 | 5.2 | 3.5 | 1.5 | 0.2 | setosa |
28 | 5.2 | 3.4 | 1.4 | 0.2 | setosa |
29 | 4.7 | 3.2 | 1.6 | 0.2 | setosa |
30 | 4.8 | 3.1 | 1.6 | 0.2 | setosa |
31 | 5.4 | 3.4 | 1.5 | 0.4 | setosa |
32 | 5.2 | 4.1 | 1.5 | 0.1 | setosa |
33 | 5.5 | 4.2 | 1.4 | 0.2 | setosa |
34 | 4.9 | 3.1 | 1.5 | 0.1 | setosa |
35 | 5.0 | 3.2 | 1.2 | 0.2 | setosa |
36 | 5.5 | 3.5 | 1.3 | 0.2 | setosa |
37 | 4.9 | 3.1 | 1.5 | 0.1 | setosa |
38 | 4.4 | 3.0 | 1.3 | 0.2 | setosa |
39 | 5.1 | 3.4 | 1.5 | 0.2 | setosa |
40 | 5.0 | 3.5 | 1.3 | 0.3 | setosa |
41 | 4.5 | 2.3 | 1.3 | 0.3 | setosa |
42 | 4.4 | 3.2 | 1.3 | 0.2 | setosa |
43 | 5.0 | 3.5 | 1.6 | 0.6 | setosa |
44 | 5.1 | 3.8 | 1.9 | 0.4 | setosa |
45 | 4.8 | 3.0 | 1.4 | 0.3 | setosa |
46 | 5.1 | 3.8 | 1.6 | 0.2 | setosa |
47 | 4.6 | 3.2 | 1.4 | 0.2 | setosa |
48 | 5.3 | 3.7 | 1.5 | 0.2 | setosa |
49 | 5.0 | 3.3 | 1.4 | 0.2 | setosa |
50 | 7.0 | 3.2 | 4.7 | 1.4 | versicolor |
... | ... | ... | ... | ... | ... |
149 | 5.9 | 3.0 | 5.1 | 1.8 | virginica |
plot = df.plot(type: :scatter, x: :sepal_length, y: :petal_length, fill_by: :species, color: :qual)
require 'statsample'
false
Then draw a regression line using Statsample::Regression
.
lr = Statsample::Regression.simple(df[:sepal_length], df[:petal_length])
puts lr.summary
a, b = lr.a, lr.b
= Regression of sepal_length over petal_length Table 2 +----------+--------+ | Variable | Value | +----------+--------+ | r | 0.872 | | r^2 | 0.760 | | a | -7.095 | | b | 1.858 | | s.e | 0.867 | +----------+--------+
[-7.095381478279314, 1.8575096654214456]
x = (df[:sepal_length].min.round..df[:sepal_length].max.round).to_a
y = x.map{|v| b*v+a}
plot.add(:line, x, y)
plot