Python3関連のことを調べてみた2021年03月28日

Python3関連のことを調べてみた2021年03月28日

Python3 で MySQL に接続するドライバを比較する

Python3 で MySQL に接続するドライバ

いくつもあって、どれがいいのか?

ぐぐって以下のようなものが出てきたので調べてみました。

– mysql-connector
– mysql-connector-python
– mysql-connector-python-repackaged
– mysql-connector-python-rf
– PyMySQL

# 環境

– OS Ubuntu Linux 20.04 ja
– MariaDB mysql Ver 15.1 Distrib 10.3.25-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
– Python 3.8.5

MariaDBは以下のように設定しました
「MariaDB on Ubuntu18.04 LTS (also Ubuntu20.04 LTS)」
https://qiita.com/nanbuwks/items/c98c51744bd0f72a7087

調査日は2021/03/26です。
https://py

元記事を表示

【Python】DataFrameの2次元配列とその中の1行 / 1列との演算

備忘録として

DataFrameの作成

“`py
import numpy as np
import pandas as pd

A = np.random.randint(10, size=(3, 4))
df = pd.DataFrame(A, columns=list(‘QRST’)
df
# Q R S T
# 0 1 5 4 1
# 1 9 5 9 1
# 2 2 4 1 5
“`

DataFrameの各行から0行目を引く

“`py
df – df.iloc[0]
# Q R S T
# 0 0 0 0 0
# 1 8 0 5 0
# 2 1 -1 -3 4
“`

列単位で引き算する場合は、axisキーワードで指定する
axisキーワードは0が縦(row)方向、1が横(column)方向。それぞれaxis=’rows’, axis=’columns’でも指定できる
DataFrameの各列から0列目を引く場合

“`py
df.subtract(df.iloc[:, 0], axis=0)

元記事を表示

MySQLのjson_dataを使ってはまったこと

twitter API v2でツイートを収集して,MySQLに格納しようとしてはまったのでメモする.

# 環境
WSL2(Ubuntu 20.04.2 LTS)+Python 3.7.9+MySQL 8.0を使っている.
PythonからのMySQLへのアクセスには,mysql.connectorを使っている.

# やろうとしたこと
よく使う属性の値はvarcharやintで宣言したカラムに格納し,一応APIの返却した各ツイートの情報全体をjson_dataに格納することにしたが,insertに失敗する.

“`
alldata = requests.get(endpoint, params=params, headers=headers)
obj = json.loads(alldata.text) # dictに変換
data = obj[‘data’]

cur.execute(insert_tweet_sql, (中略, data))
“`
エラーメッセージ

“`
mysql.connector.errors.InterfaceError: Python type

元記事を表示

Flaskのsessionでmutableなオブジェクトを扱う

Flaskのsessionではmutableなオブジェクトの変更は検知されず、変更が反映されない。
例えば以下のコードがそれに該当する。

“`python
from flask import Flask, session

app = Flask(__name__)
app.secret_key = b’a’

@app.route(‘/’)
def index():
if not ‘mutable’ in session:
session[‘mutable’] = []
session[‘mutable’].append(1)
return str(session[‘mutable’])

if __name__ == “__main__”:
app.run(‘localhost’, port=80, debug=True)
“`

`http://localhost/`にアクセスした時に期待する挙動は`[1]`、`[1,1]`、`[1,1,1]`のようにアクセスするたびに配列に1が追加されていくものだが、実際には1つ目以降の1は

元記事を表示

python exeファイル実行時の「Failed to execute script –ファイル名–」エラーについて

##エラー内容

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/998522/6c631c6a-7c95-64d5-9033-7610589228b0.png)
折角つくったプログラムをいよいよ実行しようとしたその時、こんなのが出るとガッカリしますよね。:weary:

私もその一人でございます。
解決方法を色々とググってみましたが、ピンポイントで答えがみつからず、かなり苦労しました。

そこで、ここでは特定の条件下での解決方法ですが、まとめました。:paintbrush:

##前提条件
 ■言語
  python
 ■利用ライブラリ
  selenium

Jupyter Notebook上では動作していたものが、exeファイルにした時に動作しなくなるという状況でした。

##問題となったコーディング部分
下記の部分です。

“`python:
from selenium import webdriver
browser = webdriver.Chrome()
“`
##解決方

元記事を表示

zipと*で2次元配列の行と列を変換

leetcodeを解く時に、2次元配列の各列の値をlistにまとめたかったので、
調べてみました。

## 実例
例えば2次元配列 two_dimentional_array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
が定義されている時、ゴールが[(1, 4, 7) (2, 5, 8) (3, 6, 9)]だとします。

“`python
result = [i for i in zip(*two_dimentional_array)]
“`

とすると結果は

“`python
print(result)
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
“`
になりました。

## *によるlistの展開とzipによる
*two_dimentional_arrayをピックアップしますと、*によって2次元配列が1次元配列に展開されます。

“`python
print(*two_dimentional_array)
[1, 2, 3] [4, 5, 6] [7, 8, 9]
“`

## zip関数によって、それぞれ展開され

元記事を表示

法律文書における単語の共起

法律文書において共起される単語ペアを列挙する。
前記事までn-gramで頑張っていたけれど本記事ではおとなしくMeCab利用。

# 参考
以下を参考にさせて頂いた。ただし、元記事ではグラフまでやっているが、本記事では頻出のペアを表示するまで。
[3. Pythonによる自然言語処理 2-1. 共起ネットワーク](https://qiita.com/y_itoh/items/7aa33ba0b1e30b3ea33d)

# 異なる点
元記事から手を加えた点だけ記載する。

## 利用しない単語
元記事では、名詞の共起をやっていた。本記事でもその点は同じ。名詞の中でも数(数詞)ではないものは削除した(あらかじめ削除したほうが良かったかも)点は異なる。法律の文書に〇〇条などの表現が邪魔になりそうな感じがした。

“`python
noun_list = [[v.split()[2] for v in m.parse(line).splitlines() if (len(v.split())>=3 and v.split()[3][:2]==’名詞’ and v.split()[3][3

元記事を表示

Python デバッグ用ViewをTkinterで作成(Windows用)

# 目的
デバッグ中に何らかの内部データを見るために、デバッガでbreakpointを設定して、逐次止めてみたり、流れていくログテキストを追うのは効率が悪いです。
MultiProcess環境ですと、breakpointで止めてしまうと正常な再開ができなかったりします。
それに、ユーザーからの入力も受け付けてほしいとき、ターミナルのキー入力を使って行うと、ログのテキストが流れて、訳が分からなくなります。

# 作成物
Windows用でいたってシンプルです。

機能
・インスタンス生成すると、自動的に別スレッドで動き出します。(mainloopで返ってこないということはありません。)
・インスタンス生成時にダイアログタイトルと初期メッセージを渡して表示できます。
・テキストの最終行でEnterを押すとその前の行を切り出して、Queueで返信してくれます。
→メッセージルールを作っておけば、受信したテキストに応じてアプリケーションの挙動を制御できますね。
例えば、#command が先頭にあったら何等かの動作をするなど。
・テキストを表示させる場合、Queueでテキストを送るか、text

元記事を表示

Python初心者のためのTips & Tricks

 新人のpython使いのためのTips & Tricksを書きます。要点は以下の6点です。

1. 標準ライブラリを使ってコードを簡素化
2. 無駄なfor/while文を排除
3. コードの実行とリソース要件のトラック
4. 2つのテーブルを結合する際の行数の増加を防ぐ
5. Stack Overflowでコーディングソリューションを見つける
6. コードのユニットテスト

#1. 標準ライブラリを使ってコードを簡素化
 標準ライブラリはガンガン使いましょう。単にコードが見やすく短くなるだけでなく、より効率的に動作するようになります。

* 良くない例

“`python
import CSV

rows = []
colnames = [‘a’, ‘b’, ‘c’]

with open(‘filename.csv’, ‘rb’) as f:
reader = csv.reader(f)
for row in reader:
rows.append(rows)

data = pd.DataFrame(rows, cols = colnames)
“`

元記事を表示

Djangoでゲームを作る

#背景
学びのためにDjangoでゲームを作ってみることにする。
テトリスなど色々候補はあると思うがスロットゲームにすることにする。
#モヤモヤ
Djangoと言ったってRestもあるし・・・画面も面倒だし・・・
どうしたって業務・即戦力がきになる・・・オシャレなこともしたいし・・・
→ データアクセスがどっちも1つの山なんでデータベースから取ってきて
JSONで投入するという一旦完璧を目指す。
この時に、スクレイピングとかデータ解析などもやってしまう。
#考えないこと
DjangoRest
#ロードマップ 作り物系
・公式やってみる。
・toDoリスト作ってみる
・ゲーム作ってみる
    → 今ここ
・データベースから取ってきて管理画面だけのを作ってみる。
 →JSONでデータ投入
#仕様
・スロットマシン
・初期表示 4 が3枚並んでいる。
・ボタンを押すとランダム検索が起こる。
・スロットの絵柄と得点 例
6 3個揃うと 10000点 
7 3個揃うと  7000点
5 3個揃うと 300点
・結果を表示する。
・Python3 Djangoを使用
#やって見て
もちろんや

元記事を表示

DataFrameの先頭に行を追加する方法

プログラミング初心者です。
内容に間違いがあるかもしれないのでご注意ください。


DataFrameの先頭に行を追加するメソッドは無さそうだったので、
追加したい行のみのDataFrameを作成して`pandas.concat()`メソッドで合成する方法をとってみる。

###### 追加される側のDataFrameの作成

“`py
import numpy as np
import pandas as pd

# 3行2列のランダム数値が入った配列から作成
df = pd.DataFrame(np.random.rand(3,2), index=[‘A’, ‘B’, ‘C’], columns=[‘foo’, ‘bar’])
# foo bar
# A 0.299105 0.841390
# B 0.424596 0.316961
# C 0.055032 0.110246
“`
###### 追加したい行をDataFrameとして作成

“`py
# 追加される側と同じ列数の1行配列を作成(ここでは1行2列)
a = np.

元記事を表示

頻出トークンの抽出

# Counterクラスを用いた出現数のカウント

頻出のトークンを抽出するために、Counterクラスの勉強をしています。

“`python
import collections
import more_itertools

f = open(‘minpo.txt’)
data1 = f.read()
f.close()

# n-gramでのトークン化(前記事で記載)
l =[“”.join(lst) for lst in list(more_itertools.windowed(data1, n=6, step=1))]
# [(トークン, 出現数)]の形の、タプルのリストを取得
c = collections.Counter(l)
# タプルの2つ目(tap[1]、出現数)が100以上の1つ目(tap[0]、トークン)をリストにする
[tap[0] for tap in c.items() if tap[1] >= 100]
“`

出力結果は以下です。何に使えるかわからない結果になりました。
個人的な目標は、裁判などで利用できる書面作成支援アプリであり、よく

元記事を表示

【解決】math.floorで15桁以上の数の小数点を切り捨てると何だか変

先日のAtCorderのB問題、正しくコーディングできているはずなのに、何回やっても不正解でした・・・

[B – Round Down](https://atcoder.jp/contests/abc196/tasks/abc196_b)

###問題文
整数または小数
Xが与えられるので、小数点以下を切り捨てて整数で出力してください。

###制約
0≤X≤10**100
Xは整数、または小数点以下が100桁以下の小数であり、先頭に余計な0は付かない

###回答
“`
import math
X = math.floor(float(input()))
print(X)

84939825309432908832902189.9092309409809091329
84939825309432916635287552
…………………^^^^^
“`
AC× 7
WA× 9

math.floorで15桁以上の小数点以下を切り捨てると結果がずれてしまいました。

###解説を見てみる

>以下のように処理すればよいです。

* Xを文字列として受け

元記事を表示

メッセージやニックネームを彼ピッピ化するdiscordのbotを作る

#はじめに
[こちらの記事](https://qiita.com/natotti7518/items/e7387ab53b19cef7534e)で作った彼ピッピ化のコードをdiscord.pyを用いてdiscordのbotにしていきます。

#コード
“`python
import discord
from discord.ext import commands
from pykakasi import kakasi

kakasi = kakasi()
kakasi.setMode(‘J’, ‘H’)
conv = kakasi.getConverter()
txt = {}

bot = commands.Bot(command_prefix=’&’,help_command=None)

def make_pippi(p):
pip = conv.do(p).replace(‘し’, ‘ぴっぴ’).replace(‘シ’,’ピッピ’).replace(‘シ’,’ピッピ’)
return pip

def in_shi(shi):
judge = (‘

元記事を表示

Pythonを使った彼ピッピの作り方

#はじめに
彼氏 = 彼ピッピ

ならば

し = ぴっぴ

なのである

というわけで、”し”を”ぴっぴ”にする(以下、彼ピッピ化という)コードをPythonで書いていく

#コード
“`python
from pykakasi import kakasi

kakasi = kakasi() #オブジェクトをインスタンス化
kakasi.setMode(‘J’, ‘H’) #モード設定
conv = kakasi.getConverter()

txt = input(‘>>>’)

print(conv.do(txt).replace(‘し’,’ぴっぴ’).replace(‘シ’,’ピッピ’).replace(‘シ’,’シ’)) #彼ピッピ化
“`

たったこれだけで彼ピッピ化してくれます。

“`
>>>彼氏
かれぴっぴ
“`

コピペして使いたい方は「pykakasi」を予めインストールしておいてください。

“`
pip install pykakasi
“`

漢字をひらがなやカタカナ、ローマ字に変換してくれるライブラリです。
「pykakasi」の詳しい使い

元記事を表示

CentOS6.7 への Python3 インストール手順メモ

#はじめに

諸事情により、古い環境 (CentOS6.7) で Python を動かす必要がありました。
Python2系は標準入っているけど、Pythonは 3系で書かれていたので Python3をインストールすることにしました。
色んな所でつまずいてしまったので、メモとして手順を残しておきます。

#インストール手順
標準では 2系がインストールされています。

“`
$ python -V
Python 2.6.6
“`

こちらを参考に yum でインストールしてみようとしたところ・・・

https://qiita.com/f-akazawa/items/5ec741f8a5cca999d7b3

“`
# yum install -y https://centos6.iuscommunity.org/ius-release.rpm

Loaded plugins: fastestmirror
Setting up Install Process
Cannot open: https://centos6.iuscommunity.org/ius-release.rp

元記事を表示

DiscordボットでGCEインスタンスを起動・停止する

はじめに

GCEのインスタンスをDiscordBotで起動・停止させるための手順を書こうと思います。
この記事では

https://qiita.com/kkst/items/2942db4ba9a14a0e926f

の記事で作ったインスタンスを例に起動・停止できるようなコードを書いていきます
Discordbot用のVMインスタンスを作成

GCEの永続無料のプランで構成していきます(pythonのコードを実行し続けるだけのサーバーなのでたいしてスペックは必要ない)

| 項目     | 無料枠       |
|:—————–|:——————
| インスタンス | f1-micro
| ストレージ | 一ヶ月あたり30GB(HDD)
| スナップショット | 一ヶ月あたり5GB
| データ転送(外向き) | 一ヶ月あたり1GB

https://cloud.google.com/free?hl=ja 参照

なおosはcent

元記事を表示

PythonでGoogleNewsを日本語かつjsonで取得する

Googleのニュースは、例えばビットコイン関連のニュースが取得したい場合、実は以下のようなURLで取得できる
https://news.google.com/rss/search?q=ビットコイン&hl=ja

[参考]↓
[Google News Rss(API)](https://qiita.com/KMD/items/872d8f4eed5d6ebf5df1)

ただ、これだと結果がxmlなのでちょっと扱いづらい…
検索すると以下のようなライブラリがあったので使用してみた

https://pypi.org/project/GoogleNews/

ドキュメントの通り、以下のように書いて動かしてみたが、エラーが出る

“`python
from GoogleNews import GoogleNews

googlenews = GoogleNews(lang=’ja’, encode=’utf-8′)
googlenews.get_news(‘ビットコイン’)
result = googlenews.results()
print(result[0])
“`
“`
‘a

元記事を表示

Google workspace や Gmailのメールアドレスを使って、pythonから送信する。

# 本記事の対象者

– GCPでサービスを作り、メールを送信する仕組みを無料で作りたい人。(サービスのホスティングが無料ではなく、メール送信部分だけ)

# 目的
sendgridなどの外部のサービスを使わずに、pythonを使ってgmailを送信する。

# 必要なもの
– Gmail または、Google workspaceのアカウント (Google workspaceは管理者権限が必要)
– pythonを動かす環境

# メールの設定
### 送信者の設定

[設定](https://myaccount.google.com/intro/security)から二段階認証を有効にする
![スクリーンショット 2021-03-25 11.24.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38197/d628628e-b797-bccd-0bed-8e1ae312e115.png)

二段階認証有効後、アプリパスワードを作成する
![スクリーンショット 2021-03-25 11.

元記事を表示

PythonでNewsAPIの日本語記事を取得する方法

NewsAPIで日本語記事を取得しようと思ったらうまくいかなかったのでメモ

https://github.com/mattlisiv/newsapi-python

上記のライブラリを使用する。

https://newsapi.org/docs/client-libraries/python

上のドキュメントを参考にすれば、

“`python
# /v2/top-headlines
top_headlines = newsapi.get_top_headlines(q=’ビットコイン’,
language=’ja’,
country=’jp’)
“`

とかすれば取れそうだが、これだと取得できない。

https://newsapi.org/docs/endpoints/sources

どうやらlanguage項目に’ja’がないらしい。
というわけで、

“`python
# /v2/top-head

元記事を表示

OTHERカテゴリの最新記事