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()