我正在尝试创建一个数据可视化,它本质上是一个散点图。
数据片段如下所示:
地点 | 年份 | A | B |
---|---|---|---|
阿富汗 | 1990 | 48.3973 | 1377.85863 |
阿富汗 | 2020 | 65.432 | 620.40751 |
阿尔巴尼亚 | 1990 | 76.4334 | 32.87494 |
阿尔巴尼亚 | 2020 | 79.6756 | 8.27645 |
阿尔及利亚 | 1990 | 68.5167 | 205.81979 |
阿尔及利亚 | 2020 | 75.9125 | 77.69479 |
安哥拉 | 1990 | 82.6756 | 1101.50579 |
安哥拉 | 2020 | 83.1922 | 221.90649 |
安提瓜和巴布达 | 1990 | 73.6497 | 58.0267 |
安提瓜和巴布达 | 2020 | 80.7452 | 21.24795 |
阿根廷 | 1990 | 75.9699 | 87.81427 |
阿根廷 | 2020 | 81.3155 | 44.90008 |
即每个国家都有一对积分。我想绘制 A 对 B 的图,然后理想情况下将每个国家/地区的点对(在完美世界中)采用不同的颜色(理想情况下带有标签,显示它们是哪个国家/地区以及哪一年)。
然后我想绘制所有 1990 个点的回归线,以及 2020 个点的同一轴上的回归线。
在 Excel 中是理想的选择,但如果更合适的话我可能会使用其他东西。任何帮助将非常感激。
既然你对其他选择持开放态度,我想我可以用 python 回答你的问题,如果可以的话。以下是如何使用seaborn来实现这一点,seaborn是一个很好的数据可视化软件包,具有许多用于统计和机器学习的有用功能。
首先,为了让你开始使用 python,我推荐 anaconda,因为它们的安装已经包含了大量相互兼容的好包。
熟悉后,您可以导入以下包作为示例:
import seaborn as sns # nice plotting
%matplotlib notebook
import matplotlib.pyplot as plt # package also for plottingm the above line is a magic command to define the backend
import pandas as pd # for data handling
我暂时定义了没有阿富汗的数据,因为它似乎是一个对回归模型产生负面影响的不良异常值,我将在最后展示。目前,以下是没有 AFG 的结果:
data = {
'Location': ['Albania', 'Albania', 'Algeria', 'Algeria', 'Angola', 'Angola', 'Antigua and Barbuda', 'Antigua and Barbuda', 'Argentina', 'Argentina'],
'Year': [1990, 2020, 1990, 2020, 1990, 2020, 1990, 2020, 1990, 2020],
'A': [76.4334, 79.6756, 68.5167, 75.9125, 82.6756, 83.1922, 73.6497, 80.7452, 75.9699, 81.3155],
'B': [32.87494, 8.27645, 205.81979, 77.69479, 1101.50579, 221.90649, 58.0267, 21.24795, 87.81427, 44.90008]
} # define the data without afghanistan
df = pd.DataFrame(data) # generate dataframe
plt.figure() # figure
sns.scatterplot(data=df, x='A', y='B', hue='Location', style='Year') # scatter plot the data, changing style for year and colour with country
sns.regplot(data=df[df['Year'] == 1990], x='A', y='B', scatter=False, color='blue') # plot model for 1990
sns.regplot(data=df[df['Year'] == 2020], x='A', y='B', scatter=False, color='orange') # plot model for 2000
plt.grid() # add grid
plt.legend(loc = "lower right", ncols = 3) # and legend
这导致了以下情节:
当然,如果您有更好的方式获取数据,您可以使用
pd.read_excel()
或 pd.read_csv()
从保存的文件中获取数据。
在这里查看阿富汗的数据:
如您所见,回归主要捕获 AFG 与其他组之间发现的方差。例如,可以通过使用稳健回归来解决。
我希望这个答案能鼓励你开始学习 python 并这样做。优点是现在有很多资源可以入门甚至掌握 python。另外,chatGPT 可以帮助您入门(无论如何您都会回来抱怨它;))