2020年美国新冠肺炎疫情数据分析

  • 一、 需求描述
  • 二、 环境介绍
  • 三、 数据来源描述
  • 四、 数据上传及上传结果查看
  • 五、数据处理过程描述
    • 1、数据集下载
    • 2、格式转换
    • 3、启动Hadoop集群
    • 4、将文件上传至HDFS文件系统中
    • 5、使用Spark对数据进行分析
    • 6、读取文件生成DataFrame
    • 8、数据可视化
  • 六、经验总结
  • 参考文献

一、 需求描述

本次实验需要对2020年美国新冠肺炎疫情数据作为数据集,以Python为编程语言,使用Spark对数据进行分析,并对分析结果进行可视化。首先需要对数据的采取,在原始数据集.CSV文件组织的,为了方便spark读取生成RDD或者DataFrame,我们需要对us-counties.csv转换为.txt格式文件us-counties.txt,将文件上传至HDFS文件系统中。其次我们需要对采取的数据进行分析,用python完成本实验要统计的8个指标代码在analyst.py文件中,Spark计算结果保存.json文件,方便后续可视化处理。由于使用Python读取HDFS文件系统不太方便,故将HDFS上结果文件转储到本地文件系统中,在可视化中我们需要安装第三方库pyecharts作为可视化工具,具体可视化实现代码在showdata.py文件中展示,编译之后能产生九副可视化图,展示不一样的图形类型对应的意思也不一样。

二、 环境介绍

实验环境中我们是使用的Linux(Ubuntu 16.04)系统,运用了Hadoop3.1.3环境、Spark2.4.0大数据分析引擎、Python3.8编程语言、Jupyter Notebook工具。

三、 数据来源描述

本次2020年美国新冠肺炎疫情数据分析的实验采用的数据集来自于数据网站Kaggle的美国新冠肺炎疫情数据集,上述收集到的数据集以数据表us-counties.csv组织,其中包含了美国发现首例新冠肺炎确诊病例至今(2020-05-19)的相关疫情病例的数据。

四、 数据上传及上传结果查看

根据数据网站Kaggle的美国新冠肺炎疫情数据集,在Windows系统下载之后,该数据集以数据表us-counties.csv组织,我们需要将us-counties.csv文件导入Ubuntu,操作如下:
1、在Oracle VM Virtual Box上点击设备中的把共享粘贴板、拖放中的双向都打开为双向,方便接下来的任务操作。


安装完毕之后按回车健,重启Ubuntu系统即可使用双向功能
2、在设备中点击安装增强功能,运行认证即可
3、我把us-counties.csv文件(从百度网盘下载,提取码:t7tu)拖拽到Ubuntu系统下的/home/hadoop

五、数据处理过程描述

1、数据集下载

使用的数据集来自数据网站Kaggle的美国新冠肺炎疫情数据集(从百度网盘下载,提取码:t7tu),该数据集以数据表us-counties.csv组织,其中包含了美国发现首例新冠肺炎确诊病例至今(2020-05-19)的相关数据。数据包含以下字段:

2、格式转换

原始数据集是以.csv文件组织的,为了方便spark读取生成RDD或者DataFrame,首先将us-counties.csv转换为.txt格式文件us-counties.txt。转换操作使用python实现,代码组织在toTxt.py中,具体代码如下:




3、启动Hadoop集群


查看进程:jsp

4、将文件上传至HDFS文件系统中

然后使用如下命令把本地文件系统的“/home/hadoop/us-counties.txt”上传到HDFS文件系统中,具体路径是“/user/hadoop/us-counties.txt”。具体命令如下:

5、使用Spark对数据进行分析

这里采用Python作为编程语言。

from pyspark import SparkConf,SparkContext
from pyspark.sql import Row
from pyspark.sql.types import *
from pyspark.sql import SparkSession
from datetime import datetime
import pyspark.sql.functions as func
def toDate(inputStr):newStr = ""if len(inputStr) == 8:s1 = inputStr[0:4]s2 = inputStr[5:6]s3 = inputStr[7]newStr = s1+"-"+"0"+s2+"-"+"0"+s3else:s1 = inputStr[0:4]s2 = inputStr[5:6]s3 = inputStr[7:]newStr = s1+"-"+"0"+s2+"-"+s3date = datetime.strptime(newStr, "%Y-%m-%d")return date
#主程序:
spark = SparkSession.builder.config(conf = SparkConf()).getOrCreate()
fields = [StructField("date", DateType(),False),StructField("county", StringType(),False),StructField("state", StringType(),False),StructField("cases", IntegerType(),False),StructField("deaths", IntegerType(),False),]
schema = StructType(fields)
rdd0 = spark.sparkContext.textFile("/user/hadoop/us-counties.txt")
rdd1 = rdd0.map(lambda x:x.split("\t")).map(lambda p: Row(toDate(p[0]),p[1],p[2],int(p[3]),int(p[4])))
shemaUsInfo = spark.createDataFrame(rdd1,schema)
shemaUsInfo.createOrReplaceTempView("usInfo")
#1.计算每日的累计确诊病例数和死亡数
df = shemaUsInfo.groupBy("date").agg(func.sum("cases"),func.sum("deaths")).sort(shemaUsInfo["date"].asc())
#列重命名
df1 = df.withColumnRenamed("sum(cases)","cases").withColumnRenamed("sum(deaths)","deaths")
df1.repartition(1).write.json("result1.json")                               #写入hdfs
#注册为临时表供下一步使用
df1.createOrReplaceTempView("ustotal")
#2.计算每日较昨日的新增确诊病例数和死亡病例数
df2 = spark.sql("select t1.date,t1.cases-t2.cases as caseIncrease,t1.deaths-t2.deaths as deathIncrease from ustotal t1,ustotal t2 where t1.date = date_add(t2.date,1)")
df2.sort(df2["date"].asc()).repartition(1).write.json("result2.json")           #写入hdfs
#3.统计截止5.19日 美国各州的累计确诊人数和死亡人数
df3 = spark.sql("select date,state,sum(cases) as totalCases,sum(deaths) as totalDeaths,round(sum(deaths)/sum(cases),4) as deathRate from usInfo  where date = to_date('2020-05-19','yyyy-MM-dd') group by date,state")
df3.sort(df3["totalCases"].desc()).repartition(1).write.json("result3.json") #写入hdfs
df3.createOrReplaceTempView("eachStateInfo")
#4.找出美国确诊最多的10个州
df4 = spark.sql("select date,state,totalCases from eachStateInfo  order by totalCases desc limit 10")
df4.repartition(1).write.json("result4.json")
#5.找出美国死亡最多的10个州
df5 = spark.sql("select date,state,totalDeaths from eachStateInfo  order by totalDeaths desc limit 10")
df5.repartition(1).write.json("result5.json")
#6.找出美国确诊最少的10个州
df6 = spark.sql("select date,state,totalCases from eachStateInfo  order by totalCases asc limit 10")
df6.repartition(1).write.json("result6.json")
#7.找出美国死亡最少的10个州
df7 = spark.sql("select date,state,totalDeaths from eachStateInfo  order by totalDeaths asc limit 10")
df7.repartition(1).write.json("result7.json")
#8.统计截止5.19全美和各州的病死率
df8 = spark.sql("select 1 as sign,date,'USA' as state,round(sum(totalDeaths)/sum(totalCases),4) as deathRate from eachStateInfo group by date union select 2 as sign,date,state,deathRate from eachStateInfo").cache()
df8.sort(df8["sign"].asc(),df8["deathRate"].desc()).repartition(1).write.json("result8.json")

执行analyst.py文件

6、读取文件生成DataFrame

上面已经给出了完整代码。下面我们再对代码做一些简要介绍。首先看看读取文件生成DataFrame。由于本实验中使用的数据为结构化数据,因此可以使用spark读取源文件生成DataFrame以方便进行后续分析实现。

from pyspark import SparkConf,SparkContext
from pyspark.sql import Row
from pyspark.sql.types import *
from pyspark.sql import SparkSession
from datetime import datetime
import pyspark.sql.functions as func
def toDate(inputStr):newStr = ""if len(inputStr) == 8:s1 = inputStr[0:4]s2 = inputStr[5:6]s3 = inputStr[7]newStr = s1+"-"+"0"+s2+"-"+"0"+s3else:s1 = inputStr[0:4]s2 = inputStr[5:6]s3 = inputStr[7:]newStr = s1+"-"+"0"+s2+"-"+s3date = datetime.strptime(newStr, "%Y-%m-%d")return date
#主程序:
spark = SparkSession.builder.config(conf = SparkConf()).getOrCreate()
fields = [StructField("date", DateType(),False),StructField("county", StringType(),False),StructField("state", StringType(),False),StructField("cases", IntegerType(),False),StructField("deaths", IntegerType(),False),]
schema = StructType(fields)
rdd0 = spark.sparkContext.textFile("/user/hadoop/us-counties.txt")
rdd1 = rdd0.map(lambda x:x.split("\t")).map(lambda p: Row(toDate(p[0]),p[1],p[2],int(p[3]),int(p[4])))
shemaUsInfo = spark.createDataFrame(rdd1,schema)
shemaUsInfo.createOrReplaceTempView("usInfo")

7、进行数据分析
本实验主要统计以下8个指标,分别是:
1)统计美国截止每日的累计确诊人数和累计死亡人数。做法是以date作为分组字段,对cases和deaths字段进行汇总统计。
2)统计美国每日的新增确诊人数和新增死亡人数。因为新增数=今日数-昨日数,所以考虑使用自连接,连接条件是t1.date = t2.date + 1,然后使用t1.totalCases – t2.totalCases计算该日新增。
3)统计截止5.19日,美国各州的累计确诊人数和死亡人数。首先筛选出5.19日的数据,然后以state作为分组字段,对cases和deaths字段进行汇总统计。
4) 统计截止5.19日,美国确诊人数最多的十个州。对3)的结果DataFrame注册临时表,然后按确诊人数降序排列,并取前10个州。
5)统计截止5.19日,美国死亡人数最多的十个州。对3)的结果DataFrame注册临时表,然后按死亡人数降序排列,并取前10个州。
6)统计截止5.19日,美国确诊人数最少的十个州。对3)的结果DataFrame注册临时表,然后按确诊人数升序排列,并取前10个州。
7)统计截止5.19日,美国死亡人数最少的十个州。对3)的结果DataFrame注册临时表,然后按死亡人数升序排列,并取前10个州
8)统计截止5.19日,全美和各州的病死率。病死率 = 死亡数/确诊数,对3)的结果DataFrame注册临时表,然后按公式计算。
在计算以上几个指标过程中,根据实现的简易程度,既采用了DataFrame自带的操作函数,又采用了spark sql进行操作。
上述Spark计算结果保存.json文件,方便后续可视化处理。由于使用Python读取HDFS文件系统不太方便,故将HDFS上结果文件转储到本地文件系统中。

8、数据可视化

选择使用python第三方库pyecharts作为可视化工具。在使用前,需要安装pyecharts,安装代码如下:

pip install pyecharts

具体可视化实现代码组织与showdata.py文件中。具体代码如下:

vim showdata.py

在vim文本编辑器输入以下代码

from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.charts import Line
from pyecharts.components import Table
from pyecharts.charts import WordCloud
from pyecharts.charts import Pie
from pyecharts.charts import Funnel
from pyecharts.charts import Scatter
from pyecharts.charts import PictorialBar
from pyecharts.options import ComponentTitleOpts
from pyecharts.globals import SymbolType
import json
#1.画出每日的累计确诊病例数和死亡数——>双柱状图
def drawChart_1(index):root = "/home/hadoop/result/result" + str(index) +"/part-00000.json"date = []cases = []deaths = []with open(root, 'r') as f:while True:line = f.readline()if not line:                            # 到 EOF,返回空字符串,则终止循环breakjs = json.loads(line)date.append(str(js['date']))cases.append(int(js['cases']))deaths.append(int(js['deaths']))d = (Bar().add_xaxis(date).add_yaxis("累计确诊人数", cases, stack="stack1").add_yaxis("累计死亡人数", deaths, stack="stack1").set_series_opts(label_opts=opts.LabelOpts(is_show=False)).set_global_opts(title_opts=opts.TitleOpts(title="美国每日累计确诊和死亡人数")).render("/home/hadoop/result/result1/result1.html"))
#2.画出每日的新增确诊病例数和死亡数——>折线图
def drawChart_2(index):root = "/home/hadoop/result/result" + str(index) +"/part-00000.json"date = []cases = []deaths = []with open(root, 'r') as f:while True:line = f.readline()if not line:                            # 到 EOF,返回空字符串,则终止循环breakjs = json.loads(line)date.append(str(js['date']))cases.append(int(js['caseIncrease']))deaths.append(int(js['deathIncrease']))(Line(init_opts=opts.InitOpts(width="1600px", height="800px")).add_xaxis(xaxis_data=date).add_yaxis(series_name="新增确诊",y_axis=cases,markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max", name="最大值")]),markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average", name="平均值")]),).set_global_opts(title_opts=opts.TitleOpts(title="美国每日新增确诊折线图", subtitle=""),tooltip_opts=opts.TooltipOpts(trigger="axis"),toolbox_opts=opts.ToolboxOpts(is_show=True),xaxis_opts=opts.AxisOpts(type_="category", boundary_gap=False),).render("/home/hadoop/result/result2/result1.html"))(Line(init_opts=opts.InitOpts(width="1600px", height="800px")).add_xaxis(xaxis_data=date).add_yaxis(series_name="新增死亡",y_axis=deaths,markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max", name="最大值")]),markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average", name="平均值"),opts.MarkLineItem(symbol="none", x="90%", y="max"),opts.MarkLineItem(symbol="circle", type_="max", name="最高点"),]),).set_global_opts(title_opts=opts.TitleOpts(title="美国每日新增死亡折线图", subtitle=""),tooltip_opts=opts.TooltipOpts(trigger="axis"),toolbox_opts=opts.ToolboxOpts(is_show=True),xaxis_opts=opts.AxisOpts(type_="category", boundary_gap=False),).render("/home/hadoop/result/result2/result2.html"))
#3.画出截止5.19,美国各州累计确诊、死亡人数和病死率--->表格
def drawChart_3(index):root = "/home/hadoop/result/result" + str(index) +"/part-00000.json"allState = []with open(root, 'r') as f:while True:line = f.readline()if not line:                            # 到 EOF,返回空字符串,则终止循环breakjs = json.loads(line)row = []row.append(str(js['state']))row.append(int(js['totalCases']))row.append(int(js['totalDeaths']))row.append(float(js['deathRate']))allState.append(row)table = Table()headers = ["State name", "Total cases", "Total deaths", "Death rate"]rows = allStatetable.add(headers, rows)table.set_global_opts(title_opts=ComponentTitleOpts(title="美国各州疫情一览", subtitle=""))table.render("/home/hadoop/result/result3/result1.html")
#4.画出美国确诊最多的10个州——>词云图
def drawChart_4(index):root = "/home/hadoop/result/result" + str(index) +"/part-00000.json"data = []with open(root, 'r') as f:while True:line = f.readline()if not line:                            # 到 EOF,返回空字符串,则终止循环breakjs = json.loads(line)row=(str(js['state']),int(js['totalCases']))data.append(row)c = (WordCloud().add("", data, word_size_range=[20, 100], shape=SymbolType.DIAMOND).set_global_opts(title_opts=opts.TitleOpts(title="美国各州确诊Top10")).render("/home/hadoop/result/result4/result1.html"))
#5.画出美国死亡最多的10个州——>象柱状图
def drawChart_5(index):root = "/home/hadoop/result/result" + str(index) +"/part-00000.json"state = []totalDeath = []with open(root, 'r') as f:while True:line = f.readline()if not line:                            # 到 EOF,返回空字符串,则终止循环breakjs = json.loads(line)state.insert(0,str(js['state']))totalDeath.insert(0,int(js['totalDeaths']))c = (PictorialBar().add_xaxis(state).add_yaxis("",totalDeath,label_opts=opts.LabelOpts(is_show=False),symbol_size=18,symbol_repeat="fixed",symbol_offset=[0, 0],is_symbol_clip=True,symbol=SymbolType.ROUND_RECT,).reversal_axis().set_global_opts(title_opts=opts.TitleOpts(title="PictorialBar-美国各州死亡人数Top10"),xaxis_opts=opts.AxisOpts(is_show=False),yaxis_opts=opts.AxisOpts(axistick_opts=opts.AxisTickOpts(is_show=False),axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(opacity=0)),),).render("/home/hadoop/result/result5/result1.html"))
#6.找出美国确诊最少的10个州——>词云图
def drawChart_6(index):root = "/home/hadoop/result/result" + str(index) +"/part-00000.json"data = []with open(root, 'r') as f:while True:line = f.readline()if not line:                            # 到 EOF,返回空字符串,则终止循环breakjs = json.loads(line)row=(str(js['state']),int(js['totalCases']))data.append(row)c = (WordCloud().add("", data, word_size_range=[100, 20], shape=SymbolType.DIAMOND).set_global_opts(title_opts=opts.TitleOpts(title="美国各州确诊最少的10个州")).render("/home/hadoop/result/result6/result1.html"))
#7.找出美国死亡最少的10个州——>漏斗图
def drawChart_7(index):root = "/home/hadoop/result/result" + str(index) +"/part-00000.json"data = []with open(root, 'r') as f:while True:line = f.readline()if not line:                            # 到 EOF,返回空字符串,则终止循环breakjs = json.loads(line)data.insert(0,[str(js['state']),int(js['totalDeaths'])])c = (Funnel().add("State",data,sort_="ascending",label_opts=opts.LabelOpts(position="inside"),).set_global_opts(title_opts=opts.TitleOpts(title="")).render("/home/hadoop/result/result7/result1.html"))
#8.美国的病死率--->饼状图
def drawChart_8(index):root = "/home/hadoop/result/result" + str(index) +"/part-00000.json"values = []with open(root, 'r') as f:while True:line = f.readline()if not line:                            # 到 EOF,返回空字符串,则终止循环breakjs = json.loads(line)if str(js['state'])=="USA":values.append(["Death(%)",round(float(js['deathRate'])*100,2)])values.append(["No-Death(%)",100-round(float(js['deathRate'])*100,2)])c = (Pie().add("", values).set_colors(["blcak","orange"]).set_global_opts(title_opts=opts.TitleOpts(title="全美的病死率")).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")).render("/home/hadoop/result/result8/result1.html"))
#可视化主程序:
index = 1
while index<9:funcStr = "drawChart_" + str(index)eval(funcStr)(index)index+=1

退出vim(按Esc后,输入:wq,按回车)后编辑showdata.py文件

python3.8 showdata.py

可视化结果是.html格式的,reslut1的结果展示图保存路径为“/home/hadoop/result/result1/result1.html”,reslut2的结果展示图保存路径为“/home/hadoop/result/result2/result1.html”,其余类似递推。

(1)出每日的累计确诊病例数和死亡数(双柱状图)

(2)画出每日的新增确诊病例数和死亡数——>折线图

(3)画出每日的新增确诊死亡数——>折线图

(4)画出截止5.19,美国各州累计确诊、死亡人数和病死率—>表格

(5)画出美国确诊最多的10个州——>词云图

(6)画出美国死亡最多的10个州——>象柱状图

(7)找出美国确诊最少的10个州——>词云图

(8)找出美国死亡最少的10个州——>漏斗图

(9)美国的病死率—>饼状图

六、经验总结

通过本次实验,针对本学期的学习总结而设定,在做实验时还可重温,怎么安装Spark、Hadoop等环境的搭建,并且进行了融会贯通,本次实验我们主要是对之前所学的Python的内容进行巩固练习,并且对于一些细节处的修改;然后学习了Shark,RDD,最后学了Dataframe以及彼此之间的数据转换。
本次实验操作中,首先是将对数据集.csv文件进行格式转换为.txt的操作,方便Spark读取生成RDD或者DataFrame;接着将数据集上次到HDFS文件系统中,在这里我们要注意上传路径是个已存在文件夹,若无该文件夹,先创建再进行上述操作,否则可能会报错;接着使用Spark对数据进行分析,并将分析结果输出,注意输出路径;HDFS查看文件是否输出成功;最后进行数据的可视化,在此需要安装可视化工具Pyecharts对分析完成的数据进行可视化即可。
在这个实验中,最大的问题就是要处理好环境的问题,只要将环境配置正确,基本不会有太大的问题,在本次实验中遇到的问题希望在以后能够加以改进,继续加强自己的基础学习。本学期即将结束,我们更需要对知识多加巩固,为以后的工作场景中帮到自己,学到所学,用之所用。

参考文献

[1]林子雨、郑海山、赖永炫.《Spark编程基础(Python版)》[M].北京:人民邮电出版社,2020.
[2]林子雨.大数据技术原理与应用[M].北京:人民邮电出版社,2017.
[3]使用Jupyter Notebook调试PySpark程序,2020-6-1;http://dblab.xmu.edu.cn/blog/2575-2/.
[4]Spark安装和编程实践(Spark2.4.0),2020-12-17;http://dblab.xmu.edu.cn/blog/2501-2/.
[5]http://dblab.xmu.edu.cn/blog/2636-2/

【Python】2020年美国新冠肺炎疫情数据分析相关推荐

  1. 【大数据基础】2020年美国新冠肺炎疫情数据分析

    https://dblab.xmu.edu.cn/blog/2738 https://dblab.xmu.edu.cn/blog/2636/ spark 安装 安装 Spark2.4.0 sudo t ...

  2. 【大数据平台】基于Spark的美国新冠肺炎疫情数据分析及预测

    (本实验系中国地质大学(武汉)2022年秋期大数据平台及应用课程设计) 一.选题背景 新型冠状病毒疫情是由严重急性呼吸系统综合征冠状病毒2(SARS-CoV-2)导致的2019冠状病毒病(COVID- ...

  3. 大数据分析实训——使用Spark SQL分析美国新冠肺炎疫情

    项目思路: 使用Spark SQL读取文件数据集来生成Data Frame对象,再利用Spark SQL函数对Data Frame对象进行数据分析,并将结果存入MySQL数据库,再以Web网页的形式对 ...

  4. 爬取并处理中国新冠肺炎疫情数据

    项目名称: 爬取并处理中国新冠肺炎疫情数据 目的: 通过Python爬取中国新冠肺炎疫情数据,存入Excel,对此数据分析并进行可视化,制作查询中国疫情情况的GUI界面. 具体内容: 通过Python ...

  5. 新冠肺炎疫情数据可视化分析-FineBI

    目录 一.实验(实训)目的 二.实验(实训)原理或方法 三.仪器设备.材料 四.实验(实训)步骤 五.实训记录及结果 <------------------------------------- ...

  6. 每日一练:Python爬虫爬取全国新冠肺炎疫情数据实例详解,使用beautifulsoup4库实现

    Python 爬虫篇 - 爬取全国新冠肺炎疫情数据实例详解 效果图展示 第一章:疫情信息的下载与数据提取 ① 爬取页面数据到本地 ② json 字符串正则表达式分析 ③ 提取数据中的 json 字符串 ...

  7. 含最新数据! 使用Python检测新冠肺炎疫情拐点

    注:本文案例仅供技术学习,不代表研究性观点. 本文对应代码.数据及文献资料已上传至Github仓库https://github.com/CNFeffery/DataScienceStudyNotes ...

  8. python 绘制新冠肺炎疫情地图

    参考链接: (1)实时更新|新冠肺炎疫情地图 https://news.sina.cn/zt_d/yiqing0121 (2)实时的可视化疫情地图 https://blog.csdn.net/weix ...

  9. 最新!兰州大学发布对上海市的新冠肺炎疫情预测!

    这段时间,上海市疫情牵动着所有人的心.据数据显示,自 2022 年 3 月 1 日上海市报告新冠肺炎本土确诊病例和本土无症状感染者以来,截至 2022 年 4 月 10 日 24 时,上海市已累计报告 ...

最新文章

  1. [android] ubuntu开发环境
  2. 怎么解决64位Access与32位不能同时安装的问题
  3. 《游戏编程入门 4th》笔记(1 / 14):Windows初步
  4. 浅谈MVC MVP MVVM
  5. [转载] Golang-简洁的并发
  6. C++ std::move/std::forward/完美转发
  7. linux vi 替换字符串,Linux vi编辑器如何查找与替换关键字
  8. Excel常用的功能
  9. 详解MATLAB的函数uigetfile(),并利用它打开文件选择对话框,选择文件,返回文件名和文件路径
  10. Python 数据正态性检验
  11. 微软通过云存储插件简化Docker容器迁移
  12. linux查看进程limits解释,linux中/etc/security/limits.conf配置文件说明
  13. nvivo服务器项目,【NVivo教程】用Nvivo为研究团队设立主项目
  14. 7-41 哥尼斯堡的“七桥问题” (25 分)
  15. dismiss和remove_Dialog的dismiss和cancel 区别 (转)
  16. 雷达的工作原理示意图_雷达的工作原理是什么?
  17. VS2017+openCV3.4.6+openCV3.4.6 contrib扩展模块安装
  18. Linux平台设备驱动
  19. sql select 基础用法
  20. 【Android】网页广告植入规避方案

热门文章

  1. 围观一个无限循环的奇葩代码,把电脑弄死机了
  2. 数据转换(字节数组转文件、文件转字节数组、16进制字符转字节数组、字节数组转16进制字符)
  3. myeclipse7.0下载
  4. 无效驱动器*解决方法
  5. 菜鸟硬件学习笔记(一)
  6. linux yum常用命令
  7. 深圳实验室设计新建思路
  8. 在顺序表中第五个位置插入一个元素9,实现顺序表插入的基本操作,输出顺序表中所有元素
  9. 3.有5个学生坐在一起,问第5个学生多少岁,他说比第4个学生大2岁。问第4个学生岁数,他说比第3个学生大2岁。以此类推,最后问第1个学生,他说是10岁。请问第5个学生多大。
  10. GAGE Oscar系列采集卡