【大数据课程设计】城市公交网络分析与可视化(以青岛市为例)-程序员宅基地

技术标签: python  数据分析  可视化  大数据  

合作者:guyueCT

城市公交网络分析与可视化

数据爬取与处理

公交站点信息爬取

第一步,从青岛市公交线路的百度百科(https://baike.baidu.com/item/%E9%9D%92%E5%B2%9B%E5%85%AC%E4%BA%A4/5016038?fr=aladdin)中爬取青岛市区的各路公交线路名称,整理成txt文档,用于后续爬取线路信息工作。
在这里插入图片描述
第二步,申请高德地图的开发者key,选择web端的服务。
高德key
key
利用所得到的key和一些公交线路信息构成url,提交给高德地图,并爬取返回的与路线相关的信息,关键代码如下:

url = 'https://restapi.amap.com/v3/bus/linename?s=rsv3&extensions=all&key=559bdffe35eec8c8f4dae959451d705c&output=json&city={}&offset=1&keywords={}&platform=JS'.format(city,line)
r = requests.get(url).text
rt = json.loads(r)#转换为字典

其中,city代表要查询的城市,line代表要查询的公交线路;我们以青岛市的321路公交线路为例,查看爬取的结果。
result
爬取的结果已经转换成了字典,其中一些对我们地图可视化分析有帮助的有公交线路的名称、各公交站点的名称与坐标、各公交线路的轨迹坐标以及公交线路中各站点的顺序。
第三步,将爬取得到的相关信息进行整理、汇总成表格形式,以便后续后续可视化及分析。
线路信息

import requests
import pandas as pd
import json
import re
f = open("raw_stop.txt","r")   #文件内容为上述统计的站点名称
str = f.read()     #将txt文件的所有内容读入到字符串str中
f.close()   #将文件关闭
def get_dt(city,line):
    url = 'https://restapi.amap.com/v3/bus/linename?s=rsv3&extensions=all&key=559bdffe35eec8c8f4dae959451d705c&output=json&city={}&offset=1&keywords={}&platform=JS'.format(city,line)
    r = requests.get(url).text
    rt = json.loads(r)
    print(rt)
    try:
        if rt['buslines']:
            if len(rt['buslines']) == 0:  #有名称没数据
                print('no data in list..')
            else:
                dt = {
    }
                dt['line_name'] = rt['buslines'][0]['name'] 
                dt['total_price'] = rt['buslines'][0]['total_price']

                st_name = []
                st_coords = []
                st_sequence = []
                for st in rt['buslines'][0]['busstops']:
                    st_name.append(st['name'])
                    st_coords.append(st['location'])
                    st_sequence.append(st['sequence'])

                dt['station_name'] = st_name
                dt['station_coords'] = st_coords
                dt['sequence'] = st_sequence
                dm = pd.DataFrame([dt])
                return dm
        else:
            pass
    except:
        print('error..try it again..')
        time.sleep(2)
        get_dt(city,line)
stations=re.split(',| |\n',str)
stations=list(filter(None,stations))
for sta in stations:
    if sta== '1路':
        data=get_dt('青岛',sta)
    else:
        dm=get_dt('青岛',sta)
        data=pd.concat([data,dm],ignore_index=True)
for i in range(data.shape[0]):
    coord_x=[]
    coord_y=[]
    for j in data['station_coords'][i]:
        coord_x.append(eval(re.split(',',j)[0]))
        coord_y.append(eval(re.split(',',j)[1]))
    a=[[data['line_name'][i]]*len(data['station_coords'][i]),coord_x,coord_y,data['station_name'][i],data['sequence'][i]]
    df=pd.DataFrame(a).T
    if i==0:
        df1=df
    else:
        df1=pd.concat([df1,df],ignore_index=True)
df1.columns=['line_name','coord_x','coord_y','station_name','sequence']
df1.to_csv('bus_inf.csv',index=None,encoding='utf_8_sig')

公交线路轨迹爬取

与上面的方法一致,爬取得到的信息字典中,有’polyline’项,项中存储的为各公交线路的轨迹坐标,同理将这些信息进行整理。
轨迹

import requests
import pandas as pd
import json
import re
f = open("raw_stop.txt","r")   #设置文件对象
str = f.read()     #将txt文件的所有内容读入到字符串str中
f.close()   #将文件关闭
def get_dt(city,line):
    url = 'https://restapi.amap.com/v3/bus/linename?s=rsv3&extensions=all&key=559bdffe35eec8c8f4dae959451d705c&output=json&city={}&offset=1&keywords={}&platform=JS'.format(city,line)
    r = requests.get(url).text
    rt = json.loads(r)
    try:
        if rt['buslines']:
            if len(rt['buslines']) == 0:  #有名称没数据
                print('no data in list..')
            else:
                dt = {
    }
                dt['line_name'] = rt['buslines'][0]['name'] 
                dt['polyline'] = rt['buslines'][0]['polyline']
                dm = pd.DataFrame([dt])
                return dm
        else:
            pass
    except:
        print('error..try it again..')
        time.sleep(2)
        get_dt(city,line)
stations=re.split(',| |\n',str)
stations=list(filter(None,stations))
for sta in stations:
    if sta== '1路':
        data=get_dt('青岛',sta)
    else:
        dm=get_dt('青岛',sta)
        data=pd.concat([data,dm],ignore_index=True)
data.to_csv('bus_inf_trace.csv',index=None,encoding='utf_8_sig')  

坐标转换

像谷歌地图等地图,使用的是wgs84坐标,实际坐标与地图坐标相同,而高德、腾讯地图等为了保障国家安全,在wgs84坐标的基础上对国内范围进行加密,称为火星坐标,百度地图为了商业目的,在火星坐标的基础上进行了二次加密。在这里,我们是通过高德地图采取的公交线路信息,因此需要对火星坐标进行转化,否则绘制的路线会发生偏移,出现公交线路跑到海边的问题。
坐标转换

# -*- coding: utf-8 -*-
import json
import math
import pandas as pd

x_pi = 3.14159265358979324 * 3000.0 / 180.0
pi = 3.1415926535897932384626  # π
a = 6378245.0  # 长半轴
ee = 0.00669342162296594323  # 扁率

def gcj02towgs84(lng, lat):
    """
    GCJ02(火星坐标系)转GPS84
    :param lng:火星坐标系的经度
    :param lat:火星坐标系纬度
    :return:
    """
    if out_of_china(lng, lat):
        return lng, lat
    dlat = transformlat(lng - 105.0, lat - 35.0)
    dlng = transformlng(lng - 105.0, lat - 35.0)
    radlat = lat / 180.0 * pi
    magic = math.sin(radlat)
    magic = 1 - ee * magic * magic
    sqrtmagic = math.sqrt(magic)
    dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * pi)
    dlng = (dlng * 180.0) / (a / sqrtmagic * math.cos(radlat) * pi)
    mglat = lat + dlat
    mglng = lng + dlng
    return [lng * 2 - mglng, lat * 2 - mglat]


def transformlat(lng, lat):
    ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + \
        0.1 * lng * lat + 0.2 * math.sqrt(math.fabs(lng))
    ret += (20.0 * math.sin(6.0 * lng * pi) + 20.0 *
            math.sin(2.0 * lng * pi)) * 2.0 / 3.0
    ret += (20.0 * math.sin(lat * pi) + 40.0 *
            math.sin(lat / 3.0 * pi)) * 2.0 / 3.0
    ret += (160.0 * math.sin(lat / 12.0 * pi) + 320 *
            math.sin(lat * pi / 30.0)) * 2.0 / 3.0
    return ret


def transformlng(lng, lat):
    ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + \
        0.1 * lng * lat + 0.1 * math.sqrt(math.fabs(lng))
    ret += (20.0 * math.sin(6.0 * lng * pi) + 20.0 *
            math.sin(2.0 * lng * pi)) * 2.0 / 3.0
    ret += (20.0 * math.sin(lng * pi) + 40.0 *
            math.sin(lng / 3.0 * pi)) * 2.0 / 3.0
    ret += (150.0 * math.sin(lng / 12.0 * pi) + 300.0 *
            math.sin(lng / 30.0 * pi)) * 2.0 / 3.0
    return ret


def out_of_china(lng, lat):
    """
    判断是否在国内,不在国内不做偏移
    :param lng:
    :param lat:
    :return:
    """
    if lng < 72.004 or lng > 137.8347:
        return True
    if lat < 0.8293 or lat > 55.8271:
        return True
    return False

t_x=[]
t_y=[]
df=pd.read_csv('bus_inf.csv')
for i in range(len(list(df['coord_x']))):
    [X,Y]=gcj02towgs84(list(df['coord_x'])[i],list(df['coord_y'])[i])
    t_x.append(X)
    t_y.append(Y)
t_x=pd.DataFrame(t_x)
t_y=pd.DataFrame(t_y)
df['coord_x']=t_x
df['coord_y']=t_y
df.to_csv('bus_inf_wgs84.csv',index=None,encoding='utf_8_sig')    

城市公交网络可视化

利用ArcMap实现地图的可视化

参考这篇文章
知乎-城市路网实时路况爬取与ArcGIS可视化
在这里插入图片描述

利用plotly实现地图可视化

# 导入库及数据
import requests
import time
import numpy as np
import math
import plotly.offline as py
import plotly.graph_objs as go
from plotly.offline import init_notebook_mode
import pandas as pd
import re
import json

bus_inf_stations = pd.read_csv("bus_inf_wgs84.csv")
bus_inf_trace=pd.read_csv('bus_inf_trace.csv')
init_notebook_mode(connected=True) #如果使用jupyter需要加上这一句,把地图显示在页面上
# 绘制青岛公交轨迹 + 公交站点图
mapbox_access_token = (
    'pk.eyJ1IjoibHVrYXNtYXJ0aW5lbGxpIiwiYSI6ImNpem85dmhwazAy'
    'ajIyd284dGxhN2VxYnYifQ.HQCmyhEXZUTz3S98FMrVAQ'
) # 此处的写法只是为了排版,结果为连接在一起的字符串
layout = go.Layout(
    autosize=True,
    mapbox=dict(
        accesstoken=mapbox_access_token,
        center=dict(
            lat=36.08997714, #青岛市北纬度
            lon=120.3899010 #青岛市北经度
        ),
        pitch=0,
        zoom=11,
    ),
)

color = ('blue', 'green', 'yellow', 'purple', 'orange', 'red', 'violet', 
         'navy', 'crimson', 'cyan', 'magenta', 'maroon', 'peru','gray',
        'brown','darkgray','deeppink','greenyellow','lemonchiffon','lightblue',
        'limegreen','mediumaquamarine','mintcream','orangered','powderblue',
        'seagreen','springgreen','tomato','steelblue','skyblue') #可按需增加
data = [] #绘制数据
marked = set()
cnt = 0
i=0
while(i<len(bus_inf_trace)): #遍历每一条线路
    #plots_name = [] #站台名称
    coord_lon=[]
    coord_lat=[]
    line_name=bus_inf_trace['line_name'][i]
    poly=re.split(';',bus_inf_trace['polyline'][i]) #当前线路的轨迹
    j=0
    while(j<len(poly)):#遍历所有轨迹点
        (lon,lat)=gcj02towgs84(eval(re.split(',',poly[j])[0]), eval(re.split(',',poly[j])[1]))
        coord_lon.append(lon)  #站台经度集
        coord_lat.append(lat)  #站台纬度集
        j=j+1
        
    data.append(
        go.Scattermapbox(
            lon=coord_lon, #站台经度
            lat=coord_lat, #站台纬度
            mode='lines',#markers:点模型,  lines:线模型,  'markers+lines':点-线模型
            name=line_name, #线路名称,显示在图例(legend)上
            text=plots_name, #各个点的名称,鼠标悬浮在点上时显示
            
            # 设置标记点的参数
            marker=go.scattermapbox.Marker(size=5, color=color[cnt])
        )
    )
    #marked.add(uid) #添加已绘制线路的uid
    #marked.add(line['pair_line_uid']) #添加已绘制线路反向线路的uid
    cnt = (cnt + 1) % len(color)
    i=i+1
        
while(i<len(bus_inf_stations)): # <8501
    plots_name = [] #站台名称
    coord_lon=[]
    coord_lat=[]
    line_name=bus_inf_stations['line_name'][i]
    while(line_name==bus_inf_stations['line_name'][i]):
        plots_name.append(bus_inf_stations['station_name'][i])
        coord_lon.append(bus_inf_stations['coord_x'][i])
        coord_lat.append(bus_inf_stations['coord_y'][i])
        if i==8500:
            break
        i=i+1
        
    data.append(
        go.Scattermapbox(
            lon=coord_lon, #站台经度
            lat=coord_lat, #站台纬度
            mode='markers',#markers:点模型,  lines:线模型,  'markers+lines':点-线模型
            name=line_name, #线路名称,显示在图例(legend)上
            text=plots_name, #各个点的名称,鼠标悬浮在点上时显示
            
            # 设置标记点的参数
            marker=go.scattermapbox.Marker(size=5, color='black')
        )
    )
    #marked.add(uid) #添加已绘制线路的uid
    #marked.add(line['pair_line_uid']) #添加已绘制线路反向线路的uid
    cnt = (cnt + 1) % len(color)
    i=i+1
    

fig = dict(data=data, layout=layout)
#py.iplot(fig) #直接显示地图
py.plot(fig, filename='qd_bus.html') #生成html文件并打开

在这里插入图片描述

公交路线基本特征分析

公交线路的平均长度

在爬取的数据字典中,每条公交线路都含有键名为’ distance’的键值对,按照上面爬取公交线路的思路,爬取相关数据,得到各公交线路的长度,并计算线路平均长度。
distance
经过计算,我们得到了线路的平均线路长度为
19.452331013986004km

公交线路的平均站点数

经过分析可以得出,要统计站点数只需要统计站点信息表格中相同’line_name’的行数就可以了。
站点数
经过计算,我们得到了线路的平均站点数大约为
30(30.42909090909091)

公交线路的平均站距

平均站距的计算,可以直接用平均路线长度除以平均站点数得到。
经过计算,可以得到了线路的平均站距大约为
0.6609898713513099km

公交线路的平均直线系数

根据公式:
直线系数=公交线路的长度/公交线路的直线长度

可以求出各路线的直线系数(排除环形路线),其中,公交线路的直线长度通过公交线路的起始和终点站的地理坐标来求解得到,再对这些直线系数求平均,能够得到公交线路的平均直线系数。
直线距离
直线系数
经过计算,我们得到了公交线路的平均直线系数为
2.306061353782556

#平均站点数
import pandas as pd
df=pd.read_csv('bus_inf_wgs84.csv')
dic1={
    }
line=df['line_name']
line=line.drop_duplicates()
for L in line:
    temp=df[df['line_name']==L]
    dic1[L]=temp.shape[0]
L = len(dic1)
S = sum(dic1.values())
A = S / L
#路线平均长度
import requests
import pandas as pd
import json
import re
f = open("raw_stop.txt","r")   #设置文件对象
str = f.read()     #将txt文件的所有内容读入到字符串str中
f.close()   #将文件关闭
def get_dt(city,line):
    url = 'https://restapi.amap.com/v3/bus/linename?s=rsv3&extensions=all&key=559bdffe35eec8c8f4dae959451d705c&output=json&city={}&offset=1&keywords={}&platform=JS'.format(city,line)
    r = requests.get(url).text
    rt = json.loads(r)
    try:
        if rt['buslines']:
            if len(rt['buslines']) == 0:  #有名称没数据
                print('no data in list..')
            else:
                dt = {
    }
                dt['line_name'] = rt['buslines'][0]['name'] 
                dt['distance'] = eval(rt['buslines'][0]['distance'])
                dm = pd.DataFrame([dt])
                return dm
        else:
            pass
    except:
        print('error..try it again..')
        time.sleep(2)
        get_dt(city,line)
stations=re.split(',| |\n',str)
stations=list(filter(None,stations))
for sta in stations:
    if sta== '1路':
        data1=get_dt('青岛',sta)
    else:
        dm=get_dt('青岛',sta)
        data1=pd.concat([data1,dm],ignore_index=True)
B=sum(data1['distance'])/data1.shape[0]
#平均站距
C=B/(A-1)
C
#平均直线系数
def get_dt_l(city,line):
    url = 'https://restapi.amap.com/v3/bus/linename?s=rsv3&extensions=all&key=559bdffe35eec8c8f4dae959451d705c&output=json&city={}&offset=1&keywords={}&platform=JS'.format(city,line)
    r = requests.get(url).text
    rt = json.loads(r)
    try:
        if rt['buslines']:
            if len(rt['buslines']) == 0:  #有名称没数据
                print('no data in list..')
            else:
                if rt['buslines'][0]['start_stop'] != rt['buslines'][0]['end_stop']:
                    dt={
    }
                    dt['line_name'] = rt['buslines'][0]['name']
                    dt['start_stop'] = rt['buslines'][0]['start_stop']
                    dt['end_stop'] = rt['buslines'][0]['end_stop']
                    for st in rt['buslines'][0]['busstops']:
                        if st['name']==dt['start_stop']:
                            dt['start_coord']=st['location']
                        if st['name']==dt['end_stop']:
                            dt['end_coord']=st['location']
                    dm = pd.DataFrame([dt])
                    return dm
        else:
            pass
    except:
        print('error..try it again..')
        time.sleep(2)
        get_dt_l(city,line)
stations=re.split(',| |\n',str)
stations=list(filter(None,stations))
for sta in stations:
    if sta== '1路':
        data2=get_dt_l('青岛',sta)
    else:
        dm=get_dt_l('青岛',sta)
        data2=pd.concat([data2,dm],ignore_index=True)
start_coord_x=[]
start_coord_y=[]
end_coord_x=[]
end_coord_y=[]
for i in range(data2.shape[0]):
    end_coord_x.append(eval(re.split(',',data2['end_coord'][i])[0]))
    start_coord_x.append(eval(re.split(',',data2['start_coord'][i])[0]))
    end_coord_y.append(eval(re.split(',',data2['end_coord'][i])[1]))
    start_coord_y.append(eval(re.split(',',data2['start_coord'][i])[1]))
a=[start_coord_x,start_coord_y,end_coord_x,end_coord_y]
df=pd.DataFrame(a).T
df.columns=['start_coord_x','start_coord_y','end_coord_x','end_coord_y']
D=pd.concat([data2,df],axis=1)
D=D.drop(['start_coord','end_coord'],axis=1)
D.to_csv('bus_inf_start_end.csv',index=None,encoding='utf_8_sig')

from math import sin, asin, cos, radians, fabs, sqrt
EARTH_RADIUS = 6371  # 地球平均半径,6371km
def hav(theta):
    s = sin(theta / 2)
    return s * s
def get_distance_hav(lat0, lng0, lat1, lng1):
    "用haversine公式计算球面两点间的距离。"
    # 经纬度转换成弧度
    lat0 = radians(lat0)
    lat1 = radians(lat1)
    lng0 = radians(lng0)
    lng1 = radians(lng1)

    dlng = fabs(lng0 - lng1)
    dlat = fabs(lat0 - lat1)
    h = hav(dlat) + cos(lat0) * cos(lat1) * hav(dlng)
    distance = 2 * EARTH_RADIUS * asin(sqrt(h))
    return distance
dic2={
    }
for i in range(len(D)):
    dic2[D['line_name'][i]]=get_distance_hav(D['start_coord_y'][i],D['start_coord_x'][i],D['end_coord_y'][i],D['end_coord_x'][i])
    if dic2[D['line_name'][i]]<0.5:
        del dic2[D['line_name'][i]]

dic3={
    }
for i in dic2.keys():
    dic3[i]=data1[data1['line_name']==i]['distance']/dic2[i]
for i in dic2.keys():
    dic3.values()   

S=0
num=0
for i in dic2.keys():
    S=S+list(dic3[i])[0]
    num=num+1
N=S/num

公交换乘网络搭建

换乘网络的搭建需要确定各公交站点的距离矩阵,距离矩阵如下:
在这里插入图片描述
矩阵中值为1,表示横纵坐标的站点之间能够通过一条公交线路到达;值为0,表示无法通过一条公交线路到达,需要换乘。
根据换乘矩阵,搭建包含所有的站点的换乘网络如下:
在这里插入图片描述
由于站点数量过多,无法很好的显示,我们只取十条公交线路进行绘制换乘网络,结果如下:
在这里插入图片描述
在这里插入图片描述

import pandas as pd
import numpy as np
df=pd.read_csv('bus_inf_wgs84.csv')
line=df['line_name']
line=line.drop_duplicates()
network=np.zeros((line.shape[0],line.shape[0]))
network=pd.DataFrame(network,index=line)
network.columns=line
for i in range(len(list(line))):
    for j in range(i,len(list(line))):
        temp1=df[df['line_name']==list(line)[i]]
        temp2=df[df['line_name']==list(line)[j]]
        T1=set(list(temp1['station_name']))
        T2=set(list(temp2['station_name']))
        if T1&T2 != set():
            network[list(line)[i]][list(line)[j]]=network[list(line)[j]][list(line)[i]]=1.0  
stage=[]
for i in list(line):
    for j in list(line):
        if network[j][i] == 1.0:
            stage.append((j,i))
import networkx as nx
import matplotlib.pyplot as plt
%matplotlib inline
#plt.figure(figsize=(8, 8.5))
G=nx.Graph()
G.add_nodes_from(list(line))
G.add_edges_from(stage)
nx.draw(G,with_labels=False,edge_color='b', node_color='g',node_size=100,font_family ='YouYuan',spring_layout=True,font_size=8)
plt.show()

公交换乘网络分析

节点数和边数

节点数为公交线路的长度为275,边数为距离矩阵中值‘1’的数量为10063。

节点的邻居数(度)

可以理解成为,距离矩阵每行或每列数值‘1’的个数,经过计算得到的结果为
在这里插入图片描述

节点度的分布(直方图)

在这里插入图片描述

网络的平均路径长度

给定一个网络G(n, e), n是节点数量,e是链接数量。对于网络中的任意一对节点source s和target t,我们可以计算它们之间的最短距离ds,t。将这些距离相加除以n(n−1),就可以得到网络的平均最短路径长度。再这里,我们直接利用networkx的函数average_shortest_path_length()来直接进行计算,得到结果为
2.1946303180503923

参考资料

  1. Plotly绘图库官网 https://plot.ly/
  2. 使用networkx计算平均最短路径长度
    https://computational-communication.com/average-shortest-path-length/
  3. python通过经纬度计算两点之间距离https://blog.csdn.net/zzmtkj/article/details/94591792
  4. python复杂网络结构可视化——matplotlib+network
    https://zhuanlan.zhihu.com/p/36700425
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42319367/article/details/104962166

智能推荐

分布式光纤传感器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告_预计2026年中国分布式传感器市场规模有多大-程序员宅基地

文章浏览阅读3.2k次。本文研究全球与中国市场分布式光纤传感器的发展现状及未来发展趋势,分别从生产和消费的角度分析分布式光纤传感器的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国市场的主要厂商产品特点、产品规格、不同规格产品的价格、产量、产值及全球和中国市场主要生产商的市场份额。主要生产商包括:FISO TechnologiesBrugg KabelSensor HighwayOmnisensAFL GlobalQinetiQ GroupLockheed MartinOSENSA Innovati_预计2026年中国分布式传感器市场规模有多大

07_08 常用组合逻辑电路结构——为IC设计的延时估计铺垫_基4布斯算法代码-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏12次。常用组合逻辑电路结构——为IC设计的延时估计铺垫学习目的:估计模块间的delay,确保写的代码的timing 综合能给到多少HZ,以满足需求!_基4布斯算法代码

OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版-程序员宅基地

文章浏览阅读3.3k次,点赞3次,收藏5次。OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版

关于美国计算机奥赛USACO,你想知道的都在这_usaco可以多次提交吗-程序员宅基地

文章浏览阅读2.2k次。USACO自1992年举办,到目前为止已经举办了27届,目的是为了帮助美国信息学国家队选拔IOI的队员,目前逐渐发展为全球热门的线上赛事,成为美国大学申请条件下,含金量相当高的官方竞赛。USACO的比赛成绩可以助力计算机专业留学,越来越多的学生进入了康奈尔,麻省理工,普林斯顿,哈佛和耶鲁等大学,这些同学的共同点是他们都参加了美国计算机科学竞赛(USACO),并且取得过非常好的成绩。适合参赛人群USACO适合国内在读学生有意向申请美国大学的或者想锻炼自己编程能力的同学,高三学生也可以参加12月的第_usaco可以多次提交吗

MySQL存储过程和自定义函数_mysql自定义函数和存储过程-程序员宅基地

文章浏览阅读394次。1.1 存储程序1.2 创建存储过程1.3 创建自定义函数1.3.1 示例1.4 自定义函数和存储过程的区别1.5 变量的使用1.6 定义条件和处理程序1.6.1 定义条件1.6.1.1 示例1.6.2 定义处理程序1.6.2.1 示例1.7 光标的使用1.7.1 声明光标1.7.2 打开光标1.7.3 使用光标1.7.4 关闭光标1.8 流程控制的使用1.8.1 IF语句1.8.2 CASE语句1.8.3 LOOP语句1.8.4 LEAVE语句1.8.5 ITERATE语句1.8.6 REPEAT语句。_mysql自定义函数和存储过程

半导体基础知识与PN结_本征半导体电流为0-程序员宅基地

文章浏览阅读188次。半导体二极管——集成电路最小组成单元。_本征半导体电流为0

随便推点

【Unity3d Shader】水面和岩浆效果_unity 岩浆shader-程序员宅基地

文章浏览阅读2.8k次,点赞3次,收藏18次。游戏水面特效实现方式太多。咱们这边介绍的是一最简单的UV动画(无顶点位移),整个mesh由4个顶点构成。实现了水面效果(左图),不动代码稍微修改下参数和贴图可以实现岩浆效果(右图)。有要思路是1,uv按时间去做正弦波移动2,在1的基础上加个凹凸图混合uv3,在1、2的基础上加个水流方向4,加上对雾效的支持,如没必要请自行删除雾效代码(把包含fog的几行代码删除)S..._unity 岩浆shader

广义线性模型——Logistic回归模型(1)_广义线性回归模型-程序员宅基地

文章浏览阅读5k次。广义线性模型是线性模型的扩展,它通过连接函数建立响应变量的数学期望值与线性组合的预测变量之间的关系。广义线性模型拟合的形式为:其中g(μY)是条件均值的函数(称为连接函数)。另外,你可放松Y为正态分布的假设,改为Y 服从指数分布族中的一种分布即可。设定好连接函数和概率分布后,便可以通过最大似然估计的多次迭代推导出各参数值。在大部分情况下,线性模型就可以通过一系列连续型或类别型预测变量来预测正态分布的响应变量的工作。但是,有时候我们要进行非正态因变量的分析,例如:(1)类别型.._广义线性回归模型

HTML+CSS大作业 环境网页设计与实现(垃圾分类) web前端开发技术 web课程设计 网页规划与设计_垃圾分类网页设计目标怎么写-程序员宅基地

文章浏览阅读69次。环境保护、 保护地球、 校园环保、垃圾分类、绿色家园、等网站的设计与制作。 总结了一些学生网页制作的经验:一般的网页需要融入以下知识点:div+css布局、浮动、定位、高级css、表格、表单及验证、js轮播图、音频 视频 Flash的应用、ul li、下拉导航栏、鼠标划过效果等知识点,网页的风格主题也很全面:如爱好、风景、校园、美食、动漫、游戏、咖啡、音乐、家乡、电影、名人、商城以及个人主页等主题,学生、新手可参考下方页面的布局和设计和HTML源码(有用点赞△) 一套A+的网_垃圾分类网页设计目标怎么写

C# .Net 发布后,把dll全部放在一个文件夹中,让软件目录更整洁_.net dll 全局目录-程序员宅基地

文章浏览阅读614次,点赞7次,收藏11次。之前找到一个修改 exe 中 DLL地址 的方法, 不太好使,虽然能正确启动, 但无法改变 exe 的工作目录,这就影响了.Net 中很多获取 exe 执行目录来拼接的地址 ( 相对路径 ),比如 wwwroot 和 代码中相对目录还有一些复制到目录的普通文件 等等,它们的地址都会指向原来 exe 的目录, 而不是自定义的 “lib” 目录,根本原因就是没有修改 exe 的工作目录这次来搞一个启动程序,把 .net 的所有东西都放在一个文件夹,在文件夹同级的目录制作一个 exe._.net dll 全局目录

BRIEF特征点描述算法_breif description calculation 特征点-程序员宅基地

文章浏览阅读1.5k次。本文为转载,原博客地址:http://blog.csdn.net/hujingshuang/article/details/46910259简介 BRIEF是2010年的一篇名为《BRIEF:Binary Robust Independent Elementary Features》的文章中提出,BRIEF是对已检测到的特征点进行描述,它是一种二进制编码的描述子,摈弃了利用区域灰度..._breif description calculation 特征点

房屋租赁管理系统的设计和实现,SpringBoot计算机毕业设计论文_基于spring boot的房屋租赁系统论文-程序员宅基地

文章浏览阅读4.1k次,点赞21次,收藏79次。本文是《基于SpringBoot的房屋租赁管理系统》的配套原创说明文档,可以给应届毕业生提供格式撰写参考,也可以给开发类似系统的朋友们提供功能业务设计思路。_基于spring boot的房屋租赁系统论文