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

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

Python上でShellファイルを呼び出した後、CSVをParquetに変換する。

#全体的にやりたいこと
大量のCSVファイルをParquetに直す必要があるが、
そもそもCSVファイルのヘッダーにカラム名行が存在しないため、
・CSVファイルにヘッダー追加
・CSVをParquetに変換
この2ステップを行うツールを作成する必要がありました。

<<前提>>
CSVのヘッダーに追加するカラム名がParquetファイルの値に対するタイトルとなります。
もし、ヘッダー行が存在せず、いきなりデータが存在する場合、
出力したParquetファイルの各タイトルは、1行目のデータとなってしまいます。

##PythonからShellを呼び出す
CSVのヘッダー行を追加する処理はPythonでも書くことができましたが、
Shellで比較的簡単に追加可能だったので、
Shellで作成し、そのファイルをPythonから呼び出すようにしました。

“`python:qiita.py
import subprocess

# comment
cmd = ‘./add_header.sh’
subprocess.call(cmd, shell=True)
“`

subprocess

元記事を表示

全上場企業の過去5年間の決算情報をCSVファイルに変換

## はじめに
前回の記事では金融庁の[EDINET](http://disclosure.edinet-fsa.go.jp/)というサイトから得たXBRL形式のデータから決算書の情報を得る方法について書きました。

[XBRLから上場企業の決算書の情報を得る。](https://qiita.com/teatime77/items/3ed6d4cd27f6440e163a)

その後EDINETでは **EDINET API** というWebAPIが公開され自動でXBRLファイルをダウンロードできるようになりました。

今回は全上場企業の過去5年間のXBRLファイルをダウンロードして、CSVファイルに変換するプログラムを作ってみました。

処理結果のCSVファイルは以下にあります。
[http://lkzf.info/xbrl/data/summary-join.csv](http://lkzf.info/xbrl/data/summary-join.csv)
以下のように1行ごとに決算情報が書かれています。
決算の数値は連結決算の値です。
![集計.png](https://qiit

元記事を表示

インポートしたpythonモジュールのパスを通す

# インポートしたpythonのモジュールがインストールできない時に解決した方法
– 備忘録。なんだかわからんけどいろいろやったらできたのでその方法

1. vscodeでuser/.bash_profileを開く
2. ファイルの末尾に以下を追記
– パスはターミナルで“`pip3 show <モジュール名>“`で出てきた

“`
export PYTHONPATH=”/usr/local/lib/python3.7/site-packages”
“`
3. ターミナルで以下を実行

“`
source ~/.bash_profile
“`

前までviでやってみようとしたけどうまくいかず、仮想環境でいちいちインストールしていた初心者でした。

元記事を表示

【Kaggle】imbalanced-learn を使ってアンダーサンプリングをしてみた

# 0. はじめに

教師あり学習をするときにデータが不均衡なことってよくありますよね…
むしろ、均衡かつ多量に確保できるケースの方が少ないと思います。

今回は、そんなときのために **imbalanced-learn** という不均衡データのリサンプリングに役立ちそうなライブラリを紹介します。

主に、以下の記事を参考にさせて頂きました。

– [imbalanced-learnで不均衡なデータのunder-sampling/over-samplingを行う](https://ohke.hateblo.jp/entry/2017/08/18/230000)
– [Pythonでデータ分析:imbalanced-learnで不均衡データのサンプリングを行う](http://tekenuko.hatenablog.com/entry/2017/12/11/214522)

[公式ドキュメンテーション](https://imbalanced-learn.readthedocs.io/en/stable/)はこちらです。

# 1. imbalanced-learn のインストール

元記事を表示

言語処理100本ノック-57:係り受け解析

[言語処理100本ノック 2015](http://www.cl.ecei.tohoku.ac.jp/nlp100/)[「第6章: 英語テキストの処理」](http://www.cl.ecei.tohoku.ac.jp/nlp100/#ch6)の[57本目「係り受け解析」](http://www.cl.ecei.tohoku.ac.jp/nlp100/#sec57)記録です。
[「言語処理100本ノック-44:係り受け木の可視化」](https://qiita.com/FukuharaYohei/items/322447d75549f0d00f3c)でやった内容のStanford CoreNLP版ですね。かなりのコードを流用しています。

# 参考リンク

|リンク|備考|
|:–|:–|
|[057.係り受け解析.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%

元記事を表示

現役理系院生が研究で使用したPythonの可視化ツール全部まとめてみた[応用編1]

#前回の続きです
この記事はPythonの可視化ツールの応用編1です。
長くなってしまったので応用編は2つに分けることにしました。(応用編2はまだ執筆中です)
Pythonのplotに慣れていない方は基礎編を前回書きましたので[こちら](https://qiita.com/coffiego/items/52315ea45fcc6d83b5b9)をぜひ!
#はじめに
現在修士2年の大学院生です。
火星大気を数値シミュレーションを使って研究しています。
数値シミュレーションで得られた結果を主にPythonを使って解析していたので、その過程で使った関数などを全部まとめてみました。全てを網羅しているわけではありませんのでそこはご注意ください。。。
ただドキュメントを見て格闘して使ってきたので、これからもしPythonの可視化ツールを使う人いれば、その助けになればと思いまとめてみました!

#この記事でできること

#####・x軸を共有してy軸を右と左に設定する
#####・x軸は同じでグラフを縦に並べる
#####・アニメーション(gifファイル作成)

以下は応用編2(今度執筆します)

元記事を表示

Python(boto3)でDynamoDB上のデータを更新しようとすると「ExpressionAttributeNames contains invalid key: Syntax error; key: <キー名>」となる

## 事象

AWS上に以下のようなDynamoDBテーブルがある。

– テーブル名:`client_id_master`
– パーティションキー:`client-id`(str)
– アトリビュート:
– `device-time-stamp`(int)

今回、このテーブル上のデータの`device-time-stamp`列の値を、Python(boto3)から`update_item()`メソッドにより更新する以下のようなコードを作成した。

“`py
from datetime import datetime
import boto3

dynamodb = boto3.resource(‘dynamodb’)

now_unix_time = datetime.now().strftime(‘%s’)
clientId = ‘ef5b728f4a74aed’
option = {
‘Key’: {‘client-id’: clientId},
‘UpdateExpression’: ‘set #device-time-stamp = :timeStam

元記事を表示

awsで大容量zipファイルをBasic認証かけてダウンロードさせる仕組みを組んだ

# 記事内容を三行で

– EC2とフレームワークを利用してやろう
– サーバレスでは組めない(組めるけど容量制限でNG)
– API Gateway便利(難しい)

# 概要

容量が大きいファイルを共有するとき、メールではだいたい8MBを超えるとメールサーバなのでブロックされたりします。ブロックされてなくてもそもそも大容量のファイルをメールで送るにはサーバへ負荷を与えたりなど結構迷惑かなと思ったりします。なので、ストレージサービスを利用したいですが、Gigaファイル便だとセキュリティ規約で怒られそうだし(過去よく使ってましたが)、GoogleDriveはGoogleアカウントがないと共有に不安(URLを知っていないとアクセスできないとはいえ、全員がアクセスできる状態は厳しい)があります。

ほしいのは、一時的にID&パスをかけて、大容量ファイルをシェアできるURLがほしいだけなのに…(おわったら削除 or タイムリミット過ぎたら非公開になるとか)

そこで、最近awsのSAAに受かったことだし、復習もかねてawsで楽にファイル共有する仕組みできないかなとチャレンジしたのがこの記

元記事を表示

[python] BeautifulSoupとExcelの入出力を組み合わせてハンドル名(@123456のようなもの)からtwitterのアカウント名を集める話

## pythonでTwitterのアカウント名をスクレイピングしたい!!
上記のようなことを思ったために、少しだけそういうコードを作成してみたので共有しようと思います。
(今回はハンドル名がわかっている前提)

####スクレイピングにおける注意点
スクレイピングに関しては基本的に色々と規約を守らないといけないので
[こちらをお読みください](https://topcourt-law.com/internet_security/scraping-illegal)

相手のサーバー負荷に繋がることもあるので実行の際はくれぐれも慎重にお願いいたします。

####情報取得の流れ

エクセルの一列目にハンドル名を並べる

エクセルから情報を取得する

googleで検索する

そこから情報(アカウント名)を抜き取る

エクセルの三列目にアカウント名を並べる

このような流れでやっていこうと思います。

####必要なモジュールをインストールする
使っていくモジュールは4つ
1. Urlを取得するrequests
2. エクセルファイルの操作のopenpyxl
3. サイトのhtml

元記事を表示

Pythonでそれっぽいテストデータを作成する(前編)

Twitterでダミーデータ作成するPHP版の[Faker](https://github.com/fzaninotto/Faker)とやらをを教えて貰ったので、Pyhton版を探したら案の定あったのでインストールしてみました。

# インストール
“`
% pip install faker
% faker –version
faker 4.0.2
“`
# お試しデータ作成
“`make_fake_data.py
from faker.factory import Factory

Faker = Factory.create
fake = Faker()
fake.seed(0)
fake = Faker(“ja_JP”)

print(
fake.csv(
header=None,
data_columns=(“{{name}}”, “{{zipcode}}”, “{{address}}”, “{{phone_number}}”),
num_rows=10,
include_row_ids=Fals

元記事を表示

数独(SUDOKU、ナンプレ)を解きたい

# はじめに
実家の親父に久々に会ったらスマホアプリで数独を解いていたので。
Google Colaboratory でやっていきます。

# 挑戦する問題は?
「sudoku」でググると[こういうサイト](https://sudoku.com/)があるようなので、ここの問題を解くことを目標にします。
「Difficulty」を見ると以下の4レベルがあるようですね。

– Easy
– Medium
– Hard
– Expert

それぞれ1問ずつ解いてみます。

# 実装
## 問題
例えば以下の問題なら、、、
![easy.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296585/77156e7f-8864-158b-f24b-1d0ce16f5d1c.jpeg)

以下のように2次元リストで表現することにします。
ちなみにこの問題は難易度が easy の例ですね。

“`python:sudoku.ipynb
# easy
list_sudoku = [
[0, 4, 8, 0, 9, 0

元記事を表示

pythonドキュメント読み HowTo ディスクリプタ

https://docs.python.org/ja/3/howto/descriptor.html
こちらを読んだ際のメモです。
読んでいるときの脳内をダンプしたものなので、単純に内容を知りたい方は直接ドキュメントを読むことをおすすめします。
python3.8.2

# なぜドキュメントを読んでいるか
– ここらでドキュメントを読んで、知らないだけで実は使うと便利な機能を知っておきたい
– pythonを使い始めてかれこれ8年ほどになるが、雰囲気でやっているので未だに知らない機能がある
– pythonではinner classからouter classが見えない
– https://blog.hirokiky.org/entry/2013/12/25/000000
– しかし、ディスクリプタを変えると見えるように出来る
– 上記のブログで言及されていたstackoverflow: https://stackoverflow.com/questions/2278426/inner-classes-how-can-i-get-the-outer

元記事を表示

【python】datetimeモジュールのクラス種類と使い方

#【備忘録】pythonのdatetimeモジュールのクラス種類と使い方

pythonのdatetimeモジュールで利用できるクラスの種類と違いを実例で確認する。

[公式サイト](https://docs.python.org/ja/3/library/datetime.html#datetime.datetime)

##クラスの種類

6種類のクラス(データ型)が用意されている

1. `datetime.date`:日付(年、月、日)
2. `datetime.time`:時刻(時、分、秒、マイクロ秒)
3. `datetime.datetime`:日付+時刻
4. `datetime.timedelta`:時間差分
5. `datetime.timezone`:タイムゾーンの設定
6. `datetime.tzinfo`:タイムゾーン情報

##各クラスの中身
###0. 補足条件
datetimeモジュールはdtとして呼び出す。

“`python:datetimeモジュールの呼び出し
import datetime as dt
“`

▼実際の使用例
`dat

元記事を表示

Spotify APIを使ってアプリケーションを作ろう

# はじめに
サブスクリプションモデル系はデータが豊富になりやすい(使い放題だから使う)と思っています。
私の場合は最近、音楽をものすごく聞くため、Spotify APIを使用すると面白いかなと思いました。

なので、今回はSpotify APIを使用して何かアプリケーションを作ってみます。

# アプリケーションを登録しよう
https://developer.spotify.com/dashboard/

ここから登録可能です。
すでにアカウントがあればそれでログインすればすぐ使えるようになります。

登録中に商用利用するかというのも聞かれますので、正確に答えましょう。
アプリケーションを作成したら、`EDIT SETTINGS`からOAuthの情報を入力可能となります。
Webだったりスマホだったり色々と選択肢があります。
自分に合ったものを登録しましょう。

今回は後述しますが、厳密にWebサービスから叩くわけではないため、適当なURLを設定しています。

# 認証周りを作る
https://developer.spotify.com/documentation/general

元記事を表示

Click(Python) のサブコマンドをファイルを分割して実装する

Python の Click、結構便利で簡単に CLI ツールが作れて LGTM ですね(← 使い方あってる?)。
その Click を使ってサブコマンドを実装するときに、ファイルを分割して実装するのに少々苦戦したので、そのことについて適当な例を使って実装の流れを書いてみようと思う。
間違いの指摘や、ここもっとこうした方がいいよ等の助言がありましたら、コメント頂けると幸いです。

ちなみに、サブコマンドを複数ファイルに分割して実装しようと思ったのは、「関心事は分離してそれぞれのファイルに分けた方が良いかなぁ」と思ったからである。

## TL;DR

“`py:subcmd.py
@click.command()
def cmd():
pass
“`

“`py:cmd.py
from subcmd import cmd as subcmd

@click.group()
def cmd():
pass

cmd.add_command(subcmd)
“`

## バージョン

* Python: 3.8.0
* Click: 7.0

## サンプルとして実

元記事を表示

【競プロ】挟んだ部分をひっくり返して●○●●○○○●→○○○○○○○○にするアルゴリズム(JSC2019-C Cell Inversion)【図で解説】

[もう数え上げも怖くない ~競プロ数え上げ問題35選~ – Qiita](https://qiita.com/Rho/items/1e0f72cf7e1cbc28a51a)の記事で紹介されていた問題のうち1つが面白そうだったので解いてみました。ちなみに問題を解きながら考えたことを含めて書いたため、最短で解にたどり着いていません。最短&最良の解を見たい場合は問題文のページから模範解答がリンクされていますのでそちらをご覧ください。

# 問題

$2N$ 個のマスが左右一列に並んでおり、各マスの色を表す長さ $2N$ の文字列 $S$ が与えられます。
左から $i$ 番目のマスの色は、 $S$ の $i$ 文字目が’B’のとき黒色で’W’のとき白色です。
あなたは異なる $2$ マスを選んで、それらのマスおよびそれらの間にあるマスの色を反転する操作をちょうど $N$ 回行います。 ここで、マスの色を反転するとは、そのマスの色が黒色なら白色に、白色なら黒色にすることです。
ただし、操作を通して同じマスを $2$ 回以上選ぶことはできません。 つまり、各マスがちょうど $1$ 回ずつ選ばれる

元記事を表示

[Python]台風の経路をfoliumを使って地図上に書いてみた

# 記事の内容
子供の頃に台風ってこんなに頻繁に発生してたっけ?とか10月ぐらいに台風って日本に来てたっけ?という漠然とした疑問がありました。
気象庁が公開している台風に関するデータを使ってこのあたりの疑問を解決出来たらないいなと思い、色々やってみました。

# データ取得元
政府が運営しているデータカタログサイトから取得しました。

[データカタログサイト](https://www.data.go.jp/)

[気象予報_天気予報・台風の資料](https://www.data.go.jp/data/dataset/mlit_20140919_0747)
このページの「台風位置表のCSVデータ」を使用します。

この記事ではリンク先に掲載されている2001年から2019年までのCSVデータを使用しました。

# foliumを使って台風の経路を地図上に書いてみる
## 準備
CSVデータのヘッダーが日本語だったので英語に変えました。だいぶ適当です

~~~
year,month,day,hour(UTC),typhoon_no,typhoon_name,rank,latitude,l

元記事を表示

Databricks

Databricks とは、大量のデータを並列に処理するアプリを作るためのサービスだ。Apache Spark の開発者によって Apache Spark のマネージド・サービスとして開発された。ここ数日勉強しているが特に引っかかった点を書く。

一言でいうと Apache Spark とは、表形式のデータを加工するコードを自動的に並列処理に変換して並列で実行してくれるという物だ。開発者があたかも Jupyter 上の Pandas でコードを書いているような気分で巨大データを並列に加工出来る。機械学習関のライブラリも含まれているので、データの前処理から分析や予測まですべて Spark で行う事が出来る。

また、前身の(?) Hadoop との違いは、ストレージを切り離した所にある。Spark はデータ処理に特化してする事で様々な他のストレージと組み合わせて使えるようになった。

## 主な情報源

* Databricks ドキュメント: https://docs.databricks.com/
* 参考書: Spark: The Definitive Guide http://s

元記事を表示

PDFファイルを画像解析してデータ抽出した話

## はじめに
今話題のオープンデータですが、必ずしもCSVなどの生データではない事で、微妙に扱いにくいデータに仕上がっている事があります。
保有しているデータを新たに出している事自体は当然褒められるべき事で、「ほんとだったら生データ欲しいなァ〜」くらいの気持ちで期待している訳ですね。
そんな訳で、PDFで出したから悪いわけではありません、が、データの活用に際しては、PDFではなくより機械で読みやすい形式にする必要があります。
今回は、札幌市交通局が公開した[朝ラッシュ時間帯の車内混雑状況について](https://www.city.sapporo.jp/st/konzatsu_jokyo2020.html)のPDFデータを題材に、CSVデータを錬成する手順を紹介してみます。

## 方針
上記ウェブサイトで得られるPDFファイルはこのような書式です
![スクリーンショット 2020-03-18 21.38.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73197/cb5b7d47-015a-b1

元記事を表示

SympyでC言語を書く(メタプログラミング)

# はじめに

**メタプログラミング**とは
> **メタプログラミング** (metaprogramming) とは[プログラミング](https://ja.wikipedia.org/wiki/プログラミング_(コンピュータ))技法の一種で、ロジックを直接コーディングするのではなく、あるパターンをもったロジックを生成する高位ロジックによってプログラミングを行う方法

出展 : [wikipedia](https://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%BF%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)

要するに、**コードを生成するコードを書いて複雑なコードを書いちゃいましょう!**ってこと(だと私は解釈しています。間違っていたら教えてください)。

# 概要

**Pythonの記号計算用ライブラリである[Sympy](https://www.sympy.org/en/index.html)を使って数式を生成し、C言語にコンバートします。**Symp

元記事を表示

OTHERカテゴリの最新記事