データアナリストのメモ帳

データアナリストのメモ帳

IT企業で働くデータアナリストのブログ

中心極限定理の気持ちをPythonで表現してみる

中心極限定理の気持ちをPythonで書いてみます。 中心極限定理とは、独立同分布に従う確率変数列の部分和は正規分布に分布収束するという定理です。 言い換えると、標本サイズが大きくなるに従って、標本平均は正規分布に近づくと解釈できます。 ここで、サイ…

【Python】NetworkXで友達の友達を可視化する方法

NetworkXを使ってSNSの分析をするときに便利かもしれない。 誰かの友達の友達をリストアップして可視化する方法です。 やり方は簡単で、最短経路長が2の人(1は友達)を探してくれば良いわけです。 例として、Zacharyの空手クラブを用います。 import networ…

【Python】pandasでLAG / LEAD OVER PARTITION BY したいとき【SQL】

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月号より)

ここでは、経済セミナー 2020年12月・2021年1月号に掲載のあった「中心性を使った感染症の制御(小蔵正輝)」という記事を、実際にPythonで(NetworkXを使って)コードを書きながら解説します。 www.nippyo.co.jp 以下で説明するような問題設定下においては…

【NetworkX】Girvan–Newmanアルゴリズムでコミュニティを抽出(台北MRTを例にして)

この記事では、NetworkXを使ったネットワークの中のコミュニティ抽出の手法を、台北の地下鉄を例にして解説します。 実際に分割されたコミュニティの可視化についてもコードを載せておきます。 Girvan–Newmanアルゴリズムとは? Girvan–Newmanアルゴリズムは…

pageviewapiを使ってWikipediaの記事のPV数をDailyで取得する(トレンド把握に便利!)

pageviewapiというWikipediaの任意の記事のPV数を取得するAPIを使って見たいと思います。 WikipediaのどんなページのPV数でも一気に調べられます。 これは何に便利かというと、知りたい事柄(例えば有名人、企業、地名など)がどの程度世間から関心を持たれ…

【Python】pandasのgroupbyで複数の統計量(平均、中央値など)を同時に取る

pandasでgroupbyを使って集計をする際に、この量に関しては平均を、また別の量については中央値を取りたい場合などに使える方法です。 まず、DataFrameを定義します。 男女の身長と体重が記録されているとしましょう。 import pandas as pd sample_df = pd.D…

【NetworkX】ネットワークの中の最大の連結成分を取り出す【Python】

networkxを使って遊んでみます。 下の図のようなネットワーク(グラフ)が与えられたとき、この中の最大の連結成分を取り出します。 見ての通り、{4, 5, 6, 7, 8}が最大の連結成分になります。 まずは、ネットワークを描画してみます。 import networkx as n…

【SQL】BigQueryで月末の日付を取得する

SQL

SQLで月末の日付を知りたい時の処理です。 2021-05-21 を 2021-05-31にしたいということですね。 DATE_TRUNC と DATE_ADD と DATE_SUB を使うというだけなんですが、一応やり方を残しておきます。 SELECT DATE_SUB(DATE_ADD(DATE_TRUNC('2021-05-21', MONTH)…

【Python】OpenCVでGoogle Driveにある画像ファイルを読み込む&表示する方法

画像処理で遊びたくなったので、画像を読み込んで表示する方法を備忘録的に残しておきます。 OpenCVを使います。 まずは、OpenCVやNupmy、Matplotlibなどをimportして、さらにGoogle Driveをマウントしておきます。 import cv2 import matplotlib.pyplot as …

【Python/Colab】FFmpegでmp4ファイルを1秒ごとに画像化する

動画を1秒ずつ画像ファイルにしていく方法です。(0.5秒ごとでも0.1秒ごとでも可能です) ここでは、Google Colab上で、mp4をjpgに変換します。 まずはGoogle Driveにある動画ファイルにアクセスするために、Google Driveをマウントします。 # Google Drive…

【Pandas】DataFrameのcolumn名を一括で変更する

PandasのDataFrameの列名を一括で変更する方法です。 df.columns = [リスト] とすれば一括で変えられます! 例を見てみましょう。 import pandas as pd import numpy as np # 適当なDataFrameを作る df = pd.DataFrame({ 'col1': 1, 'col2': np.random.rando…

SpotifyのAPIでミスチルの関連アーティストを調べてみた【Python】

SpotifyのAPIを使うと任意のアーティストの関連アーティストを取得できます。 Spotify APIの使い方は前回の記事で詳しく説明してるので、ぜひ読んでみてください! 前回の記事: k2-tech.hatenablog.com ミスチルの関連アーティスト20組は誰だ? 関連アーテ…

【SQL】STRING_AGGで文字列をGROUP BYしてカンマでつなげる【BigQuery】

SQL

複数行にまたがる文字列のレコードを、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タイムスタンプを日付に直す方法

SQL

SQLでUNIX時間をタイムスタンプや日付に変換する方法です。 UNIXタイムスタンプとは、1970年1月1日午前0時0分0秒(UTC)からの経過秒数(整数)のことですね。 TIMESTAMP_SECONDS()やDATE()使うことで、UTCタイムスタンプや日付に変換できます。 SELECT TIME…

Cloud Functionsを定期実行してBigQueryにデータを流す【GCP/Python】

GCP

GCPのCloud Schedulerを用いて、Cloud Functionsを定期実行してみます。 また、Cloud FunctionsではデータをBigQueryにインサートする処理をPythonで書きます。 この一連の処理を応用すれば、「Pythonを用いてあるサイトからスクレイピングして得られたデー…

【Python】パッケージ(ライブラリ)のバージョンを確認する

スクリプト内で、ライブラリのバージョンを確認する方法です。 pandasで試してみましょう。 import pandas as pd pd.__version__ # 1.1.5

BigQueryでローカルのCSVファイルをアップロードする方法

GCP

BigQueryにローカルのCSVファイルをアップロードする方法です。 手元のCSVファイルをBigQueryにぶち込んで分析したり可視化したいって時におすすめです。 1. 前提 Google Cloud プロジェクトが選択されていること BigQuery API が有効になっていること 2. Bi…

【Python】現在のディレクトリを変更する方法

osモジュールを使って、現在のディレクトリを変更する方法です。 import os # ディレクトリ変更 os.chdir('/Users/username/downloads/dirname') また、現在のディレクトリを確認する方法は以下です。 os.getcwd() 【お知らせ】 データアナリストのキャリア…

【Python/glob】フォルダ内の複数のCSVファイルを一括で読み込んで縦に連結させる方法【業務効率化】

Pythonを使って簡単に業務効率化しましょう! globモジュールを使って、ディレクトリ内にある複数のCSVファイルを一括で読み込み、さらにそれらを縦に結合させる方法です。 例えば、あるフォルダに、何かのログがCSVとして毎日吐き出されるような場合に使え…

【SQL】BigQueryでモンテカルロ法を用いて円周率の近似計算をする

SQL

BigQueryで2つの乱数を生成して円周率の近似値を求める方法です。 実用性は無いと思いますが、練習問題にはなるかもしれないですね。 WITH RandomValue AS ( SELECT num, RAND() AS rand1, RAND() AS rand2, FROM UNNEST(GENERATE_ARRAY(1, 1000000)) AS num…

【SQL】BigQueryで素数の列を生成してみる

SQL

暇だったので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を使えばExcelの集計作業を代替できてしかも速い!

今回はR言語のdplyrの紹介です。 表計算をするなら使いたいパッケージ、それがdplyrです。 項目ごとの集計(Excelで言うsumif的なもの) ユニークカウント Excelで言うVLOOKUPをLEFT JOINで行う などなど・・・dplyrを身につければExcel要らず!になれるはず…

【Python】フォルダ内のCSVファイルを一括で読み込み縦につなげる方法

Pythonでディレクトリ内のCSVファイルを一気に読み込んで、かつそれらを連結させる方法です。 CSVでログが吐かれている場合など、この方法を使えば一発ですね。 Excelで消耗している方は是非トライしてみてください。流れはこんな感じです。 読み込みたいフ…

【SQL】BigQueryで日付の列を生成する方法

SQL

指定した日付から本日までの日付の列を生成する方法です。 日付が歯抜けになっているテーブルとJOINしたいときや、日付のマスタを作る際に使えそうです。 ▼Query -- 指定した日付から本日までの日付の列を生成する WITH DateRange AS( SELECT jpDate FROM UN…

【Python】kaggleで使えるDataFrameのメモリを減らす関数

pandasで重たいデータを扱う際にマストな関数です! 初参加したkaggleのコンペ「ASHRAE - Great Energy Predictor III」の公開カーネルで使用されていたので、自分もkaggleや仕事で積極的に使っています。 特に、ASHRAEは扱うデータが大きかったので、重宝し…

【Python】SpotifyのAPIを使ってaikoの人気曲とアルバムを取得する

SpotifyのAPIを使うと、色々と楽しそうなことができるみたいなので試してみます。 この記事では、以下の2つを解説します。 アーティストの人気曲の取得 アーティストのアルバムの取得 とりあえず、自分の好きなaikoとPUFFYとMayday(台湾のアーティスト)の…

【Python】pandas.date_rangeで連続した日付の列を取得する

任意の期間の日付の列を生成したいときに使います。 1月1日から丸一年分の日付が欲しいときや、ある1週間の日付が欲しいときに重宝します。 # 連続した日付の列を取得 pd.date_range('2020-01-01', periods=7, freq='D') periodsで期間の長さを指定、freqで…

【Python】リスト内包表記でDataFrameの列名を一括変更する

DataFrameの列名を一括で変更する方法です。 df.rename(columns = {'col_name1': 'col_name2'}) とするよりも簡単で便利かもしれません。 例えば、以下の画像のような、dayと数字の間にあるアンダースコア"_"を取り除きたい場合など。 リスト内包表記を使え…

【R言語】decomposeで時系列データの要素を分解してみる

Rで時系列データを手軽に分析したいなってときにdecomposeをよく使うのですが、 その方法を簡単に説明します。 decompose関数は、時系列データを ・tread ・seasonal ・random の3つに分解してくれます。 トレンドと季節性を分解してくれるので、例えば季節…