首页 > 编程语言 >Python数据分析与可视化大作业项目说明(含免费代码)

Python数据分析与可视化大作业项目说明(含免费代码)

时间:2024-07-24 20:27:19浏览次数:20  
标签:数据分析 users Python 用户 2020 Internet 可视化 data 互联网

题 目: 对全球和中国互联网用户的数据分析与可视化

代码下载链接:https://download.csdn.net/download/s44359487yad/89574688

一、项目概述

1.1. 项目背景:

互联网是当今时代最重要和最有影响力的技术之一,它已经深刻地改变了人们的生活、工作、学习等方面。互联网用户数据是反映互联网发展水平和潜力的重要指标,它可以帮助我们了解不同国家地区在互联网领域的优势和劣势,以及存在的差异和不平衡。全球互联网用户数量在过去十年中增长迅速,其中中国是全球最大的互联网市场。然而,全球和中国的互联网用户数据也存在着一些问题和挑战。通过对全球和中国的互联网用户数据进行分析和可视化,我们可以更好地把握互联网领域的变化趋势和分布情况,以及预测未来的发展方向和挑战。

1.2 数据来源:

数据来源于kaggle上名为Global Internet users的数据集,数据集链接:Global Internet users | Kaggle ,该数据集包含了1980-2020年间关于全球互联网用户的信息。其中包括国家或地区名称、国家代码、年份、每100人的移动端互联网订阅数、互联网用户占总人口的比例、互联网用户数量以及每100人的宽带订阅数等信息。

1.3. 程序功能:

分析和可视化全球用户每年的各项数据,如互联网用户总数、移动端互联网订阅数、互联网使用人数比例、宽带订阅数等。

  • 绘制 2020 年各个国家地区的用户占比饼图和柱状图,展示全球互联网用户占比的分布情况和差异。
  • 绘制 2020 年各国家地区互联网用户占比分布直方图,展示全球互联网用户占比的分布特征和偏态。
  • 绘制 2020 年个国家地区互联网用户占比和移动互联网订阅量的散点图,并利用线性回归模型分析两者之间的相关性。
  • 绘制每一年互联网用户的比例最大的三个国家地区名的词云,展示全球互联网领域的优势和影响力。
  • 对中国互联网用户数据进行分析和可视化,展示中国在互联网领域的发展水平和潜力,并利用多元线性回归模型预测中国互联网到 2050 年的总用户数。

1.4. 所使用第三方库介绍:

  • numpy 库:用于进行数值计算,如数组、矩阵、向量等的创建、操作和运算。

  • pandas 库:用于处理数据,如数据的读取、清洗、分组、聚合、合并等。

  • matplotlib 库:用于绘制图形,如折线图、柱状图、饼图等,以及设置图形的样式、标题、标签等。

  • seaborn 库:用于绘制图形,如直方图、散点图等,以及设置图形的主题、颜色等。

  • wordcloud 库:用于配置和生成词云,如设置词云的形状、大小、字体等。

  • sklearn 库:用于进行线性回归分析,如创建线性回归模型、拟合数据、预测数据、评估模型等。

二、 功能实现

2.1. 数据读取和工具函数的实现

使用 read_csv 函数读取 Final.csv 文件,获取全球互联网用户信息,定义两个工具函数set_seaborn_propertiesget_2020_entities_dataframe

# 从数据集中读取出所有的数据
global_users = pd.read_csv('../data/Final.csv', delimiter=',', usecols=range(1, 8))

# 此函数用于配置每个seaborn图的主题,其中提供了一些默认配置,需要修改的配置在参数中提供,根据图的美观性和实用性需要改变参数
def set_seaborn_properties(context='talk', font_scale=0.8)

# 此函数用于获取所有Entity的2020年数据组成的DataFrame
def get_2020_entities_dataframe()

2.2. 全球用户每年的各项数据的分析与可视化

定义一个名为 global_internet_users_analysis 的函数,用于分析和可视化全球用户每年的各项数据。在这个函数中,使用 matplotlib 和 seaborn 库绘制了全球每年的互联网用户总数、全球每年每100人移动端互联网订阅数、互联网使用人数比例、每100人宽带订阅数的平均值等图形。

plt.subplot(2, 2, 1)  # 绘制子图
sns.lineplot(data=internet_users_sum_data, x='Year', y='sum')  # 折线图
plt.bar(column_mean.index, column_mean.values, color='cornflowerblue', width=0.6)  # 配合折线图使构图饱满

for column in ['Cellular Subscription', 'Internet Users(%)', 'Broadband Subscription']:
    plt.subplot(2, 2, i)
    i += 1
    # 最大值
    sns.lineplot(data=max_data, x='Year', y='max', label=column + ' max', lw=2, linestyle=(0, (5, 1)))
    # 平均值
    sns.lineplot(data=mean_data, x='Year', y='mean', label=column + ' mean', lw=3, linestyle=(0, (1, 1)))

从图中可以看出:

  • 全球互联网用户总数呈现出一个快速增长的趋势,尤其是在 2000 年之后,增长速度更加明显。这说明互联网技术的发展和普及,以及人们对互联网的需求和依赖都在不断增加。

  • 全球每100人移动端互联网订阅数也呈现出一个快速增长的趋势,尤其是在 2005 年之后,增长速度更加明显。这说明移动设备的普及和便捷,以及人们对移动互联网的需求和偏好都在不断增加。

  • 全球互联网使用人数比例也呈现出一个快速增长的趋势。这说明互联网已经成为人们生活、工作、学习等方面不可或缺的一部分,以及互联网的覆盖范围和接入方式都在不断扩大和改善。

  • 全球每100人宽带订阅数呈现出一个缓慢增长的趋势,但在 2010 年之后,增长速度有所放缓。这说明宽带网络的发展和普及还有一定的空间和潜力,以及宽带网络的竞争力和吸引力可能受到了移动网络的影响。

2.3. 2020年各个国家地区的用户占比饼图和柱状图绘制

定义了一个名为 entities_2020_internet_users_percentage_pie_bar 的函数,用于绘制 2020 年各个国家地区的用户占比饼图和柱状图。在这个函数中,首先获取 2020 年国家地区用户数量最多的10组数据,其他数据用other代替的数据封装成的 DataFrame,使用 matplotlib 和 seaborn 库绘制饼图和柱状图。

# 只筛选用户数量最多的10组数据,其他数据用`other`代替
entity_2020_df.sort_values(by='No. of Internet Users', axis=0, ascending=False, inplace=True)
processed_data = pd.concat([entity_2020_df.head(10), other_df], axis=0, join='outer')

# 绘制饼图
plt.pie(processed_data['No. of Internet Users'], labels=processed_data.index, explode=explode_arr,
            labeldistance=1.1, autopct='%2.1f%%', pctdistance=0.9, shadow=True)

# 绘制柱状图
sns.barplot(data=data, x='Entity', y='Percent')

从图中可以看出:

  • 在 2020 年,全球互联网用户占比最高的国家地区是中国,占比达到了 20.3%,远高于其他国家地区。这说明中国在互联网领域有着巨大的市场规模和潜力,以及中国在互联网技术、应用、服务等方面有着较强的竞争力和影响力。

  • 在 2020 年,全球互联网用户占比第二高的国家地区是印度,占比为 12.1%,但与中国相比还有较大的差距。这说明印度在互联网领域也有着较大的市场规模和潜力,但与中国相比还有较大的发展空间和挑战。

  • 在 2020 年,全球互联网用户占比第三高的国家地区是南美,占比为 9.7%,与印度相比较为接近。这说明美国在互联网领域也有着较大的市场规模和潜力,但与中国相比也有较大的差距。

  • 在 2020 年,全球互联网用户占比排名前十的国家地区还包括巴西、印度尼西亚、俄罗斯、日本、墨西哥和埃及。这些国家地区的占比都在 1.5% 到 3.6% 之间,相对较低。这说明这些国家地区在互联网领域还有较大的发展空间和潜力,但也面临着较大的挑战和竞争。

  • 在 2020 年,全球互联网用户占比排名第十一以后的国家地区的占比加起来只有 约37%,远低于中国的占比。这说明这些国家地区在互联网领域还有较大的不平衡和差距,需要加强互联网技术的普及和提升。

2.4. 2020年各国家地区互联网用户占比分布直方图

定义了一个名为 entities_2020_internet_users_percentage_distribution_histogram 的函数,用于绘制 2020 年各国家地区互联网用户占比分布直方图。在这个函数中,首先获取 2020 年国家地区数据封装成的 DataFrame,然后使用 seaborn 库绘制了直方图。

# 获取数据
data = pd.DataFrame({'Entity': internet_users_percentage_sr.index, 'Percent':internet_users_percentage_sr.values})

# 绘制直方图
sns.histplot(data, x='Percent')

从图中可以看出:

  • 在 2020 年,各国家地区互联网用户占比的分布呈现出一个右偏态的分布,大部分国家地区的互联网用户占比都集中在较低的范围内,而少数国家地区的互联网用户占比则达到了较高的水平。

  • 在 2020 年,各国家地区互联网用户占比的最高值为 100%,最低值为 0%,平均值为 47.9%,中位数为 53.9%,标准差为 36.1%。这说明各国家地区互联网用户占比存在着较大的差异和不平衡,以及部分国家地区的互联网发展水平还有较大的提升空间。

2.5. 2020年个国家地区互联网用户占比和移动互联网订阅量的散点图

定义了一个名为 entities_2020_internet_users_percentage_distribution_scatter 的函数,用于绘制 2020 年个国家地区互联网用户占比和移动互联网订阅量的散点图。在这个函数中,首先获取 2020 年国家地区数据封装成的 DataFrame,然后使用 seaborn 库绘制了散点图,并利用 sklearn 库中的线性回归模型分析两者之间的关系。

# 绘制散点图
sns.scatterplot(data=entity_2020_df, x='Internet Users(%)', y='Cellular Subscription',
                    palette='husl', hue='Entity', legend=None)  # 根据地区设置hue参数,使颜色丰富


# 一元线性回归分析两者关系
x = entity_2020_df[['Internet Users(%)']]
model_1 = linear_model.LinearRegression()
model_1.fit(x, entity_2020_df[['Cellular Subscription']])
data = pd.DataFrame({'x': x['Internet Users(%)'], 'pred_y': [x[0] for x in model_1.predict(x)]})
sns.lineplot(data=data, x='x', y='pred_y')

从图中可以看出:

  • 在 2020 年,各国家地区互联网用户占比和移动互联网订阅量呈现出一个正相关的关系,即互联网用户占比越高的国家地区,移动互联网订阅量也越高,反之亦然。这说明互联网用户占比和移动互联网订阅量是两个相互影响和促进的指标,反映了一个国家地区的互联网发展水平和便捷程度。

2.6. 用每一年互联网用户的比例最大的三个国家地区名生成词云

定义了一个名为 draw_internet_users_percentage_annual_top_3_wordcloud 的函数,用于绘制每一年互联网用户的比例最大的三个国家地区名生成词云。在这个函数中,首先获取每一年互联网用户的比例最大的三个国家地区名,然后使用 wordcloud 库绘制词云。

text = ''
year_groups = global_users.groupby('Year')
# 获取每一年互联网用户的比例最大的三个国家地区名数据
for year, year_df in year_groups:
    year_df.sort_values(by='Internet Users(%)', ascending=False, inplace=True)
    top_3 = year_df.head(3)
    entities = top_3['Entity']
    # 数据处理
    for entity in entities:
        if len(entity.split()) > 1:
            text += entity.replace(' ', '_') + ' '  
            # 将名字中含有空格的国家地区名中的空格替换成下划线_,避免一个名字被拆分成多个单词
        else:
            text += entity + ' '

# 绘制词云
wc = WordCloud(max_words=100, width=800, height=400, background_color='White',
               max_font_size=150, stopwords=STOPWORDS, margin=5, scale=1.5)
wc.generate(text)
plt.imshow(wc)
plt.axis("off")
plt.show()

从图中可以看出:

  • 在 1980-2020 年间,出现频率最高的国家地区名是 Iceland、Norway和Sweden。这说明这些国家地区在互联网领域有着长期的较高的发展水平和优势,以及较高的人口普及率和接入率。

  • 在 1980-2020 年间,出现频率较高的国家地区名还有 Bermuda、Denmark、Finland、Moracco、Afghanistan和 United_States等。这说明这些国家地区在互联网领域也有着长期的较高的发展水平和优势,以及较高的人口普及率和接入率。

  • 在 1980-2020 年间,出现频率较低或没有出现的国家地区名有 China、India、Brazil、Indonesia 等。结合2.4中的结果,这些国家地区有些是后起之秀,如中国和印度,有些则在互联网领域还有较大的发展空间和潜力,如巴西和印度尼西亚。

2.7. 对中国互联网用户数据的分析与可视化

最后,我们定义了一个名为 chinese_users_analysis 的函数,用于对中国互联网用户数据进行分析和可视化。首先通过切片获取中国互联网用户信息。然后使用 matplotlib 和 seaborn 库绘制了各项指标的数值图和增长率图,并利用 sklearn 库中的多元线性回归模型预测中国互联网到 2050 年的总用户数。

# 基本信息的折线图
sns.lineplot(data=chinese_users, x='Year', y='No. of Internet Users', label='数量(单位:千万人)', lw=3)
sns.lineplot(data=chinese_users, x='Year', y='Internet Users(%)', label='占人口的比例', lw=3)
sns.lineplot(data=chinese_users, x='Year', y='Cellular Subscription', label='移动互联网订阅每一百人比例', lw=3)
sns.lineplot(data=chinese_users, x='Year', y='Broadband Subscription', label='宽带每一百人订阅比例', lw=3)

从图中可以看出:

  • 中国互联网用户数量呈现出一个快速增长的趋势,尤其是在 2000 年之后,增长速度更加明显。这说明中国在互联网领域有着巨大的市场规模和潜力,以及中国在互联网技术、应用、服务等方面有着较强的竞争力和影响力。

  • 中国互联网用户占人口比例也呈现出一个快速增长的趋势,尤其是在 2005 年之后,增长速度更加明显。这说明中国在互联网领域有着较高的普及率和接入率,以及中国在互联网领域的需求和依赖都在不断增加。

  • 中国移动互联网订阅每一百人比例也呈现出一个快速增长的趋势,尤其是在 2005 年之后,增长速度更加明显。这说明中国在移动设备领域有着较高的普及率和便捷程度,以及中国在移动互联网领域的需求和偏好都在不断增加。

  • 中国宽带每一百人订阅比例呈现出一个缓慢增长的趋势,但在 2017 年之后,增长速度有所放缓。这说明中国在宽带网络领域还有一定的空间和潜力,以及中国在宽带网络领域的竞争力和吸引力可能受到了移动网络的影响。

    # 计算各项增长率
    rows = len(chinese_users.index)
    for i in range(rows - 1):
        chinese_users.loc[:, 'increase of No. of Internet Users'].iloc[i + 1] = 0 if chinese_users.iloc[i]['No. of Internet Users'] == 0 else (chinese_users.iloc[i + 1].loc['No. of Internet Users'] - chinese_users.iloc[i]['No. of Internet Users']) / chinese_users.iloc[i]['No. of Internet Users']
    ······
    
    # 绘制图形
    sns.lineplot(data=chinese_users, x='Year', y='increase of No. of Internet Users', lw=4,
                     label='数量(单位:千万人)增长率')
    ······

    从图中可以看出:

  • 中国互联网用户数量增长率和占人口比例增长率基本为同比增长,在1993-2005年之间增长较快之后趋于平稳,这说明中国在互联网领域已经达到了一个较高的发展水平,中国在互联网正在稳步发展。

  • 中国移动互联网订阅每一百人比例增长率呈现在1987-2005年之间增长较快之后趋于平稳,尤其是在 2010 年之后,这说明中国在移动设备领域已经达到了一个较高的普及率和便捷程度,以及中国在移动互联网领域已形成良好发展趋势。

  • 中国宽带每一百人订阅比例增长率在2000-2002年飞速增长之后又下降并趋于平稳。这说明中国在宽带网络领域有一定的空间和潜力,以及中国在宽带网络领域有着较强的竞争力和吸引力。

    # 散点图
    sns.scatterplot(data=chinese_users, x='Year', y='No. of Internet Users')
    
    # 三元线性回归拟合
    poly_reg = PolynomialFeatures(degree=3)
    ······
    model_2.fit(x_m, chinese_users[['No. of Internet Users']])
    data = pd.DataFrame({'x': x['Year'], 'pred_y': [x[0] for x in model_2.predict(x_m)]})
    
    # 绘制折线图
    sns.lineplot(data=data, x='x', y='pred_y')

从图中可以看出:

  • 我们使用 sklearn 库中的多元线性回归模型对 1980 到 2020 年中国互联网总用户数进行了拟合,得到了一个拟合曲线。这个曲线可以用来描述中国互联网总用户数随时间的变化规律,以及评估拟合效果和意义。

    # 预测
    pred_x = pd.DataFrame(np.arange(1980, 2031), columns=['Year'])
    pred_x_m = poly_reg.fit_transform(pred_x)
    
    # 绘图
    plt.plot(pred_x, model_2.predict(pred_x_m))

从图中可以看出:

  • 到2030年中国互联网总用户数将达到21.1亿,此预测具有一定的合理性,因为中国互联网用户的各项指标都在飞速增长,中国互联网具有很大的发展潜力与发展活力。
  • 但是此预测也具有一定的局限性,这个预测仅仅只用了一个数据集,没有考虑中国具体国情,仅仅依托数量的线性增长来分析是不合理的,需要更加高级的模型,并且要兼顾中国人口老龄化问题,结合中国人口增长速度来进一步分析,这样的预测效果会更好。

标签:数据分析,users,Python,用户,2020,Internet,可视化,data,互联网
From: https://blog.csdn.net/s44359487yad/article/details/140652204

相关文章

  • IPython的跨界魔术:%%javascript命令深度解析
    IPython的跨界魔术:%%javascript命令深度解析IPython,作为Python编程的强大交互式工具,提供了多种魔术命令来扩展其功能。其中,%%javascript魔术命令允许用户在IPythonNotebook中直接执行JavaScript代码,打通了Python和JavaScript两个世界,为数据可视化、Web内容操作等提供了便......
  • 密码学-RSA基础题解题脚本-Python
    importgmpy2#计算大整数模块importlibnumimportrsafromCrypto.PublicKeyimportRSA#安装时安装pycryptodome模块#已知:p,q,e,cdefknown_p_q_e_c():p=int(input('请输入一个素数p:'))q=int(input('请输入另一个素数q:'))e=int(input('请输入公钥e:'))......
  • python优先级
    在Python中,运算符的优先级决定了在表达式中运算符被计算或评估的顺序。了解这些优先级可以帮助编写更清晰、更准确的代码,尤其是在涉及多个运算符的复杂表达式中。以下是Python中运算符优先级的一般顺序,从高到低排列:1.括号:括号的优先级最高,它们可以用于强制改变运算的优先级。例......
  • 在Python中,你有好多对象?——Python类
    1.面向对象 当谈论面向对象编程(OOP)时,我们指的是一种程序设计的方法,它以对象的概念为中心,而不是以函数或逻辑为中心。面向对象编程的主要特征包括:封装(Encapsulation):将数据(属性)和操作数据的方法(方法或函数)捆绑在一起,以防止对数据的直接访问和修改,从而提高安全性和灵活性。......
  • 【Python实战因果推断】45_因果实验设计1
    目录Geo-Experiments在前文你学习了如何利用一段时间内的重复观察来帮助进行因果推理。现在,在本文中,你将从另一个角度来探讨同样的问题。如果你不必使用面板数据来确定干预效应,而是要设计一个实验来收集这些数据,会怎么样呢?本部分专门讨论了在简单的A/B测试行不通时的替代......
  • 【Python实战因果推断】51_因果推理概论1
    目录WhatIsCausalInference?WhyWeDoCausalInferenceMachineLearningandCausalInferenceWhatIsCausalInference?因果关系可能在你的认知中是一片危险的知识领域,你被告诫要避免涉足。你的统计学老师可能反复强调过,“相关性不等于因果性”,混淆两者可能会让......
  • 【Python实战因果推断】53_因果推理概论3
    目录CausalModelsCausalModels因果模型是一系列分配机制的集合,我们用符号来表示。在这个机制里,我使用u来代表模型外部的变量,也就是说,我不关心它们是如何生成的。而其他的变量则是我非常关注的,因此它们被纳入了模型之中。最后,存在函数f,用来描述一个变量如何映射到另一个......
  • 【Python实战因果推断】52_因果推理概论2
    目录AssociationandCausationTheTreatmentandtheOutcomeTheFundamentalProblemofCausalInferenceAssociationandCausation直观上,你大概明白为什么相关性并不等于因果性。如果有人告诉你顶级咨询能促使你的业务改善,你难免会持怀疑态度。你怎么能确定是咨询......
  • Python类与面向对象编程
    大家好!今天我们将探讨Python中的类及其在面向对象编程(OOP)中的应用。面向对象编程是一种编程范式,它使用“对象”来模拟现实世界的事务,使代码更加结构化和易于维护。在这篇文章中,我们将详细了解类和实例的概念、'self'关键字的作用、魔法函数的定义以及构造函数和析构函数的用......
  • Python基础入门(六)
    Python基础入门(六)一、本节目标掌握文件的概念和操作:文本文件、CSV文件综合案例:奖励富翁系统、汽车租聘系统二、文件介绍文件是计算机中用于存储数据的一种载体,一般存储在磁盘上文件通过以一定的格式和结构存储数据,可以包含文本、图像、音频、视频等各种类型的信息文件在......