Мощные утилиты Python для анализа данных

Мощные утилиты Python для анализа данных

В этой статье я предоставляю пошаговое руководство по некоторым очень полезным утилитам Python для анализа и управления данными. В примерах этой статьи используются данные из датафрейма компаний S&P 500, которые я сохранил в файле pickle.

import pandas as pd from collections import Counter import pickle with open("data/sp500info_df.pickle", "rb") as f: df = pickle.load(f)

Понимание основных характеристик данных Python

В данной части кода, я знакомлюсь с высокоуровневыми данными:

df.info() <class 'pandas.core.frame.DataFrame'> RangeIndex: 503 entries, 0 to 502 Columns: 113 entries, symbol to trailingPegRatio dtypes: float64(101), int64(1), object(11) memory usage: 444.2+ KB df.head()
Мощные утилиты Python для анализа данных
df.columns Index(['symbol', 'sector', 'fullTimeEmployees', 'industry', 'ebitdaMargins', 'profitMargins', 'grossMargins', 'operatingCashflow', 'revenueGrowth', 'operatingMargins', ... 'fiveYearAvgDividendYield', 'fiftyTwoWeekLow', 'bid', 'tradeable', 'dividendYield', 'bidSize', 'dayHigh', 'regularMarketPrice', 'preMarketPrice', 'trailingPegRatio'], dtype='object', length=113) df.dtypes symbol object sector object fullTimeEmployees float64 industry object ebitdaMargins float64 ... bidSize float64 dayHigh float64 regularMarketPrice float64 preMarketPrice float64 trailingPegRatio float64 Length: 113, dtype: object df.describe()
Мощные утилиты Python для анализа данных
Мощные утилиты Python для анализа данных

Проверьте, существует ли столбец или набор столбцов, используя функцию Python

Здесь я использую ‘subset’ и ‘if in’ для данной цели.

cols = ['symbol', 'beta', 'ebitda'] if set(cols).issubset(df.columns): display(df[cols].head())
Мощные утилиты Python для анализа данных
col = 'ebitda' if col in df.columns: display(df[[col]].head())
Мощные утилиты Python для анализа данных

Проверьте, есть ли текущая цена менее 6 долларов

Здесь я проверяю, есть ли у какой-либо компании S&P 500 текущая цена меньше $6. Код выводит объект Series со значением True или False.

result = df['currentPrice'] < 6 result
Мощные утилиты Python для анализа данных

Теперь я применяю функцию any(), чтобы проверить, является ли какой-либо один элемент в приведённом выше результате истинным:

any(result)

True

Мне любопытно, какую компанию мы увидим в результате!

Мощные утилиты Python для анализа данных

Проверьте, является ли объект итеративным

Как я отмечал в приведённом выше разделе, результат должен быть повторяемым для применения функции any(). В результате получается тип Series. Но как проверить, является ли ряд итеративным? Используйте блок try/except для перехвата исключения:

type(result) pandas.core.series.Series try: iter(result) except TypeError: print("result object not an iterable") else: print("result object is iterable") Object is iterable

Создайте список текущих цен, превышающих 1000 долларов

Я использую понимание списка вместо зацикливания, чтобы код был коротким и чистым:

result = [price for price in df['currentPrice'].unique().tolist() if price > 1000] result [2468.7, 2005.53, 1413.64, 1470.14, 4650.0]

Создайте строку из всех секторов, раздёленных запятыми

Я использую функцию join() вместо цикла, чтобы код был коротким и чистым.

result = ", ".join(df['sector'].dropna().unique().tolist()) result 'Industrials, Healthcare, Technology, Communication Services, Consumer Defensive, Consumer Cyclical, Utilities, Financial Services, Basic Materials, Real Estate, Energy'

Подсчитайте входящие элементы

Я показываю один из многих способов отслеживания частот элементов, используя коллекцию модуля класса Counter.

result = Counter(df['sector'].dropna()) result Counter({'Industrials': 71, 'Healthcare': 64, 'Technology': 71, 'Communication Services': 25, 'Consumer Defensive': 35, 'Consumer Cyclical': 58, 'Utilities': 30, 'Financial Services': 69, 'Basic Materials': 22, 'Real Estate': 32, 'Energy': 23})

Перечислите отрасли в виде списка по областям

Я объединяю список отраслей по каждой области в виде столбца. Преобразование списка в набор предназначено для устранения дубликатов.

sector_industries_df = df[['sector', 'industry']].groupby('sector', as_index=False).agg(lambda x: set(x.tolist())) sector_industries_df
Мощные утилиты Python для анализа данных

Проверка типа любого элемента в столбце "industry":

type(sector_industries_df.industry[0]) #type(sector_industries_df.iloc[0, 1]) set

Разрыв колонки, содержащей набор отраслей

Это почти обратный процесс того, чего мы реализовывали выше. Но он использует функцию Датафрейма explode().

sector_industries_exp_df = sector_industries_df.explode('industry') sector_industries_exp_df
Мощные утилиты Python для анализа данных

Преобразование столбцов в строки на Python

Я преобразую значения столбца цен в виде отдельных строк, используя функцию melt().

Позвольте мне сначала создать фрейм данных меньшего размера без столбцов сектора и цены, чтобы проиллюстрировать это:

subset_df = df[['symbol', 'currentPrice', 'targetLowPrice', 'targetHighPrice', 'targetMeanPrice', 'targetMedianPrice']] subset_df
Мощные утилиты Python для анализа данных

Просмотрите все ценовые рекорды на Apple:

subset_metl_df = subset_df.melt(id_vars=['symbol'], value_vars=['currentPrice', 'targetLowPrice', 'targetHighPrice', 'targetMeanPrice', 'targetMedianPrice'], var_name='Price Type', value_name='Price') subset_metl_df[subset_metl_df['symbol'] == 'AAPL']
Мощные утилиты Python для анализа данных

Разбейте текущие цены на равное количество наблюдений

Для этого я использую функцию pandas qcut(). Здесь ячейки непрерывны, и они содержат точно такое же количество наблюдений:

pd.qcut(df['currentPrice'], 10).value_counts()

Мощные утилиты Python для анализа данных

Разбейте текущие цены на дискретные интервалы

Для этого я использую функцию pandas cut():

pd.cut(df['currentPrice'], bins=[0, 100, 200, 300, 500, 1000, 3000, 5000, 10000]).value_counts()

Мощные утилиты Python для анализа данных

Заключение

Когда вы попробуете каждую из этих функций, вы обнаружите, насколько мощным является язык программирования Python, если дело доходит до задач с анализом данных.

Статья была взята из следующего источника:

Начать дискуссию