«AssertionError: Q2: ваш ответ недостаточно близок к нашему, чтобы быть правильным». (Введение в науку о данных в PythonPython

Программы на Python
Ответить
Anonymous
 «AssertionError: Q2: ваш ответ недостаточно близок к нашему, чтобы быть правильным». (Введение в науку о данных в Python

Сообщение Anonymous »

Мне нужна помощь с заданием 4 по «Введению в науку о данных в Python».
Вопрос 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()
Я не совсем уверен, как это сделать, поскольку уверен, что выполнил задание в полную силу, а также ниже приведен код моего вопроса 1 на случай, если он пересечется.< /p>

Код: Выделить всё

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
А вот вопрос к заданию 4.

В этом задании вы должны прочитать в файле
мегаполисы и связанные с ними спортивные команды из
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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»