Перегляд наборів даних в циклі

Огляд

Викладання: 5 хв
Вправи: 10 хв
Питання
  • Як я можу обробити багато наборів даних за допомогою однієї команди?

Цілі
  • Вміти читати та писати вирази глоббінгу, які відповідають наборам файлів

  • Використовувати glob для створення списків файлів.

  • Писати цикли for для виконання операцій над файлами, названими у списку.

Використовуйте цикл for для обробки файлів, заданих списком їхніх імен.

import pandas as pd
for filename in ['data/gapminder_gdp_africa.csv', 'data/gapminder_gdp_asia.csv']:
    data = pd.read_csv(filename, index_col='country')
    print(filename, data.min())
data/gapminder_gdp_africa.csv gdpPercap_1952    298.846212
gdpPercap_1957    335.997115
gdpPercap_1962    355.203227
gdpPercap_1967    412.977514
⋮ ⋮ ⋮
gdpPercap_1997    312.188423
gdpPercap_2002    241.165877
gdpPercap_2007    277.551859
dtype: float64
data/gapminder_gdp_asia.csv gdpPercap_1952    331
gdpPercap_1957    350
gdpPercap_1962    388
gdpPercap_1967    349
⋮ ⋮ ⋮
gdpPercap_1997    415
gdpPercap_2002    611
gdpPercap_2007    944
dtype: float64

Використовуйте glob.glob, щоб знайти набори файлів, імена яких відповідають шаблону.

import glob
print('all csv files in data directory:', glob.glob('data/*.csv'))
all csv files in data directory: ['data/gapminder_all.csv', 'data/gapminder_gdp_africa.csv', \
'data/gapminder_gdp_americas.csv', 'data/gapminder_gdp_asia.csv', 'data/gapminder_gdp_europe.csv', \
'data/gapminder_gdp_oceania.csv']
print('all PDB files:', glob.glob('*.pdb'))
all PDB files: []

Використовуйте glob і for для обробки пакетів файлів.

for filename in glob.glob('data/gapminder_*.csv'):
    data = pd.read_csv(filename)
    print(filename, data['gdpPercap_1952'].min())
data/gapminder_all.csv 298.8462121
data/gapminder_gdp_africa.csv 298.8462121
data/gapminder_gdp_americas.csv 1397.717137
data/gapminder_gdp_asia.csv 331.0
data/gapminder_gdp_europe.csv 973.5331948
data/gapminder_gdp_oceania.csv 10039.59564

Визначення збігів

Який із цих файлів не відповідає виразу glob.glob('data/*as*.csv')?

  1. data/gapminder_gdp_africa.csv
  2. data/gapminder_gdp_americas.csv
  3. data/gapminder_gdp_asia.csv
  4. 1 and 2 are not matched.

Рішення

1 не відповідає glob.

Мінімальний розмір файлу

Змініть цю програму так, щоб вона друкувала кількість записів файлі, який містить найменшу кількість записів

import glob
import pandas as pd
fewest = ____
for filename in glob.glob('data/*.csv'):
    dataframe = pd.____(filename)
    fewest = min(____, dataframe.shape[0])
print('smallest file has', fewest, 'records')

Зауважте, що shape method повертає кортеж із кількістю рядків і стовпців фрейму даних.

Рішення

import glob
import pandas as pd
fewest = float('Inf')
for filename in glob.glob('data/*.csv'):
    dataframe = pd.read_csv(filename)
    fewest = min(fewest, dataframe.shape[0])
print('smallest file has', fewest, 'records')

Порівняння даних

Напишіть програму, яка читає регіональні набори даних і будує графік середнього ВВП на душу населення для кожного регіону в часі в одній діаграмі.

Рішення

Це рішення створює корисну легенду за допомогою методу string split для вилучення region зі шляху ‘data/gapminder_gdp_a_specific_region.csv’. [pathlib module] також забезпечує корисні абстракції для маніпулювання файлами та шляхами, такі як повернення назви файлу без розширення файлу.

import glob
import pandas as pd
import matplotlib.pyplot as plt
fig, ax = plt.subplots(1,1)
for filename in glob.glob('data/gapminder_gdp*.csv'):
    dataframe = pd.read_csv(filename)
    # вилучіть <region> з імені файла, який має бути у форматі 'data/gapminder_gdp_<region>.csv'.
    # ми розділимо рядок за допомогою методу split та з викоританням `_` як роздільника,
    # отримаємо останній рядок у списку, який повертає розділений (`<region>.csv`), 
    # та потім видалимо розширення `.csv` з того рядка.
    region = filename.split('_')[-1][:-4] 
    dataframe.mean().plot(ax=ax, label=region)
plt.legend()
plt.show()

Ключові моменти

  • Використовуйте цикл for для обробки файлів із списком їх імен.

  • Використовуйте glob.glob, щоб знайти набори файлів, імена яких відповідають шаблону.

  • Використовуйте glob і for для обробки пакетів файлів.