Мощные утилиты 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)

Изучаем данные с помощью базовых функций Pandas

В данной части кода, я выведу информацию по нашим данные:

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 для анализа данных

df.sample(n=10)

Мощные утилиты 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 для анализа данных

Преобразуем столбцов в строки

Я преобразую значения столбца цен в виде отдельных строк, используя функцию 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, если дело доходит до задач с анализом данных.

+1
1
+1
2
+1
2
+1
2
+1
0

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *