#python #pandas #jupyter-notebook
#python #pandas #jupyter-notebook
Вопрос:
В настоящее время я работаю над проблемой, которая включает в себя перемещение по большому набору данных, в котором я получаю измерения, распределенные по расстоянию (каждое измерение имеет заданную широту / lon). Я ищу более pythonic / эффективный способ решения этой проблемы, чем у меня есть в настоящее время, поскольку Jupyter Notebook не завершает компиляцию примерно после 40000 итераций (мне нужно около 300000).
В настоящее время моим текущим решением является следующий код, где размер окна равен 100m:
for m in range(6):
co_means = list(dfs[m]['co'])
dates = list(pd.to_datetime(dfs[m]['gps_time']))
dfs[m]['co'] = dfs[m]['co']*1000
R = 6373.0
for i in range (len(co_means)-3):
print (len(co_means))
print (i)
current_list_co2 = []
current_list_co = []
k = i
lat1 = radians(dfs[m]['lat'][i])
lon1 = radians(dfs[m]['lon'][i])
if (dates[k] != dates[-1]):
distance = 0
while(distance<100):
lat2 = radians(dfs[m]['lat'][k])
lon2 = radians(dfs[m]['lon'][k])
dlon = lon2 - lon1
dlat = lat2 - lat1
a = sin(dlat / 2)**2 cos(lat1) * cos(lat2) * sin(dlon / 2)**2
c = 2 * atan2(sqrt(a), sqrt(1 - a))
print (distance)
distance = R * c *1000
if distance<100:
current_list_co2.append(dfs[m]['co2d'][k])
current_list_co.append(dfs[m]['co'][k])
k =1
if (dates[k] == dates[-1]):
break
#only do calculations for those values that aren't in empty lists
print (dates[k])
if len(current_list_co2)!=0 and len(current_list_co) != 0:
results.write("%s" % (dates[i]))
#for ratio of co:co2
a_fit, cov = curve_fit(linear_function, current_list_co2, current_list_co)
y_int = a_fit[0]
slope = a_fit[1]
print (len(current_list_co2))
err_yint = math.sqrt(cov[0][0])
err_slope = math.sqrt(cov[1][1])
#to find r2:
z = stats.linregress(current_list_co2,current_list_co)
r2 = z[2]**2
x_list = list(range(1,len(current_list_co2) 1))
#for linregress parameters for co2 and co individually
a_fit_co2, cov_co2 = curve_fit(linear_function, x_list, current_list_co2)
a_fit_co, cov_co = curve_fit(linear_function, x_list, current_list_co)
Любая помощь была бы с благодарностью принята!
Редактировать: Образец набора данных: dict
{'co': {0: 425.07144266999995, 1: 425.06915346999995, 2: 425.06915346999995, 3: 433.21636567, 4: 433.21636567,
5: 433.21803501999995, 6: 433.21803501999995, 7: 411.10666247, 8: 411.10666247, 9: 411.38779539999996,
10: 411.38779539999996, 11: 420.62025938000005, 12: 420.62025938000005, 13: 421.1036325, 14: 421.1036325,
15: 413.96486982000005, 16: 413.96486982000005, 17: 413.44999135, 18: 413.44999135, 19: 408.73726959},
'gps_time': {0: '2019-11-18 14:37:51.000000', 1: '2019-11-18 14:37:51.000000', 2: '2019-11-18 14:37:52.000000',
3: '2019-11-18 14:37:53.000000', 4: '2019-11-18 14:37:54.000000', 5: '2019-11-18 14:37:54.000000',
6: '2019-11-18 14:37:55.000000', 7: '2019-11-18 14:37:56.000000', 8: '2019-11-18 14:37:56.000000',
9: '2019-11-18 14:37:57.000000', 10: '2019-11-18 14:37:57.000000', 11: '2019-11-18 14:37:58.000000',
12: '2019-11-18 14:37:59.000000', 13: '2019-11-18 14:38:00.000000', 14: '2019-11-18 14:38:00.000000',
15: '2019-11-18 14:38:01.000000', 16: '2019-11-18 14:38:02.000000', 17: '2019-11-18 14:38:02.000000',
18: '2019-11-18 14:38:03.000000', 19: '2019-11-18 14:38:04.000000'},
'lat': {0: 45.5052230462, 1: 45.5052230462, 2: 45.5052236012, 3: 45.5052241548, 4: 45.5052247083, 5: 45.5052247083,
6: 45.505224740900005, 7: 45.505224193000004, 8: 45.505224193000004, 9: 45.5052236451,
10: 45.5052236451, 11: 45.5052230897, 12: 45.5052225243, 13: 45.505221958999996, 14: 45.505221958999996,
15: 45.5052211427, 16: 45.505220058, 17: 45.505220058, 18: 45.505218973299996, 19: 45.5052183333},
'lon': {0: -73.5761855743, 1: -73.5761855743, 2: -73.576185, 3: -73.576185, 4: -73.576185, 5: -73.576185,
6: -73.5761855183, 7: -73.5761866141, 8: -73.5761866141, 9: -73.5761877098, 10: -73.5761877098,
11: -73.576188577, 12: -73.5761891424, 13: -73.57618970770001, 14: -73.57618970770001,
15: -73.5761894761, 16: -73.57618839140001, 17: -73.57618839140001, 18: -73.5761873066, 19: -73.5761857775},
'co2d': {0: 380.58647938, 1: 381.44674445, 2: 451.67041972, 3: 451.67041972, 4: 451.66555392, 5: 451.66555392,
6: 456.29788806, 7: 456.29788806, 8: 456.29412627, 9: 456.29412627, 10: 520.61774288, 11: 520.61774288,
12: 520.62904898, 13: 520.62904898, 14: 630.97037738, 15: 630.97037738, 16: 630.9919346, 17: 630.9919346,
18: 512.76133406, 19: 512.76133406}}
Комментарии:
1. @Ben. Я только что добавил его фотографию, я не смог придумать способ добавить таблицу в вопрос, есть ли лучший способ для меня поделиться данными?
2. Публикуйте данные в виде текста / кода, а не в виде изображений. Если ваши данные представляют собой фрейм данных pandas, используйте
df.to_dict
. Тем не менее, может быть, вы можете использоватьRadiusNeighborsRegressor
fromsklearn
?3. Хорошо, я это сделал, выглядит неаккуратно, это нормально?
4. @Ben. Я понял! Спасибо за совет!