- 1. TOYPRO解説 計算順序(400)
- 2. Djangoの旅 ~Part10~ リダイレクト編
- 3. pythonを使ってリアクティブなWebアプリを作りたい【開発編5】Herokuの開発環境と本番環境
- 4. PySpark なんちゃって匿名加工
- 5. DataFrame ソート
- 6. 【Python】通知処理を行うための準備(参考になりそうなリンク集め)
- 7. DockerでPython3 – 実務編
- 8. twitterのリストからユーザ取得して投稿されているメディアを一括ダウンロードしてみた
- 9. Spotifyデータセットを使ってSpotifyの100年分の曲を分析してみた
- 10. PythonでYAMLをJSON変換して見て分かったこと
- 11. Djangoの旅 ~Part9~ リダイレクト編
- 12. Djangoのフォーム(forms.py)を使ってデータを作成し、記録する(基礎の基礎3)
- 13. Djangoの旅 ~Part8~ モデルの更新編
- 14. CML上に物理環境を自動で複製する
- 15. Djangoの旅 ~Part8~ Django Shell編
- 16. pythonで行列の計算
- 17. 【Python】for文で入れ子のタプルをアンパッキング
- 18. PythonでExcelファイルを読み込む
- 19. Intellij Ideaに必要なPythonパッケージをインストールする
- 20. ChromeDriverを自動更新するライブラリ
TOYPRO解説 計算順序(400)
# 問題概要
整数と四則演算、括弧からなる式が与えられるので、計算順序を表す括弧を付ける問題
# 解説
いわゆる構文解析というやつです
普通に字句解析して構文解析してやってもいいんですが、Python には`ast`(https://docs.python.org/ja/3/library/ast.html) があるので活用しましょう
TOYPRO の Python は使える標準ライブラリが制限されているため、`ast`を import して使うことは出来ないのですが、組み込みの`compile`関数の`flags`(第四引数)に`1024`(型注釈をパースする場合は`5120`)を渡すことで 文字列を ast オブジェクトにパースすることができますあとはこれを DFS しながら式を再構築してやれば AC できます
# 想定解コード
“`py
e = “1+2*3”def visit_ast(node):
node_name = node.__class__.__name__if node_name == “BinOp”:
left =
Djangoの旅 ~Part10~ リダイレクト編
#目標
共通テンプレート習得#流れ
1・index.html(共通化したいhtmlファイル)をbase.html(共通部分をまとめるファイル)にコピー
2・base.htmlで共通部分以外をタグで囲む
3・index.htmlファイルの共通部分をタグで囲む
4・確認#コード解説
“`terminal
$ cp testapp/templates/testapp/index.html testapp/templates/testapp/base.html
“`
1・index.html(共通化したいhtmlファイル)をbase.html(共通部分をまとめるファイル)にコピー
cpコマンドを用いてindex.htmlをbase.htmlに複製“`APP/testapp/templates/testapp/base.html
好きな食べ物
pythonを使ってリアクティブなWebアプリを作りたい【開発編5】Herokuの開発環境と本番環境
こちらの続きです。
[pythonを使ってリアクティブなWebアプリを作りたい【開発編4】パスワードの暗号化](https://qiita.com/geeorgey/items/85905a4772903b180fad)
今回は、Flask-Vue.jsの開発で、開発環境と本番環境をどのようにマネージするのかについて書いていきます。
## どうやって開発を続けるか
今回のアプリケーションは、開発をローカル環境で行い、本番環境はHerokuにデプロイする形で行います。
HerokuへのデプロイはGithub経由で行うものとします。##何に悩むのか
ここで示したのですが
[pythonを使ってリアクティブなWebアプリを作りたい【開発編2】](https://qiita.com/geeorgey/items/961c1d1092ec60bb06bd#%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E7%92%B0%E5%A2%83mac%E3%81%A7frontend%E3%81%AE%E3%83%93%E3%83%AB%E3%83%89%E3%81%
PySpark なんちゃって匿名加工
# **PySpark備忘録**
## 実現したいこと
緯度経度に匿名加工を施したい
ただし、匿名加工に関しての手法としては特段難しいことをしているのではなく
最後の3桁ほどを”000″としたい程度
小数点は13位まで緯度経度の撮りうる値としては以下が考えられる
– 1.2345678910111
– 123.4567891011121
これを上記に従って下3桁を”000″とした場合
– 1.2345678910000
– 123.4567891011000
となって欲しい## 考えられるコード
“`sample.py
“””
Python, Pandasで行う場合のサンプルコード
ただしconvert関数の挙動の確認はしていないのでこんな感じの処理が行いたいんだな程度での認識
“””
import pandas as pddef convert(longitude_latitude):
longitude_latitude = str(longitude_latitude)[0: -3] + “000”
return longitude_latitud
DataFrame ソート
#概要
変数に対して、
**.sort_values(by=”カラムorカラムのリスト”, ascending=True**
とする列の値が小さい順にソートされる。**ascending=False**と指定すると大きい順になる。
リストの場合、順番が早いカラムが優先的にソートされる。
“`python
import numpy as np
import pandas as pd
np.random.seed(0)
columns = [“apple”, “orange”, “banana”, “strawberry”, “kiwifruit”]#DF作成
df = pd.DataFrame()
display(df)#ランダムに要素の数を作成
for colum in colums:
df[colum] = np.random.choice(range(1, 11), 10)#インデックスを設定
df.index = range(1, 11)#第2引数にascendingを指定しない場合はascending=Trueとして処理される。
df =
【Python】通知処理を行うための準備(参考になりそうなリンク集め)
#初めに
Pythonを利用して、通知を行うための方法の ネタ集めのリンクとなっています
実際に自分でこれが利用できるかは別として##今の処の目標
・twitterのハッシュタグでのデータ取得と
・その中でも複数のハッシュタグを取得して、取得後に適切なテキストに書き込む
・ストリーミング再生を取得して流すとこ
・ストリーミング再生をDiscordのBot複数に同時に流せるようにする。
・DiscordのBotはコマンドラインでURLを渡すことによって再生#ネタ集めのリンク集
##通知系(api)
Lineに通知する方法
PythonからTwitterAPIを用いてDMを取得してみる
##ストリーミング再生
実際にダウンロードせずにPythonを使用してYouTubeビデオからオーディオだけをストリーミングできますか?
htt
DockerでPython3 – 実務編
ひとしきり、最低限の手順です。
## 準備
Docker for windows desktop等 (記事末尾参照)
“`
├ Readme.md
├ Dockerfile
├ docker-compose.yml
└ opt
├ foo.py
└ bar.py“`
### docker-compose.yml“`docker-compose.yml
version: ‘3’
services:
python3:
restart: always
build: .
container_name: ‘python3’
working_dir: ‘/root/’
tty: true
volumes:
– ./opt:/root/opt“`
### Dockerfile
“`Dockerfile
FROM python:3
USER root
RUN apt-get update
RUN apt-get -y install locales && \
localedef -f
twitterのリストからユーザ取得して投稿されているメディアを一括ダウンロードしてみた
#1. 何したの?
twitterAPIを用いて、リストから登録されているユーザを取得し、いいねが千件以上ついているツイートのメディアを取得できるようにしました。
ユーザごとにフォルダを分けて作ってくれる機能付き!#2. なんで作ったの?
リストのユーザの数が多くなりすぎて、ツイートを追えなくなってきたので。。。
twitterのAPIを試してみたかったのと、SEになった記念でQiitaに何か投稿してみたかったので。#3. 環境
– Python 3.9.6
– TwitterAPI
– tweepy#4. メディアダウンロード
[Python+Tweepyでメディアタイムラインの画像や動画を取得](https://qiita.com/Jameson/items/184a065d96b50f9c5750)をかなり参考にしました。
変更点だけ解説します。“`
#ファイルをダウンロードする
import urllib.error
import urllib.requestdef download_file(url, file_name, tweet_id):
Spotifyデータセットを使ってSpotifyの100年分の曲を分析してみた
#はじめに
KaggleのSpotifyデータセットを使用して色々と分析してみました。
他の方のコードを参考に色々といじってみたので
アウトプット用として始めて記事を投稿します。使用環境
MacOS
Python 3.8.10
JupyterLab 3.0.14
## 今回使用したデータ
[Spotify Dataset 1922-2021](https://www.kaggle.com/yamaerenay/spotify-dataset-19212020-160k-tracks)
100年分のデータがまとまっており、曲数も約60万件も含まれているデータです。
##インポート
まずは必要なライブラリのインポート。“`python3
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
%matplotlib inline
import seaborn as snsfrom tqdm
PythonでYAMLをJSON変換して見て分かったこと
## 概要
AWS CloudFormation の template.yaml を JSON に変換できないかな…と思って、変換方法を色々試した。
結果、次のことが分かった。* PyYAML は `YYYY-MM-DD` を見つけると datetime.date として読み込むので何もせずにJSON出力すると失敗する
→ これは何とかなるので別にいい
* AWS の YAML と JSON でキー名の慣例が違う (YAML: PascalCase, JSON: CamelCase)し、そもそも統一されていない
→ 自動変換するツールを作るのは無理。というのは AWS側の仕様で決めたキー名と利用者が決めた名前のキーでルールがまちまちだから。
* **そもそも YAML は表現を保存しようとは思っていない**最後の点を取り上げようと思う。
## YAML は表現方法を保存しようとは思っていない
YAMLの仕様で書式は定められているが、それに従うとその書式から解析した値を取り込む。### 時刻のようなものの扱い
YAMLの仕様で `:` 区切りの時刻のようなも
Djangoの旅 ~Part9~ リダイレクト編
#目標
URL:http://127.0.0.1:8000/のように
後に何もないとき直接特定のアプリケーションに飛ばす(リダイレクト)#流れ
1・ルートの追加
2・確認#コード解説
“`APP/APP/urls.py
from django.contrib import admin
from django.urls import include,path
from django.views.generic import RedirectView#追加urlpatterns = [
path(‘testapp/’,include(‘testapp.urls’)),
path(‘admin/’, admin.site.urls),
path(”, RedirectView.as_view(url=’/testapp/’)),#追加
]
“`
1・ルートの追加
from django.views.generic import RedirectVie・・・リダイレクトするめのモジュールインポート
path(”, RedirectView.as_v
Djangoのフォーム(forms.py)を使ってデータを作成し、記録する(基礎の基礎3)
#1 はじめに
Djangoの1回目、2回目で作ったものをベースに、今回は掲示板などの入力フォームを定義して、フォームに入力したデータをデータベースに保存するテクニックについて紹介をしたいと思います。(内容の利用については自己責任でお願いします)#2 参照すべきサイト
Djangoの解説サイト(日本語)にフォームについて丁寧な解説があるので、ざっと目を通してみることをお勧めします。少し難しく感じる方もいらっしゃるかもしれませんが、これをみて感じをつかんでください。https://docs.djangoproject.com/ja/3.2/topics/forms/
また、もしかしたらDjango GirlsのDjangoフォームに関する記事の方が読みやすいかもしれません。
https://tutorial.dj
Djangoの旅 ~Part8~ モデルの更新編
#目的
新しいカラムを追加した時のモデルの更新#流れ
1・モデルに新しいカラム追加
2・マイグレーションファイル作成
3・マイグレート#コード解説
“`APP/testapp/models.py
from django.db import models
from django.db.models.fields import CharFieldclass LikeFood(models.Model):
content = CharField(max_length = 200)
color = CharField(max_length = 200,null=True)#追加def __self__(self):
return self.content
“`
1・モデルに新しいカラム追加
今回はcolorカラムを追加
ここでは元から更新以前のデータで生じる欠損値の扱い方が重要になってくる!!!
null=Trueを記述することにより空白のデータを欠損値nullとして認識してくれる。
null=Trueを記述しないとマイグレーションフ
CML上に物理環境を自動で複製する
##はじめに
先日DevNetAssociateを取得しましたが、これまで実際にDevNetらしい活動はできていなかったので何か実用的な物を作ってみようということで、今回CML上に物理環境を自動で複製するというスクリプト作成にチャレンジしてみました。このアイディアは以前Cisco社で行われた「[Cisco DevNet アイデアソン&ハッカソン 2020 東京](https://gblogs.cisco.com/jp/2020/02/devnet-ideathon-hackathon-tokyo-2020-1/)」での優勝チーム「THE KING OF SAND」のCisco DNA CenterのAPI利用してNW情報を収集し、「Cisco VIRL」にその物理環境の複製を自動展開という部分を参考に、DNACを使用しない簡易版で実装してみました。
##環境
今回はCML上の環境を物理環境と想定して別のCMLラボ上に複製してみます。
>CML1 Lab:BGP (複製元:物理環境想定)今回はマネジメントネットワーク部分は複製しません。
![image.png](http
Djangoの旅 ~Part8~ Django Shell編
#目標
Django Shellの理解#Django Shellとは
Djangoアプリの環境を有効にしたまま、コマンドでDBモデルを操作できる機能のこと#コード解説
“`terminal
$ python manage.py shell#出力結果
Python 3.6.3 (default, Sep 21 2020, 20:38:53)
[GCC Apple LLVM 12.0.0 (clang-1200.0.32.2)] on darwin
Type “help”, “copyright”, “credits” or “license” for more information.
(InteractiveConsole)
>>>
“`
1・まずはDjnago シェル起動
python manage.py shellを打ち込む
出力結果のようになればOKDjangoシェルのメリットの1つはDB操作をpythonコードで実行できること
“`python
>>> from testapp.models import LikeFood as LF
“`
2・モ
pythonで行列の計算
必要なライブラリ
“`python
import numpy as np
“`行列(matrix)の作成
“`python
X = np.array([[1,2],[3,4]])
print(X)
# [[1 2]
# [3 4]]
“`行列の転置(transpose)
“`python
X = np.array([[1,2],[3,4]])
Xt = X.T
print(Xt)
# [[1 3]
# [2 4]]
“`逆行列(inverse matrix)の作成
“`python
X = np.array([[1,2],[3,4]])
X_inv = np.linalg.inv(X)
print(X_inv)
# [[-2. 1. ]
# [ 1.5 -0.5]]
“`行列の積
“`python
X = np.array([[1,2],[3,4]])
X_inv = np.linalg.inv(X)
XX_inv = np.dot(X,X_inv)
print(XX_inv)
# [[1.0000000e+00 0.0000
【Python】for文で入れ子のタプルをアンパッキング
#タプルをアンパッキング
アンパッキングはタプルの各要素を、複数の変数に代入することである。以下の例では2つの要素を2つの変数に対して代入している。“`python
menu=”pizza”,”coffee”
main,drink=menu
print(main)
print(drink)
“`“`:実行結果
pizza
coffee
“`for文を使ってタプルのアンパッキングを行う。
itemsメソッドは辞書のキーと値の対をタプルで返す。このためmenu_itemにはタプルが代入されている。
以下の例はx,yのそれぞれにキーと値をアンパッキングしている。“`python
menu=dict(main=”pizza”,drink=”coffee”)
menu_item=menu.items()
for x,y in menu_item:
print(x,y)
“`“`:実行結果
main pizza
drink coffee
“`#入れ子になったタプルをアンパッキング
enumerate関数はループのカウントと要素をタプルで返す。以下
PythonでExcelファイルを読み込む
## 使用するExcelファイル
以下の内容でtest.xlsファイルを作成します。
Sheet1:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/19ca8934-0992-4655-95e3-a1ec5551735b.png)Sheet2:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/47e1f7a1-c1df-e639-e4ed-a1a0834c289c.png)## PythonでExcelを読み込む
以下pandasを使用してExcelファイルを読み込みます。(ExcelFileではxlsxファイルは現時点サポートされません。)
シート名を取得します。“`python
import pandas as pdxls_data = pd.ExcelFile(‘test.xls’)
print(xls_data.sheet_name
Intellij Ideaに必要なPythonパッケージをインストールする
## モジュールがないエラー
Intellij IdeaのうえでExcelを読み込むプログラムを組む際、以下のエラーが出ました。
“`text
ModuleNotFoundError: No module named ‘xlrd’
“`xlrdモジュールがないというとこで、以下の手順で追加できました。
## Intellij IdeaにPythonパッケージをインストールする
1. tools -> Manage Python Packagesをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/ecdbcd0e-728d-6b53-93b2-63dac865e468.png)
2. +をクリックし、必要なパッケージを検索し、Install Packageをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/7f5
ChromeDriverを自動更新するライブラリ
# 概要
SeleniumとChromeを使用してブラウザ操作の自動化をしていると、Chromeのバージョンアップの度にエラーが発生し、ChromeDriverを更新するということがあります。
今回紹介するwebdriver_managerというライブラリを使用すると、自動でChromeDriverの更新を行ってくれるようになります。# 使用方法
1.ライブラリのインストール
“`console:console
pip install webdriver-manager
“`2.コードの変更
“`python:python 変更前
from selenium import webdriver
import chromedriver_binarydriver = webdriver.Chrome()
driver.get(‘https://google.com’)
“`“`python:python 変更後
from selenium import webdriver
from webdriver_manager.chrome import Chrome