此篇主要针对在【入门级-用Pandas揭秘美国选民的总统喜好】赛题背景下,使用Folium库的具体历程,主要涉及时间轴和热力图绘制。

第一步:数据准备
涉及pandas库对数据的读取和处理
添加表头–read_csv;
合并表格–merge;
提出列,设置数据结构–DataFrame;
查看数据信息–head,shape属性查看数据的规模,调nfo函数查看数据信息,describe函数查看数据分布。
填充空值–fillna

# 导入相关处理包
import pandas as pd
# 读取候选人信息,由于原始数据没有表头,需要添加表头
candidates = pd.read_csv("weball20.txt", sep = '|',names=['CAND_ID','CAND_NAME','CAND_ICI','PTY_CD','CAND_PTY_AFFILIATION','TTL_RECEIPTS','TRANS_FROM_AUTH','TTL_DISB','TRANS_TO_AUTH','COH_BOP','COH_COP','CAND_CONTRIB','CAND_LOANS','OTHER_LOANS','CAND_LOAN_REPAY','OTHER_LOAN_REPAY','DEBTS_OWED_BY','TTL_INDIV_CONTRIB','CAND_OFFICE_ST','CAND_OFFICE_DISTRICT','SPEC_ELECTION','PRIM_ELECTION','RUN_ELECTION','GEN_ELECTION','GEN_ELECTION_PRECENT','OTHER_POL_CMTE_CONTRIB','POL_PTY_CONTRIB','CVG_END_DT','INDIV_REFUNDS','CMTE_REFUNDS'])
# 读取候选人和委员会的联系信息
ccl = pd.read_csv("ccl.txt", sep = '|',names=['CAND_ID','CAND_ELECTION_YR','FEC_ELECTION_YR','CMTE_ID','CMTE_TP','CMTE_DSGN','LINKAGE_ID'])
# 关联两个表数据
ccl = pd.merge(ccl,candidates)
# 提取出所需要的列
ccl = pd.DataFrame(ccl, columns=[ 'CMTE_ID','CAND_ID', 'CAND_NAME','CAND_PTY_AFFILIATION'])
# 读取个人捐赠数据,由于原始数据没有表头,需要添加表头
# 提示:读取本文件大概需要5-10s
itcont = pd.read_csv('itcont_2020_20200722_20200820.txt', sep='|',names=['CMTE_ID','AMNDT_IND','RPT_TP','TRANSACTION_PGI','IMAGE_NUM','TRANSACTION_TP','ENTITY_TP','NAME','CITY','STATE','ZIP_CODE','EMPLOYER','OCCUPATION','TRANSACTION_DT','TRANSACTION_AMT','OTHER_ID','TRAN_ID','FILE_NUM','MEMO_CD','MEMO_TEXT','SUB_ID'])

merge数据需要有共同的索引, 这里为CMTE_ID:

# 将候选人与委员会关系表ccl和个人捐赠数据表itcont合并,通过 CMTE_ID
c_itcont =  pd.merge(ccl,itcont)
# 提取需要的数据列
c_itcont = pd.DataFrame(c_itcont, columns=[ 'CAND_NAME','NAME', 'STATE','EMPLOYER','OCCUPATION','TRANSACTION_AMT', 'TRANSACTION_DT','CAND_PTY_AFFILIATION'])

--------Tip: merge使用-----------

【1】merge函数:通过键拼接列,横向拼接

merge: 合并数据集, 通过left, right确定连接字段,默认是两个数据集相同的字段
参数 说明
left 参与合并的左侧DataFrame
right 参与合并的右侧DataFrame
how 连接方式:‘inner’(默认);还有,‘outer’、‘left’、‘right’
on 用于连接的列名,必须同时存在于左右两个DataFrame对象中,如果位指定,则以left和right列名的交集作为连接键
left_on 左侧DataFarme中用作连接键的列
right_on 右侧DataFarme中用作连接键的列
left_index 将左侧的行索引用作其连接键
right_index 将右侧的行索引用作其连接键
sort 根据连接键对合并后的数据进行排序,默认为True。有时在处理大数据集时,禁用该选项可获得更好的性能
suffixes 字符串值元组,用于追加到重叠列名的末尾,默认为(‘_x’,‘_y’).例如,左右两个DataFrame对象都有‘data’,则结果中就会出现‘data_x’,‘data_y’
copy 设置为False,可以在某些特殊情况下避免将数据复制到结果数据结构中。默认总是赋值

PS:

  1. merge合并的两个字段类型必须相同,如果不同会报错,可以使用astype转换成相同类型的字段。

  2. merge的两个文件中如果有重复数据条目,merge的输出dataframe的数据条目会大于输入的dataframe。

可以实现:

  1. 当左右连接字段不相同时,使用left_on,right_on
  2. merge默认按相同字段合并,且取两个都有的
  3. 合并后,删除重复的列
  4. 参数how的使用
    “1)默认:inner 内连接,取交集”
    “2)outer 外连接,取并集,并用nan填充”
    “3)left 左连接, 左侧取全部,右侧取部分”
    左侧数据集全要,右边与之对应,未含有的设置为空
    “4) right 有连接,左侧取部分,右侧取全部”

【2】join 拼接列,主要用于索引上的合并
join方法提供了一个简便的方法用于将两个DataFrame中的不同的列索引合并成为一个DataFrame
其中参数的意义与merge方法基本相同,只是join方法默认为左外连接how=left

【3】concat 可以沿着一条轴将多个对象堆叠到一起,默认用于纵向拼接
concat方法相当于数据库中的全连接(UNION ALL),可以指定按某个轴进行连接,也可以指定连接的方式join(outer,inner 只有这两种)。 与数据库不同的,concat不会去重,要达到去重的效果可以使用drop_duplicates方法

--------Tip: merge使用 end-----------

# 将候选人与委员会关系表ccl和个人捐赠数据表itcont合并,通过 CMTE_ID
c_itcont =  pd.merge(ccl,itcont)
# 提取需要的数据列
c_itcont = pd.DataFrame(c_itcont, columns=[ 'CAND_NAME','NAME', 'STATE','EMPLOYER','OCCUPATION','TRANSACTION_AMT', 'TRANSACTION_DT','CAND_PTY_AFFILIATION'])

查看DateFrame数据信息:
现在我们可以利用调用shape属性查看数据的规模,调用info函数查看数据信息,调用describe函数查看数据分布,调用value返回ndarray类型的对象。

# 查看目前数据前10行
c_itcont.head(10)
# 查看数据规模 多少行 多少列
c_itcont.shape
# 查看整体数据信息,包括每个字段的名称、非空数量、字段的数据类型
c_itcont.info()
#空值处理,统一填充 NOT PROVIDED
c_itcont['STATE'].fillna('NOT PROVIDED',inplace=True)
c_itcont['EMPLOYER'].fillna('NOT PROVIDED',inplace=True)
c_itcont['OCCUPATION'].fillna('NOT PROVIDED',inplace=True)
# 对日期TRANSACTION_DT列进行处理
c_itcont['TRANSACTION_DT'] = c_itcont['TRANSACTION_DT'] .astype(str)

PS:我在这里将日期改为:xxxx年xx月xx日
由于数据是从2020.07到2020.08的,所以月份为展现两位,直接使用加字符0的方式填充

# 对日期TRANSACTION_DT列进行处理
c_itcont['TRANSACTION_DT'] = c_itcont['TRANSACTION_DT'] .astype(str)
# 将日期格式改为年月日  7242020   【转换顺序】
c_itcont['TRANSACTION_DT'] = [i[3:7]+"0"+i[0]+i[1:3] for i in c_itcont['TRANSACTION_DT'] ]
df_1=c_itcont.groupby(['STATE','TRANSACTION_DT']).agg('sum')  #按照州和日期排序groupby,对捐款进行聚合agg
c_itcont.groupby(['STATE','TRANSACTION_DT']).sum().sort_values("TRANSACTION_AMT",ascending=False).head()


(可以得到某天某州捐款的排序,后来好奇查了查这一天发生了什么,为什么CA捐了这么多钱。。)

------- Tip:groupby使用 -----------
参考:
https://www.jianshu.com/p/e46eb6e447e3
https://zhuanlan.zhihu.com/p/101284491?utm_source=wechat_session

第一种:df.groupby(col),返回一个按列进行分组的groupby对象;

第二种:df.groupby([col1,col2]),返回一个按多列进行分组的groupby对象;

第三种:df.groupby(col1)[col2]或者df[col2].groupby(col1),两者含义相同,返回按列col1进行分组后,col2的值;

e.g:

c_itcont.groupby('STATE').head()


(按照各州分类排序)

c_itcont.groupby(['STATE','TRANSACTION_DT']).head()


(按照州和日期分类排序)

c_itcont.groupby(['STATE','TRANSACTION_DT'])["TRANSACTION_AMT"].head()


(上图中捐款数的结果)
转化为List:

list(c_itcont.groupby(['STATE','TRANSACTION_DT'])["TRANSACTION_AMT"])


agg聚合操作是groupby后非常常见的操作,聚合操作可以用来求和、均值、最大值、最小值等,下面的表格列出了Pandas中常见的聚合操作。
min,max,min,sum,mean
针对样例数据集,如果我想求不同公司员工的平均年龄和平均薪水,可以按照下方的代码进行:

data.groupby(“company”).agg(‘mean’)

如果想对针对不同的列求不同的值,比如要计算不同公司员工的平均年龄以及薪水的中位数,可以利用字典进行聚合操作的指定:

data.groupby(‘company’).agg({‘salary’:‘median’,‘age’:‘mean’})

transform:对transform而言,则会对每一条数据求得相应的结果,同一组内的样本会有相同的值,组内求完均值后会按照原索引的顺序返回结果,

apply:可以设置函数,筛选符合条件的,例如数目大于多少

-------Tip:groupby 使用 end----

df_1.loc[("CA","20200722"),"TRANSACTION_AMT"]
#329524

(输出,CA在20200722捐了多少钱)

df_1.loc[("CA","222222"),"TRANSACTION_AMT"]
#报错:KeyError

(由于未找到相关数据,报错)

-----Tip:DataFrame数据提取----------
参考:https://blog.csdn.net/brucewong0516/article/details/82494090

1、Single label. 单个 row_label 返回的Series

 df.loc['viper']
Out[17]:
max_speed    4
shield       5
Name: viper, dtype: int64

2、List of labels. 列表 row_label 返回的DataFrame

df.loc[['cobra','viper']]
Out[20]: max_speed  shield
cobra          1       2
viper          4       5

3、Single label for row and column 同时选定行和列,输出值

df.loc['cobra', 'shield']
Out[24]: 2

4、Conditional that returns a boolean Series 条件布尔值

df.loc[df['shield'] > 6]
Out[34]: max_speed  shield
sidewinder          7       8

另外:`

DataFrame.loc                                 #标签定位,使用名称
DataFrame.iloc                                #整型定位,使用数字`
#loc只能通过index和columns来取,不能用数字
df.loc['one','a']#one行,a列
df.loc['one':'two','a']#one到two行,a列
df.loc['one':'two','a':'c']#one到two行,a到c列
df.loc['one':'two',['a','c']]#one到two行,ac列#iloc只能用数字索引,不能用索引名
df.iloc[0:2]#前2行
df.iloc[0]#第0行
df.iloc[0:2,0:2]#0、1行,0、1列
df.iloc[[0,2],[1,2,3]]#第0、2行,1、2、3列

DataFrame全部函数
DateFrame基本属性(查看行,列,索引…)

-----Tip:DateFrame 数据提取 end--------

第二步:时序数据构建

import pandas as pd
#时间序列处理datetime_index = pd.date_range(start="20200722",end="20200820")
dt_index_epochs = datetime_index.astype(int)
dt_index = dt_index_epochs.astype("U10")
n_periods =len(datetime_index)

----Tip: 时序数据处理 -------
在 TimeSliderChoropleth.ipynb构建时序数据时:

import pandas as pdn_periods, n_sample = 48, 40   #时间序列长度,取样数assert n_sample < n_periods  #取样数一定小于时间序列长度
#日期从201611开始,间隔一个月,取n_periods个
datetime_index = pd.date_range("2016-1-1", periods=n_periods, freq="M")
#日期类型转换为int
dt_index_epochs = datetime_index.astype(int) // 10 ** 9
#固定长度的Unicode类型,跟字符串定义方式一样,比如U10
dt_index = dt_index_epochs.astype("U10")dt_index
import numpy as npstyledata = {}for country in gdf.index:df = pd.DataFrame({"color": np.random.normal(size=n_periods),"opacity": np.random.normal(size=n_periods),},index=dt_index,)df = df.cumsum()df.sample(n_sample, replace=False).sort_index()styledata[country] = df

涉及知识点如下:

【1】pandas时间序列操作方法

【小部分参考:https://soyoger.blog.csdn.net/article/details/78335399】

1.生成时间范围:

index = pd.date_range('2012-04-01', '2012-06-01')

2.按频率生成时间
频率选择:按天,按周,按月,D,W-MON,W-TUE…,M

pd.date_range('2012-05-02', periods=5,freq='W-WED')

3.字符串和datetime的相互转换
利用str或strftime方法(传入一个格式化字符串)

stamp = datetime(2011, 1, 3)
str(stamp)
#‘2011-01-03 00:00:00’
stamp.strftime('%Y-%m-%d')
#‘2011-01-03’

value = '2011-01-03'
datetime.strptime(value, '%Y-%m-%d')
#datetime.datetime(2011, 1, 3, 0, 0)

4.时间序列对应

import pandas as pddf = pd.DataFrame([1,2,3],index  = pd.date_range('20181021',periods=3,freq='W'))
df.loc['2018']
df.loc['2018-11']


【2】强制类型转换astype
astype:转换数组的数据类型。

int32 --> float64 完全ojbk

float64 --> int32 会将小数部分截断

string_ --> float64 如果字符串数组表示的全是数字,也可以用astype转化为数值类型

df.astype('数据类型')                        #改变整个df的数据类型
df['列名'].astype('数据类型')              #仅改变某一列的数据类型

另外补充,numpy数组中这四个方法的区别ndim、shape、dtype、astype
ndim返回的是数组的维度,返回的只有一个数,该数即表示数组的维度。
shape:表示各位维度大小的元组。返回的是一个元组。
dtype:一个用于说明数组数据类型的对象。返回的是该数组的数据类型。
astype:转换数组的数据类型。

除了用astype进行类型转换,也可以自定义函数来批量修改数据类型(通过int(),str()等直接转换)。还可以用Pandas的一些辅助函数(如to_numeric()、to_datetime())。

【3】随机抽样sample
DataFrame.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None)[source]
从DF里随机选取n个样本

参数名称 参数说明 举例说明
n 要抽取的行数
df.sample(n=3,random_state=1)
提取3行数据列表
注意,使用random_state,以确保可重复性的例子。frac
抽取行的比例
例如frac=0.8,就是抽取其中80%。df.sample(frac=0.8, replace=True, random_state=1)
replace
是否为有放回抽样,
True:有放回抽样
False:未放回抽样

【4】排序–sort_index()和.sort_values()

1、df. sort_values()
作用:既可以根据列数据,也可根据行数据排序。
注意:必须指定by参数,即必须指定哪几行或哪几列;无法根据index名和columns名排序

DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind=‘quicksort’, na_position=‘last’)
axis:{0 or ‘index’, 1 or ‘columns’}, default 0,默认按照列排序,即纵向排序;如果为1,则是横向排序。
by:str or list of str;如果axis=0,那么by=“列名”;如果axis=1,那么by=“行名”。
ascending:布尔型,True则升序,如果by=[‘列名1’,‘列名2’],则该参数可以是[True, False],即第一字段升序,第二个降序。
inplace:布尔型,是否用排序后的数据框替换现有的数据框。

2、 df. sort_index() --按照行标签或者列标签排序
作用:默认根据行标签对所有行排序,或根据列标签对所有列排序,或根据指定某列或某几列对行排序。
注意:df. sort_index()可以完成和df. sort_values()完全相同的功能,但python更推荐用只用df. sort_index()对“根据行标签”和“根据列标签”排序,其他排序方式用df.sort_values()。

调用方式
sort_index(axis=0, level=None, ascending=True, inplace=False, kind=‘quicksort’, na_position=‘last’, sort_remaining=True, by=None)
axis:0按照行名排序;1按照列名排序
level:默认None,否则按照给定的level顺序排列—貌似并不是,文档
ascending:默认True升序排列;False降序排列
inplace:默认False,否则排序之后的数据直接替换原来的数据框
kind:排序方法,{‘quicksort’, ‘mergesort’, ‘heapsort’}, default ‘quicksort’。似乎不用太关心。
na_position:缺失值默认排在最后{“first”,“last”}
by:按照某一列或几列数据进行排序,但是by参数貌似不建议使用

【5】累加和–comsum

Cumsum :计算轴向元素累加和,返回由中间结果组成的数组

这里:df.comsum()
是将颜色和透明度按列,依次向下累加。
例如:第一行color:1
第二行color:1(第一行)+2(第二行)=3
第三行color:3+3(第三行)=6
也可以按照id进行累加,一般与groupby联合使用:
data[‘sum_Times’]=data[‘Times’].groupby([‘userID’]).cumsum()
(对每个用户的使用次数进行累加,得到使用总数)
----Tip: 时序数据处理 end-------

第三步:时序数据与地图对接
【这一部分尝试了很久,主要是styledata的数据格式必须与TimeSliderChoropleth函数要求的格式相同,否则实现不了!】
首先,根据上面 TimeSliderChoropleth.ipynb的输出,查看styledata的数据形式:

意思是,各个州用数字0,1,2,3…进行标号,例如第0个国家里面含有每个事件的color和opacity属性值。
州的标号也不是随意标的,是按照设定地图边界数据gdf一一对应的,因为后面画图时,是直接对应州位置和标号去上色的。所以,改动时,这里应该根据自己的边界地理数据,逐一对对应州的捐款数据进行统计。
上传地理数据:

#美国相关地理数据
import json
import folium
import requestsurl = ("https://raw.githubusercontent.com/python-visualization/folium/master/examples/data"
)
us_states = f"{url}/us-states.json"
geo_json_data = json.loads(requests.get(us_states).text) #边界

对各个州捐款情况赋值:
(country是整型,为州的标号,ccountry是字符,是州的名字(为了后续的loc),amt对应时间序列)

##构建各时间下,州对应捐款的颜色透明属性
import geopandas as gpd
gdf = gpd.read_file(us_states)
import numpy as np
import datetime
styledata = {}
for country in gdf.index:ccountry=gdf.iloc[country]["id"] #找到州名amt=[0]*n_periods  #数组for i in range(0,len(datetime_index)-1):x=datetime.datetime.strftime(datetime_index[i],'%Y%2m%2d')  #转字符串try:amt[i]=amt[i]+df_1.loc[(ccountry,x),"TRANSACTION_AMT"]  #定位找到捐款数except KeyError:amt[i]=amt[i]df = pd.DataFrame({"color": amt,   #loc标签定位,使用名称,"opacity": amt,  #透明},index=dt_index,  #索引是日期)df = df.cumsum() #求列的累加值 styledata[country] = df

颜色从数字对应至16进制

##处理颜色透明数值 对应十六进制
max_color, min_color, max_opacity, min_opacity = 0, 0, 0, 0for country, data in styledata.items():max_color = max(max_color, data["color"].max())min_color = min(max_color, data["color"].min())max_opacity = max(max_color, data["opacity"].max())max_opacity = min(max_color, data["opacity"].max())
from branca.colormap import linear#cmap = linear.PuRd_09.scale(min_color, max_color)
cmap = linear.Reds_09.scale(min_color, max_color)
#cmap = linear.PuBuGn_09.scale(min_color, max_color)def norm(x):return (x - x.min()) / (x.max() - x.min())for country, data in styledata.items():data["color"] = data["color"].apply(cmap)data["opacity"] = norm(data["opacity"])
#styledata.get(0).head()

将标号转为为str
1->“1”

styledict = {str(country): data.to_dict(orient="index") for country, data in styledata.items()
}

-----Tip:复习try excepy-----

try:正常的操作......................
except:发生异常,执行这块代码......................
else:如果没有异常执行这块代码

—Tip:复习 try except end-----

第四步:映射地图

#画美国地图m = folium.Map(location=[43, -100], ## 初始化地图中心zoom_start=4,tiles="stamentoner"  #瓷砖风格tiles="stamentonerbackground"
)folium.GeoJson(geo_json_data).add_to(m) #地图边界
folium.map.CustomPane("labels").add_to(m) #使得州的名称在最上层1
m

其中,运用了TileLayer,为了使得州的名称在地图上层。

#时间轴地图,颜色可能需要一定时间加载,前几天颜色较浅
from folium.plugins import TimeSliderChoropleth
g = TimeSliderChoropleth(gdf.to_json(),styledict=styledict,
).add_to(m)
folium.TileLayer("stamentonerlabels", pane="labels").add_to(m)  #使得州的名称在最上层2m

结果:


带有时间轴的热力图就做好啦~~~
【项目1整体代码】

后面附加:各州总捐款热力图的静态呈现+一个流动曲线
【项目2整体代码】

这里面主要是在加流动曲线时,一个是对geo_json_data数据的提取,找到CA州的边界点;另一个是folium.plugins.AntPath中流动路径中各个点的经纬度是与geo相反的(所以刚开始半天尝试的时候,一直没在我希望的位置上…)

G=geo_json_data['features']  #G为列表
for i in range(len(G)):if G[i]['id']=='CA':#print(G[i]['geometry']['coordinates'])B=G[i]['geometry']['coordinates']break
B=B[0]  #CA边界
#环绕CA
from folium import plugins
B2=[]
for i in range(len(B)):b=[]b.append(B[i][1])b.append(B[i][0])B2.append(b)
#注意:location坐标相反
#加动态线
folium.plugins.AntPath(locations=B2 , reverse="True", dash_array=[20, 30]
).add_to(m)m.fit_bounds(m.get_bounds())m

结果如下:


只是这个比赛好早就结束啦,默默用来做一个天池初体验记录~
天池实验室,刚开始很想吐槽,比如有时候运行会卡死,数据加载会卡死,还有那个连接倒计时,剩一个小时的时候就忍不住去重启,但是后来觉得能直接挂载比赛数据,不占用自己内存等等还是挺香的,希望他能再快一点就更好啦~

Folium库使用心得(二)相关推荐

  1. Folium库使用心得(一)

    参考代码:https://nbviewer.jupyter.org/github/python-visualization/folium/tree/master/examples/ 初次接触阿里云的天 ...

  2. BT源代码学习心得(二):程序运行参数的获取 -- 转贴自 wolfenstein (NeverSayNever)

    BT源代码学习心得(二):程序运行参数的获取 发信人: wolfenstein (NeverSayNever), 个人文集 标  题: BT源代码学习心得(二):程序运行参数的获取 发信站: 水木社区 ...

  3. python 实现对地图的点击_python使用folium库绘制地图点击框

    python使用folium 库生成地图网页的具体代码,供大家参考,具体内容如下 folium 官网 import folium import pandas as pd def mark_map(da ...

  4. 爬虫入门之urllib库详解(二)

    爬虫入门之urllib库详解(二) 1 urllib模块 urllib模块是一个运用于URL的包 urllib.request用于访问和读取URLS urllib.error包括了所有urllib.r ...

  5. STM32学习心得二十一:实时时钟RTC和备份寄存器BKP特征、原理及相关实验代码解读

    记录一下,方便以后翻阅~ 主要内容 1) RTC特征与原理: 2) BKP备份寄存器特征与原理: 3) RTC常用寄存器+库函数介绍: 4) 相关实验代码解读. 实验内容: 因为没有买LCD屏,所以计 ...

  6. 从零实现Vue的组件库(十二)- Table 实现

    基于Table标签的展示数据组件. Table 组件主要特点在于: 组件 data 的解耦,减少重复代码: 良好的扩展性,可以通过自定义列模板来适应不同的业务场景. 1. 实例 代码 <fat- ...

  7. STM32学习心得二十六:DAC数模转换实验

    记录一下,方便以后翻阅~ 主要内容: 1) DAC数模转换原理: 2) 寄存器和库函数介绍: 3) 相关实验代码解读. 实验功能:系统启动后,按WK_UP键,输出电压加200点,对应电压值200*3. ...

  8. Python基于pyzbar、opencv、pyqt5库,实现二维码识别 gui 应用程序开发

    二维码组成结构基本介绍 二维码识别背景介绍 视觉的方法可以用来估计位置和姿态.最容易想到的是在目标上布置多个容易识别的特征,这样使用opencv相机标定和.相机畸变矫正.轮廓提取.solvepnp来获 ...

  9. 免疫组库数据分析(二):Excel 分析免疫组库数据

    免疫组库数据分析(二):Excel 分析免疫组库数据 前言 在系列文章第一篇<免疫组库数据分析(一):windows 系统下MiXCR的安装和使用>讲解了5'RACE实验数据如何在Wind ...

  10. [pytorch] PyTorch Metric Learning库代码学习二 Inference

    PyTorch Metric Learning库代码学习二 Inference Install the packages Import the packages Create helper funct ...

最新文章

  1. 使用PyTorch进行情侣幸福度测试指南
  2. [LUOGU] P2330 [SCOI2005]繁忙的都市
  3. 关于.NET技术体系的思维导图
  4. Atitit.异步编程 java .net php python js 对照
  5. JavaScript MVC框架和语言总结[infoq]
  6. CTF ---pwndbg 调试常用命令
  7. UDP打洞程序包的源码
  8. win7系统设置开机自动联网的方法
  9. 阿里在美申请区块链专利;Win10 最新漏洞被发现;MongoDB 4.2 发布​ | 极客头条...
  10. hibernate FetchType理解
  11. 录屏音画不同步的快速解决办法
  12. 机器学习二:K均值聚类算法(k-means clustering algorithm)
  13. php随机一句话,PHP简单实现一言 / 随机一句功能
  14. 数据结构教程(详细又简单——C语言实现)
  15. linux运行360wifi,Linux(Ubuntu)下的无线网络卡上的小米和360wifi教程
  16. 『ABP』ABP vNext中使用开源日志面板 LogDashboard
  17. c语言清华大学出版社答案,《C语言程序设计》(清华大学出版社)书后习题参考答案...
  18. pve万兆网卡驱动_教你:高性价比万兆群晖方案——万兆SFP网卡配置使用教程
  19. 【Pycharm教程】代码调试、git操作、连接远程服务器
  20. 201673020127 郁文曦 《英文文本统计分析》结对项目报告

热门文章

  1. 【Pixel刷机】记录一次Pixel 2 刷机, root
  2. 一点点读懂regulator(一)
  3. 1.5 极限的存在准则和两个重要极限
  4. web课程设计网页制作、基于HTML+CSS大学校园班级网页设计
  5. 90后,为什么我建议你不要老是加班?
  6. Android经典铃声等等等等,低调而优雅:40 款经典黑莓手机铃声精选(安卓手机适用)...
  7. 程序员猝死率高,我身体不好又想高薪,怎么办?
  8. 使用xpath爬取腾讯招聘python岗位信息
  9. Multiple Instance Detection Network with Online Instance Classifier Refinement
  10. 博客中Java开发的软硬件环境