エクセルなしでガントチャート作成(feat. R & 賃貸借契約更新)
住宅賃貸借保護法で定めている契約更新と解約に関する日付をテキストだけで把握するのは容易ではありません。 ガントチャートエクセルを利用することもありますが、もっと簡単な方法があります。ガントチャート作成ソースコードをコピー&実行するだけです。
この記事では、Rを使用して賃貸借契約の更新と解約のスケジュールを視覚化する方法を説明します。 2021年2月3日に2年契約を締結した後、2021年2月3日 黙示的更新で契約が延長された場合を想定してみました。 さらに、家主と借主がそれぞれどのタイミングで更新拒否の通知をする必要があるかを視覚的に表示してみました。 この記事を見れば、重要な日付を明確に把握することができるはずです。

エクセルなしでガントチャートを作成する
視覚化したい賃貸借契約スケジュールは以下の通りです。
- 2021年2月3日:契約開始
- 2023年2月2日:契約終了
- 2022年8月3日~2022年12月2日:家主/借主が更新拒否の通知をしなければならない期間
- 2023年5月1日:黙示的更新後、テナント事由による契約解除の通知
- 2023年8月1日: 契約終了と保証金払い戻し
2021年2月3日に2年間の全世界契約をする場合、家主に法的に認められる事由が発生した場合、契約終了日(2023年2月2日)以前に 6ヶ月間である2022年8月3日から契約終了日前まで 2ヶ月である2022年12月2日までに更新拒否の通知をする必要があります。 家主と借主は、個人的な事情で引っ越しをしなければならない場合、契約終了日以前には 2ヶ月である2022年12月2日までに更新拒否の通知をする必要があります。
このような状況で、黙示的な更新で全世界契約が2年延長されたと仮定すると、2023年5月1日にテナントの都合で契約解除の通知を2023年5月1日に行った場合、家主は通知を受けた日から3ヶ月後の2023年8月1日に敷金を払わなければなりません。
では、この複雑なスケジュールについて、Rを使って視覚化してみましょう。
ガントチャートエクセルなしで作るRコードの説明
まず、必要なパッケージをインストールしてロードします。
if (!require(ggplot2)) install.packages("ggplot2")
if (!require(dplyr)) install.packages("dplyr")
library(ggplot2)
library(dplyr)データフレーム生成
可視化するデータをデータフレームとして作成します。 各期間と開始日と終了日を含むデータフレームを作成します。
df <- data.frame(
Task = c("初期契約期間", "家主通知可能期間", "テナント通知可能期間"、
"更新契約期間", "通知後3ヶ月")、
Start = as.Date(c("2021-02-03", "2022-08-03", "2022-08-03"、
"2023-02-03", "2023-05-01"))、
End = as.Date(c("2023-02-02", "2022-12-02", "2022-12-02"、
"2025-02-02", "2023-07-30")))、
Section = c("初期契約", "更新拒否通知", "更新拒否通知"、
"更新契約", "契約解除")
)重要な日付データフレームの作成
重要な日付をデータフレームに作成します。上記で作成したデータフレームは枠組みを作るためのデータであり、ここに出てくる日付はチャートに点線と日付ラベルを表示するために必要なものです。
important_dates <- as.Date(c("2021-02-03", "2023-02-02", "2022-08-03", "2022-12-02"、
"2023-01-02", "2023-02-03", "2025-02-02"、
"2023-05-01", "2023-08-01")))
important_dates <- sort(important_dates)日付ラベル位置調整機能の改善
日付ラベルが重ならないように位置を調整する関数を定義します。この部分が難しい部分ですが、表示したい日付ラベルが近すぎると重なりすぎて識別が難しいので、7日以内に近い日付を確認して上下に分離する機能を実装します。
adjust_label_position <- function(dates) {
n <- length(dates)
positions <- rep(0, n)
last_position <- 0
for (i in 2:n) {
if (as.numeric(dates[i] - dates[i-1]) <= 7) { # 7日以内に近い日付を確認する
positions[i] <- (last_position + 1) %% % 2 # 以前の位置によって上下交互に移動する
last_position <- positions[i]
} else { } else
last_position <- 0
}
} }
return(positions)
} }日付ラベル位置調整
上記で定義した関数を使用して日付ラベルの位置を調整します。
label_positions <- adjust_label_position(important_dates)日付ラベルのデータフレーム生成
ラベル位置を含むデータフレームを作成します。
date_labels <- data.frame(
x = important_dates、
y = length(df$Task) + 1、
label = format(important_dates, "%Y-%m-%d")、
position = label_positions
)プロット(チャート)作成・出力
ggplot2を使用してプロットを生成します。
p <- ggplot() +...
geom_segment(data = df, aes(x = Start, xend = End, y = Task, yend = Task, color = Section), size = 8) +
geom_vline(xintercept = important_dates, linetype = "dashed", color = "darkgray") +
geom_text(data = date_labels、
aes(x = x, y = y + ifelse(position == 0, -0.5, 0.5), label = label)、
angle = 90, hjust = ifelse(date_labels$position == 0, 1, 0), vjust = 0.5, size = 3) +
scale_x_date(date_labels = "%Y年%m月", date_breaks = "3ヶ月") + scale_x_date(date_labels = "%Y年%m月")
scale_y_discrete(limits = c(df$Task, "", "")) + scale_y_discrete()
theme_minimal() + + theme_minimal()
labs(title = "賃貸借契約更新・解約スケジュール(例)"、
x = "日付", y = "") + labs(title = "更新日", x = "更新日")
theme(legend.position = "bottom"、
plot.title = element_text(hjust = 0.5, size = 16)、
axis.text.x = element_text(angle = 45, hjust = 1)、
panel.grid.minor = element_blank())
print(p)PNG形式で保存
結果のプロットをPNGファイルとして保存します。
ggsave("lease_renewal_process_with_alternating_labels.png", plot = p, width = 15, height = 10, dpi = 300)完全なソースコード
以下は上で説明した全体のソースコードです。コピペして実行すると、ポスト上部に表示されたイメージを見ることができます。
# 필요한 패키지 설치 및 로드
if (!require(ggplot2)) install.packages("ggplot2") # ggplot2 패키지가 없으면 설치
if (!require(dplyr)) install.packages("dplyr") # dplyr 패키지가 없으면 설치
library(ggplot2) # ggplot2 패키지 로드 (그래프 생성용)
library(dplyr) # dplyr 패키지 로드 (데이터 조작용)
# 데이터 프레임 생성
df <- data.frame(
Task = c("초기 계약 기간", "집주인 통지 가능 기간", "세입자 통지 가능 기간","갱신 계약 기간", "통보 후 3개월"), # 각 기간의 이름
Start = as.Date(c("2021-02-03", "2022-08-03", "2022-08-03","2023-02-03", "2023-05-01")), # 각 기간의 시작일
End = as.Date(c("2023-02-02", "2022-12-02", "2022-12-02","2025-02-02", "2023-07-30")), # 각 기간의 종료일
Section = c("초기 계약", "갱신 거절 통지", "갱신 거절 통지","갱신 계약", "계약 해지") # 각 기간의 분류
)
# 중요한 날짜 데이터 프레임 생성
important_dates <- as.Date(c("2021-02-03", "2023-02-02", "2022-08-03", "2022-12-02",
"2023-01-02", "2023-02-03", "2025-02-02",
"2023-05-01", "2023-08-01")) # 중요한 날짜들을 벡터로 정의
important_dates <- sort(important_dates) # 날짜를 오름차순으로 정렬
# 날짜 레이블 위치 조정 함수 개선
adjust_label_position <- function(dates) {
n <- length(dates)
positions <- rep(0, n) # 모든 위치를 0으로 초기화
last_position <- 0
for (i in 2:n) {
if (as.numeric(dates[i] - dates[i-1]) <= 7) { # 7일 이내의 근접한 날짜 확인
positions[i] <- (last_position + 1) %% 2 # 이전 위치에 따라 상하 교대 (0 또는 1)
last_position <- positions[i]
} else {
last_position <- 0
}
}
return(positions)
}
# 날짜 레이블 위치 조정
label_positions <- adjust_label_position(important_dates)
# 날짜 레이블 데이터 프레임 생성
date_labels <- data.frame(
x = important_dates, # x축 위치 (날짜)
y = length(df$Task) + 1, # y축 위치 (모든 Task 위에 위치)
label = format(important_dates, "%Y-%m-%d"), # 레이블 텍스트 (날짜 형식)
position = label_positions # 레이블의 상하 위치 (0 또는 1)
)
# 플롯 생성
p <- ggplot() +
geom_segment(data = df, aes(x = Start, xend = End, y = Task, yend = Task, color = Section), size = 8) +
# 각 Task에 대한 기간을 나타내는 선분. x: 시작일, xend: 종료일, y: Task 이름, color: Section으로 색상 구분
geom_vline(xintercept = important_dates, linetype = "dashed", color = "darkgray") +
# 중요한 날짜에 수직선 추가. linetype: 점선, color: 진한 회색
geom_text(data = date_labels,
aes(x = x, y = y + ifelse(position == 0, -0.5, 0.5), label = label),
angle = 90, hjust = ifelse(date_labels$position == 0, 1, 0), vjust = 0.5, size = 3) +
# 날짜 레이블 추가. x: 날짜 위치, y: Task 위 또는 아래, label: 날짜 텍스트
# angle: 90도 회전, hjust & vjust: 레이블 정렬, size: 글자 크기
scale_x_date(date_labels = "%Y년 %m월", date_breaks = "3 months") +
# x축 날짜 형식 설정. date_labels: 년월 표시 형식, date_breaks: 3개월 간격으로 눈금 표시
scale_y_discrete(limits = c(df$Task, "", "")) +
# y축 설정. limits: Task 이름들과 추가 여백 설정
theme_minimal() + # 최소한의 테마 적용
labs(title = "임대차 계약 갱신 및 해지 스케쥴 (예시)",
x = "날짜", y = "") + # 그래프 제목, x축 레이블 설정
theme(legend.position = "bottom", # 범례 위치를 아래로 설정
plot.title = element_text(hjust = 0.5, size = 16), # 제목 중앙 정렬 및 크기 설정
axis.text.x = element_text(angle = 45, hjust = 1), # x축 레이블 45도 회전
panel.grid.minor = element_blank()) # 작은 격자선 제거
# 플롯 출력
print(p)
# PNG 형식으로 저장
ggsave("lease_renewal_process_with_alternating_labels.png", plot = p, width = 15, height = 10, dpi = 300)
# 파일명, 플롯 객체, 너비, 높이, 해상도 설정整理する
今回は、Rを使って賃貸借契約の更新と解約のスケジュールを視覚化する方法を紹介しました。 複雑な契約スケジュールを視覚化されたスケジュール表で表現すると、重要な日付を一目で簡単に把握することができます。
まず、必要なパッケージをインストールしてデータを準備した後、日付ラベルが重ならないように調整する関数を作成しました。 その後、ggplot2を使用して賃貸借契約期間と重要な日付を含む可視化を生成し、これをPNGファイルとして保存するプロセスを説明しました。
このビジュアライゼーション手法を活用することで、賃貸借契約だけでなく、様々なスケジュール管理やプロジェクト計画にも役立ちます。今後も様々なデータ可視化技法を探求して、データの意味を明確に伝える方法を練習してください。さらに、視覚化されたデータを通じて、より良い意思決定を行う能力を高めていくことを願っています。






