Вопрос 2 задания 4.
Для этого вопроса рассчитайте корреляцию соотношения выигрышей и проигрышей с населением города, в котором он находится, для НБА, используя данные за 2018 год.
Когда я отправляю задание, это ошибка. get
Вы не прошли этот тест из-за ошибки. Обратная трассировка была удалена, поскольку она может содержать скрытые тесты. Это
выброшенное исключение:
AssertionError: Q2: Ваш ответ недостаточно близок к нашему, чтобы быть
правильным.
Я получаю ответ:
-0.16087318003059875
У меня такое чувство, что ответ должен быть примерно
-0.1763635064218294
поскольку это то, что другие онлайн-ресурсы показывают мне для людей, принявших участие в тесте,
Вот мои выходные данные Dataframe:
Код: Выделить всё
NBA DataFrame:
W/L% Population
Metropolitan area
Atlanta 0.293 5789700.0
Boston 0.671 4794447.0
Charlotte 0.439 2474314.0
Chicago 0.329 9512999.0
Cleveland 0.610 2055612.0
Dallas–Fort Worth 0.293 7233323.0
Denver 0.561 2853077.0
Detroit 0.476 4297617.0
Houston 0.793 6772470.0
Indianapolis 0.585 2004230.0
Los Angeles 0.512 13310447.0
Memphis 0.268 1342842.0
Miami–Fort Lauderdale 0.537 6066387.0
Milwaukee 0.537 1572482.0
Minneapolis–Saint Paul 0.573 3551036.0
New Orleans 0.585 1268883.0
New York City 0.341 20153634.0
Oklahoma City 0.585 1373211.0
Orlando 0.305 2441257.0
Philadelphia 0.634 6070500.0
Phoenix 0.256 4661537.0
Portland 0.598 2424955.0
Sacramento 0.329 2296418.0
Salt Lake City 0.585 1186187.0
San Antonio 0.573 2429609.0
San Francisco Bay Area 0.707 6657982.0
Toronto 0.720 5928040.0
Washington, D.C. 0.524 6131977.0
Correlation Coefficient: -0.16087318003059875
-0.16087318003059875
Это мое решение вопроса 2, запущенное в блокноте Jupyter
Код: Выделить всё
import pandas as pd
import numpy as np
import scipy.stats as stats
import re
cities = pd.read_html("assets/wikipedia_data.html")[1]
cities = cities.iloc[:-1, [0, 3, 5, 6, 7, 8]]
cities.rename(columns={"Population (2016 est.)[8]": "Population"},
inplace=True)
cities['NFL'] = cities['NFL'].str.replace(r"\[.*\]", "")
cities['MLB'] = cities['MLB'].str.replace(r"\[.*\]", "")
cities['NBA'] = cities['NBA'].str.replace(r"\[.*\]", "")
cities['NHL'] = cities['NHL'].str.replace(r"\[.*\]", "")
Big4='NBA'
def nba_correlation():
team = cities[Big4].str.extract('([A-Z]{0,2}[a-z0-9]*\ [A-Z]{0,2}[a-z0-9]*|[A-Z]{0,2}[a-z0-9]*)([A-Z]{0,2}[a-z0-9]*\ [A-Z]{0,2}[a-z0-9]*|[A-Z]{0,2}[a-z0-9]*)([A-Z]{0,2}[a-z0-9]*\ [A-Z]{0,2}[a-z0-9]*|[A-Z]{0,2}[a-z0-9]*)')
team['Metropolitan area']=cities['Metropolitan area']
team = pd.melt(team, id_vars=['Metropolitan area']).drop(columns=['variable']).replace("",np.nan).replace("—",np.nan).dropna().reset_index().rename(columns = {"value":"team"})
team=pd.merge(team,cities,how='left',on = 'Metropolitan area').iloc[:,1:4]
team = team.astype({'Metropolitan area': str, 'team': str, 'Population': int})
team['team']=team['team'].str.replace('[\w.]*\ ','')
_df=pd.read_csv("assets/"+str.lower(Big4)+".csv")
_df = _df[_df['year'] == 2018]
_df['team'] = _df['team'].str.replace(r'[\*]',"")
_df['team'] = _df['team'].str.replace(r'\(\d*\)',"")
_df['team'] = _df['team'].str.replace(r'[\xa0]',"")
_df = _df[['team','W/L%']]
_df['team'] = _df['team'].str.replace('[\w.]* ','')
_df = _df.astype({'team': str,'W/L%': float})
merge=pd.merge(team,_df,'outer', on = 'team')
merge=merge.groupby('Metropolitan area').agg({'W/L%': np.nanmean, 'Population': np.nanmean})
population_by_region = merge['Population'] # pass in metropolitan area population from cities
win_loss_by_region = merge['W/L%'] # pass in win/loss ratio from _df in the same order as cities["Metropolitan area"]
assert len(population_by_region) == len(win_loss_by_region), "Q2: Your lists must be the same length"
assert len(population_by_region) == 28, "Q2: There should be 28 teams being analysed for NBA"
return stats.pearsonr(population_by_region, win_loss_by_region)[0]
nba_correlation()
Код: Выделить всё
import pandas as pd
import numpy as np
import scipy.stats as stats
import re
def clear_data(string1):
if re.search(r'\[[a-z]* [0-9]+\]', string1) is None:
return string1
else:
return string1.replace(re.search(r'\[[a-z]* [0-9]+\]', string1).group(), '')
def get_area(team):
for each in list(nhl_cities.index.values):
if team in each:
return nhl_cities.at[each, 'Metropolitan area']
nhl_df=pd.read_csv("assets/nhl.csv")
cities=pd.read_html("assets/wikipedia_data.html")[1]
cities=cities.iloc[:-1,[0,3,5,6,7,8]]
cities['NHL'] = cities['NHL'].apply(lambda x: clear_data(x))
nhl_cities = cities[['Metropolitan area', 'NHL']].set_index('NHL')
nhl_cities = nhl_cities.drop(['—', ''], axis=0)
nhl_df = nhl_df[nhl_df['year'] == 2018].drop([0, 9, 18, 26], axis=0) # get only 2018 stats
population = cities[['Metropolitan area', 'Population (2016 est.)[8]']]
population = population.set_index('Metropolitan area')
nhl_df['team'] = nhl_df['team'].apply(lambda x: x[:-1].strip() if x.endswith("*") else x.strip())
nhl_df['area'] = nhl_df['team'].apply(lambda x: x.split(" ")[-1])
nhl_df['area'] = nhl_df['area'].apply(lambda x: get_area(x))
out = []
for group, frame in nhl_df.groupby('area'):
total_wins = np.sum(pd.to_numeric(frame['W']))
total_losses = np.sum(pd.to_numeric(frame['L']))
total_matches = total_wins + total_losses
ratio = total_wins / total_matches
out_dict = {
'Area': group,
'Ratio': ratio
}
out.append(out_dict)
new_df = pd.DataFrame(out)
new_df = new_df.set_index('Area')
out_df = pd.merge(new_df, population, how="inner", left_index=True, right_index=True)
out_df['Population (2016 est.)[8]'] = pd.to_numeric(out_df['Population (2016 est.)[8]'])
def nhl_correlation():
population_by_region = out_df['Population (2016 est.)[8]'].to_list()
win_loss_by_region = out_df['Ratio'].to_list()
assert len(population_by_region) == len(win_loss_by_region), "Q1: Your lists must be the same length"
assert len(population_by_region) == 28, "Q1: There should be 28 teams being analysed for NHL"
return np.float64(stats.pearsonr(population_by_region, win_loss_by_region)[0])
def get_nhl_data():
return out_df
В этом задании вы должны прочитать в файле
мегаполисы и связанные с ними спортивные команды из
assets/wikipedia_data.html и ответьте на некоторые вопросы о каждом
агломерации. В каждом из этих регионов может быть одна или несколько команд
из «Большой четверки»: НФЛ (футбол, в assets/nfl.csv), MLB (бейсбол, в
assets/mlb.csv), NBA. (баскетбол, в assets/nba.csv или НХЛ (хоккей, в
assets/nhl.csv). Пожалуйста, имейте в виду, что все вопросы задаются с точки зрения
столичный регион и что этот файл является
"источником полномочий" для определения местонахождения данной спортивной команды. Таким образом,
команды, которые обычно известны в другом регионе (например, «Окленд
Рейдерс»). ") необходимо сопоставить с данным мегаполисом (например,
Район залива Сан-Франциско). Для этого потребуются некоторые человеческие данные
понимания помимо данных, которые вам были предоставлены (например, вы
придется вручную закодировать некоторые названия и, возможно, потребуется поискать в Google, чтобы узнать
где находятся команды)!
Я хотел бы, чтобы вы ответили по каждому виду спорта вопрос: какова
корреляция соотношения выигрышей/проигрышей с населением города, в котором он находится?
Отношение выигрышей/проигрышей относится к количеству побед по сравнению с количеством побед
плюс количество потерь. Помните, что для расчета корреляции
с помощью pearsonr вам придется отправить два упорядоченных списка
значений: генеральную совокупность из файла wikipedia_data.html и соотношение
выигрышей/проигрышей для данный вид спорта в том же порядке. Усредните
соотношения побед/проигрышей для тех городов, в которых есть несколько команд по одному
виду спорта. Каждый вид спорта оценивается в этом задании на равную сумму
(20%*4=80%) от оценки за это задание. Для анализа следует использовать данные
только за 2018 год — это важно!
Примечания. Не включайте данные о MLS или CFL в любую свою работу
делаем, в этом задании нас интересует только «Большая четверка». Я
настоятельно рекомендую вам сначала ответить на четыре вопроса о корреляции по порядку, поскольку все они похожи и заслуживают большинства оценок за
это задание. Это задумано! Разговаривать со сверстниками
о стратегии высокого уровня, а также об отношениях между
мегаполисами и спортивными командами - это честная игра. Однако не публикуйте код, решающий
аспекты задания (в том числе такие, как словари, отображающие
области в команды, или регулярные выражения, которые очищают имена). Команд может быть
больше, чем в тесте утверждений, не забудьте свернуть
несколько команд в одном городе в одно значение! Поскольку это назначение
использует глобальные переменные в скелетном коде, чтобы избежать ошибок
в вашем коде, вы можете:
Вы можете поместить весь свой код в определения функций для всех
вопросов (кроме операторов импорта). Вы можете создать копии
всех глобальных переменных с помощью метода copy() и действовать
как обычно.
Вот некоторые из них. примеры данных, чтобы можно было понять, как данные в файлах CSV выглядят в Jupyter Notebook:
mlb.csv

nfl.csv

nba.csv

nhl.csv

wikipedia_data.html

Подробнее здесь: https://stackoverflow.com/questions/769 ... orrect-int
Мобильная версия