我是python新手,在新冠病毒19的封锁期间开始学习编程。 我认为这将是一个很好的数据集来练习,因此我构建了一个程序,根据输入参数绘制数据图。我已经构建了一个for循环,循环遍历数据,为每个指定的国家绘制一条线,然后执行线性回归,输出给定日期的预测值。输出print语句可以很好地满足我所需要的数据,但我想将其转换为一个名为prediction的数据帧。我很难做到这一点,并尝试了numpy阵列以及使用熊猫。 我能够输出到数组或数据帧中,但它只会输入循环迭代中最后一个条目的数据。我读过其他有类似问题的帖子,但我无法准确地阅读他们的代码,从而为我的代码画出类似的解决方案。 任何帮助都将不胜感激
prediction = pd.DataFrame()
countries = [country for country in covid4]
for country in covid4:
plt.plot(covid4.index, covid4[country], marker = ',', linestyle = '-', linewidth = 2)
slope, intercept, rval, pval, stder = linregress(covid4.index, covid4[country])
y2 = (slope * days_from_covid_start) + intercept
print(country, y2, (rval**2), pval, stder)
#prediction = pd.DataFrame({'country': country, 'predicted': y2, 'rval': (rval**2), 'pval': pval, 'stder': stder}, index = [len(country)])
prediction.append(pd.DataFrame([country,y2, (rval**2), pval, stder], index=[0]), ignore_index=True)
print output = US 5179943.844549271 0.9006676283944509 2.6485459147090845e-114 621.5097854328127
Brazil 2936531.6824269355 0.7832301173896118 2.574767200468765e-76 594.2400982216876
India 2073088.1203383887 0.6345313255372067 7.298314985773991e-51 624.2194955678399
Russia 978300.4286278635 0.9142926929617138 1.7522978381731647e-121 108.50766510347822
Peru 505978.0715319741 0.858987519325372 2.99136171150524e-97 76.57252904070529
Colombia 356724.59233558143 0.6333783192991587 1.0395048549255093e-50 107.7550260556157
South Africa 472308.1410419348 0.6966400875418044 6.071717833597016e-60 122.57207991971943
Mexico 466476.80000000005 0.8003861479274035 2.486332913502741e-80 89.06795808066232
Spain 406391.36529570003 0.9113259379908633 7.934640637615308e-120 39.7913275775704
Argentina 231457.53997115127 0.6268247164508722 7.600868471677846e-50 70.99075237604976
Chile 400397.3610073682 0.8667991679346673 5.033317538752307e-100 58.15733490786391
Iran 361576.26469403406 0.964179243093371 6.270093847731166e-164 23.965905293313885
United Kingdom 396538.81819552195 0.9237619398832538 3.5207778505031074e-127 36.6462363789314
France 307895.94598781073 0.9160909120260833 1.628524516693465e-122 29.273492653868225
Bangladesh 258210.0824529258 0.8134667793006155 1.245704530630672e-83 47.16886076960728
Saudi Arabia 301026.7291359661 0.8720838496759029 5.387824647150151e-102 42.7760188991517
***edit covid4包含每个国家的列和日期索引,行表示该日期每个国家的案例
对于上下文,完整代码如下所示
#specifies countries that have above 'n' number
n = 300000
#search for a specific country's COVID data from the date specified.
country_to_find = ['']
value = 'cases'
today = '7/30/20'
#specifies how many days from covid first onset to map linear regression model for country to find
days_from_covid_start = 230
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from datetime import date
import seaborn as sns
from scipy.stats import linregress
sns.set()
df = pd.read_csv('https://data.humdata.org/hxlproxy/api/data-preview.csv?url=https%3A%2F%2Fraw.githubusercontent.com%2FCSSEGISandData%2FCOVID-19%2Fmaster%2Fcsse_covid_19_data%2Fcsse_covid_19_time_series%2Ftime_series_covid19_confirmed_global.csv&filename=time_series_covid19_confirmed_global.csv')
covid = df.groupby('Country/Region', as_index = False).sum()
date_i = covid[(today)]
G = str(date_i.sum())
covid = covid.sort_values((today), ascending=False)
covid.drop(columns=['Lat', 'Long'], inplace=True)
sig_cases = covid[date_i <= n].index
covid.drop(sig_cases, inplace=True)
plt.figure(figsize=(14,7.2))
sns.barplot(y = covid['Country/Region'], x = date_i, data = covid, )
covid = covid.sort_values((today), ascending=True)
x_values = range(len(covid['Country/Region']))
countries = covid['Country/Region'].map(str)
print(date_i)
#matplotlib graph, shows the same data as previous seaborn plot
'''cases = covid[(today)]
plt.figure(figsize=(14,7.2))
plt.ylabel('Countries')
plt.xlabel('Total Recorded')
plt.title('Covid Cases By Country', size = 10)
group = covid.groupby('Country/Region').sum()
plt.yticks(x_values, countries, rotation= 0, size = 10)
plt.barh(x_values, cases, color='Red')
plt.grid()'''
covid.sort_values((today), ascending = False, inplace = True)
covid_transposed = covid.transpose()
covid_transposed.columns = covid_transposed.iloc[0]
covid_transposed2 = covid_transposed[1:]
covid_transposed2.to_csv('covid_transposed_new_index.csv', index = False)
covid_transposed2.to_csv('covid_transposed_new.csv')
covid5 = pd.read_csv('covid_transposed_new.csv')
covid5.rename( columns={'Unnamed: 0':'Date'}, inplace=True)
sns.set_style("ticks")
plt.subplot()
plt.figure(figsize=(14,7.2))
for country in covid5:
if country in country_to_find:
plt.plot(covid5.index, covid5[country], marker = ',', linestyle = '-', linewidth = 2)
slope, intercept, rval, pval, stder = linregress(covid5.index, covid5[country])
y = (slope * days_from_covid_start) + intercept
print(y, rval **2 , pval, stder)
plt.xticks(covid5.index[::30], covid5.Date[::30])
plt.legend(country_to_find, loc=2, prop={'size': 15})
plt.xticks(rotation=32, size = 15)
plt.yticks(size = 15)
plt.title('Covid ' +str(value)+ ' per selected country', size=20)
plt.ylabel('Num ' +str(value), size=20)
plt.xlabel('Date', size=20)
plt.grid(True)
covid4 = pd.read_csv('covid_transposed_new_index.csv')
plt.figure(figsize=(14,7.2))
plt.subplot()
prediction = pd.DataFrame()
countries = [country for country in covid4]
for country in covid4:
plt.plot(covid4.index, covid4[country], marker = ',', linestyle = '-', linewidth = 2)
slope, intercept, rval, pval, stder = linregress(covid4.index, covid4[country])
y2 = (slope * days_from_covid_start) + intercept
prediction.append(pd.DataFrame(np.array([[country], [y2], [(rval**2)], [pval], [stder]])))
print(country, y2, (rval**2), pval, stder)
plt.xticks(covid4.index[::30])
plt.legend(countries, loc=2, prop={'size': 9})
plt.xticks(rotation=32, size = 15)
plt.yticks(size = 15)
plt.title('Covid ' +str(value)+ ' per selected country', size=20)
plt.ylabel('Num ' +str(value), size=20)
plt.xlabel('Days from first COVID-19 identification', size=20)
plt.grid(True)
sns.set_style("darkgrid")
plt.show()
print(str('Total cases as of date ' + str(today) + ' is ')+ G)
print(prediction)
ps我知道回归模型不起作用哈哈
covid4
中提取所有必要的数据李>和你做的一样
countries = [country for country in covid4]
对于其他数据,请执行以下操作:
即
y2 = [y2 for y2 in covid4]
rval = [rval for rval in covid4]
pval = [pval for pval in covid4]
stder = [stder for stder in covid4]
如果上述方法不起作用,则使用数组
[]
添加数据例如:
data = {'country': [country], ... }
DataFrame
DataFrame.append()
附加到指定的dataframe
然后返回一个新对象Documentation
可以使用所需的列创建初始对象,然后在附加到
dataframe
时确保为其指定新对象这将输出如下结果
相关问题 更多 >
编程相关推荐