निम्न कोड हजारों टेक्स्ट फ़ाइलों वाली फ़ाइल को डाउनलोड और अनज़िप करता है

zip_file_url = "https://docsia-temp.s3-sa-east-1.amazonaws.com/docsia-desafio-dataset.zip"
res = requests.get(zip_file_url, stream=True) # fazendo o request do dado
print("fazendo o download...")
z = zipfile.ZipFile(io.BytesIO(res.content))
print("extraindo os dados")
z.extractall("./")
print("ok..")

इन फ़ाइलों को पांडा डेटाफ़्रेम में कैसे लोड किया जा सकता है?

0
Murilo Barbosa 26 सितंबर 2020, 17:39

1 उत्तर

सबसे बढ़िया उत्तर
  • कोड की इनलाइन व्याख्याएं देखें
  • अनज़िप की गई फ़ाइलों को खोजने के लिए कोड pathlib मॉड्यूल का उपयोग करता है
  • २० लेख प्रकार हैं, जिसका अर्थ है कि डेटाफ़्रेम के शब्दकोश में २० कुंजियाँ हैं, dd
  • प्रत्येक कुंजी का मान, एक डेटाफ़्रेम है, जिसमें प्रत्येक लेख प्रकार के लिए सभी लेख होते हैं।
    • प्रत्येक डेटाफ़्रेम में प्रत्येक लेख के लिए 1000 पंक्तियाँ, 1 पंक्ति होती है।
  • कुल मिलाकर, 20000 लेख हैं।
  • यह कार्यान्वयन लेख के आकार को बनाए रखेगा।
    • जब डेटाफ़्रेम से एक पंक्ति मुद्रित की जाती है, तो लेख नई पंक्तियों और विराम चिह्नों के साथ एक पठनीय रूप में होगा।
  • अलग-अलग डेटाफ़्रेम से एकल डेटाफ़्रेम बनाने के लिए:
    • dfc = pd.concat(dd.values()).reset_index(drop=True)
    • इसीलिए शुरू में डेटाफ्रेम बनाते समय 'type' कॉलम जोड़ा जाता है। एक संयुक्त डेटाफ़्रेम में, लेख प्रकार की पहचान की जा सकेगी।
  • यह इस सवाल का जवाब देता है कि सभी फाइलों को डेटाफ्रेम में कैसे लोड किया जाए।
  • पाठ को संसाधित करने के बारे में अधिक प्रश्नों के लिए, एक नया प्रश्न खोलें।
from pathlib import Path
from io import BytesIO
import requests
import pandas as pd
from collections import defaultdict
from zipfile import ZipFile

######################################################################
# download and save zipped files

# location to save files; this create a pathlib object of the path, and patlib objects have methods, like rglob, parts, and is_file
save_path = Path('data/zipped')

zip_file_url = "https://docsia-temp.s3-sa-east-1.amazonaws.com/docsia-desafio-dataset.zip"
res = requests.get(zip_file_url, stream=True)

with ZipFile(BytesIO(res.content), 'r') as zip_ref:
    zip_ref.extractall(save_path)
######################################################################

# find all the files; the methods in this list comprehension are pathlib methods
files = [file for file in list(save_path.rglob('*')) if file.is_file()]

# dict to save dataframes for each file
dd = defaultdict(list)
for file in files:
    
    # extract the type of article from the path
    article_type = file.parts[-2].replace('.', '_')
    
    # open the file
    with file.open(mode='r', encoding='utf-8', errors='ignore') as f:
        # read the lines and combine them into one string inside a list
        f = [' '.join([line for line in f.readlines() if line.strip()])]
        
    # create a dataframe from f
    df = pd.DataFrame(f, columns=['article'])
    
    # add a column for the article type
    df['type'] = article_type
    
    # add the dataframe to the default dict
    dd[article_type].append(df.copy())

# each value of the dict is a list of dataframes, iterate through all keys and create a single dataframe for each key
for k, v in dd.items():
    # for all the article type, combine all the dataframes into a single dataframe
    dd[k] = pd.concat(v).reset_index(drop=True)
print(dd.keys())
[out]:
dict_keys(['alt_atheism', 'comp_graphics', 'comp_os_ms-windows_misc', 'comp_sys_ibm_pc_hardware', 'comp_sys_mac_hardware', 'comp_windows_x', 'misc_forsale', 'rec_autos', 'rec_motorcycles', 'rec_sport_baseball', 'rec_sport_hockey', 'sci_crypt', 'sci_electronics', 'sci_med', 'sci_space', 'soc_religion_christian', 'talk_politics_guns', 'talk_politics_mideast', 'talk_politics_misc', 'talk_religion_misc'])

# print the first article for the alt_atheism key
print(dd['alt_atheism'].iloc[0, 0])
[out]:
Xref: cantaloupe.srv.cs.cmu.edu alt.atheism:49960 alt.atheism.moderated:713 news.answers:7054 alt.answers:126
 Path: cantaloupe.srv.cs.cmu.edu!crabapple.srv.cs.cmu.edu!bb3.andrew.cmu.edu!news.sei.cmu.edu!cis.ohio-state.edu!magnus.acs.ohio-state.edu!usenet.ins.cwru.edu!agate!spool.mu.edu!uunet!pipex!ibmpcug!mantis!mathew
 From: mathew <mathew@mantis.co.uk>
 Newsgroups: alt.atheism,alt.atheism.moderated,news.answers,alt.answers
 Subject: Alt.Atheism FAQ: Atheist Resources
 Summary: Books, addresses, music -- anything related to atheism
 Keywords: FAQ, atheism, books, music, fiction, addresses, contacts
 Message-ID: <19930329115719@mantis.co.uk>
 Date: Mon, 29 Mar 1993 11:57:19 GMT
 Expires: Thu, 29 Apr 1993 11:57:19 GMT
 Followup-To: alt.atheism
 Distribution: world
 Organization: Mantis Consultants, Cambridge. UK.
 Approved: news-answers-request@mit.edu
 Supersedes: <19930301143317@mantis.co.uk>
 Lines: 290
 Archive-name: atheism/resources
...
0
Trenton McKinney 26 सितंबर 2020, 17:23