中心極限定理の気持ちをPythonで書いてみます。 中心極限定理とは、独立同分布に従う確率変数列の部分和は正規分布に分布収束するという定理です。 言い換えると、標本サイズが大きくなるに従って、標本平均は正規分布に近づくと解釈できます。 ここで、サイ…
NetworkXを使ってSNSの分析をするときに便利かもしれない。 誰かの友達の友達をリストアップして可視化する方法です。 やり方は簡単で、最短経路長が2の人(1は友達)を探してくれば良いわけです。 例として、Zacharyの空手クラブを用います。 import networ…
SQL書きすぎてるとpandasの書き方わからなくなる。 pandasでSQLの LAG(value) OVER(PARTITION BY class ORDER BY value) のような処理をどうやって書くのか? groupbyとshiftを使えば一発です。LEAD()の場合はshift(-1)でOK。 import pandas as pd df = pd.D…
ここでは、経済セミナー 2020年12月・2021年1月号に掲載のあった「中心性を使った感染症の制御(小蔵正輝)」という記事を、実際にPythonで(NetworkXを使って)コードを書きながら解説します。 www.nippyo.co.jp 以下で説明するような問題設定下においては…
この記事では、NetworkXを使ったネットワークの中のコミュニティ抽出の手法を、台北の地下鉄を例にして解説します。 実際に分割されたコミュニティの可視化についてもコードを載せておきます。 Girvan–Newmanアルゴリズムとは? Girvan–Newmanアルゴリズムは…
pageviewapiというWikipediaの任意の記事のPV数を取得するAPIを使って見たいと思います。 WikipediaのどんなページのPV数でも一気に調べられます。 これは何に便利かというと、知りたい事柄(例えば有名人、企業、地名など)がどの程度世間から関心を持たれ…
pandasでgroupbyを使って集計をする際に、この量に関しては平均を、また別の量については中央値を取りたい場合などに使える方法です。 まず、DataFrameを定義します。 男女の身長と体重が記録されているとしましょう。 import pandas as pd sample_df = pd.D…
networkxを使って遊んでみます。 下の図のようなネットワーク(グラフ)が与えられたとき、この中の最大の連結成分を取り出します。 見ての通り、{4, 5, 6, 7, 8}が最大の連結成分になります。 まずは、ネットワークを描画してみます。 import networkx as n…
SQLで月末の日付を知りたい時の処理です。 2021-05-21 を 2021-05-31にしたいということですね。 DATE_TRUNC と DATE_ADD と DATE_SUB を使うというだけなんですが、一応やり方を残しておきます。 SELECT DATE_SUB(DATE_ADD(DATE_TRUNC('2021-05-21', MONTH)…
画像処理で遊びたくなったので、画像を読み込んで表示する方法を備忘録的に残しておきます。 OpenCVを使います。 まずは、OpenCVやNupmy、Matplotlibなどをimportして、さらにGoogle Driveをマウントしておきます。 import cv2 import matplotlib.pyplot as …
動画を1秒ずつ画像ファイルにしていく方法です。(0.5秒ごとでも0.1秒ごとでも可能です) ここでは、Google Colab上で、mp4をjpgに変換します。 まずはGoogle Driveにある動画ファイルにアクセスするために、Google Driveをマウントします。 # Google Drive…
PandasのDataFrameの列名を一括で変更する方法です。 df.columns = [リスト] とすれば一括で変えられます! 例を見てみましょう。 import pandas as pd import numpy as np # 適当なDataFrameを作る df = pd.DataFrame({ 'col1': 1, 'col2': np.random.rando…
SpotifyのAPIを使うと任意のアーティストの関連アーティストを取得できます。 Spotify APIの使い方は前回の記事で詳しく説明してるので、ぜひ読んでみてください! 前回の記事: k2-tech.hatenablog.com ミスチルの関連アーティスト20組は誰だ? 関連アーテ…
複数行にまたがる文字列のレコードを、GROUP BYで1行にまとめる方法です。 文字列をひとまとめにしたい時に便利です。 STRING_AGGを使います。 SELECT gender, STRING_AGG(name, ', ') AS names FROM UNNEST(ARRAY<STRUCT<gender STRING, name STRING>> [ ('male', 'taro'), ('male', 'jiro'), (</struct<gender>…
SQLでUNIX時間をタイムスタンプや日付に変換する方法です。 UNIXタイムスタンプとは、1970年1月1日午前0時0分0秒(UTC)からの経過秒数(整数)のことですね。 TIMESTAMP_SECONDS()やDATE()使うことで、UTCタイムスタンプや日付に変換できます。 SELECT TIME…
GCPのCloud Schedulerを用いて、Cloud Functionsを定期実行してみます。 また、Cloud FunctionsではデータをBigQueryにインサートする処理をPythonで書きます。 この一連の処理を応用すれば、「Pythonを用いてあるサイトからスクレイピングして得られたデー…
スクリプト内で、ライブラリのバージョンを確認する方法です。 pandasで試してみましょう。 import pandas as pd pd.__version__ # 1.1.5
BigQueryにローカルのCSVファイルをアップロードする方法です。 手元のCSVファイルをBigQueryにぶち込んで分析したり可視化したいって時におすすめです。 1. 前提 Google Cloud プロジェクトが選択されていること BigQuery API が有効になっていること 2. Bi…
osモジュールを使って、現在のディレクトリを変更する方法です。 import os # ディレクトリ変更 os.chdir('/Users/username/downloads/dirname') また、現在のディレクトリを確認する方法は以下です。 os.getcwd() 【お知らせ】 データアナリストのキャリア…
Pythonを使って簡単に業務効率化しましょう! globモジュールを使って、ディレクトリ内にある複数のCSVファイルを一括で読み込み、さらにそれらを縦に結合させる方法です。 例えば、あるフォルダに、何かのログがCSVとして毎日吐き出されるような場合に使え…
BigQueryで2つの乱数を生成して円周率の近似値を求める方法です。 実用性は無いと思いますが、練習問題にはなるかもしれないですね。 WITH RandomValue AS ( SELECT num, RAND() AS rand1, RAND() AS rand2, FROM UNNEST(GENERATE_ARRAY(1, 1000000)) AS num…
暇だったのでBigQueryで1000以下の素数の列を作りました。 素数の列がほしい時に使ってください。 NOT EXISTを使うのがポイントです! WITH Numbers AS ( SELECT num FROM UNNEST(GENERATE_ARRAY(1, 1000)) AS num ORDER BY num) SELECT N1.num AS primeNumb…
今回はR言語のdplyrの紹介です。 表計算をするなら使いたいパッケージ、それがdplyrです。 項目ごとの集計(Excelで言うsumif的なもの) ユニークカウント Excelで言うVLOOKUPをLEFT JOINで行う などなど・・・dplyrを身につければExcel要らず!になれるはず…
Pythonでディレクトリ内のCSVファイルを一気に読み込んで、かつそれらを連結させる方法です。 CSVでログが吐かれている場合など、この方法を使えば一発ですね。 Excelで消耗している方は是非トライしてみてください。流れはこんな感じです。 読み込みたいフ…
指定した日付から本日までの日付の列を生成する方法です。 日付が歯抜けになっているテーブルとJOINしたいときや、日付のマスタを作る際に使えそうです。 ▼Query -- 指定した日付から本日までの日付の列を生成する WITH DateRange AS( SELECT jpDate FROM UN…
pandasで重たいデータを扱う際にマストな関数です! 初参加したkaggleのコンペ「ASHRAE - Great Energy Predictor III」の公開カーネルで使用されていたので、自分もkaggleや仕事で積極的に使っています。 特に、ASHRAEは扱うデータが大きかったので、重宝し…
SpotifyのAPIを使うと、色々と楽しそうなことができるみたいなので試してみます。 この記事では、以下の2つを解説します。 アーティストの人気曲の取得 アーティストのアルバムの取得 とりあえず、自分の好きなaikoとPUFFYとMayday(台湾のアーティスト)の…
任意の期間の日付の列を生成したいときに使います。 1月1日から丸一年分の日付が欲しいときや、ある1週間の日付が欲しいときに重宝します。 # 連続した日付の列を取得 pd.date_range('2020-01-01', periods=7, freq='D') periodsで期間の長さを指定、freqで…
DataFrameの列名を一括で変更する方法です。 df.rename(columns = {'col_name1': 'col_name2'}) とするよりも簡単で便利かもしれません。 例えば、以下の画像のような、dayと数字の間にあるアンダースコア"_"を取り除きたい場合など。 リスト内包表記を使え…
Rで時系列データを手軽に分析したいなってときにdecomposeをよく使うのですが、 その方法を簡単に説明します。 decompose関数は、時系列データを ・tread ・seasonal ・random の3つに分解してくれます。 トレンドと季節性を分解してくれるので、例えば季節…