Я изучаю python на dataquest и пытаюсь решить эту проблему.Python-find извлекает те же значения в списке и вычисляет различия между последовательными значениями
Напишите функцию, которая извлекает одни и те же значения в течение лет и вычисляет различия между последовательными значениями, чтобы показать, увеличивается ли число рождений или уменьшается. Например, как количество рождений в субботу менялось каждый год в период с 1994 по 2003 год?
Я пытаюсь решить это в Jupyter. Я новичок в python, и я не уверен, как начать работу над этой проблемой.
вход Данные здесь в формате CSV: US births
# coding: utf-8
# In[1]:
text_file = open("US_births_1994-2003_CDC_NCHS.csv", "r").read()
line_split = text_file.split("\n")
line_split
# In[2]:
def read_csv(filename):
text = open(filename, "r").read()
string_list = text.split('\n')[1:]
final_list = []
for row in string_list:
int_fields = []
string_fields = row.split(',')
for item in string_fields:
int_fields.append(int(item))
final_list.append(int_fields)
return(final_list)
cdc_list = read_csv("US_births_1994-2003_CDC_NCHS.csv")
cdc_list[0:10]
# In[3]:
def months_births(filename):
births_per_month = dict()
for item in filename:
num_month = int(item[1])
num_births = int(item[4])
if num_month in births_per_month:
births_per_month[num_month] += num_births
else:
births_per_month[num_month] = num_births
return(births_per_month)
cdc_month_births = months_births(cdc_list)
cdc_month_births
# In[4]:
def dow_births(filename):
sum_births = dict()
for item in filename:
day_week = int(item[3])
day_birth = int(item[4])
if day_week in sum_births:
sum_births[day_week] += day_birth
else:
sum_births[day_week] = day_birth
return(sum_births)
cdc_day_births = dow_births(cdc_list)
cdc_day_births
# In[30]:
def calc_counts(data, column):
sum_dict = dict()
for item in data:
col_num = item[column]
birth_count = int(item[4])
if col_num in sum_dict:
sum_dict[col_num] += birth_count
else:
sum_dict[col_num] = birth_count
return(sum_dict)
cdc_year_births = calc_counts(cdc_list, 0)
cdc_month_births = calc_counts(cdc_list, 1)
cdc_dom_births = calc_counts(cdc_list, 2)
cdc_dow_births = calc_counts(cdc_list, 3)
# In[31]:
cdc_year_births
# In[32]:
cdc_month_births
# In[33]:
cdc_dom_births
# In[34]:
cdc_dow_births
# In[6]:
def min_max_dict(filename, request):
if request == "max":
max_value = max(filename, key=filename.get)
return(filename[max_value])
else:
min_value = min(filename, key=filename.get)
return(filename[min_value])
max_value = min_max_dict(cdc_year_births, "max")
print("max: ",max_value)
min_value = min_max_dict(cdc_year_births, "min")
print("min: ",min_value)
# In[36]:
def diff_in_values(filename):
final_dict = dict()
seen_set = set()
unique_values = list()
for item in filename:
year_count = int(item[0])
birth_count = int(item[4])
day_of_week = int(item[3])
if birth_count not in seen_set:
unique_values.append(birth_count)
seen_set.add(birth_count)
return(seen_set)
result = diff_in_values(cdc_list)
result
Вы начать с уточняя требования. Каков формат данных лет и числа рождений (как формата самих данных, так и того, как он хранится с другими данными)? Как ваша функция может получить доступ к этим данным? Каков желаемый формат вывода? Существуют ли какие-либо другие требования или предпочтения? Мы не можем помочь вам, пока вы не поймете эти требования и не включите их в свой вопрос. Проверьте [FAQ] (http://stackoverflow.com/tour) и [Как спросить] (http://stackoverflow.com/help/how-to-ask). –
Большое спасибо. Я включил дополнительную информацию в вопрос. Пожалуйста, дайте мне знать, если этого недостаточно. – iprateekk
Больше информации о вводе, и вы ничего не сказали о выходе. Это файл csv на вашем диске в той же папке, что и ваш функциональный модуль? Является ли этот файл гарантией иметь это имя, чтобы иметь ровно одну строку для каждого дня с 1994-01-01 по 2003-12-31, чтобы строки были в хронологическом порядке без повторных или отсутствующих дней, для строки заголовка и строки данных должны быть полными и надлежащим образом отформатированы и т. д.? Вопрос о субботних родах - единственный выход? И так далее. И вы понимаете, что ваш код фактически не имеет доступа к данным? –