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

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

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

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

任意の期間の日付の列を生成したいときに使います。 1月1日から丸一年分の日付が欲しいときや、ある1週間の日付が欲しいときに重宝します。

# 連続した日付の列を取得
pd.date_range('2020-01-01', periods=7, freq='D')

periodsで期間の長さを指定、freqでどの単位(頻度)で取得するのかを指定します。 "D"なら日毎、"H"なら1時間ごと、"Q"なら四半期ごと、というように指定できます。

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

DataFrameの列名を一括で変更する方法です。

df.rename(columns = {'col_name1': 'col_name2'})

とするよりも簡単で便利かもしれません。

例えば、以下の画像のような、dayと数字の間にあるアンダースコア"_"を取り除きたい場合など。 DataFrame列名一括変更

リスト内包表記を使えば一括で変更できます。

# 列名を変更
df.columns = [col.replace('_', '') for col in df.columns]

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

Rで時系列データを手軽に分析したいなってときにdecomposeをよく使うのですが、 その方法を簡単に説明します。

decompose関数は、時系列データを

・tread ・seasonal ・random

の3つに分解してくれます。 トレンドと季節性を分解してくれるので、例えば季節の影響なく売上が伸びているのか(減っているのか)を調べる時に使えそうだなと。

ただ、このdecomposeが中でどういう処理をしているのかはよく知らないので、 ちゃんと勉強しないとですね・・・

データはAirPassengersを用いました。

ダウンロードはこちら: https://www.kaggle.com/rakannimer/air-passengers/data

data <- read.csv('airpassengers.csv')
ts.d <- ts(data$X.Passengers, frequency = 12)
decomposed.ts.d <- decompose(ts.d)
plot(decomposed.ts.d)

1年単位で周期しているだろうと思いfrequency = 12と指定しました(月単位でデータが格納されているので)。

たった4行で書けるので、手軽!

▼plotした結果 R decompose

けれど、Random項がランダムじゃないっぽい波形をしているので、このモデルでは不十分そうなことがわかります。

もっと詳しくやるなら、やはりこの本からですかね。 ARモデルが詳しく解説されています。

【R言語】現在のディレクトリを変更する方法(RStudio)

基本的なところですが、R言語を勉強し始めた初期につまずいていたので共有します。 私の場合、Rの初心者どころかプログラミング初心者だったということもありますが・・・

setwd("~/フォルダ名")

これだけです。

あるいは、 Session → Set Working Directory → Choose Directory...

Rでディレクトリ変更

これで、ディレクトリ変更ができます。

【お知らせ】
データアナリストのキャリアや年収についてのブログを書いています。
ご興味のある方は、以下のリンクからどうぞ。 dataaanalytics.com

【R言語】フォルダ内のすべてのCSVファイルを一括で取り込み結合する方法

Excelでやると日が暮れてしまうような作業を一発で終わらせる方法です。 複数のCSVファイルをくっつける作業はRで自動化しましょう。

Rで次のように書けば、指定したフォルダ内のすべてのCSVファイルを読み込んで、縦にくっつけてくれます。

#dataというディレクトリをワーキングディレクトリに設定
setwd("~/data")

#ディレクトリ内の名前が.csvで終わるファイル名を取得
csv_list <- list.files(pattern = "*.csv")

#リスト内に名前のあるCSVファイルをすべて読み込んで縦にくっつける
data <- do.call(rbind, lapply(csv_list, function(x) read.csv(x, header=TRUE, stringsAsFactors = FALSE)))

不毛な作業はRで効率化を!

【Python】pandas.meltで横持ちのデータを縦持ちにする

pandas.meltで横持ちのDataFrameを縦に変換する方法です。 DataFrameの列に日付が並んでいる(左から右へday1, day2, ...となる)場合などに有効です。

例えば、次の画像のようなデータを、 pandas.meltの使い方

このように列として持っていた日付を縦に並べます。 pandas.meltの使い方

id_varsで、ID等として使う列を指定します。(この列は元々縦持ちであると想定) var_nameは縦持ちにした変数の列名を、value_nameは縦持ちにした値の列名を指定します。

※id_varsで指定しなかった列はすべて縦持ちに変換されます。

# import modules
import pandas as pd
import numpy as np

# DataFrameの定義
df = pd.DataFrame()
df['id'] = ['id_' + str(i) for i in range(0, 10)] * 100
cols = ['day' + str(i) for i in range(1, 8)]
for col in cols:
    df[col] = np.random.rand(1000)

# pd.melt で 元の DataFrameを変換
pd.melt(df, id_vars = ['id'], var_name = 'day', value_name = 'value')

pandas.melt reference https://pandas.pydata.org/docs/reference/api/pandas.melt.html