質問編集履歴

3

解決絵追加

2018/02/06 11:31

投稿

sarupip
sarupip

スコア13

test CHANGED
File without changes
test CHANGED
@@ -106,13 +106,15 @@
106
106
 
107
107
 
108
108
 
109
- ### したこと
109
+ ### 最終的に出したグラフ
110
110
 
111
+ 回帰分析の絵
111
112
 
113
+ ![イメージ説明](787a8a53a5dadf435b07c2ac369287bc.png)
112
114
 
113
- 何をやってよいかわかりません。。。
115
+ 想定利益
114
116
 
115
- 何がいけないのでしょうか。。。
117
+ ![イメージ説明](389f04dd3e49fe5c2b81e22c74cf8be2.png)
116
118
 
117
119
  ### 補足情報(FW/ツールのバージョンなど)
118
120
 
@@ -130,29 +132,11 @@
130
132
 
131
133
     として、価格(price)をx軸にした2次関数にしようとしています。
132
134
 
133
- 取り込んだCSVファイルのカラムは
134
-
135
- yyyymmdd,jan_code,item_name,price,sales
136
-
137
- となっており、price=販売価格、sales=売り上げ個数としています。
138
-
139
- (データの中身は適当につくりました)
140
-
141
- priceとsalesの回帰分析の結果、
142
-
143
- p0: 5.5705322830717225
144
-
145
- p1: -0.014132467834973865
146
-
147
- となっております。
148
-
149
- そこで、想定利益を求める式は価格をxとした際
150
-
151
135
  (x-cost)*(p[0]+p[1]*x)
152
136
 
153
137
  =p[1]*x^2 +(p[0]-p[1]*cost)*x - cost*p[0]
154
138
 
155
- の式となり、これから頂点を求めると、最大利益が出る
139
+ これから頂点を求めると、最大利益が出る
156
140
 
157
141
 
158
142
 

2

現時点の状況へ更新

2018/02/06 11:31

投稿

sarupip
sarupip

スコア13

test CHANGED
File without changes
test CHANGED
@@ -16,9 +16,9 @@
16
16
 
17
17
  ```
18
18
 
19
- ValueError: object too deep for desired array
19
+ return p[1] * x ** 2 + (p[0] - p[1] * 99) * x - p[0] * 99
20
20
 
21
- minpack.error: Result from function call is not a proper array of floats.
21
+ TypeError: 'int' object is not subscriptable
22
22
 
23
23
  ```
24
24
 
@@ -30,75 +30,75 @@
30
30
 
31
31
  ```python
32
32
 
33
+ # 必要なモジュールのインポート
34
+
33
35
  import pandas as pd
34
36
 
35
- import numpy
37
+ import numpy as np
36
38
 
37
39
  import matplotlib.pyplot as plt
38
40
 
41
+
42
+
43
+ # ファイルの読み込み
44
+
39
- from sklearn.linear_model import LinearRegression
45
+ df = pd.read_csv('lm_analysis.csv')
40
46
 
41
47
 
42
48
 
49
+ # 売り上げ個数の予想する回帰分析を行う
50
+
43
- df = pd.read_csv('lm_analysis.csv' )
51
+ y = np.array(df['sales'].tolist())
52
+
53
+ x = np.array(df['price'].tolist())
54
+
55
+ z = np.polyfit(x, y, 1)
44
56
 
45
57
 
46
58
 
47
- Y =df.loc[:,['sales']].as_matrix()
59
+ p = np.poly1d(z)
48
60
 
49
- X = df.loc[:,['price']].as_matrix()
61
+ p30 = np.poly1d(np.polyfit(x, y, 30))
62
+
63
+ xp = np.linspace(0, 500, 100)
50
64
 
51
65
 
52
66
 
67
+ plt.plot(x, y, '.', xp, p(xp), '-', xp, p30(xp), '*')
68
+
69
+ plt.ylim(0, 10)
70
+
71
+ plt.show()
72
+
73
+ # 切片と傾きの表示
74
+
75
+ # p[0]:傾き
76
+
77
+ # p[1]:切片
78
+
53
- slr = LinearRegression()
79
+ print("p0:", p[0])
80
+
81
+ print("p1:", p[1])
54
82
 
55
83
 
56
84
 
85
+ # 一旦原価は99で固定
86
+
57
- slr.fit(X, Y)
87
+ def f(x, p):
88
+
89
+ return p[1] * x ** 2 + (p[0] - p[1] * 99) * x - p[0] *99
58
90
 
59
91
 
60
92
 
61
- print(slr.coef_)
93
+ dx0 = -p[0] + p[1] * 99 / (2 * p[1])
62
94
 
63
- print(slr.intercept_)
95
+ dy0 = f(dx0,0)
64
96
 
65
- print(slr.score(X,Y))
97
+ print(dx0, dy0)
66
98
 
99
+ plt.plot(p[1] * x ** 2 + (p[0] - p[1] * 99) * x - p[0] * 99)
67
100
 
68
-
69
- b1 = slr.coef_
70
-
71
- b0 = slr.intercept_
72
-
73
-
74
-
75
- import sympy as sym
76
-
77
-
78
-
79
- b_price = numpy.array(df.price)
80
-
81
- c_price = b_price.tolist()
82
-
83
- x = numpy.array(c_price)
84
-
85
- u_cost =99
101
+ plt.show()
86
-
87
-
88
-
89
- from scipy.optimize import root
90
-
91
- from scipy.misc import derivative
92
-
93
-
94
-
95
- y = lambda x: (x - u_cost)*(b0+b1*x)
96
-
97
- dy = lambda x: derivative(y,x)
98
-
99
- root(dy,x0=0)
100
-
101
-
102
102
 
103
103
 
104
104
 

1

細くの追加

2018/02/06 09:03

投稿

sarupip
sarupip

スコア13

test CHANGED
File without changes
test CHANGED
@@ -118,6 +118,48 @@
118
118
 
119
119
 
120
120
 
121
+ ---補足情報---
122
+
123
+ x軸:価格(price)
124
+
125
+ y軸:想定利益
126
+
127
+   ※想定利益→(価格ーcost)×個数
128
+
129
+    個数を回帰分析で予想し、個数=p[0] + p[1]×価格
130
+
131
+    として、価格(price)をx軸にした2次関数にしようとしています。
132
+
133
+ 取り込んだCSVファイルのカラムは
134
+
135
+ yyyymmdd,jan_code,item_name,price,sales
136
+
137
+ となっており、price=販売価格、sales=売り上げ個数としています。
138
+
139
+ (データの中身は適当につくりました)
140
+
141
+ priceとsalesの回帰分析の結果、
142
+
143
+ p0: 5.5705322830717225
144
+
145
+ p1: -0.014132467834973865
146
+
147
+ となっております。
148
+
149
+ そこで、想定利益を求める式は価格をxとした際
150
+
151
+ (x-cost)*(p[0]+p[1]*x)
152
+
153
+ =p[1]*x^2 +(p[0]-p[1]*cost)*x - cost*p[0]
154
+
155
+ の式となり、これから頂点を求めると、最大利益が出る
156
+
157
+
158
+
159
+ という想定です。
160
+
161
+
162
+
121
163
  python3.6
122
164
 
123
165
  Pycharm: 2017.3.3