> ## Content Index
> Fetch the complete content index at: https://www.bambooweekly.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# Bamboo Weekly #25: Entrepreneurship (solutions)
- URL: https://www.bambooweekly.com/bw-25-entrepreneurship-solution/
- Published: 2023-07-20T15:00:04.000Z
- Updated: 2026-09-02T13:49:09.000Z
- Description: Get practice with CSV files, pivot tables, window functions, and plotting
- Author: Reuven M. Lerner
- Tags: csv, pivot-table, window-functions, plotting

*\[Hey — Are you at the Euro Python conference in Prague? Find me and say “hi”! I’m around through Friday afternoon.\]*

This week, we’re looking at a recent report from the GEM, the Global Entrepreneurship Monitor ([https://gemconsortium.org](https://gemconsortium.org/?ref=bambooweekly.com)). In particular, we’re looking at their APS (adult population study), which asks adults from around the world what they think about creating a business.

The latest GEM report came out earlier this year; you can download it from [/content/files/file/open.pdf](https://www.bambooweekly.com/content/files/file/open.pdf) . We’ll use the latest APS data to understand the state of entrepreneurship in various countries, and where there is more (and less) perceived opportunity.

### Data and questions

The APS data can be downloaded in CSV format:

1. Go to [https://www.gemconsortium.org/data/key-nes](https://www.gemconsortium.org/data/key-nes?ref=bambooweekly.com)
2. Click on all three of the "all" boxes (for choosing an economy, an indicator, and a year)
3. Click on "export" to get the CSV file downloaded to your computer.

Yesterday, I gave you 8 questions and tasks:

### Import the APS data into a data frame. Use the short name of each column as the column name.

As usual, I started my solution by importing the Pandas library with the conventional alias:

```
import pandas as pd
```

With that in place, I needed to create a data frame from the CSV file. But what did I mean by “use the short name of each column”?

It turns out that the CSV file has *two* header lines — one with a long description on the first line of the file, and one with a short one on the second line. If you read the CSV file using [read\_csv](https://www.bambooweekly.com/pandas-read-csv/) and all of its default arguments, you’ll not only get the long descriptions as the column names, but the short descriptions will be seen as the first line of data. Which will mess up the dtypes for all of the numeric columns, because they’ll have a mix of text (the short names) and numbers.

The solution is to ignore the long names completely, and only use the short names, by telling read\_csv that the headers are on line 1, rather than the (default) line 0:

```
df = pd.read_csv(filename, header=1)
```

The resulting data contains 1083 rows and 18 columns. Each row represents the results of APS for one year in one country. That’s a natural way for the file to be created, but it’ll give us some trouble when we try to analyze it. But that’s OK; we have some ways to rejigger it into a more useful format.

### In 2022, which 10 countries had the highest "Perceived Opportunities" scores?

The “year” column in our data frame indicates the year in which a survey was done. In order to answer this question, we’ll need to grab only those rows with a year of 2022\. That’s most easily done by using the “==” operator on the column, giving us a boolean series back:

```
df['year'] == 2022
```

We can then use “[.loc](https://www.bambooweekly.com/pandas-loc/)” with that boolean series to retrieve those rows from “df” from 2022:

```
df.loc[df['year'] == 2022]
```

Applying a boolean series to .loc is one of the most common actions we do in Pandas; it keeps the rows with a value of True, and drops those with a value of False. By constructing the boolean series based on our comparison, we effectively keep only those rows from 2022.

But that’s just the start: We want to find the countries with the highest score for perceived opportunities. I’m going to use the two-argument version of “.loc”, then. The first argument remains a row selector, indicating which rows we want from df. The second argument is a column selector, indicating which columns we want. As with the row selector, we can indicate our selection in a number of ways, including a list of strings:

```
df.loc[
    df['year'] == 2022,                     # row selector
    ['economy', 'Perceived opportunities']  # column selector
]   
```

This query returns a data frame based on df with only the rows from 2022, and only the columns “economy” and “Perceived opportunities.”

Note that some people really like to specify columns in Pandas using dot notation, (e.g., df.x) rather than square-bracket-string notation (e.g., df\[‘x’\]). I avoid the former, even if it’s a bit shorter to write, because it cannot handle column names with spaces and special characters — precisely what we have here.

How can we find the countries with the greatest perceived opportunities? We sort our data frame using the [sort\_values](https://www.bambooweekly.com/pandas-sort-values/) method. Here, I’ll use method chaining to achieve this:

```
(    
    df.loc[df['year'] == 2022,
           ['economy', 'Perceived opportunities']]
    .sort_values('Perceived opportunities',
                 ascending=False)
)
```

In order to use method chaining across lines, I use the trick of opening parentheses, which tricks Python into thinking that I really have one line, even though I have many. I take the data frame returned by our call to “loc” and immediately apply sort\_values to it. I ask for the the rows of our two-column result to be sorted in descending order. That allows me to then grab the 10 top lines with [head](https://www.bambooweekly.com/pandas-head/):

```
(    
    df.loc[df['year'] == 2022,
           ['economy', 'Perceived opportunities']]
    .sort_values('Perceived opportunities',
                 ascending=False)
    .head(10)
)
```

Finally, just to make it a bit easier to read, I decided to make the “economy” column into the index:

```
(    
    df.loc[df['year'] == 2022,
           ['economy', 'Perceived opportunities']]
    .sort_values('Perceived opportunities',
                 ascending=False)
    .head(10)
    .set_index('economy')
)
```

The result? A mix of countries that I hadn’t expected:

![](https://storage.ghost.io/c/06/ba/06ba0cc0-be6f-4de7-af2f-5c20165279b9/content/images/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https-3a-2f-2fsubstack-post-media.s3.amazonaws.com-2fpublic-2fimages-2f8704a159-4752-4ee1-828f-21db0c9f20df_656x678.png)

People see lots of opportunities in Saudi Arabia? I had heard that the government there was really trying to promote a diversification of their economy away from petroleum, and perhaps this reflects that. The fact that we see Qatar, Oman, and the UAE here might be for similar reasons. I expected to see India and Indonesia, but didn’t think that Sweden, Norway, and Poland were all that entrepreneurial.

And hey, what about Israel, where I live, where everybody seems to talk about starting a company, and where people talk about us being the start-up nation? I was surprised to see us nowhere here.

It would seem that my preconceptions were rather off! Good thing that someone does actual surveys, collecting actual data.

### In 2022, which 10 countries had the greatest *rise* in perceived opportunities from the previous year? From 10 years before?

Now that we’re able to get the level of perceived opportunities in each country in 2022, I asked you a slightly different question: How much had this value increased from the previous year?

In order to find that, I’ll first get the values from 2021 and 2022\. I could do this in a similar way to before, finding all of those rows from 2021 and 2022 with “loc”.

But we’re going to want to compare each country’s 2021 score with its 2022 score. That’ll be much easier if our data is rejiggered into a different form, with each year in a separate column and each country in its own row. The cells of that new data frame will contain the “perceived opportunity” score for each country, and for each year.

This sounds like a job for a pivot table. We’ll set the rows to be countries, the columns to be years, and the values to be perceived opportunity:

```
df.pivot_table(index='economy', columns='year', values='Perceived opportunities')
```

This has certainly structured our data in a way that is more amenable to the kind of analysis we want and need. But we’re only interested in two of those years. We can grab those by putting a list of years (integers) in square brackets:

```
df.pivot_table(index='economy', columns='year', values='Perceived opportunities')[[2021, 2022]]
```

We now have a data frame in which we have one row per country, and two columns — 2021 and 2022\. How can we find the percentage change from 2021 to 2022?

The [pct\_change](https://www.bambooweekly.com/pandas-pct-change/) method will be great here. It goes through the rows of a data frame comparing each value to what was on the previous row, and returning a floating-point value showing the percentage change. (The first row will be NaN.)

But wait — we don’t want to compare rows. We want to compare columns. Fortunately, we can pass “axis=’columns’” as a keyword argument to pct\_change, and have it work that way:

```
(
    df.pivot_table(index='economy', columns='year', values='Perceived opportunities')[[2021, 2022]]
    .pct_change(axis='columns')
)
```

We now get back a new, two-column data frame, whose 2022 column tells us the percentage change in perceived opportunities since 2021\. I’m only interested in the 2022 column (since 2021 will contain only NaN values), so I’ll retrieve it as a series:

```
(
    df.pivot_table(index='economy', columns='year', values='Perceived opportunities')[[2021, 2022]]
    .pct_change(axis='columns')
    [2022]
)
```

Now I want to find the economies that had the greatest improvement in the last year. For that, I’ll once again use [sort\_values](https://www.bambooweekly.com/pandas-sort-values/). This time, I’m running sort\_values on a series, rather than on a data frame, which means that I don’t have to indicate the column I want to use for sorting. (There’s only one column of data in a series!) I can and will ask for ascending="False", followed by head(10) to get the 10 biggest positive changes in the last year:

```
(
    df.pivot_table(index='economy', columns='year', values='Perceived opportunities')[[2021, 2022]]
    .pct_change(axis='columns')
    [2022]
    .sort_values(ascending=False)
    .head(10)
)
```

The result:

```
economy
Iran            1.870173
Colombia        0.402257
Romania         0.297578
Brazil          0.238504
Panama          0.152916
Oman            0.117578
Qatar           0.097303
Japan           0.081772
Slovenia        0.067392
South Africa    0.059261
Name: 2022, dtype: float64
```

Wow! It looks like people in Iran are really seeing many more opportunities in 2022 than in 2021, far beyond any other country. We see a number of developing economies here, but also wealthy countries like Oman and Japan — I’m guessing because they’re seeing improvement as we come out of the pandemic, which took a big toll on people’s perceptions.

What if I want to compare 2022 with 10 years before, rather than 1 year? I can perform the same query, but using 2012 instead of 2021:

```
(
    df.pivot_table(index='economy', columns='year', values='Perceived opportunities')[[2012, 2022]]
    .pct_change(axis='columns')
    [2022]
    .sort_values(ascending=False)
    .head(10)
)
```

And the result:

```
economy
Poland         2.538688
Croatia        2.499708
South Korea    2.277157
Greece         1.806950
Slovenia       1.801223
Hungary        1.486758
Japan          0.993721
Tunisia        0.898618
Spain          0.872662
Netherlands    0.791279
Name: 2022, dtype: float64
```

Yesterday, I mentioned Kyla Scanlon’s term “[vibesession](https://kyla.substack.com/p/the-vibecession-the-self-fulfilling),” indicating that even if the economy is doing well, people perceive it as going poorly, and act accordingly. These 10 countries, at least in the last 10 years, have seen huge growth in perceived opportunities — and that includes some big, established economies such as South Korea, Japan, and the Netherlands.

(What’s the opposite of a vibesession? It would be a vibe boom, or a voom? A vroom? Hmm, maybe I should stick to my day job, and let other people name things.)

### In 2022, which 10 countries had the greatest *drop* in perceived opportunities from the previous year? From 10 years before?

This analysis will be precisely the same as we did above, except that we’re interested in the lowest performers. We could either pass ascending=True to sort\_values and still pick off the 10 top values using head, or we could keep ascending=False for sort\_values and instead use tail; we’ll get the same results either way. I’m going to stick with head, and thus end up with the following code:

```
(
    df.pivot_table(index='economy', columns='year', values='Perceived opportunities')[[2021, 2022]]
    .pct_change(axis='columns')
    [2022]
    .sort_values(ascending=True)
    .head(10)
)
```

The result:

```
economy
Cyprus           -0.466215
United Kingdom   -0.275564
United States    -0.271417
Hungary          -0.254789
Greece           -0.252519
Germany          -0.179572
Canada           -0.165390
Chile            -0.154812
Switzerland      -0.141839
Spain            -0.132911
Name: 2022, dtype: float64
```

I want to point out that a negative score here doesn’t mean that the economy in these countries is necessarily bad! Rather, it means that people perceives, in 2022 vs. 2021, that there are fewer opportunities for them to start a new business.

To me, it’s especially curious to see the US near the top of this list, given that the US economy has been doing so well overall in the last few years. During the pandemic, people were starting businesses at a rapid rate, and were also buying quite a lot. However, inflation did rise, and people might have perceived that as an indication of bad news ahead, and thus less opportunity.

If we look at things over the previous decade, the numbers make a bit more sense to me:

```
(
    df.pivot_table(index='economy', columns='year', values='Perceived opportunities')[[2012, 2022]]
    .pct_change(axis='columns')
    [2022]
    .sort_values(ascending=True)
    .head(10)
)
```

And the results?

```
economy
Colombia          -0.25571
Chile             -0.22200
Italy              0.00000
Malaysia           0.00000
Namibia            0.00000
Nigeria            0.00000
North Macedonia    0.00000
Pakistan           0.00000
Palestine          0.00000
Algeria            0.00000
Name: 2022, dtype: float64
```

Hmm, what’s with all of these zeroes? That’s where there were NaN values in the 2022 column. It’s not wrong, but it’s not super helpful, either. I’m thus going to modify my query such that I get rid of any row in our pivot table where we have NaN in the 2022 column. I can do that with [dropna](https://www.bambooweekly.com/pandas-dropna/), indicating that I’m only interested in looking at a subset of the columns, namely 2022:

```
(
    df.pivot_table(index='economy', columns='year', values='Perceived opportunities')[[2012, 2022]]
    .dropna(subset=[2022])
    .pct_change(axis='columns')
    [2022]
    .sort_values(ascending=True)
    .head(10)
)
```

With this revised query in place, I get different results:

```
economy
Colombia        -0.255710
Chile           -0.222000
Austria          0.005690
Latvia           0.045688
United States    0.057944
Germany          0.092920
Uruguay          0.140506
Norway           0.141704
Sweden           0.154031
Egypt            0.185964
Name: 2022, dtype: float64
```

Much to my surprise, I see a number of established, wealthy economies as having to great change in perceived opportunities in the last decade. Remember that this means high-opportunity countries haven’t become worse, just as much as low-opportunity countries haven’t become better.

### Create a line plot for "perceived opportunities" score in China vs. the United States, India, Germany, and the UAE. Do we see a recent decline in China? Do we see similar declines in the other countries?

I was interested in the question of entrepreneurship in the wake of reading and hearing about China, and whether we can use perceived opportunities as a proxy for how optimistic people are about an economy.

I thus asked you to compare China’s perceived opportunities over the last few years with those in several other countries — the US, India, Germany, and the UAE. Did China’s perceived opportunity score drop recently? What about the others?

I’m going to use the builtin plotting mechanism in Pandas to do this simple line plot. It’s smart enough to take a data frame and plot each column with a separate line across the x axis, namely the values in the data frame’s index. How can I create such a data frame?

If you’re thinking that we can use the same pivot table as before, you’re *almost* right. The pivot table we’ve used until now had the economies as rows and the years as columns. And yes, we could then use the “[transpose](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.transpose.html?ref=bambooweekly.com)” method to swap them before plotting. But I think it’ll just be easier to create the pivot table in the way we want:

df.pivot\_table(index='year', columns='economy', values='Perceived opportunities')

We aren’t interested in all economies, so I’ll just grab the economies we wanted. These are columns, so I can pass a list of strings inside of square brackets:

```
(
    df.pivot_table(index='year', columns='economy', values='Perceived opportunities')
    [['United States', 'India', 'China', 'United Arab Emirates', 'Germany']]
)
```

We could then plot these values:

```
(
    df.pivot_table(index='year', columns='economy', values='Perceived opportunities')
    [['United States', 'India', 'China', 'United Arab Emirates', 'Germany']]
    .plot
    .line()
)
```

This will work, but it’ll give us some weird lines:

![](https://storage.ghost.io/c/06/ba/06ba0cc0-be6f-4de7-af2f-5c20165279b9/content/images/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https-3a-2f-2fsubstack-post-media.s3.amazonaws.com-2fpublic-2fimages-2f168863c9-949f-4989-b394-3a022e04c1f3_543x432.jpg)

Do you see how the China line just stops at 2019? That won’t help with our analysis. And there are many other breaks in the lines, as well.

The problem is that we have missing data. In particular, China didn’t give us data in 2020 and 2021\. However, it did give us data in 2022\. How can we deal with this missing data?

One easy solution is to interpolate. That is: If you have the values \[20, NaN, 30\], then you could replace the NaN with 25, and it would probably be more right than wrong — assuming that the trend continued normally. If there are two missing values, then interpolation would fill them both in such that we would have equivalent steps for each missing value.

Let’s use the “[interpolate](https://www.bambooweekly.com/pandas-interpolate/)” method to do this for us:

```
(
    df.pivot_table(index='year', columns='economy', values='Perceived opportunities')
    [['United States', 'India', 'China', 'United Arab Emirates', 'Germany']]
   .interpolate()
    .plot
    .line()
)
```

After interpolation, our graph is much more reasonable:

![](https://storage.ghost.io/c/06/ba/06ba0cc0-be6f-4de7-af2f-5c20165279b9/content/images/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https-3a-2f-2fsubstack-post-media.s3.amazonaws.com-2fpublic-2fimages-2f38fad7b8-3e8d-49c8-856a-fedd1f171364_543x432.jpg)

We can see that there was a sharp decline in all of these economies when the pandemic hit. Some have struggled more than others, but it seems to me that the decline in China from 2019 to 2022 is the sharpest, by far. (And no, eyeballing an interpolated graph isn’t serious economic analysis, but it’s not a bad start.)

### In which countries has there been the greatest increase in female-male TEA over the last 10 years?

Let’s look at another measure from the GEM study, one that looks at the “percentage of female 18-64 population who are either a nascent entrepreneur or owner-manager of a 'new business', divided by the equivalent percentage for their male counterparts.” (This is from the [definitions used in the APS study.](https://www.gemconsortium.org/wiki/1154?ref=bambooweekly.com))

In other words: They want to know how many women start businesses. And I’m asking which countries have improved the most on this front in the last 10 years.

I used almost the same code here as I did above, for perceived opportunities:

```
(
    df.pivot_table(index='economy', columns='year', values='Female/Male TEA')
    .pct_change(periods=10, axis='columns')
    [2022]
    .sort_values(ascending=False)
    .head(10)
)
```

There are a few differences from previous queries. For one, I’m looking at the “Female/Male TEA,” where TEA stands for “Total early-stage Entrepreneurial Activity.” In other words, people still in the early stages of starting a business.

But then I did something a bit different here, when asking for the percentage change from a decade. Rather than explicitly asking for 2012 and 2022, then running pct\_change on those columns, I kept all of the columns, and asked pct\_change to look back 10 columns in performing its calculation, via the “periods” keyword argument.

Then I grabbed only the 2022 column, sorted the values, and grabbed the top values. The results:

```
economy
Pakistan       4.000000
South Korea    1.666667
Poland         1.204082
India          1.177778
Egypt          1.166667
Jordan         1.034483
Belgium        0.941176
Iran           0.842105
Spain          0.833333
Tunisia        0.744186
Name: 2022, dtype: float64
```

Remember that this doesn’t show how good or bad things are, but rather the change — and it would seem that especially in Pakistan, the last decade has shown a great deal of improvement for women who want to start businesses. A number of lower-income countries are showing such a trend, but a few higher-income countries as well, including several main EU members, and also South Korea. A welcome trend, I’d say.

### Which measures correlate most highly with Female/Male TEA?

Correlation isn’t causation, but it’s certainly useful and interesting to see which measures move up and down together. And I was curious to know which other factors in the GEM survey correlate highly with the female/male TEA column we just looked at.

We can ask Pandas to find the correlations across all columns with the “[corr](https://www.bambooweekly.com/pandas-corr/)” method. This returns a new data frame, one in which the original data frame’s columns are both the columns and the rows. The intersection of two columns will then indicate its correlation, with 1 being 100% positive, -1 being 100% negative, and 0 being no correlation at all. The data is repeated, and the intersection of a column name with itself will always be 1.

But wait: If I try to run df.corr(), I’ll get an error. That’s because we have a number of columns that are non-numeric. The corr() method isn’t smart enough to remove those from our query.

What I’d like to do is keep only columns with dtypes of float64\. How can I do that, without naming them individually? I can use the “[select\_dtypes](https://www.bambooweekly.com/pandas-select-dtypes/)” method, which returns a subset of a data frame — only those columns with the dtype I named. I can thus run the correlation on them:

```
df.select_dtypes('float64').corr()
```

That’s great, but not quite enough — I want to find out which of the columns are most highly correlated with Female/Male TEA. I can easily do that by sorting the data frame in descending order by that column. Then I can select that column:

```
df.select_dtypes('float64').corr().sort_values('Female/Male TEA', ascending=False)['Female/Male TEA']
```

The result:

```
Female/Male TEA                                     1.000000
Total early-stage Entrepreneurial Activity (TEA)    0.496175
Perceived capabilities                              0.380488
Perceived opportunities                             0.347313
Entrepreneurial intentions                          0.341908
Established Business Ownership                      0.326872
Entrepreneurship as a Good Career Choice            0.219755
High Status to Successful Entrepreneurs             0.088836
Motivational Index                                 -0.049240
Fear of failure rate *                             -0.057247
Female/Male Opportunity-Driven TEA                 -0.109768
Innovation                                         -0.212837
High Job Creation Expectation                      -0.222657
Entrepreneurial Employee Activity                  -0.259713
Business Services Sector                           -0.373765
Name: Female/Male TEA, dtype: float64
```

What we see here is that nothing massively correlated with a high female/male ratio. However, the highest positive correlation seems to be with early-stage entrepreneurial activity. This is defined by GEM as the proportion of people who intend to start a business within three years. Which seems to imply that the more an economy encourages people to generally start new companies, the more women will be interested in doing that — the entrepreneurial equivalent of “a rising tide lifts all boats,” more or less. Which could be!

But also look at the final (lowest) correlation, which is a *negative* correlation. Meaning, as one goes up, the other goes down. And it’s not huge, but the “business services sector” measurement is the largest negative correlation. That would seem to contradict the total entrepreneurial activity that we just looked at — how can it be? It turns out that the details are important; “business services sector” indicates the proportion of entrepreneurs interested in information, business, communication, or professional services.

What I take from this is that women tend to start businesses that aren’t necessarily the sorts of IT and business-related firms that we think of. Is that good or bad? I’m not really sure; on the one hand, it’s great to see them starting more businesses, but I’d guess (and this is just a guess) that business-sector companies are more profitable.

### Calculate the mean innovation and perceived opportunities scores, across all years, for all economies. Are there any economies whose average score is below the 30% percentile in innovation, but in the top 30% of perceived opportunities? What do you think that means?

Finally, I tend to think of entrepreneurial societies as those where there’s a lot of innovation. And innovation, at least as defined by GEM, is where “their product or service is new to at least some customers AND that few/no businesses offer the same product.” In other words: You’re offering a product or service that is new to your customers. It doesn’t mean that it’s a new, patentable technological breakthrough.

But of course, many new businesses aren’t necessarily innovative. They might just be better or cheaper than the alternative. The felafel place that opened up down the street from us a decade ago didn’t do anything new or innovative, other than give us access to great felafel. When they closed, and were replaced by another (vastly inferior) felafel place, that wasn’t innovative, either. I can thus name at least two businesses that wouldn’t have been classified as innovative, but are perfectly viable businesses started by entrepreneurs.

I’m thus curious to see what countries have been in the top 30% of perceived opportunities over the years, but in the bottom 30% of innovation.

In order to find such countries, we’ll first need to find who is in the bottom 30% of innovative economies. That’ll require a call to [groupby](https://www.bambooweekly.com/pandas-groupby/):

```
innovation_df = df.groupby('economy')['Innovation'].mean()
```

The above code asks the data frame to find, for each economy, the mean value of innovation. I decided to assign this to a new variable, just to make the code a bit more readable.

To find the countries with the lowest 30% of innovation scores, we can use the “[quantile](https://www.bambooweekly.com/pandas-quantile/)” method, which calculates the value below which 30% of the values lie. I can then use a comparison to see which of the values are below that. This will return a series, but I’m not actually interested in that series! Rather, I’m interested in its index, which contains the economies below that 30% mark:

```
low_innovation_locations = innovation_df.loc[innovation_df < innovation_df.quantile(0.3)].index
```

I’ll do the same thing with finding the countries who are in the top 30% of perceived opportunities, grabbing the countries from the index:

```
opportunities_df = df.groupby('economy')['Perceived opportunities'].mean()
high_opportunities_locations = opportunities_df.loc[opportunities_df > opportunities_df.quantile(0.7)].index
```

I now have two index objects. This might seem like something weird to want to have, given that indexes are usually secondary to series and data frames. But actually, indexes are powerful objects on their own, and I’m particularly fond of using the “intersection” method to see what values are common to them:

```
low_innovation_locations.intersection(high_opportunities_locations)
```

The result:

```
Index(['Angola', 'Bangladesh', 'Burkina Faso', 'Cameroon', 'Ethiopia', 'Ghana',
       'Indonesia', 'Senegal', 'Sudan', 'Trinidad and Tobago', 'Uganda',
       'Venezuela', 'Zambia'],
      dtype='object', name='economy')
```

Sure enough, I see here a lot of countries that I wouldn’t necessarily associate with innovation, but where people are looking to get ahead in life, and are interested in creating new opportunities for themselves by starting businesses.

What do you think? Any suggestions about this data or the analysis? Please do let me know!

Meanwhile, you can get my Jupyter notebook here: [https://drive.google.com/file/d/1y\_9q\_sQudb3nGDin9qmKP2Av0Reg7Sk5/view?usp=sharing](https://drive.google.com/file/d/1y%5F9q%5FsQudb3nGDin9qmKP2Av0Reg7Sk5/view?usp=sharing&ref=bambooweekly.com)

I’ll be back next week with more analysis.

Until then,

Reuven