জিপড ডেটা ফাইল, এক্সট্র্যাক্ট এবং ডেটা আমদানি করতে আর ব্যবহার করুন


122

টুইটারে ইজেগ্রাফগুলি লিখেছেন: "প্রচুর অনলাইন সিএসভি জিপ করা হয়েছে download

আমি আজ এটি করার চেষ্টাও করছিলাম, তবে কেবলমাত্র জিপ ফাইলটি ম্যানুয়ালি ডাউনলোড করে শেষ করেছি।

আমি এরকম কিছু চেষ্টা করেছি:

fileName <- "http://www.newcl.org/data/zipfiles/a1.zip"
con1 <- unz(fileName, filename="a1.dat", open = "r")

তবে আমার মনে হচ্ছে যেন আমি অনেক দূরে। কোন চিন্তা?


এটা কি কাজ করেছিল? যদি তা হয় তবে কেন আপনি এখনও মনে করেন যে আপনি অনেক দূরে রয়েছেন?
হতাশিত

@ উন্নত ... না আমার প্রশ্নের কোডটি কাজ করে না। নীচে উত্তর দেখুন।
জেরোমি অ্যাংলিম

উত্তর:


176

জিপ সংরক্ষণাগারগুলি আসলে সামগ্রীর মেটাডেটা ইত্যাদি সহ আরও একটি 'ফাইল সিস্টেম' help(unzip)details বিশদের জন্য দেখুন। সুতরাং উপরের স্কেচ যা করা দরকার তা করতে আপনার প্রয়োজন

  1. একটি টেম্প তৈরি করুন। ফাইলের নাম (যেমন tempfile())
  2. download.file()টেম্পারে ফাইল আনার জন্য ব্যবহার করুন । ফাইল
  3. unz()অস্থায়ী থেকে লক্ষ্য ফাইলটি নিষ্কাশন করতে ব্যবহার করুন । ফাইল
  4. এর মাধ্যমে টেম্প ফাইলটি সরান unlink()

কোডে যা (মৌলিক উদাহরণের জন্য ধন্যবাদ, তবে এটি সহজ) এর মত দেখতে

temp <- tempfile()
download.file("http://www.newcl.org/data/zipfiles/a1.zip",temp)
data <- read.table(unz(temp, "a1.dat"))
unlink(temp)

সংক্ষিপ্ত ( .z) বা gzIP ( .gz) বা bzip2ed ( .bz2) ফাইল কেবল ফাইল এবং আপনি সরাসরি সংযোগ থেকে পড়তে পারেন। সুতরাং এর পরিবর্তে ডেটা সরবরাহকারীর ব্যবহার করুন :)


ডার্ক, আপনি কীভাবে কোনও .zসংরক্ষণাগার থেকে ডেটা উত্তোলন করবেন সে সম্পর্কে সম্প্রসারণ করতে মন চান ? আমি এর সাথে একটি ইউআরএল সংযোগ থেকে পড়তে পারি readBin(url(x, "rb"), 'raw', 99999999), তবে কীভাবে আমি এতে থাকা ডেটা বের করব? uncompressপ্যাকেজ Cran থেকে সরিয়ে ফেলা হয়েছে - বেস দ সম্ভব (এবং যদি তাই হয়, এটা * স্নো সিস্টেম অবধি সীমিত থাকবে?)? যদি উপযুক্ত হয় তবে নতুন প্রশ্ন হিসাবে পোস্ট করে খুশি।
jbaums

3
দেখুন help(gzfile)- আমি ভাবছিলাম যে জিজিপ প্রোটোকলটি এখন প্যাটেন্টের মেয়াদ শেষ হয়ে গেছে এমন .z ফাইলগুলি এখন কমপ্রেস করতে পারে। এটা নাও পারে। কে .z যেভাবেই ব্যবহার করে? 1980 এর দশকে বলা হয়েছিল, তারা তাদের সংকোচনের বিষয়টি ফিরে চায় ;-)
ডার্ক এডেলবুয়েটেল

ধন্যবাদ - আমি এটি কাজ করতে পারি না, তাই সম্ভবত এটি সর্বোপরি অসমর্থিত। অস্ট্রেলিয়ান মেটিরিওলজ ব্যুরো তাদের কিছু ডেটা .z হিসাবে সরবরাহ করে, দুর্ভাগ্যক্রমে!
jbaums

এফওয়াইআই এটি readRDS()(কমপক্ষে আমার জন্য) সাথে কাজ করে না । আমি যা বলতে পারি তা থেকে ফাইলটি এমন এক ধরণের ফাইলের হওয়া দরকার যা আপনি পড়তে পারেন read.table()
জেসি

1
আপনি সংযোগটি বন্ধ করতে চাইবেন। আর একবারে মাত্র 125 টি খোলা থাকতে পারে। কন << - আনজ (অস্থায়ী, "a1.dat") এর মতো কিছু; ডেটা <- read.table (কন); CLOSE (বিরূদ্ধে);
পিডিবি

28

কেবল রেকর্ডের জন্য, আমি ডার্কের উত্তরটি কোড :- পি তে অনুবাদ করার চেষ্টা করেছি

temp <- tempfile()
download.file("http://www.newcl.org/data/zipfiles/a1.zip",temp)
con <- unz(temp, "a1.dat")
data <- matrix(scan(con),ncol=4,byrow=TRUE)
unlink(temp)

5
ব্যবহার করবেন না scan(); আপনি read.table()কোনও সংযোগে সরাসরি ইত্যাদি ব্যবহার করতে পারেন । আমার সম্পাদিত উত্তরটি দেখুন
ডার্ক এডেলবুয়েটেল

17

আমি http://cran.r-project.org/web/packages/downloader/index.html এ পাওয়া CRAN প্যাকেজ "ডাউনলোডার" ব্যবহার করেছি । আরো সহজ.

download(url, dest="dataset.zip", mode="wb") 
unzip ("dataset.zip", exdir = "./")

2
আমি কেবল ব্যবহারগুলি :: আমার জন্য
ডাউনলডার

2019 হিসাবে - আমাকে এক্সডির = 'বলতে হয়েছিল।'
ব্যবহারকারী জেটি

9

ম্যাকের জন্য (এবং আমি লিনাক্স ধরে নিই) ...

Zip সংরক্ষণাগার একটি ফাইল থাকে, তাহলে আপনি ব্যাশ কমান্ড ব্যবহার করতে পারেন funzipসঙ্গে conjuction এ, freadথেকে data.tableপ্যাকেজ:

library(data.table)
dt <- fread("curl http://www.newcl.org/data/zipfiles/a1.zip | funzip")

সংরক্ষণাগারে একাধিক ফাইল রয়েছে এমন ক্ষেত্রে, আপনি tarস্টডআউটে নির্দিষ্ট ফাইলটি বের করার পরিবর্তে ব্যবহার করতে পারেন :

dt <- fread("curl http://www.newcl.org/data/zipfiles/a1.zip | tar -xf- --to-stdout *a1.dat")

যখন আমি একাধিক ফাইলের জন্য আপনার সমাধানটি চেষ্টা করেছি, তখন আমি একটি ত্রুটি পেয়ে যাচ্ছিFile is empty:
বিসেল্ট 141

9

এখানে এমন উদাহরণ রয়েছে যা ফাইলগুলির জন্য কাজ করে যা read.tableফাংশনটি সহ পড়া যায় না । এই উদাহরণটি একটি .xls ফাইল পড়ে।

url <-"https://www1.toronto.ca/City_Of_Toronto/Information_Technology/Open_Data/Data_Sets/Assets/Files/fire_stns.zip"

temp <- tempfile()
temp2 <- tempfile()

download.file(url, temp)
unzip(zipfile = temp, exdir = temp2)
data <- read_xls(file.path(temp2, "fire station x_y.xls"))

unlink(c(temp, temp2))

5

ডেটা.ট্যাবল ব্যবহার করে এটি করতে, আমি দেখতে পেয়েছি যে নিম্নলিখিত কাজ করে। দুর্ভাগ্যক্রমে, লিঙ্কটি আর কাজ করে না, তাই আমি অন্য ডেটা সেটের জন্য একটি লিঙ্কটি ব্যবহার করেছি।

library(data.table)
temp <- tempfile()
download.file("https://www.bls.gov/tus/special.requests/atusact_0315.zip", temp)
timeUse <- fread(unzip(temp, files = "atusact_0315.dat"))
rm(temp)

আমি জানি যে এটি একটি একক লাইনে সম্ভব, যেহেতু আপনি বাশ স্ক্রিপ্টগুলি এতে পাস করতে পারেন freadতবে আমি নিশ্চিত না যে কীভাবে একটি .zip ফাইল ডাউনলোড করতে হবে, এক্সট্র্যাক্ট করতে হবে এবং সেখান থেকে কোনও একক ফাইল কীভাবে পাস করতে হবে fread


4

এই কোড ব্যবহার করে দেখুন। এটা আমার জন্য কাজ করে:

unzip(zipfile="<directory and filename>",
      exdir="<directory where the content will be extracted>")

উদাহরণ:

unzip(zipfile="./data/Data.zip",exdir="./data")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.