- 1. Pythonでブロックチェーンの改ざん検知
- 2. Python3の環境構築(初心者向け)
- 3. GUI操作でデータを手軽にグラフ表示するツールを作ったったった
- 4. 画像修復(inpaint)を使ってオブジェクト消去したった(OpenCV:C++)
- 5. 量子情報理論の基本:データ圧縮(2)
- 6. Pythonで、デザインパターン「Factory Method」を学ぶ
- 7. 言語処理100本ノック-87:単語の類似度
- 8. 多次元リストを複数行でソートしたいとき
- 9. matplotlibで上付き文字にしたい変数が二文字以上のとき
- 10. ファイルリネームを簡単に実施する方法
- 11. 証明書期限切れまであと何日かチェックする
- 12. discord.pyでニコニコ生放送の放送開始通知をDiscordに投稿するbot
- 13. VSCode から Python コードを触る際のimportエラー解消録
- 14. ブロガーの買ってよかったものを集計してランキング化したら本当にいいモノが見つかった
- 15. PythonでTCP and UDP Socketを作ってみた。(備忘録)
- 16. YouTubeで指定したチャンネルに投稿された動画の情報を自動で集める
- 17. Python3 List/辞書型メモ
- 18. ortoolpy.logistics_networkの使用時に、日本語の列名を使いたくない場合の対処
- 19. django oscar 簡易チュートリアル
- 20. python メモ リストから重複している要素を取得する。
Pythonでブロックチェーンの改ざん検知
# はじめに
以前[こちらの記事](https://qiita.com/sssssssiiiiinnn/items/e1022667026b942b2d7d)で書いたPythonのブロックチェーンプログラムに改ざん検知のテストを追加してみました。# 改ざん検知の仕組み
ブロックチェーンでは各ブロックが一つ前のブロックのハッシュ値を保持しており、改ざんが行われるとハッシュ値の整合性が取れなくなります。早速実装していきます。
動作としては単純で、改ざんが行われているか知りたいブロックのハッシュ値と次のブロックのprevious_hashを比較するだけです。if文のところでis_same()のような関数を使いたかったですが良い変数名が思い浮かばずやめました。
以下の関数をプログラムの最後に実行します。“`Python
def check_falsification(self):
print(‘=’ * 30 + ‘Check falsification’)
for chain_index, block in enumerate(self.chain)
Python3の環境構築(初心者向け)
# 1. はじめに
## 1-1. 執筆日
2020-01-15## 1-1. Python3の最新バージョン
– 2019年04月時点での、最新は「Python3.7.3」
– 2019年11月時点での、最新は「Python3.8.0」
– 2019年12月時点での、最新は「Python3.8.1」## 1-2. 構築する環境について
– 今回インストールするPython3のバージョンは “Python3.8.1″ です。
– 最新のバージョンがリリースされたら、適時読み替えて下さい。
– 開発環境は” Jupyter Notebook “を使います。## 1-3. 大きな流れ
– 2章:Python3のインストール
– 3章:仮想環境の説明と構築
– 4章:Jupyter Notebook のインストール# 2.Python3のインストール
## 2-1. Windows
### 2-1-1. インストール
Windows10に公式インストーラを使ってPython3.8.1をインストール。#### 手順
1. [Python公式サイト(Windows)](h
GUI操作でデータを手軽にグラフ表示するツールを作ったったった
データ分析の作業をしていると、データを数字で追うのとは別にグラフ等で視覚的にデータの特徴を確認することも多々あると思います。
そういった作業が多く、データの組みあわせを自由に変えながらグラフをすぐに表示できる「Glance」というツールを作ってみました。
GUI作成にはPythonの`tkinter`というライブラリを使用しました。ファイルは[こちら](https://gitlab.com/katsuki104/glance)にあります。
**※Windows環境で使う用に作ったのでMac環境だと多分別途修正が必要です…**# 概要
読み込んだデータから選択してグラフ表示するだけのシンプルなツールです。
実装した動作は大きく3つあります。1. ファイル選択からデータを読み込みそのカラムを一覧で表示する
![sample1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160512/394ea708-9f6d-4aec-bf7e-87f5d64b03e0.gif)2. データを選択して
画像修復(inpaint)を使ってオブジェクト消去したった(OpenCV:C++)
# Background
[画像修復(inpaint)を使ってオブジェクト消去したった(OpenCV:Python)](https://qiita.com/satsukiya/items/8f6d33257056fff275f6)のつづきでC++のみに存在するinpaint関数を紹介します。# Introduction
表にざっくりとまとめてみました。
| inpaint type |year|python|include |library |thesis|note|
|:—————–|:——–|:———————|:——————|:–|:–|:–|
|ナビエ・ストークス(Navier-Stokes)法|2001|○|`#include`| `opencv_photo` | [Navier-stokes, fluid dynamics, and image and video inpainting](https://www.math.ucla.edu/
量子情報理論の基本:データ圧縮(2)
$$
\def\bra#1{\mathinner{\left\langle{#1}\right|}}
\def\ket#1{\mathinner{\left|{#1}\right\rangle}}
\def\braket#1#2{\mathinner{\left\langle{#1}\middle|#2\right\rangle}}
$$## はじめに
[前回](https://qiita.com/SamN/items/12cc4f3057b36381e474)、古典情報理論における「雑音のないチャネルにおけるシャノンの符号化定理」について理解できたので、今回はその量子版である「雑音のない量子チャネルにおけるシューマッハの符号化定理」について勉強します。シャノンの定理は、「典型系列」という概念を使って証明できましたが、シューマッハの定理も、類似の概念を使って、ほぼ同じ論理展開で証明できてしまいます。その説明の後、量子計算シミュレータ[qlazy](https://github.com/samn33/qlazy)を使って、符号化をシミュレーションしてみます。
参考にさせていただい
Pythonで、デザインパターン「Factory Method」を学ぶ
GoFのデザインパターンを学習する素材として、書籍「[増補改訂版Java言語で学ぶデザインパターン入門](https://www.hyuki.com/dp/)」が参考になるみたいですね。
ただ、取り上げられている実例は、JAVAベースのため、自分の理解を深めるためにも、Pythonで同等のプラクティスに挑んでみました。
# ■ Factory Method(ファクトリメソッド)
Factory Method パターン(ファクトリメソッド・パターン)とは、GoF (Gang of Four; 四人組)によって定義されたデザインパターンの1つである。 Factory Method パターンは、他のクラスのコンストラクタをサブクラスで上書き可能な自分のメソッドに置き換えることで、 アプリケーションに特化したオブジェクトの生成をサブ
言語処理100本ノック-87:単語の類似度
[言語処理100本ノック 2015](http://www.cl.ecei.tohoku.ac.jp/nlp100/)の87本目「単語の類似度」の記録です。
いよいよ単語ベクトルを使って単語間の類似度を求めます。ようやく前処理が終わって本題になった感じです。自分のメールや会議の議事録などを使って単語間の類似度を求めてみたいものです。
類似度にはコサイン類似度を使います。高校で三角関数を習っていたときには「何に役に立つのだろう?」と感じていたことが本当に役に立つとは。
プログラム的には対して難しくないです。# 参考リンク
|リンク|備考|
|:–|:–|
|[087.単語の類似度.ipynb](https://github.com/YoheiFukuhara/nlp100/blob/master/09.%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E7%A9%BA%E9%96%93%E6%B3%95%20(I)/087.%E5%8D%98%E8%AA%9E%E3%81%AE%E9%A1%9E%E4%BC%BC%E5%BA%A6.ipynb)|回答プロ
多次元リストを複数行でソートしたいとき
# 1次元の時
“`python
import random
a = [random.randint(-5, 5) for _ in range(10)]
a.sort()
print(‘sorted: {}’.format(a))>> [4, -3, 0, -2, 1, 4, -1, -3, 2, 3]
sorted: [-3, -3, -2, -1, 0, 1, 2, 3, 4, 4]
“`
予想通り、小さい順に並びます。
文字列についても同様に、“`python
# 適当にstr型のリストを作る
s = [chr(random.randint(97, 97+25)) for i in range(10)]
print(s)
s.sort()
print(‘sorted: {}’.format(s))
>> [‘v’, ‘m’, ‘h’, ‘n’, ‘o’, ‘i’, ‘w’, ‘o’, ‘q’, ‘r’]
sorted: [‘h’, ‘i’, ‘m’, ‘n’, ‘o’, ‘o’, ‘q’, ‘r’, ‘v’, ‘w’]
“`
#多次元のと
matplotlibで上付き文字にしたい変数が二文字以上のとき
忘れないうちに備忘録です。
環境は Python 3.8.0、matplotlib 3.1.2 です。# 事案
matplotlibで変数`a`を上付き文字として出力しようと思って以下のようなソースを書きました。
“`python
import numpy as np
import matplotlib.pyplot as plta = 14
x = np.arange(0, 1, 0.1)
y = x**aplt.plot(x, y, label=rf’$y=x^{a}$’) # 問題の箇所
plt.legend()
plt.show()
“`いざプロットしてみると、以下のような図が得られました。
![Figure_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/170428/046d0c74-c8ad-f5ed-5355-139ff4e37ed4.png)
残念ながら、変数`a`の一文字目のみが上付き文字として識別されてしまいました。まぁしゃーないと思って、`$y=x^
ファイルリネームを簡単に実施する方法
ファイルのリネームは業務で必要とされる機会は意外と頻度が高いように感じたため、備忘録として記載する。
“`
import os
import globN = 8 #YYYYMMDDをファイル名から削除する場合は8文字の削除
EXT = “*.txt”
DIR = r”C:\Users\dirname” #ファイルパスの接頭辞「r」は不要な場合もある。os.chdir(DIR)
for file in glob.glob(EXT):
os.rename(file,file[N:])
“`
証明書期限切れまであと何日かチェックする
“`py:ssl_expire.py
import socket
import ssl
import OpenSSLdef get_server_certificate(hostname):
context = ssl.create_default_context()
with socket.create_connection((hostname, 443)) as sock:
with context.wrap_socket(sock, server_hostname=hostname) as sslsock:
der_cert = sslsock.getpeercert(True)
return ssl.DER_cert_to_PEM_cert(der_cert)cert = get_server_certificate(‘qiita.com’)
x509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, cert)
discord.pyでニコニコ生放送の放送開始通知をDiscordに投稿するbot
# 初めに
Qiita初投稿になりますfctokyo1016ことリョウ(凌)と申します。 Twitter→[@fctokyo1016](https://twitter.com/fctokyo1016)
普段は主にPHPでの開発なんかを行ってます。
エンジニア歴数年のほぼ素人がなんとか作ったコードなので大目にみていただければ幸いです。# 作ろうとした経緯
– ニコニコ生放送[10名ほどが所属する企画チーム](https://ch.nicovideo.jp/boxtv)に在籍していて、各々が自由に同じコミュニティで生放送が行える状態
– ニコ生のアラートが仕様変更で使えなくなってしまったので、他のメンバーの放送を見る際にURLを探すのが煩わしい
– メンバー全員が入っているDiscordのサーバーに通知が来れば楽なのでは?
– TwitchやYoutubeLiveなどのサイトは既に既存のbotがあるがニコニコには未対応
– なんとかインチキ(自作)できんのかね?# 苦労した点
– 上記でも記載したがニコ生のアラート仕様変更でRSSもAPIもユーザー生放送には対応していない# ア
VSCode から Python コードを触る際のimportエラー解消録
# Overview
事の発端は、WebスクレイピングをしようとBeautifilSoupr を利用しようとしたときのこと。Anaconda導入環境にて、conda を使って、`BeautifilSoup` をインストール
“`
conda install beautifilsoup4
“`その後、VSCode でimportを以下のように入力したが、エラーが起きてしまった。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38277/c49e47ca-147b-649d-da80-6965a61e3d62.png)
`Unable to import` とのこと。`conda install` がうまくいっていないのだろうか?# Cause
こちらの記事が非常に参考になった。
https://qiita.com/myasu398/items/5b0f321491a1bed77aa3macデフォルトPythonインタプリタがVSCode では非推奨らしく、その設定
ブロガーの買ってよかったものを集計してランキング化したら本当にいいモノが見つかった
## 動機
ジャバ・ザ・ハットリ(@jabba )さんの[技術書ランキングサイトをQiita記事の集計から作ったら、約4000冊の技術本がいい感じに並んだ](https://qiita.com/jabba/items/edefda09121877b79760)がとても面白かった。
特に面白く感じたのは「意見を集めてランキング形式に整える」と、良いモノはちゃんと上位に入ってくるところ。この「意見を集めてランキング形式に整える」をブロガーの買ってよかったもの紹介記事に応用したら、紹介頻度の高い本当にいいものが見つかるのでは?
最近はAmazonのレビューもサクラコメントで溢れがちで、本当に良いものを見つけるのが難しくなっている世の中に多少のニーズはあるのでは?
と思ったのが今回のそもそもの動機。
## 作ってみた
実際にブロガーの買ってよかったもの紹介記事から紹介商品を集計してランキング形式で並べたのがこちら。[ブロガー買ってよかったものランキング|グッドグッズランク](https://www.wercat.net/goodgoodsrank)
この記事を書いている
PythonでTCP and UDP Socketを作ってみた。(備忘録)
#はじめに
セキュリテイに関する本を友人からカリパクしていたので、その備忘録として記事にしてみます。#本記事の概要
Pythonでサーバ/クライアント通信を行うサードパーティー製のツールはたくさんあるが、その核となっているのがSocketライブラリらしい。なので、このライブラリを使用してみる。#環境
– OS : ManjaroLinux
– Vitualenv : Python2.7#TCP Client
単純なTCPクライアント“`python:tcp_client.py
#-*- coding: utf-8 -*-
import sockettarget_host = “www.google.com”
target_port = 80#オブジェクトの生成
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)#接続
client.connect((target_host,target_port))
#データの送信
client.send(“GET / HTTP/1.1\r\nHOST: g
YouTubeで指定したチャンネルに投稿された動画の情報を自動で集める
# やったこと(概要)
1. 指定したチャンネルに投稿された動画リストを取得し、API経由で動画情報を取得してS3に保存するスクリプトの作成
1. 上記を毎日0時(UTC)に定期実行するようにlambdaを設定# やったこと(詳細)
## 1. 動画情報を取得するスクリプトの作成
大まかに、下記の流れで動画情報を取得します
1. チャンネルIDから、そのチャンネルに投稿された動画が全て入っているプレイリスト(「アップロード動画」)のIDを取得
2. プレイリストIDから、そのプレイリストに含まれる動画のIDを取得
3. 2.で得られた動画IDのリストについて、順次APIから動画情報を取得して保存なお、今回利用するYouTube Data API v3について、最初の登録に当たっては下記を参考にしました
(一年前にやったので状況が変わっている可能性もあります)
https://qiita.com/moshisora/items/4ea23d5abd7b4d852955### 1.1 「アップロード動画」のIDを取得
YouTube Data API v3を使う際は、基
Python3 List/辞書型メモ
忘れないようにメモ。
# 型について
“`
# List型
sampleA = [[name,”Sato”],[age,1]], [[name,”Mori”],[age,20]]# Dictionary型
sampleB = {“apple”:1, “orange”:2}# 型を調べる
type(sampleA)
type(sampleB)#List型からKey/Valueを取り出す
for index, value in enumerate(sampleA)#辞書型からKey/Valueを取り出す
for index, value in items(sampleA)
“`
ortoolpy.logistics_networkの使用時に、日本語の列名を使いたくない場合の対処
# はじめに
「Python実践データ分析100本ノック」をやっていくなかで、ortoolpyというモジュールのなかの、logistics_networkという機能を使う内容がありました。生産計画の最適化、というようなことに使える機能なのですけれども、動きを追ってみると、引数として与えるDataFrameのcolumn名に”工場”などの日本語を使うことがデフォルトとなっています。
ただ、列名などに日本語を使うのはちょっと気持ち悪い、と感じてしまうこともあります。
そんな時に、どうしたらいいか対応を考えてみました。
# 対策
ortoolpyのソースコードのlogistics_netrworkの宣言の部分を見ると、以下のように書いてあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/255282/bfa0cb51-c814-7de5-c8a4-32b6424fc227.png)
これを見ると、”需要地”や”工場”、といったcolumn名は、logistics_network
django oscar 簡易チュートリアル
ecサイトを一人でパパッと作る必要性が生じたので、パッケージやフレームワークをフル活用すればパパッとECサイトが完成する(はず)。てことで、ウェブフレームワークにDjango。そしてECパッケージにOscarを使用。
django-oscarの[django-oscar/Building your own shop](https://django-oscar.readthedocs.io/en/stable/internals/getting_started.html)を基本的になぞっているだけですが参考に。
最終的に決済機能のないECサイトを構築します。また、これはあくまでもチュートリアルです。
## 開発環境
– Mac OS X
– Python==3.8.0
– Django==2.2.9
– django-oscar==2.0.4## Setup
[ドキュメント](https://django-oscar.readthedocs.io/en/stable/internals/getting_started.html)では、`mkvirtualenv`か`virtu
python メモ リストから重複している要素を取得する。
Django のregistry.pyより
“`
counts = Counter(
app_config.name for app_config in self.app_configs.values())
duplicates = [
name for name, count in counts.most_common() if count > 1]
“`Counterはコンストラクタの引数にリストを渡すとそれらの要素とその回数のデータを取得する。
duplicatesの部分では、そのままではforで繰り返しできないのでCounterのmost_common()で出現回数の多い順に並べられたタプルのリストに変換し、ifで出現回数が1より大きい、つまり重複しているもののみのリストを作成している。“`
from collections import Counternames = [“Jhon”, “Thomas”, “Alice”, “Jhon”, “Alice”, “Jhon”]
counts = Counter(names)
dupulicat