Laravel 5.6 + Vue.js の設定
index:
概要:
Laravel 5.6で、Vue.js を使用する場合の設定
についてメモです。
=> Vue.component を使用いていないので、
推奨される方法では無いかもしれませんが
正常動作を、確認できた部分のみ。記載したいと思います
環境とか
php7.1
Laravel 5.6
Vue.js
インスト
composer.phar create-project --prefer-dist laravel/laravel lara56 "5.6.*"
cd lara56
npm install
npm run dev
設定方法
=> 参考ページで、Vue.component
を使用した例がありましたが。
bladeの、子テンプレートに Vue.jsを書くと
JSエラーが、出力されたり。回避できなかったので
対策方法みたいな。
・ resources\assets\js\app.js
require('./bootstrap');
=>bootstrap 以外を、削除
vue.js の定義等を、消す
・npm run dev の 再実行。
public\js\app.js が生成されるはず。
vue.js なし。
・ blade ,親template
=> vue.js読みます
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script>
resources/views/Layout/base2.blade.php
# <!DOCTYPE html> <html lang="{{ app()->getLocale() }}"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- CSRF Token --> <meta name="csrf-token" content="{{ csrf_token() }}"> <title>{{ config('app.name', 'Laravel') }}</title> <!-- Styles --> <link href="{{ asset('css/app.css') }}" rel="stylesheet"> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script> </head> <body style="background: #FFF; "> <!-- conte-mid --> <div class="container" id="id_main_conte"> <nav class="navbar navbar-default"> <a class="navbar-brand" href="{{ url('/tasks') }}"> タスク一覧 </a> <a class="navbar-brand" href="{{ url('/tasks/create') }}"> 新規作成 </a> </nav> <p>[ base2 ]</p> <div id="app"> @yield('content') </div> </div> <!-- Scripts --> <script src="{{ asset('js/app.js') }}?A1"></script> </body> </html>
・子, template
resources/views/tasks/test2.blade.php
=> Larabel の場合、blade にvue.js の変数( {{name}} みたいな)を書くと、
レンダー時、エラーとなりますが。 @を変数の前につけると。エラーでないようです。
@{{ name }} みたいな。
=>vue.js は、親テンプレで、読み込み
vue インスタンス(new Vue )を、定義
=> v-for, v-on など、動作確認できました。
@extends('layouts.base2') @section('title', 'タスク一覧') @section('content') <div class="panel panel-default"> <div class="panel-heading"> 一覧 </div> <div class="panel-body"> </div> </div> <hr /> <div> <!-- vue --> <h1>vue test22:</h1> <div id="app_test2"> こんにちは @{{ name }}.<br /> <ul> <li v-for="(item, i) in list" :key="item">@{{ item }} <button @click="list.splice(i, 1)">remove</button> </li> </ul> <!-- <button @click="addItem">add</button> --> <button class="btn btn-primary" v-on:click="addItem">登録-2</button> </div> <!-- --> <script> var app = new Vue({ el: '#app_test2', data: { name: 'World 355', message: 'msg, 123', counter: 0, list: ['Apple', 'Banana', 'Strawberry'], }, methods: { addItem: function() { this.list.push('Orange' + (++this.counter).toString()) } }, }); </script> @endsection
raspberry PIで、機械学習インストールのエラー対策
index:
概要
raspberry PIで、久しぶりに機械学習ライブラリを、再構築したのですが。
numpy等のimportエラーが、なかなか回避できず。
対策方法を、メモしたいと思います。
raspbian の問題ではなく、pip3の問題かもしれません。
=> 失敗した日時は。2019/02/02 時点です。
環境
python 3.5.3
linux:
Linux raspberrypi 4.14.34-v7+ #1110 SMP Mon Apr 16 15:18:51 BST 2018 armv7l GNU/Linux
=> raspbianは、少し古めです。
2018-04-18-raspbian-stretch.zip
を、インストしています。
修正の作業
pip3 uninstall scipy
pip3 uninstall pandas
pip3 uninstall matplotlib
pip3 uninstall sklearn
pip3 uninstall numpy
=> 関係ライブラリを、消しておきます。
apt-get で追加されている部分も、削除したほうが。よいかもしれません
dpkg -l で、確認できます。
・追加
=> win作業PCと、ほぼ同じversion
を追加しておきます。
pip3 install scipy==0.17.0
pip3 install pandas==0.22.0
pip3 install matplotlib==2.1.2
pip3 install scikit-learn==0.19.1
pip3 install numpy==1.13
=> pandas あたりで、numpy 1.16以降の、エラーが出力される
verが、追加されますが。
最後に、numpy 削除し、 numpy 1.13を追加
・上記で、なんとか
エラーが、減少しました。
pi@raspberrypi:~/work/ML/predict_3_price $ python3 Python 3.5.3 (default, Jan 19 2017, 14:11:04) [GCC 6.3.0 20170124] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import numpy >>>
・追加分は、古めなので
新機能を、使用する場合は。問題あるかもしれませんので
追加対応が、必要な場合もありそうです。
機械学習 + Django WEBアプリの実装
index:
設定等
・アプリは、test1
ルーティング追加
・test1/urls.py
# from django.urls import path from test1 import views app_name = 'test1' urlpatterns = [ path('', views.index, name='index'), #pred path('predict_input/', views.predict_input, name='predict_input'), path('predict/', views.predict, name='predict'), path('form_test/', views.form_test, name='form_test'), ]
・test1/views.py
from django.shortcuts import render, get_object_or_404, redirect from django.views.generic.list import ListView # Create your views here. from django.http import HttpResponse from django.template import loader import numpy as np # def index(request): return HttpResponse('Hello World ,from test1') # def predict_input(request): from test1.include.pred_price import PredPrice return render(request, 'test1/predict_input.html') # def predict(request): if request.method == 'POST': from test1.include.pred_price import PredPrice siki_price=request.POST['siki_price'] rei_price =request.POST['rei_price'] menseki =request.POST['menseki'] nensu =request.POST['nensu'] toho =request.POST['toho'] #param params = {"siki_price" : siki_price , "rei_price" : rei_price , "menseki" : menseki , "nensu" : nensu , "toho" : toho } print(params ) # pred =PredPrice() model =pred.load_model() df = pred.load_data( params ) price = model.predict(df ) price_int = np.array( price , np.int32) print( price_int[0] ) # return HttpResponse('predict-POST') return render(request, 'test1/predict_out.html', # 使用するテンプレート {'price': price_int[0] }) # テンプレートに渡すデータ else: return HttpResponse('predict')
画面
・予測、条件の入力。
=>不動産の、条件
・予測、結果の表示
=> 金額の予測が、出力出来ました。
参考、 以前のflask版の WEB実装
Django +mysql DB WEBアプリの実装
index:
参考
https://docs.djangoproject.com/ja/2.1/intro/tutorial01/
作成方法
・プロジェクトの作成
django-admin startproject mysite
django-admin が、実行できない場合は、pip パスを追加すると、実行できました。
python C:\Users\user1234\AppData\Local\Programs\Python\Python35\Lib\site-packages\django\bin\django-admin.py startproject mysite
=> プロジェクト内に、複数のアプリを
追加できそうです。
・サーバ起動方法
python manage.py runserver
=> localhost:8000 で、開きました
・アプリを、プロジェクトに追加
python manage.py startapp test1
test1 を、追加。
・DB mysql の、設定。
mysite/settings.py
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'django', 'USER': 'db_user', 'PASSWORD': 'password', 'HOST': 'localhost', 'PORT': '', # (デフォルトポートなら空でも可) } }
DATABASES 部分を、
db name, user, pass ,host
等を記載します
・モデルの作成
test1/models.py
from django.db import models # Create your models here. # class Book(models.Model): """書籍""" name = models.CharField('書籍名', max_length=255) publisher = models.CharField('出版社', max_length=255, blank=True) page = models.IntegerField('ページ数', blank=True, default=0) def __str__(self): return self.name class Impression(models.Model): """感想""" book = models.ForeignKey(Book, verbose_name='書籍', related_name='impressions', on_delete=models.CASCADE) comment = models.TextField('コメント', blank=True) def __str__(self): return self.comment
・migrate
事前に、mysql DB, と上記の接続設定を
完了させておきます。
python manage.py makemigrations test1
python manage.py migrate
=> テーブルが、作成されます
・ルーティングの追加
test1/urls.py
# from django.urls import path from test1 import views app_name = 'test1' urlpatterns = [ path('', views.index, name='index'), path('book/', views.book_list, name='book_list'), # 一覧 path('book/add/' , views.book_edit, name='book_add'), # 登録 path('book/mod/<int:book_id>/', views.book_edit, name='book_mod'), # 修正 path('book/del/<int:book_id>/', views.book_del, name='book_del'), # 削除 #book_test path('book_test/', views.book_test, name='book_test'), ]
・次に、
mysite/urls.py を、追加
from django.conf.urls import url, include from django.contrib import admin from django.urls import path urlpatterns = [ path('polls/', include('polls.urls')), path('test1/', include('test1.urls')), path('admin/', admin.site.urls), ]
test1/views.py
from django.shortcuts import render, get_object_or_404, redirect from django.views.generic.list import ListView # Create your views here. from django.http import HttpResponse from django.template import loader # from test1.models import Book, Impression from test1.forms import BookForm, ImpressionForm # def index(request): return HttpResponse('Hello World ,from test1') # def book_list(request): """書籍の一覧""" # return HttpResponse('書籍の一覧') books = Book.objects.all().order_by('id') return render(request, 'test1/book_list.html', # 使用するテンプレート {'books': books}) # テンプレートに渡すデータ #
・表示の確認、
http://localhost:8000/test1/
を、開くと、追加した。ルーティングが
表示されます。
まとめ
次回は、機能を追加したいと思います
flask + mysql DBアプリの実装
index:
環境
python 3.5
flask
ファイル構成
上記のチュートリアルと、ほぼ同じですが。
下記となります、dbモデルは、 models の下に配置した場合です。
#└─flaskr ├─models │ └─__pycache__ ├─static └─templates
設定
DB接続
・ config.py
musqlの、DB名、ユーザー、パスワード、ホストの設定
接続ユーザーは、事前に追加しておきます。
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://db_user:password@localhost/flask_db?charset=utf8' SECRET_KEY = 'secret key'
・__init__.py
config.py の読み込み等
# coding: utf-8 from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config.from_object('flaskr.config') db = SQLAlchemy(app) import flaskr.views
・manage.py
起動する、ファイル。デバックモードの場合。( port=5000 )
from flaskr import app app.run(host='127.0.0.1', port=5000, debug=True)
予測問題、kaggle: PUBG Finish Placement Prediction
index:
概要
kaggleチャレンジで、 PUBG Finish Placement Prediction
予測問題
学習データ
kaggle の上記ページから、
学習データ等を、コピーします。
目的変数:
winPlacePerc
説明変数:
ゲームの戦闘に関するデータ、
matchTypeは、カテゴリ変数らしく。
ダミー変数で、数値化しました。
=> 学習データは、440万件程で、多めで
メモリ的に厳しかったので、kernel で結果を出力しました。
前処理
・欠損値は、削除
・上記のダミー変数の、変換
など
・ 今回は、重回帰分析で、機械学習の処理しました。
# def conv_dammy_mat(df): head_mat = "matchType" for item in df.columns: df= df.rename(columns={ item : head_mat +"_"+ item} ) return df # def conv_xdata(df): df =df.drop("Id", axis=1) df =df.drop("groupId", axis=1) df =df.drop("matchId", axis=1) df =df.drop("matchType", axis=1) return df # 学習データ global_start_time = time.time() train = pd.read_csv("train-tmp.csv") # Reading data test = pd.read_csv("test-tmp.csv") # Reading data # train = train[: 10000] test = test[: 10000] #train_sub = train[: 10000] #train_sub.to_csv('train-tmp.csv', index=False) train.dropna(inplace=True) #print( train.isnull().sum() ) print( train.isnull().any() ) train.info() #quit() # conv, dummy val train_mat = pd.get_dummies(train["matchType"]) #train= train[: 10000] train_mat =conv_dammy_mat(train_mat ) print(train.shape ) print(train_mat.shape ) # test_mat = pd.get_dummies(test["matchType"]) #train= train[: 10000] test_mat =conv_dammy_mat(test_mat ) print(test.shape ) print(test_mat.shape ) #quit() #print( len(train_mat.columns )) #print( len(test_mat.columns )) #quit() #merge train_mat["Id"] = train["Id"] train_all= pd.merge( train , train_mat ) test_mat["Id"] = test["Id"] test_all= pd.merge( test , test_mat ) #quit() # y_train =train_all['winPlacePerc'] y_data = y_train #train_all.info() x_train =train_all x_train =conv_xdata(x_train ) x_train =x_train.drop("winPlacePerc", axis=1) x_test = test_all x_test = conv_xdata(test_all ) # print(x_train.shape ,y_train.shape ) print(x_test.shape )
結果の提出
スコアは、0.0891 ほど。
ランキング順位は表示されず。でした