Grants Data AnalysisΒΆ

Key Findings:

  • Some text

import pandas as pd
import plotly.express as px
import plotly.graph_objects as go

import plotly.io as pio
pio.renderers.default = "notebook"
# read in clean grants data
df = pd.read_csv('../data/grants_data.csv')
df['count'] = 1
df.head()
round_number round_start_date round_end_date grant_title grant_id region category url match_amount num_contributions num_unique_contributors crowdfund_amount_contributions_usd total count
0 12 2021-12-01 2021-12-16 Coin Center is educating policy makers about p... 1668 north_america Community https://gitcoin.co/grants/1668/coin-center-is-... 340000.00 6914 5727 103838.93 443838.93 1
1 12 2021-12-01 2021-12-16 Electronic Frontier Foundation 3974 north_america Community https://gitcoin.co/grants/3974/electronic-fron... 228273.84 3648 3331 58715.04 286988.88 1
2 12 2021-12-01 2021-12-16 The Tor Project 2805 none Infra Tech https://gitcoin.co/grants/2805/the-tor-project 188294.80 3497 3069 95279.64 283574.44 1
3 12 2021-12-01 2021-12-16 Longevity Prize (by VitaDAO) 4083 europe Grants Round 12 https://gitcoin.co/grants/4083/longevity-prize... 176195.45 920 857 7815.29 184010.75 1
4 12 2021-12-01 2021-12-16 Rotki - The portfolio tracker and accounting t... 149 europe dApp Tech https://gitcoin.co/grants/149/rotki-the-portfo... 129131.34 4684 4311 25373.62 154504.96 1
# data transformation and new variables
df['dollars_per_contributor'] = df['crowdfund_amount_contributions_usd'] / df['num_unique_contributors']
fig = px.histogram(
    df,
    x='round_number',
    y='round_number'
)

fig.update_layout({
    'showlegend': False,
    'title': 'Grants per Round',
    'xaxis_title': 'round',
    'yaxis_title': 'grants',
    'xaxis_dtick': 1,
    'bargap': 0.2,
})

fig.write_image("images/grants_per_round.jpeg")
fig.show()
fig = px.histogram(
    df,
    x='round_number',
    y='num_contributions'
)

fig.update_layout({
    'showlegend': False,
    'title': 'Contributions per Round',
    'xaxis_title': 'round',
    'yaxis_title': 'contributions',
    'xaxis_dtick': 1,
    'bargap': 0.2,
})

fig.write_image("images/contrib_per_round.jpeg")
fig.show()
fig = px.histogram(
    df,
    x='round_number',
    y=[
        'crowdfund_amount_contributions_usd',
        'match_amount'
    ]
)

fig.update_layout({
    'title': 'Contributions per Round',
    'xaxis_title': 'round',
    'yaxis_title': 'contributions ($)',
    'xaxis_dtick': 1,
    'yaxis_tickprefix': '$',
    'yaxis_tickformat': ',.0f',
    'bargap': 0.2
})

fig.write_image("images/contrib_per_round_match.jpeg")
fig.show()

Questions:ΒΆ

  • Holy moly round 12

    • Most recent round 12 had a huge increase in both crowdfunded contributions as well as matched contributions

Round 8ΒΆ

QuestionsΒΆ

  • What happened during round 8?

    • There was a significant increase in crowdfunding contributions

    • Was this one big donation? Bigger marketing campaign?

Key FindingsΒΆ

  • Round 8 had a big increase in individual contribution compared to previous rounds

  • The grant with the most funding in round 8 (Coin Center) had more contributions than nearly every grant in round 7 combined

  • The higher total amount is driven by crowdfunding, not by a larger matched amount

  • Round 8 had the lowest proportion of contributions coming from matches, so it looks more like organic growth of contributions

    • It is difficult to figure out from this dataset, since all contributions are aggregated

    • This could potentially be a single large donation

fig = px.histogram(
    df,
    x='round_number',
    y='num_contributions'
)

fig.update_layout({
    'showlegend': False,
    'title': 'Contributions per Round',
    'xaxis_title': 'round',
    'yaxis_title': 'contributions',
    'xaxis_dtick': 1,
    'bargap': 0.2,
})

fig.write_image("images/contributions_per_round.jpeg")
fig.show()
df.loc[df.round_number == 8, :].groupby('grant_title')['total'].sum(
).sort_values(ascending=False).reset_index().head(20)
grant_title total
0 Coin Center is educating policy makers about p... 674332.58
1 Hardhat by Nomic Labs 154414.45
2 Gitcoin Grants Core Team - Dev Fund 142078.48
3 OpenEthereum (Ex-Parity client) 58145.94
4 Nimbus 49679.86
5 Gitcoin Grants Official Matching Pool Fund 47422.47
6 Circles UBI 45440.02
7 Prysm by Prysmatic Labs 41549.79
8 Fiona Kobayashi - Software Engineer 40798.92
9 EU Crypto Initiative - educating policy makers... 39610.24
10 Lighthouse: Ethereum 2.0 Client 37892.28
11 Bankless 36565.15
12 WalletConnect 34207.08
13 APY Vision 33902.58
14 Nethermind 32682.01
15 DAppNode - Panvala League 30035.01
16 Week in Ethereum News 27632.98
17 Rotki - The portfolio tracker and accounting t... 25615.72
18 beaconcha.in - Open source Eth2 blockchain exp... 25324.44
19 ethers.js - Complete, Simple and Tiny 24791.60

Round 12ΒΆ

QuestionsΒΆ

  • What drove the significant increase in donations during round 12?

Key FindingsΒΆ

  • Both contributions and matches went up by similar amounts in this round

  • Significant increase to β€œCommunity” project category

  • Lots of projects in the β€œGrants round 12” category which seems like bad data

  • Proportion of contributions coming from a match is going up, with round 12 being a local maximum

  • NFT contributions almost doubled compared to round 11

  • Community projects saw the largest increase compared to round 11

df.loc[df.round_number == 12, :].groupby('grant_title')['total'].sum().sort_values(ascending=False).reset_index().head(20)
grant_title total
0 Coin Center is educating policy makers about p... 443838.93
1 Electronic Frontier Foundation 286988.88
2 The Tor Project 283574.44
3 ZigZag Exchange 241184.20
4 Longevity Prize (by VitaDAO) 184010.75
5 Dark Forest 180574.64
6 The Blockchain Association (BA) 154552.02
7 Rotki - The portfolio tracker and accounting t... 154504.96
8 Kick-starting the market for future carbon 115001.17
9 L2BEAT 112437.23
10 ZeroPool - Scaling anonymous transactions for ... 111917.98
11 Fight for the Future is building and channelin... 105582.95
12 Freedom of the Press Foundation 101088.64
13 POAP (Proof of Attendance Protocol) 98819.58
14 Li.Finance - Cross-Chain Bridge Aggregator + S... 91301.78
15 EtherDrops 88692.32
16 Frame: Privacy Focused Native Ethereum Wallet 84816.85
17 Climate Finance DAO 83672.16
18 Umbra: Privacy Preserving Stealth Payments 80342.05
19 Atlantis World 78760.58
df.loc[df.round_number == 12, :].groupby('grant_title')[['crowdfund_amount_contributions_usd', 'dollars_per_contributor']].sum(
).sort_values('dollars_per_contributor', ascending=False).reset_index().head(20)
grant_title crowdfund_amount_contributions_usd dollars_per_contributor
0 iCryptoNode - Bitcoin & Raspberry Pi Monero Node 3500.00 3500.000000
1 The Climate Change Donation Fund by Founders P... 51292.79 479.371869
2 Foresight Institute Longevity Fellowship 17554.78 417.970952
3 Joanna Picetti - Global Government - Digital E... 292.07 146.035000
4 MintFund β†’ Helping Creators Mint their First N... 1693.82 80.658095
5 DeSchool 1350.73 67.536500
6 Bloom Network - Panvala League 53817.66 59.664812
7 Rainforest Direct 52871.40 58.811346
8 The Datafruits Fund 106.45 53.225000
9 Cyber Academy 2809.63 52.030185
10 Clean Air Task Force 18792.34 49.453526
11 Planting fruit trees in 64 schools and 40 heal... 21387.26 49.166115
12 TAKSH 425.88 47.320000
13 Seaworthy Foundation 22517.79 44.152529
14 Nuggan's license to BUIDL 631.27 42.084667
15 Ethereum Lists 529.79 37.842143
16 A scalable open science platform for longevity... 255.90 36.557143
17 EthereumDev.io | Free tutorials for learning S... 253.71 36.244286
18 Biomarkers to measure aging - Norn Group 1008.87 36.031071
19 @PaulRBerg Open-Source Engineering 1728.36 35.272653
df_round = df.groupby('round_number')[['match_amount', 'crowdfund_amount_contributions_usd', 'total']].sum().reset_index()
df_round['match_proportion'] = df_round['match_amount'] / df_round['total']
df_round
round_number match_amount crowdfund_amount_contributions_usd total match_proportion
0 1 25000.01 13661.09 38661.10 0.646645
1 2 50000.00 58544.41 108544.41 0.460641
2 3 101880.20 95114.91 196995.11 0.517171
3 4 153553.90 102619.19 256173.09 0.599415
4 5 244388.00 89817.33 334205.34 0.731251
5 6 171638.67 183527.84 355166.61 0.483262
6 7 441160.55 277940.89 719101.55 0.613489
7 8 349912.25 2081178.35 2431090.69 0.143932
8 9 520743.73 1116601.22 1637344.74 0.318042
9 10 694491.13 1039014.22 1733505.44 0.400628
10 11 929755.27 1360270.46 2290025.89 0.406002
11 12 3090569.14 2938955.53 6029524.56 0.512573
fig = px.line(
    df_round,
    x='round_number',
    y='match_proportion'
)

fig.update_layout({
    'showlegend': False,
    'title': 'Proportion of contributions from match',
    'xaxis_title': 'round',
    'yaxis_title': 'match %',
    'yaxis_tickformat': ',.0%',
    'yaxis_rangemode': 'tozero'
})

fig.write_image("images/proportion_from_match.jpeg")
fig.show()
fig = px.histogram(
    df,
    x='round_number',
    y='crowdfund_amount_contributions_usd',
    color='category'
)

fig.update_layout({
    'title': 'Contributions by Category',
    'xaxis_title': 'round',
    'yaxis_title': 'contribution ($)',
    'bargap': 0.2,
    'yaxis_tickprefix': '$',
    'yaxis_tickformat': ',.0f',
    'yaxis_rangemode': 'tozero'
})

fig.write_image("images/contrib_per_category.jpeg")
fig.show()
fig = px.histogram(
    df,
    x='round_number',
    y='crowdfund_amount_contributions_usd',
    color='category'
)

fig.update_layout({
    'title': 'Contributions by Category',
    'xaxis_title': 'round',
    'yaxis_title': 'contribution ($)',
    'bargap': 0.2,
    'yaxis_tickprefix': '$',
    'yaxis_tickformat': ',.0f',
    'yaxis_rangemode': 'tozero'
})

fig.write_image("images/contrib_per_category.jpeg")
fig.show()
fig = px.histogram(
    df,
    x='round_number',
    y='count',
    color='category'
)

fig.update_layout({
    'title': 'Grants by Category',
    'xaxis_title': 'round',
    'yaxis_title': 'grants',
    'bargap': 0.2,
    'yaxis_tickformat': ',.0f',
    'yaxis_rangemode': 'tozero'
})

fig.write_image("images/grants_per_category.jpeg")
fig.show()