ver \(\alpha 1.0\)
以下是一系列範例程式的步驟,說明如何將下載的csv檔讀取並做後續應用。 注意實際操作時,讀取檔案的路徑可能要重新調整:
ntp <- read.csv("C:\\Users\\User\\Downloads\\新北市人口統計資訊_0008534750841870883628.csv",header=T)
看看資料集的維度(dimension) :
dim(ntp)
## [1] 612263 6
看看資料集的摘要統計 :
summary(ntp)
## AreaName Year Month Male
## 五股區 : 21210 Min. : 90.00 Min. : 1.000 Min. : 0.0
## 石碇區 : 21110 1st Qu.: 94.00 1st Qu.: 3.000 1st Qu.: 48.0
## 八里區 : 21109 Median : 98.00 Median : 6.000 Median : 181.0
## 三芝區 : 21109 Mean : 98.22 Mean : 6.416 Mean : 650.6
## 三重區 : 21109 3rd Qu.:103.00 3rd Qu.: 9.000 3rd Qu.: 828.0
## 三峽區 : 21109 Max. :107.00 Max. :12.000 Max. :6071.0
## (Other):485507 NA's :1
## Female Age
## Min. : 0 0歲 : 6063
## 1st Qu.: 43 100歲以上: 6062
## Median : 175 10歲 : 6062
## Mean : 657 11歲 : 6062
## 3rd Qu.: 819 12歲 : 6062
## Max. :5749 13歲 : 6062
## NA's :1 (Other) :575890
看看資料集的前六筆:
head(ntp)
## AreaName Year Month Male Female Age
## 1 八里區 105 10 303 284 43歲
## 2 八里區 105 10 310 301 44歲
## 3 八里區 105 10 285 281 45歲
## 4 八里區 105 10 313 361 46歲
## 5 八里區 105 10 310 344 47歲
## 6 八里區 105 10 333 334 48歲
看看變數 AreaName 有幾種水準(類別)
levels(ntp$AreaName)
## [1] "八里區" "三芝區" "三重區" "三峽區" "土城區" "中和區" "五股區"
## [8] "平溪區" "永和區" "石門區" "石碇區" "汐止區" "坪林區" "板橋區"
## [15] "林口區" "金山區" "泰山區" "烏來區" "貢寮區" "淡水區" "深坑區"
## [22] "新店區" "新莊區" "瑞芳區" "萬里區" "樹林區" "雙溪區" "蘆洲區"
## [29] "鶯歌區"
看看變數 Age 有幾種水準(類別)
levels(ntp$Age)
## [1] "0歲" "100歲以上" "10歲" "11歲" "12歲"
## [6] "13歲" "14歲" "15歲" "16歲" "17歲"
## [11] "18歲" "19歲" "1歲" "20歲" "21歲"
## [16] "22歲" "23歲" "24歲" "25歲" "26歲"
## [21] "27歲" "28歲" "29歲" "2歲" "30歲"
## [26] "31歲" "32歲" "33歲" "34歲" "35歲"
## [31] "36歲" "37歲" "38歲" "39歲" "3歲"
## [36] "40歲" "41歲" "42歲" "43歲" "44歲"
## [41] "45歲" "46歲" "47歲" "48歲" "49歲"
## [46] "4歲" "50歲" "51歲" "52歲" "53歲"
## [51] "54歲" "55歲" "56歲" "57歲" "58歲"
## [56] "59歲" "5歲" "60歲" "61歲" "62歲"
## [61] "63歲" "64歲" "65歲" "66歲" "67歲"
## [66] "68歲" "69歲" "6歲" "70歲" "71歲"
## [71] "72歲" "73歲" "74歲" "75歲" "76歲"
## [76] "77歲" "78歲" "79歲" "7歲" "80歲"
## [81] "81歲" "82歲" "83歲" "84歲" "85歲"
## [86] "86歲" "87歲" "88歲" "89歲" "8歲"
## [91] "90歲" "91歲" "92歲" "93歲" "94歲"
## [96] "95歲" "96歲" "97歲" "98歲" "99歲"
## [101] "9歲"
看看變數 Year 有幾種水準(類別),發現R將其視為數值資料 (所以“沒水準”)
levels(ntp$Year)
## NULL
因此,將變數 Year 調整為因子(factor)資料, 重新看看變數 Year 有幾種水準(類別)
levels(as.factor(ntp$Year))
## [1] "90" "91" "92" "93" "94" "95" "96" "97" "98" "99" "100"
## [12] "101" "102" "103" "104" "105" "106" "107"
看看變數 Month 有幾種水準(類別),發現R將其視為數值資料 (所以“沒水準”)
levels(ntp$Month)
## NULL
因此,將變數 Month 調整為因子(factor)資料, 重新看看變數 Month 有幾種水準(類別)
levels(as.factor(ntp$Month))
## [1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12"
每次都要用 ntp$變數名稱
來呼叫變數有點麻煩, 所以利用 attach(ntp)
指令方便使用 ntp 資料集的各項變數:
attach(ntp)
接下來就可以用較簡單的方式,取出八里區的男性資料: (不必再用 ntp$Male[ntp$AreaName=="八里區"]
)
不過因為取出的資料太多,故此處省略不印出。
Male[AreaName=="八里區"]
接下來縮小範圍,取出八里區105年的男性資料:
Male[AreaName=="八里區" & Year=="105"]
## [1] 303 310 285 313 310 333 318 351 337 364 349 376 342 344 293 279 272
## [18] 271 266 224 233 213 165 156 168 131 84 91 77 80 81 80 74 72
## [35] 66 54 45 41 42 35 36 51 36 34 29 26 25 13 11 11 7
## [52] 6 10 2 2 6 0 3 171 189 306 313 323 323 356 332 366 355
## [69] 366 341 345 306 267 274 283 255 231 230 220 176 152 170 131 87 94
## [86] 79 76 176 194 155 171 191 163 127 174 155 131 155 134 130 181 174
## [103] 242 273 238 264 266 311 315 311 328 270 295 326 256 258 258 233 287
## [120] 301 285 317 297 290 317 292 313 311 160 187 157 215 167 133 159 163
## [137] 150 154 132 129 152 181 200 255 261 234 260 307 293 322 337 271 289
## [154] 318 262 275 263 220 281 288 301 310 305 293 303 303 308 308 315 281
## [171] 278 305 306 289 330 306 308 350 346 354 367 356 352 334 299 280 275
## [188] 287 271 227 229 221 186 155 174 137 91 89 72 90 79 79 86 69
## [205] 78 46 49 46 43 43 37 45 38 37 33 32 26 16 14 10 5
## [222] 10 9 5 1 8 1 1 2 164 183 149 216 165 133 159 165 149
## [239] 161 131 124 147 180 204 248 259 238 256 307 298 324 331 275 288 312
## [256] 267 284 259 226 270 284 309 299 309 286 302 303 308 323 307 284 279
## [273] 300 306 287 323 310 317 351 339 354 358 356 361 320 307 297 264 294
## [290] 258 234 238 219 189 157 170 138 99 86 73 89 86 75 83 72 75
## [307] 45 53 44 45 38 36 47 36 38 35 27 31 15 13 13 4 10
## [324] 10 5 1 7 2 1 2 169 181 157 201 174 128 155 163 152 155
## [341] 133 123 134 176 200 243 254 243 261 296 302 323 335 277 279 314 279
## [358] 269 267 226 265 284 313 298 302 294 298 299 315 311 303 294 275 293
## [375] 319 273 328 319 312 342 351 349 360 354 359 325 312 297 265 288 257
## [392] 246 240 217 199 145 168 148 105 75 83 84 80 81 86 63 80 41
## [409] 60 43 45 38 37 45 38 34 41 26 28 18 13 12 6 10 8
## [426] 6 2 6 2 1 2 173 179 158 203 182 129 152 162 150 157 130
## [443] 134 121 176 204 240 251 250 258 299 298 323 327 289 275 311 281 268
## [460] 267 228 257 292 311 300 300 294 292 304 317 306 304 291 280 292 318
## [477] 270 324 321 305 350 347 357 346 357 370 322 315 291 275 285 252 257
## [494] 236 212 207 140 164 149 112 81 80 83 82 79 85 63 83 43 61
## [511] 42 46 37 35 46 40 35 40 28 26 18 11 11 9 8 8 6
## [528] 2 3 5 0 3 164 190 151 201 189 128 150 164 150 149 128 138
## [545] 128 170 204 237 262 241 259 295 302 314 325 310 272 307 284 273 263
## [562] 234 245 302 308 296 302 298 292 306 315 299 306 298 276 296 322 262
## [579] 327 328 309 333 353 351 357 355 362 334 315 299 274 292 247 255 233
## [596] 217 207 148 162 148 120 79 83 83 80 78 88 64 74 48 58 42
## [613] 47 34 37 46 39 36 41 26 26 19 10 12 9 8 7 7 2
## [630] 3 5 0 3 167 190 151 198 185 133 151 169 151 143 131 137 127
## [647] 168 202 237 264 241 263 286 309 308 317 327 272 304 291 262 276 232
## [664] 247 307 295 296 305 289 296 311 316 294 302 304 273 301 328 262 332
## [681] 320 313 334 348 349 360 359 361 329 321 299 277 289 251 248 232 227
## [698] 205 156 154 150 121 83 88 75 83 77 93 62 76 49 56 41 49
## [715] 30 40 41 44 34 42 25 27 21 10 11 10 8 7 7 2 3
## [732] 5 0 3 176 192 147 197 186 147 143 163 154 140 141 140 122 169
## [749] 196 244 265 240 258 288 310 310 309 331 264 308 303 266 266 239 246
## [766] 299 301 285 313 288 308 301 309 309 290 312 270 302 323 264 329 321
## [783] 312 324 349 353 353 362 369 329 324 291 284 283 254 248 236 234 200
## [800] 161 155 153 121 82 94 68 83 79 96 61 78 53 52 46 45 36
## [817] 38 39 48 35 41 22 30 20 10 12 11 8 5 8 2 2 5
## [834] 0 3 182 191 150 187 185 155 136 168 150 141 143 138 120 175 189
## [851] 242 268 234 267 279 310 312 316 327 260 312 317 265 256 245 239 299
## [868] 294 287 309 296 312 297 307 299 301 313 263 305 320 273 325 326 312
## [885] 314 358 344 356 372 361 332 329 294 279 272 272 252 231 233 207 154
## [902] 162 159 123 84 90 74 78 85 88 68 70 61 51 47 42 39 35
## [919] 41 47 35 42 21 32 20 10 13 11 8 4 9 2 2 5 0
## [936] 3 185 192 154 176 191 154 132 172 154 143 141 137 131 180 186 242
## [953] 263 235 266 271 314 310 313 328 265 306 314 263 255 254 236 289 300
## [970] 286 319 292 300 315 295 300 306 309 270 297 324 282 311 322 325 315
## [987] 358 339 354 362 372 343 324 295 279 270 277 260 225 239 201 156 159
## [1004] 160 133 83 89 78 76 82 82 70 75 65 49 48 40 40 34 39
## [1021] 49 36 39 24 28 23 12 12 11 7 6 9 2 2 6 0 3
## [1038] 308 268 170 158 207 160 127 169 160 135 151 124 135 178 179 237 272
## [1055] 246 266 253 312 307 319 336 266 299 319 257 266 261 227 287 292 292
## [1072] 316 300 291 308 294 303 317 308 278 299 303 300 84 72 82 72 68
## [1089] 46 48 44 43 36 36 46 38 36 31 25 26 13 11 12 6 7
## [1106] 6 5 2 6 0 3 169 174 188 153 208 167 124 170 158 141 153
## [1123] 118 139 177 179 222 271 262 251 254 318 302 318 335 280 284 321 261
## [1140] 271 263 218 282 291 296 302 296 303 308 301 298 315 320 276 289 303
## [1157] 296 306 328 314 318 355 338 364 354 367 338 351 304 270 271 280 267
## [1174] 229 235 215 183 150 173 130 89 93 79 85 79 74 83 66 74 47
## [1191] 49 42 43 38 35 42 40 35 33 25 25 14 12 12 5 7 7
## [1208] 4 3 6 0 3
資料還是有點太多,接下來再縮小範圍,取出八里區105年43歲的男性、女性資料:
Male[AreaName=="八里區" & Year=="105" & Age=="43歲"]
## [1] 303 305 300 293 292 296 301 302 305 297 299 289
Female[AreaName=="八里區" & Year=="105" & Age=="43歲"]
## [1] 284 302 290 292 293 292 298 292 293 285 277 259
然後將資料賦值予變數 aa、bb
aa <- Male[AreaName=="八里區" & Year=="105" & Age=="43歲"]
bb <- Female[AreaName=="八里區" & Year=="105" & Age=="43歲"]
透過變數 aa,繪製八里區105年43歲男性人數變化折線圖
plot(1:12,aa,type="l")
再加上女性資料(重新調整y軸的範圍以符合完整顯示的需求)
plot(1:12,aa,type="l",ylim=c(255,310))
lines(1:12,bb,type="l",col="blue")
sum(Male[AreaName=="八里區" & Year=="105" & Age=="43歲"])
## [1] 3582
mean(Male[AreaName=="八里區" & Year=="105" & Age=="43歲"])
## [1] 298.5
x1 <- by(Male ,AreaName , mean)
x1
## AreaName: 八里區
## [1] 170.5608
## --------------------------------------------------------
## AreaName: 三芝區
## [1] 120.0268
## --------------------------------------------------------
## AreaName: 三重區
## [1] 1910.87
## --------------------------------------------------------
## AreaName: 三峽區
## [1] 503.3524
## --------------------------------------------------------
## AreaName: 土城區
## [1] 1175.083
## --------------------------------------------------------
## AreaName: 中和區
## [1] 2013.794
## --------------------------------------------------------
## AreaName: 五股區
## [1] 393.2515
## --------------------------------------------------------
## AreaName: 平溪區
## [1] 30.03382
## --------------------------------------------------------
## AreaName: 永和區
## [1] 1102.859
## --------------------------------------------------------
## AreaName: 石門區
## [1] 63.07902
## --------------------------------------------------------
## AreaName: 石碇區
## [1] NA
## --------------------------------------------------------
## AreaName: 汐止區
## [1] 903.7324
## --------------------------------------------------------
## AreaName: 坪林區
## [1] 35.89583
## --------------------------------------------------------
## AreaName: 板橋區
## [1] 2691.672
## --------------------------------------------------------
## AreaName: 林口區
## [1] 376.9825
## --------------------------------------------------------
## AreaName: 金山區
## [1] 110.5957
## --------------------------------------------------------
## AreaName: 泰山區
## [1] 365.4095
## --------------------------------------------------------
## AreaName: 烏來區
## [1] 27.6555
## --------------------------------------------------------
## AreaName: 貢寮區
## [1] 70.04652
## --------------------------------------------------------
## AreaName: 淡水區
## [1] 681.5105
## --------------------------------------------------------
## AreaName: 深坑區
## [1] 112.6109
## --------------------------------------------------------
## AreaName: 新店區
## [1] 1414.47
## --------------------------------------------------------
## AreaName: 新莊區
## [1] 1950.556
## --------------------------------------------------------
## AreaName: 瑞芳區
## [1] 218.7571
## --------------------------------------------------------
## AreaName: 萬里區
## [1] 106.8234
## --------------------------------------------------------
## AreaName: 樹林區
## [1] 855.365
## --------------------------------------------------------
## AreaName: 雙溪區
## [1] 52.27088
## --------------------------------------------------------
## AreaName: 蘆洲區
## [1] 937.4325
## --------------------------------------------------------
## AreaName: 鶯歌區
## [1] 430.3552
x2 <- by(Female , AreaName , mean)
x2
## AreaName: 八里區
## [1] 165.4202
## --------------------------------------------------------
## AreaName: 三芝區
## [1] 111.0504
## --------------------------------------------------------
## AreaName: 三重區
## [1] 1916.227
## --------------------------------------------------------
## AreaName: 三峽區
## [1] 479.7016
## --------------------------------------------------------
## AreaName: 土城區
## [1] 1173.604
## --------------------------------------------------------
## AreaName: 中和區
## [1] 2054.439
## --------------------------------------------------------
## AreaName: 五股區
## [1] 380.9084
## --------------------------------------------------------
## AreaName: 平溪區
## [1] 24.08522
## --------------------------------------------------------
## AreaName: 永和區
## [1] 1187.825
## --------------------------------------------------------
## AreaName: 石門區
## [1] 56.11289
## --------------------------------------------------------
## AreaName: 石碇區
## [1] NA
## --------------------------------------------------------
## AreaName: 汐止區
## [1] 917.0179
## --------------------------------------------------------
## AreaName: 坪林區
## [1] 28.03832
## --------------------------------------------------------
## AreaName: 板橋區
## [1] 2734.544
## --------------------------------------------------------
## AreaName: 林口區
## [1] 383.3354
## --------------------------------------------------------
## AreaName: 金山區
## [1] 108.3986
## --------------------------------------------------------
## AreaName: 泰山區
## [1] 361.1433
## --------------------------------------------------------
## AreaName: 烏來區
## [1] 26.83666
## --------------------------------------------------------
## AreaName: 貢寮區
## [1] 64.80937
## --------------------------------------------------------
## AreaName: 淡水區
## [1] 713.9239
## --------------------------------------------------------
## AreaName: 深坑區
## [1] 109.5095
## --------------------------------------------------------
## AreaName: 新店區
## [1] 1466.556
## --------------------------------------------------------
## AreaName: 新莊區
## [1] 1993.016
## --------------------------------------------------------
## AreaName: 瑞芳區
## [1] 208.4633
## --------------------------------------------------------
## AreaName: 萬里區
## [1] 100.5807
## --------------------------------------------------------
## AreaName: 樹林區
## [1] 839.9717
## --------------------------------------------------------
## AreaName: 雙溪區
## [1] 44.25776
## --------------------------------------------------------
## AreaName: 蘆洲區
## [1] 952.4572
## --------------------------------------------------------
## AreaName: 鶯歌區
## [1] 418.6798
x12 <- rbind(x1,x2)
x12
## 八里區 三芝區 三重區 三峽區 土城區 中和區 五股區 平溪區
## x1 170.5608 120.0268 1910.870 503.3524 1175.083 2013.794 393.2515 30.03382
## x2 165.4202 111.0504 1916.227 479.7016 1173.604 2054.439 380.9084 24.08522
## 永和區 石門區 石碇區 汐止區 坪林區 板橋區 林口區 金山區
## x1 1102.859 63.07902 NA 903.7324 35.89583 2691.672 376.9825 110.5957
## x2 1187.825 56.11289 NA 917.0179 28.03832 2734.544 383.3354 108.3986
## 泰山區 烏來區 貢寮區 淡水區 深坑區 新店區 新莊區 瑞芳區
## x1 365.4095 27.65550 70.04652 681.5105 112.6109 1414.470 1950.556 218.7571
## x2 361.1433 26.83666 64.80937 713.9239 109.5095 1466.556 1993.016 208.4633
## 萬里區 樹林區 雙溪區 蘆洲區 鶯歌區
## x1 106.8234 855.3650 52.27088 937.4325 430.3552
## x2 100.5807 839.9717 44.25776 952.4572 418.6798
x12a <- cbind(x1,x2)
x12a
## x1 x2
## 八里區 170.56076 165.42015
## 三芝區 120.02677 111.05041
## 三重區 1910.86968 1916.22720
## 三峽區 503.35241 479.70160
## 土城區 1175.08286 1173.60448
## 中和區 2013.79350 2054.43901
## 五股區 393.25149 380.90839
## 平溪區 30.03382 24.08522
## 永和區 1102.85883 1187.82534
## 石門區 63.07902 56.11289
## 石碇區 NA NA
## 汐止區 903.73244 917.01786
## 坪林區 35.89583 28.03832
## 板橋區 2691.67189 2734.54413
## 林口區 376.98252 383.33535
## 金山區 110.59567 108.39855
## 泰山區 365.40949 361.14326
## 烏來區 27.65550 26.83666
## 貢寮區 70.04652 64.80937
## 淡水區 681.51054 713.92387
## 深坑區 112.61088 109.50945
## 新店區 1414.46961 1466.55630
## 新莊區 1950.55649 1993.01563
## 瑞芳區 218.75707 208.46326
## 萬里區 106.82339 100.58075
## 樹林區 855.36496 839.97167
## 雙溪區 52.27088 44.25776
## 蘆洲區 937.43252 952.45725
## 鶯歌區 430.35520 418.67976
y1 <- by(Male ,AreaName , mean ,na.rm=T)
y2 <- by(Female ,AreaName , mean ,na.rm=T)
y12a <- cbind(y1,y2)
y12a
## y1 y2
## 八里區 170.56076 165.42015
## 三芝區 120.02677 111.05041
## 三重區 1910.86968 1916.22720
## 三峽區 503.35241 479.70160
## 土城區 1175.08286 1173.60448
## 中和區 2013.79350 2054.43901
## 五股區 393.25149 380.90839
## 平溪區 30.03382 24.08522
## 永和區 1102.85883 1187.82534
## 石門區 63.07902 56.11289
## 石碇區 43.04984 34.18674
## 汐止區 903.73244 917.01786
## 坪林區 35.89583 28.03832
## 板橋區 2691.67189 2734.54413
## 林口區 376.98252 383.33535
## 金山區 110.59567 108.39855
## 泰山區 365.40949 361.14326
## 烏來區 27.65550 26.83666
## 貢寮區 70.04652 64.80937
## 淡水區 681.51054 713.92387
## 深坑區 112.61088 109.50945
## 新店區 1414.46961 1466.55630
## 新莊區 1950.55649 1993.01563
## 瑞芳區 218.75707 208.46326
## 萬里區 106.82339 100.58075
## 樹林區 855.36496 839.97167
## 雙溪區 52.27088 44.25776
## 蘆洲區 937.43252 952.45725
## 鶯歌區 430.35520 418.67976
用 class(y12a)
得知 y12a 為矩陣型態
class(y12a)
## [1] "matrix"
rn<-as.vector(rownames(y12a))
y12a <- data.frame(rn,y12a)
names(y12a)
## [1] "rn" "y1" "y2"
names(y12a) <- c("區域","男性","女性")
rownames(y12a)<-1:29
y12a
## 區域 男性 女性
## 1 八里區 170.56076 165.42015
## 2 三芝區 120.02677 111.05041
## 3 三重區 1910.86968 1916.22720
## 4 三峽區 503.35241 479.70160
## 5 土城區 1175.08286 1173.60448
## 6 中和區 2013.79350 2054.43901
## 7 五股區 393.25149 380.90839
## 8 平溪區 30.03382 24.08522
## 9 永和區 1102.85883 1187.82534
## 10 石門區 63.07902 56.11289
## 11 石碇區 43.04984 34.18674
## 12 汐止區 903.73244 917.01786
## 13 坪林區 35.89583 28.03832
## 14 板橋區 2691.67189 2734.54413
## 15 林口區 376.98252 383.33535
## 16 金山區 110.59567 108.39855
## 17 泰山區 365.40949 361.14326
## 18 烏來區 27.65550 26.83666
## 19 貢寮區 70.04652 64.80937
## 20 淡水區 681.51054 713.92387
## 21 深坑區 112.61088 109.50945
## 22 新店區 1414.46961 1466.55630
## 23 新莊區 1950.55649 1993.01563
## 24 瑞芳區 218.75707 208.46326
## 25 萬里區 106.82339 100.58075
## 26 樹林區 855.36496 839.97167
## 27 雙溪區 52.27088 44.25776
## 28 蘆洲區 937.43252 952.45725
## 29 鶯歌區 430.35520 418.67976
attach(y12a)
指令方便使用 y12a 資料集的各項變數attach(y12a)
library(ggplot2)
## Registered S3 methods overwritten by 'ggplot2':
## method from
## [.quosures rlang
## c.quosures rlang
## print.quosures rlang
ggplot(y12a,aes(x=區域,y=男性))+geom_bar(stat="identity")
ggplot(y12a,aes(x=區域,y=女性))+geom_bar(stat="identity")
從 50% 比率的水平線,可看出有哪些區域的男性比率高過女性 (90-107年整體平均)
library(plyr)
y12a$ratio <- with(y12a,(男性/(男性+女性))*100)
ggplot(y12a,aes(x=區域,y=ratio))+geom_bar(stat="identity")+geom_hline(yintercept=50)