アボカドのデータセット  R言語復習

R言語を使った分析の復習

フェーズ 1: データの準備と読み込み
フェーズ 2: データクリーニングと整形
フェーズ 3: データ集計と加工 (dplyr)
フェーズ 4: ビジュアライゼーション (ggplot2)

R言語のコンソールペインをそのままコピペしたので、改行後の位置に「+」が付いてしまいました。


1. データ準備とクリーニング

# データの読み込み
avocado <- read.csv("avocado.csv")

# 1列目(おそらくインデックス)を削除
avocado <- avocado[, -1]

## 2-2. PLUコードの列名変更
# RStudioからの出力を削除し、コードのみに
names(avocado)[names(avocado) == "X4046"] <- "Small_PLU"
names(avocado)[names(avocado) == "X4225"] <- "Large_PLU"
names(avocado)[names(avocado) == "X4770"] <- "XLarge_PLU"

## 2-3. クリーニング結果の確認
# 列名とデータ構造を確認
names(avocado)
# [実行結果] "Date" "AveragePrice" "Total.Volume" "Small_PLU" "Large_PLU" "XLarge_PLU" ...
str(avocado)
# [実行結果] 'data.frame': 18249 obs. of 13 variables: ...

# Date列を文字列型 (chr) から日付型 (Date) に変換
avocado$Date <- as.Date(avocado$Date)

# 最終的なデータ構造の確認(DateがDate型になっていることを確認)
str(avocado)
# [実行結果] $ Date: Date, format: "2015-12-27" ...

2. データ可視化(ggplot2)

# データの読み込み
avocado <- read.csv("avocado.csv")

# 1列目(おそらくインデックス)を削除
avocado <- avocado[, -1]

## 2-2. PLUコードの列名変更
# RStudioからの出力を削除し、コードのみに
names(avocado)[names(avocado) == "X4046"] <- "Small_PLU"
names(avocado)[names(avocado) == "X4225"] <- "Large_PLU"
names(avocado)[names(avocado) == "X4770"] <- "XLarge_PLU"

## 2-3. クリーニング結果の確認
# 列名とデータ構造を確認
names(avocado)
# [実行結果] "Date" "AveragePrice" "Total.Volume" "Small_PLU" "Large_PLU" "XLarge_PLU" ...
str(avocado)
# [実行結果] 'data.frame': 18249 obs. of 13 variables: ...

# Date列を文字列型 (chr) から日付型 (Date) に変換
avocado$Date <- as.Date(avocado$Date)

# 最終的なデータ構造の確認(DateがDate型になっていることを確認)
str(avocado)
# [実行結果] $ Date: Date, format: "2015-12-27" ...

2. データ可視化(ggplot2)

パッケージのインストール/読み込みを行い、基本的なグラフを作成します。

R

# パッケージのインストール(初回のみ実行)
# install.packages("ggplot2") 

# パッケージの読み込み
library(ggplot2)

# 1. 平均価格の分布(hist関数)
hist(avocado$AveragePrice,
     main = "アボカドの平均価格の分布", # グラフのタイトル
     xlab = "平均価格 (ドル)",         # x軸のラベル
     col = "darkgreen",              # 棒の色
     border = "white")              # 棒の境界線の色

# 2. 時系列折れ線グラフの作成
ggplot(avocado, aes(x = Date, y = AveragePrice)) +
  geom_line(color = "darkred") +
  labs(title = "アボカドの平均価格の推移",
       x = "日付",
       y = "平均価格 (ドル)") +
  theme_minimal() # シンプルなテーマを適用

# 3. 種類 (type) 別に色分けしたヒストグラムの作成
ggplot(avocado, aes(x = AveragePrice, fill = type)) +
  geom_histogram(binwidth = 0.1, position = "identity", alpha = 0.6) +
  labs(title = "種類別のアボカド平均価格の分布",
       x = "平均価格 (ドル)",
       y = "観測数") +
  theme_minimal() +
  scale_fill_manual(values = c("conventional" = "green4", "organic" = "orange"))

# 4. 種類 (type) 別の販売量 (Total.Volume) の比較 (ボックスプロット)
ggplot(avocado, aes(x = type, y = Total.Volume, fill = type)) +
  geom_boxplot() +
  labs(title = "種類別の総販売量の分布",
       x = "アボカドの種類",
       y = "総販売量") +
  theme_minimal()

3. データ集計と加工(dplyr/lubridate)

# パッケージのインストール(初回のみ実行)
# install.packages(c("dplyr", "lubridate")) 

# パッケージの読み込み(ここでdplyrを読み込まないとパイプ演算子 %% が使えません)
library(dplyr)
library(lubridate) # 月次集計に必要
library(ggplot2)

# 地域の総販売量を集計し、トップ5を抽出
top_regions <- avocado %>% # %% ではなく %>% が推奨されるパイプ演算子です
  group_by(region) %>%
  summarise(Total_Sales = sum(Total.Volume)) %>%
  arrange(desc(Total_Sales)) %>%
  head(5)
# [実行結果] top_regionsが表示されます

# トップ5の地域名を変数に保存
top_5_names <- top_regions$region

# トップ5地域のデータのみを抽出
avocado_top5 <- avocado %>%
  filter(region %in% top_5_names)

## 月次データへの集計
avocado_monthly <- avocado_top5 %>%
  # Date列から「年」と「月」の情報を抽出して結合し、新しいMonth列を作成
  mutate(Month = floor_date(Date, "month")) %>%
  
  # Monthとregionでグループ化
  group_by(Month, region) %>%
  
  # 各月の平均価格を計算
  summarise(
    Avg_Price_Monthly = mean(AveragePrice),
    .groups = 'drop'
  )
# [実行結果] head(avocado_monthly)が表示されます

# 総合平均価格の計算
overall_avg_price <- avocado_top5 %>%
  summarise(
    Overall_Average_Price = mean(AveragePrice)
  )
# [実行結果] overall_avg_priceが表示されます

# トップ5地域のそれぞれについて、総合平均価格を計算し、価格の高い順に並べ替え
top5_region_avg_price <- avocado_top5 %>%
  group_by(region) %>%
  summarise(
    AveragePrice_by_Region = mean(AveragePrice)
  ) %>%
  arrange(desc(AveragePrice_by_Region))
# [実行結果] top5_region_avg_priceが表示されます

4. 高度な可視化

# 1. 月次データを使った価格推移グラフ
ggplot(avocado_monthly, aes(x = Month, y = Avg_Price_Monthly, color = region)) +
  geom_line(linewidth = 1) + # 線を太くして見やすくします
  labs(title = "【トップ5地域】平均価格の月次トレンド比較",
       x = "日付 (月次)",
       y = "平均価格 (ドル)") +
  theme_minimal()

# 2. 地域の平均価格を比較する棒グラフの作成
# 棒グラフが並べ替えた順になるように、地域 (region) を因子レベルの順に設定
# arrange()で並べ替えた順番をそのまま利用します
top5_region_avg_price$region <- factor(top5_region_avg_price$region, 
                                       levels = top5_region_avg_price$region)

ggplot(top5_region_avg_price, 
       aes(x = region, y = AveragePrice_by_Region, fill = AveragePrice_by_Region)) +
  geom_bar(stat = "identity") + # 棒の高さに値をそのまま使用
  geom_text(aes(label = sprintf("%.2f", AveragePrice_by_Region)), 
            vjust = -0.5, 
            color = "black") + # 価格ラベルを棒の上に表示
  labs(title = "【トップ5地域】総合平均アボカド価格の比較",
       x = "地域",
       y = "平均価格 (ドル)") +
  scale_fill_gradient(low = "lightgreen", high = "darkgreen") + # 価格が高いほど濃い緑に
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) # x軸のラベルを見やすく回転
タイトルとURLをコピーしました