Zacznij terazZacznij za darmo

Pisanie iteratora do wczytywania danych fragmentami (5)

To ostatni etap. Wiesz już sporo o przetwarzaniu dużego zbioru danych fragment po fragmencie. W tym ostatnim ćwiczeniu umieścisz cały kod przetwarzający dane w jednej funkcji – dzięki temu będzie można go łatwo wielokrotnie używać bez przepisywania od nowa.

Zdefiniujesz funkcję plot_pop(), która przyjmuje dwa argumenty: nazwę pliku do przetworzenia oraz kod kraju identyfikujący wiersze, które chcesz przetworzyć w zbiorze danych.

Ponieważ cały kod napisany w poprzednich ćwiczeniach zostanie zawarty w plot_pop(), wywołanie tej funkcji automatycznie wykonuje następujące kroki:

  • Wczytywanie pliku fragment po fragmencie,
  • Tworzenie nowej kolumny z wartościami populacji miejskiej,
  • Rysowanie wykresu danych dotyczących populacji miejskiej.

To całkiem sporo pracy – ale teraz funkcja sprawia, że cały ten proces można łatwo powtórzyć dla dowolnego pliku i kodu kraju!

Do pracy wykorzystasz dane z pliku 'ind_pop_data.csv', dostępnego w bieżącym katalogu. Pakiety pandas i matplotlib.pyplot zostały zaimportowane odpowiednio jako pd i plt.

Po zakończeniu ćwiczenia zatrzymaj się chwilę, przyjrzyj się wykresom i zastanów nad nowymi umiejętnościami, które udało ci się zdobyć. To jeszcze nie koniec! Jeśli praca z tymi danymi sprawiła ci przyjemność, możesz kontynuować ich eksplorację, korzystając ze wstępnie przetworzonej wersji dostępnej na Kaggle.

To ćwiczenie jest częścią kursu

Zestaw narzędzi Pythona

Zobacz kurs

Instrukcje do ćwiczenia

  • Zdefiniuj funkcję plot_pop() przyjmującą dwa argumenty: filename – nazwa pliku do przetworzenia, oraz country_code – kod kraju, dla którego mają zostać przetworzone dane.
  • Wywołaj plot_pop(), aby przetworzyć dane dla kodu kraju 'CEB' z pliku 'ind_pop_data.csv'.
  • Wywołaj plot_pop(), aby przetworzyć dane dla kodu kraju 'ARB' z pliku 'ind_pop_data.csv'.

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

# Define plot_pop()
def ____(____, ____):

    # Initialize reader object: urb_pop_reader
    urb_pop_reader = pd.read_csv(filename, chunksize=1000)

    # Initialize empty DataFrame: data
    data = pd.DataFrame()
    
    # Iterate over each DataFrame chunk
    for df_urb_pop in urb_pop_reader:
        # Check out specific country: df_pop_ceb
        df_pop_ceb = df_urb_pop[df_urb_pop['CountryCode'] == country_code]

        # Zip DataFrame columns of interest: pops
        pops = zip(df_pop_ceb['Total Population'],
                    df_pop_ceb['Urban population (% of total)'])

        # Turn zip object into list: pops_list
        pops_list = list(pops)

        # Use list comprehension to create new DataFrame column 'Total Urban Population'
        df_pop_ceb['Total Urban Population'] = [int(tup[0] * tup[1] * 0.01) for tup in pops_list]
        
        # Concatenate DataFrame chunk to the end of data: data
        data = pd.concat([data, df_pop_ceb])

    # Plot urban population data
    data.plot(kind='scatter', x='Year', y='Total Urban Population')
    plt.show()

# Set the filename: fn
fn = 'ind_pop_data.csv'

# Call plot_pop for country code 'CEB'


# Call plot_pop for country code 'ARB'
Edytuj i uruchom kod