Python関連のことを調べてみた2020年03月23日

Python関連のことを調べてみた2020年03月23日
目次

MicroPythonにCモジュールを追加するために…

とりあえず簡単な関数を実装してみる。

どれもmicropythonでできることなのでCで実装する必要はないけど、
今後何かしらをCで実装する必要が出てきたときのために最低限の確認。

ドキュメントが見当たらなくてgitに上がっているmicropythonのコードを追いかけて実装したので別の方法があるかも…(ご存知の方はご指摘いただけると幸いです。)

– 文字列を引数にとってリターン

“`
STATIC mp_obj_t return_str(mp_obj_t str_obj)
{
const char *str = mp_obj_str_get_str(str_obj);

return mp_obj_new_str(str, strlen(str));
}
“`

### list操作
– 作成

“`
STATIC mp_obj_t list_new()
{
mp_obj_t list_items[] = {
mp_obj_new_int(123),
mp_obj_new_float(456.789),

元記事を表示

Apache Spark を Jupyter Notebook で試す (on ローカル Docker

以前 Spark を使ってたのですが今は使ってなくて,
そのうち忘れそうなので基本をメモしておくことにしました.

(全体的に聞きかじりの知識なので間違ってる点はコメント・編集リクエストを期待します)

## 使う

Jupyter + PySpark な環境が動く Docker イメージが用意されているので,ローカルで試すには便利です:
https://hub.docker.com/r/jupyter/pyspark-notebook/

PySpark とは,という話ですが,Spark 自体は Scala だけど,
Python で使えるやつがあってそれが PySpark だという話があります.

IPC でがんばってるという仕組みになっていたはずなので,
Scala <-> Python の変換のコストが結構でかいうんぬんみたいな話題もあります.

さて,使ってみましょう:

“`sh
docker run -it -p 8888:8888 jupyter/pyspark-notebook
“`

これを実行すると Terminal に 8888 番にトークンがついた URL

元記事を表示

SQLAlchemyで複数のデータベースに接続

# DB情報の設定
“`python:config.py
class SystemConfig:

SQLALCHEMY_DATABASE_URI = ‘mysql+pymysql://{user}:{password}@{host}/{db_name}?charset=utf8’.format(**{
‘user’: ‘sample_user’,
‘password’: ‘passwd’,
‘host’: ‘host’,
‘db_name’: ‘sample_db_1’
})

SQLALCHEMY_BINDS = {“second_sample_db”: SECOND_SAMPLE_DATABASE}

SECOND_SAMPLE_DATABASE = ‘mysql+pymysql://{user}:{password}@{host}/{db_name}?charset=utf8’.format(**{
‘user’: ‘sample_user’,

元記事を表示

【Python】OpenCVによる画像の画素へのアクセスと切り取り (初心者向け)

#はじめに
OpenCVを用いて画像をどうやって切り取るかを解説します。一応[前回](https://qiita.com/sino20023/items/b14c0dd7f90cda99b47f)の続きなので、もしこの記事でわからないところがあれば、ご覧ください。

#環境
MacOS Mojave
Python 3.7

#使用画像
以下の画像 (neko.jpg) を使用します。
![neko.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/288555/e45a175e-acd1-8142-5ab5-2bac563dc97e.jpeg)

#画像の大きさを確認
以下のコードで画像の大きさを確認できます。

“`Python:
#ライブラリの読み込み
import cv2
import matplotlib.pyplot as plt

img = cv2.imread(“neko.jpg”)
print(img.shape)
“`
以上のコードを実行すると、以下の結果が出ます。

“`
(9

元記事を表示

scikit-learnでirisなどの付属データセットではなく、独自データやインターネット上の外部データを読み込む方法

 書籍やネット上のscikit-learn教材には、irisやcancer等の付属データセットを使った解説が多いです。もちろん手軽で 同じ結果が得られる安心感もある一方、予定調和的で 深い学びが得にくいと感じる方も多いのではないかと思います。
 この記事では、自作データやネット上にある外部データを読み込んで、scikit-learnで分析する方法をご紹介します。
(検証環境:Windows10, Anaconda3, Python3.7.6, Jupyter Notebook6.0.3)

## CSVファイルの準備
 この記事では、例として機械学習・データサイエンス コミニティーである [Kaggle](https://www.kaggle.com/) が公開しているデータ [World Happiness Report←リンク](https://www.kaggle.com/unsdsn/world-happiness) を使います。機械学習に使いやすいデータセットが揃っているので、ユーザー登録が必要ですが Kaggleを選択しました。
 `Download (79 KB)` とい

元記事を表示

Pythonでやさしくしっかり学ぶ正規表現

普段正規表現が必要になるケースがそれなりに発生しているものの、体系立てて勉強したことがなかったので整理・まとめておきます。言語はPythonを使います。

結構長めです。これを読んだ皆さんはきっと「[Pythonの正規表現完全に理解した](https://togetter.com/li/1268851)」とつぶやいても怒られないはず。

# そもそも正規表現って?

英語だとRegular Expression。文字列関係の特殊な操作をやる際に、特定のパターンを指定して色々な処理を行う表現(処理)のことを言います。

普通の文字列関係のビルトイン関数やモジュールなどでは対応が面倒(もしくは対応が難しい)な文字列操作などが正規表現を使うことでシンプルに扱えるケースがあります。

主に以下のような用途で使われます。

– 文字列の特殊な検索(例 : 曖昧検索や表記ぶれなどを含める等)
– 入力値のバリデーション(例 : 入力されたメールアドレスが有効な値になっているか等のチェック)
– 固定パターンの文字列の抽出や置換(例 : CSSのカラーコードを抽出したり、郵便番号から数値部分を抽出し

元記事を表示

【python】datetimeモジュールのstrftimeと strptimeの違いを実例で解説

#【メモ】pythonのdatetimeモジュールのstrftimeとstrptimeの違いと覚え方

どちらも日付と文字列の変換。
どっちがどっちだっけ?と迷うのをなくす。

①strftime:「日付」→「文字列」
②strptime:「文字列」→「日付」

##簡単な覚え方
両者の違いは「f」か「p」。

・strftimeの「f」を「from」とみなす。
 └ str from time:時間(日付)から文字列

・strptimeは「from」じゃないほう
 └ str time:文字列から日付

##正式な意味から覚える
・strftimeの「f」は「format」
 └ format:書式を変える
└ 書式があるのは文字列のみ(日付データは定型)

・strptimeの「p」は「purse」
 └ purse:解析する
 └ 解析が必要なのは文字列(日付データは型にはまっている)

>※「f」「p」の意味は諸説あり。しっくりきたものを書いてます。

##strftimeとstrptimeの使い方

**ご参考**
・s

元記事を表示

自然言語処理ライブラリGiNZAで固有表現抽出してみた

#この記事の目的

最近、Pythonで日本語での固有表現抽出(Named Entity Recognition; NER)を簡単に使いたいなと思っていろいろ探していたろころ、“`GiNZA“`というものを知ったので使ってみました。
ちなみに、固有表現抽出は自然言語処理のタスクの1つで、以下の図のように日付や人物など、特定の単語を検出するもののことです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540956/4effe495-6bac-ac13-59c7-dea53d81874b.png)

# GiNZAについて

“`GiNZA“`は自然言語処理(Natural Language Processing; NLP)を行うためのライブラリの1つで、固有表現抽出以外にも様々なタスクをこなすことができます。
正確には、“`spaCy“`という自然言語処理ライブラリがあるのですが、その日本語処理部分を担当しているといった感じです。そのため、“`spaCy“`の使い方が

元記事を表示

【python】文字列(str)データを日付に変更する方法(datetimeのstrptime)

#【初心者向け】pythonの文字列(str)データを日付に変更する方法(datetimeのstrptime)

WEB上でスクレイピングしてきた日付データは文字列(str)。

取得データをDBに日付データとして格納するために、文字列を日付に変換する。

##やり方
datetimeモジュールのstrptimeメソッドを使う。

##datetimeモジュールのインポート
import datetime as dtで省略した表記を定義すると後々使いやすい。

“`python:
import datetime as dt
“`

**省略系の定義あり・なしでの使い方の違い**

“`ruby:定義なし
import datetime

datetime.datetime.now()
#冒頭のモジュール名称をフルで記述する必要がある
“`

“`ruby:定義あり
import datetime

dt.datetime.now()
#冒頭のモジュール名称を省略形で記述できる
“`

##文字列の日付をdatetime型の日付に変更

元記事を表示

言語処理100本ノック-58:タプルの抽出

[言語処理100本ノック 2015](http://www.cl.ecei.tohoku.ac.jp/nlp100/)[「第6章: 英語テキストの処理」](http://www.cl.ecei.tohoku.ac.jp/nlp100/#ch6)の[58本目「タプルの抽出」](http://www.cl.ecei.tohoku.ac.jp/nlp100/#sec58)記録です。
前回ノックは全体の係り受け可視化でしたが、今回は特定の係り受けを抽出して出力です。8割くらいはやっていること同じです。

# 参考リンク

|リンク|備考|
|:–|:–|
|[058.タプルの抽出.ipynb](https://github.com/YoheiFukuhara/nlp100/blob/master/06.%E8%8B%B1%E8%AA%9E%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%AE%E5%87%A6%E7%90%86/058.%E3%82%BF%E3%83%97%E3%83%AB%E3%81%AE%E6%8A%BD%E5%87%BA.ipynb

元記事を表示

Pythonでのチームアプリ開発に参画するための学習履歴~paizaラーニングの「Python3入門」を終えて~

##なぜPythonに興味を持ち、学ぼうとしているのか?

A.
今一番ホットな言語であるのと機械学習、AI、深層学習(ディープランニング)などなど十全に使いこなすにはおそらく根っからの文系である自分では無理だろうと感じてはいるものの、やることの規模とやはり流行るものはある程度は身につけておきたい(なぜ流行るのか?ということを知る意味を含めて)なぁと感じたから。
しかし、これはあくまでも興味関心という意味での話でそもそも今まで本筋として学んでいたPHP(Laravel)の手を止めてまで、今新しい言語を学んでいるのかというと
Twitter上で[Saku731さん](https://twitter.com/Koji21825331) の[こういう企画](https://twitter.com/Koji21825331/status/1213663249649922049?s=20) を目にしたからです。
独学でPHP(Laravel)を学び、一応曲がりなりにも成果物を1つ要件定義から実装まで完走した経験上

**どのようなサービスを作ればいいのか**
**こういう処理はどういう具合がベタ

元記事を表示

【Python】ABC159D(高校数学nCr)【AtCoder】

競プロはノートとペンを用意してやろう!!!
(特に数学の式が出てきたら)

#[ABC159D](https://atcoder.jp/contests/abc159/tasks/abc159_d)
今回は解説の解説をしますw
まずは[解説](https://img.atcoder.jp/abc159/editorial.pdf)より引用。
>①N個のボールから、書かれている整数が等しいような異なる2つのボールを選び出す方法の数
②k番目のボールを除いたN−1個のボールから、k番目のボールと同じ整数が書かれたボールを選び出す方法の数
をそれぞれ求めて、前者から後者を引けば求まります。
前者は、∑Ni=1(ci 2), 後者はcAk−1となります。

**後者は「cAk−1」となります。**
なんでやねん!
##後者は「cAk−1」となります。の意味
こういうときは具体例を考えて法則性を見つける(ノートとペンがないと無理!)
<具体例1>
5個から2個選ぶ→5C2=5*4/2*1=10通り!
4個から2個選ぶ→4C2=4*3/2*1=6通り!
 ⇨10-6=4通り減る!
確かにcAk−

元記事を表示

unittest

“`calculation.py
class Cal(object):
def add_num_and_double(self, x, y):

if type(x) is not int or type(y) is not int:
raise ValueError
result = x + y
result *= 2
return result
“`

#calculation.pyをunittestでテストします

“`test_calculation.py
import unittest
import calculation

release_name = ‘lesson2’

class CalTest(unittest.TestCase):

#テストが走る前に呼ばれる
def setUp(self):
print(‘set up’)
self.cal = calculation.Cal()

#テスト終了後に呼ばれる

元記事を表示

『アルゴリズム図鑑』のアルゴリズムをPython3で実装(バブルソート編)

#この記事について
この記事では筆者が『アルゴリズム図鑑』を読んで学んだアルゴリズムについて、Python3での実装例を紹介したいと思います。今回のアルゴリズムはバブルソートです。筆者は素人です。色々教えていただけると幸いです。

筆者はPython2のことをよく知りませんが、自分がPython3を使ってるっぽいことだけはわかっています(Python3.6.0かな?)。そのため、記事のタイトルではPython3としました。

#バブルソートについて
問題設定は下記とします。アルゴリズムの説明は省略します。『アルゴリズム図鑑』を参照ください。

###問題
与えられた数の列に対して、小さい数から順に並べ替えた列を返す。
例:
 4, 3, 1, 2
→ 1, 2, 3, 4

#実装コードと実行結果
実装したコードを以下に示します。最初に変数dataに代入されているリストが処理対象の数の列です。

###コード
“`python:bubble_sort.py
data = [4, 3, 1, 2]

print(“input :” + str(data))

data_len =

元記事を表示

【Python】Slackから1年間のメッセージ履歴を取得する

とある理由でslackから約1年間のメッセージ履歴を取得したのでPythonでの実装方法を書いておきます。
取得したメッセージを分析しやすいようにリフォーマットしたりしたのですが、いろいろまずいので全公開はできません。公開できそうな部分があればまた記事を書きたいと思います。

Pythonには[slackapi/python-slackclient](https://github.com/slackapi/python-slackclient)がありますが、今回は使用していません。python-slackclientを使った実装方法を知りたい方は本記事以外を読むことをオススメします。

# 環境
## 言語

– Python3.8

## 主な使用ライブラリ

– requests==2.23.0

## 開発補助用ライブラリ

– Pipenv
– mypy
– black
– flake8

# 実装

## Client

slackのtokenは環境変数から取得、またはmainスクリプトに直接記述できるようにインスタンス変数になっています。pipenvを使っていれば自動的に`

元記事を表示

AWS Lambda + Python + Slack でサイトの監視・アラート通知

運用中のサイトがたまに落ちていることがあったので、
簡易的にですがサイト監視を用意してみました。
(世の中にはサーバーのメトリクス取得含め手厚い監視サービスが様々ありますが、今回は低コストかつSlackとも簡単に連携できる方法という位置づけで作っています)

## サイトのstatusをチェックしてSlackに通知する
では、サイトチェックをするコードを書いていきます。
おおまかな流れとしては、指定されたURLのHTTP statusをチェックし、200以外のサイトがあれば、Slackに通知するというようになっています。
(逆に問題が無ければ、Slackには何も通知されません。テストの際には404ページのURLなどを含めてあげてください。)
全体は以下のようになります。

“`health_checker.py
# -*- coding: utf-8 -*-
import requests
import json

# 監視したいサイトのURLを配列で指定
urls = [‘https://www.rakuten.co.jp/’]

def post_slack_h(c):

元記事を表示

【Python】定期実行するLineBotを作成する

[前回](https://qiita.com/eito_2/items/7de2aca039f28f15e393)作成した、LineBotを使用し、定期的にメッセージを送れるようにします。

#定期実行するスケジュールを作成する

Herokuにスケジュールを追加します。

“`
heroku addons:add scheduler:standard
“`
Heroku Schedulerが追加されるので選択します。
![スクリーンショット 2020-03-17 0.06.56.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431502/59920209-5cfb-ca75-55a5-af83403e6e92.jpeg)

[Create job]を選択して新規スケジュールを作成します。
![スクリーンショット 2020-03-17 0.07.11.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431502/57

元記事を表示

【Python】QiitaのAPIでユーザー情報と記事情報を取得する

#この記事の目的
なんとなく、Qiitaの記事データを分析してみたくなったので、APIをさわってみました。
記事情報だけ取得できれば良いので、今回は認証の必要はないです。

大きく2つ試しました。
1.[ユーザー情報一覧の取得](#1ユーザー情報一覧の取得)
2.[特定ユーザーの記事一覧の取得](#2特定ユーザーの記事一覧の取得)

順に説明します。

# 準備

ライブラリを読み込んでおきます。

“`python
import numpy as np
import pandas as pd
import requests
import json
from pandas.io.json import json_normalize
“`
一番下の“`json_normalize“`というものは、APIで返ってきたjson形式のデータをpandasのデータフレームの形式に整形してくれる便利なやつです。

# 1.ユーザー情報一覧の取得
[Qiita API v2 ドキュメント](https://qiita.com/api/v2/docs#get-apiv2users)のサンプル

元記事を表示

【minimize入門】SEIRモデルでデータ解析する♬

COVID-19のデータ解析する準備として、以下のグラフを出力するまでの解説をする。
この図は、与えられたdataに対して感染症のSEIRモデルにminimize@scipyを利用してフィッティングした図である。
![SEIR_b6.88_ip1.22_gamma2.01_N762_E01_I00_R03.41_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233744/b2aba30f-0c17-7563-a2ff-de73ad23274b.png)
手法は、ほぼ以下の参考のとおりです。どちらもいろいろな意味で参考になりました。
【参考】
①[感染症数理モデル事始め PythonによるSEIRモデルの概要とパラメータ推定入門](https://qiita.com/Student-M/items/4e3e286bf08b7320b665)
②[感染病の数学予測モデル (SIRモデル):事例紹介(1)](https://qiita.com/kotai2003/items/d74583b588841e64

元記事を表示

LineNotifyを使ってメッセージ、画像を送信する

#LineNotifyを使って Fortniteの画像とメッセージを送ってみる。
まず、LINE Notifyのサイトでログインしてトークンを発行する。
https://notify-bot.line.me/ja/

・Mac
・python

(1)ディレクトリ構成
imagesの中に、gazo.jpegを保存。

“`
test
├test.py
└images
└gazo.img
“`

(2)test.pyを記述
コードは以下の通り。

“`.py:test.py
#coding:UTF-8
import requests,os

#——画像を送る場合—————————-
def main_gazo():
url = “https://notify-api.line.me/api/notify”
token = “*********************************”
headers = {“Authorization” : “Bearer “+ token}

messag

元記事を表示

OTHERカテゴリの最新記事