機械音痴な情報系

メモ帳.txt

pandas使う時に参考になったありがたきサイト

以下のリポジトリにあがっている問題を解くにあたって参考にしたサイトをまとめておいた。
github.com


公式。Styleについて。

公式。Visualizationについて

セルにグラデーションで色を付ける

グラフに任意の線を引く方法

グラフ描画(ax)

時系列データの扱いや、フィルタリングするときに役立った。

【Django】REST APIを作る時に参考にしたサイトメモ

参考サイト

ブログ

とりあえずここ見ておけば何も知らなくても、いきなりざっくりは作れる

Djangoのインストールから全体の流れを把握しながらAPIを作成する

django-filterざっくり

Tips。

今回は関係ないけど地図表示いずれ使いそうなのでメモ

【Docker・Django】pip installしてるはずなのにModuleNotFoundError + curlでAccess-Control-Allow-Originを表示させる方法

ずっとModuleNotFoundError

アプリケーションはpip installしてるはずなのにdockerのログを見るとModuleNotFoundErrorが出てる。
一応再インストールしてみるけどもう入ってると言われる。

$ curl -i http://localhost:8000/api/threads/?format=json
curl: (52) Empty reply from server

$ docker logs q-share-app-web
    :
    : 
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'corsheaders'


$ pip install django-cors-headers
Requirement already satisfied: django-cors-headers in /Users/sane/.pyenv/versions/3.6.2/lib/python3.6/site-packages (2.2.0)

原因

pip installしてるのに、モジュールねえよと言われる。
どうやら、コンテナを生成する時にrequirementsからpip installしてるっぽい。

ということで、一度ストップしてから再生成する。

$ docker-compose stop
$ docker-compose build
    :
    :
Collecting django-cors-headers (from -r requirements.txt (line 7))
  Downloading https://files.pythonhosted.org/packages/b1/bc/0414cf96a2e4a917b1f53b638f34f4999cc9a97fadbd1420054cc11b4ad2/django_cors_headers-2.2.0-py2.py3-none-any.whl
Collecting pytz (from Django==2.0.5->-r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/dc/83/15f7833b70d3e067ca91467ca245bae0f6fe56ddc7451aa0dc5606b120f2/pytz-2018.4-py2.py3-none-any.whl (510kB)
    :

$ docker-compose up -d

うん、インストールしてるっぽいね。

curlで確認

普通に「curl -i example.com」としてもAccess-Control-Allow-Originが出てくれないので以下のようにする。

$ curl -H "Origin: http://example.com" --verbose http://localhost:8000/api/threads/?format=json
*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8000 (#0)
> GET /api/threads/?format=json HTTP/1.1
> Host: localhost:8000
> User-Agent: curl/7.58.0
> Accept: */*
> Origin: http://example.com
> 
< HTTP/1.1 200 OK
< Date: Sat, 16 Jun 2018 07:01:41 GMT
< Server: WSGIServer/0.2 CPython/3.6.5
< Content-Type: application/json
< Vary: Accept, Cookie
< Allow: GET, POST, HEAD, OPTIONS
< Content-Length: 374
< Access-Control-Allow-Origin: *
< X-Frame-Options: SAMEORIGIN
< 
* Connection #0 to host localhost left intact
[{"id":2,"name":"Thread2","description":"this is thread 2.","url":"thread-2","views":49,"category":{"id":1,"name":"プログラミング"},"tag":[{"id":2,"name":"Java"}]},{"id":1,"name":"Thread1","description":"this is thread 1.","url":"thread-1","views":4,"category":{"id":1,"name":"プログラミング"},"tag":[{"id":3,"name":"Deep Learning"},{"id":1,"name":"Python"}]}]


おっけい!

curlのやり方は以下を参考にした。
stackoverflow.com


Pythonのxrange(3系からは撤廃)とシーケンス型

xrangeとは

Youtubeを徘徊しているとすごく面白そうなものが…!
帰ったら真似してみよう。
機械学習で日本酒をクラスタリング Part1 スクレイピング編


途中、forループでxrangeというものをみたけどrangeと何が違うのか。
Pythonで使うrangeとxrangeについて - のんびりしているエンジニアの日記

上のブログによると

rangeより早い
rangeはリスト型、xrangeは不透明なシーケンス型


って感じっぽい。

シーケンス型とは

不透明の部分は置いておいて、シーケンス型って何ってことで調べた。
シーケンス型 - Python学習講座

上のブログによると

・配列やリストみたいな順番に処理するデータ構造の一つ
・文字列、リスト、タプル、range型の4つある


range型の説明を見ると「イミュータブルなシーケンスを作成するオブジェクト」
わからなくなってきた。

xrange、3系からは撤廃

他のサイトも見てみようと思って調べてみたらどうやら3系からはxrangeが無くなったらしい。

そしてxrangeはその都度必要な値を生成するから要素数が大きいと効率良いよってことでまとめられてる。
そして3系からはrangeがxrangeに近い実装になった為無くなった、と。
rangeとxrange | Python-izm




なんだ。2系使ってないし気にすることでもなかったのか。

【React】Udemyの講座で学んだことまとめ

対象講座

ここでReactを学んだ。 色々学んだことが多かったけど絶対忘れるので適宜メモしていく。 www.udemy.com

5,7

saneeeatsu.hatenablog.com

6(Section1のインストール関連)

saneeeatsu.hatenablog.com

11

saneeeatsu.hatenablog.com

12,13

saneeeatsu.hatenablog.com

18

setStateは状態の更新と、renderの呼び出しを行う。

21

// handleNameChange(e) {
//  console.log(e.target.value)
//   this.setState({ name: e.target.value });
// }

handleNameChange(name) {
  this.setState({ name });
}

<input
  type="text"
  value={this.state.name}
  // onChange={e => this.handleNameChange(e)} 
  onChange={e => this.handleNameChange(e.target.value)} 
/>

22

JSXファイルでもtabキーでHTMLの保管をする(Atom)

$ apm install emmet

Atom > Keymap... で、keymap.csonに以下を追加

'atom-text-editor[data-grammar="source js jsx"]':
  'tab': 'emmet:expand-abbreviation-with-tab'

【djangoのエラー】'ModelBase' object does not support indexing

久しぶりにdjangoでmodelを書いていたら大して嵌ってないけど見たこと無いエラーを見たのでメモ。

エラー1

エラー文

anime = models.ManyToManyField('アニメ', Anime, blank=True)
'ModelBase' object does not support indexing

解決方法

anime = models.ManyToManyField(Anime, blank=True, related_name='animes')

エラー2

エラー文

name = models.CharField('名前', max_length=255, unique=True)

ManyToManyでなければ文字列を書くとadminサイトにその文字で反映される。

anime = models.ManyToManyField('アニメ', Anime, related_name='animes',blank=True)

しかしこうすると、、、

 __init__() got multiple values for argument 'related_name'

こんなエラーが出る。

解決方法

anime = models.ManyToManyField(Anime, related_name='animes',blank=True, verbose_name='アニメ')

verbose_nameに値を渡して解決。
日本語名がadminサイトで見れるようになった。
f:id:saneeeatsu:20180519114328p:plain

【django】runserver時にWinError 10013

家で作ってgithubに上げておいたプログラムをrunserverしようとしたらエラーが出たのでメモ。

実行環境

OS Win10
django 2.0.5

問題となるエラー

$ python .\manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).
May 16, 2018 - 11:02:58
Django version 2.0.5, using settings 'portfolio.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
Error: [WinError 10013] アクセス許可で禁じられた方法でソケットにアクセスしようとしました。

因みにこのエラー、英語だと
「An attempt was made to access a socket in a way forbidden by its access permissions 」となる。

解決策

結論から言うと解決策はポートを変更すること。

$ python manage.py runserver 8080

原因

デフォルトのポートが別で使用されている。