In [1]:
import requests, pandas as pd, numpy as np
from requests import session
from bs4 import BeautifulSoup
In [2]:
manual=pd.read_excel('manual_manual.xlsx').set_index('Cégnév')
data=pd.read_excel('data.xlsx').set_index('Cégnév')
sectors=pd.read_excel('valid_manual.xlsx')
In [3]:
len(data), len(manual)
Out[3]:
(422, 2)
In [4]:
data=pd.concat([data,manual])
data['Sector']=sectors.set_index(0)[1]

Bring in 2014 data

In [5]:
manual4=pd.read_excel('../2018/manual_manual.xlsx').set_index('Cégnév')
data4=pd.read_excel('../2018/data.xlsx').set_index('Cégnév')
sectors4=pd.read_excel('../2018/valid_manual.xlsx')
In [6]:
len(data4), len(manual4)
Out[6]:
(414, 10)
In [7]:
data4=pd.concat([data4,manual4])
data4['Sector4']=sectors4.set_index(0)[1]
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:1: FutureWarning: Sorting because non-concatenation axis is not aligned. A future version
of pandas will change to not sort by default.

To accept the future behavior, pass 'sort=False'.

To retain the current behavior and silence the warning, pass 'sort=True'.

  """Entry point for launching an IPython kernel.
In [8]:
data=data.join(data4[['Alkalmazottak száma 2014','Árbevétel 2014 (RON)']])
In [9]:
repl={'udvarhelyszek':'Udvarhelyszék',
'csikszek':'Csíkszék',
'gyergyoszek':'Gyergyószék',
'marosszek':'Marosszék',
'also-haromszek':'Alsó-háromszék',
'felso-haromszek':'Felső-háromszék'}
for r in repl:
    data=data.replace(r,repl[r])
In [10]:
data.to_excel('export1.xlsx')
In [11]:
d1=data[['Régió', 'Latitude', 'Longitude', 'Sector']]
d1.columns=['Régió', 'Hosszúság', 'Szélesség', 'Iparág']
In [12]:
d1.to_excel('d1.xlsx')
In [13]:
data.columns
Out[13]:
Index(['Unnamed: 0', 'tavaly_left', 'Alkalmazottak száma 2018',
       'Alkalmazottak száma 2017', 'Alkalmazottak száma 2016',
       'Alkalmazottak száma 2015', 'nr_alkalmazottak', 'tavaly_right',
       'Árbevétel 2018 (RON)', 'Árbevétel 2017 (RON)', 'Árbevétel 2016 (RON)',
       'Árbevétel 2015 (RON)', 'nr_arbevetel', 'Cím', 'Kw', 'Régió',
       'Latitude', 'Longitude', 'Sector', 'Alkalmazottak száma 2014',
       'Árbevétel 2014 (RON)'],
      dtype='object')
In [14]:
ds=[]
ds1=[]
ds2=[]
for i in range(2014,2019):
    g='Alkalmazottak száma'
    c=g+' '+str(i)
    print(c)
    df=data[[c]]
    df.columns=[g]
    df[g]=df[g].fillna('').str.replace(u'\xa0','').str.replace('-','')
    df['Év']=i
    ds1.append(df)
    ds.append(d1.join(df))
    g='Árbevétel'
    c=g+' '+str(i)+' (RON)'
    print(c)
    df=data[[c]]
    df.columns=[g]
    df[g]=df[g].fillna('').str.replace(u'\xa0','').str.replace('-','')
    df['Év']=i
    ds2.append(df)
Alkalmazottak száma 2014
Árbevétel 2014 (RON)
Alkalmazottak száma 2015
Árbevétel 2015 (RON)
Alkalmazottak száma 2016
Árbevétel 2016 (RON)
Alkalmazottak száma 2017
Árbevétel 2017 (RON)
Alkalmazottak száma 2018
Árbevétel 2018 (RON)
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:10: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  # Remove the CWD from sys.path while we load stuff.
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:11: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  # This is added back by InteractiveShellApp.init_path()
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:19: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:20: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
In [15]:
df=pd.concat(ds,sort=False)
In [16]:
df1=pd.concat(ds1,sort=False)
df2=pd.concat(ds2,sort=False)
In [17]:
df1.to_excel('df1.xlsx')
df2.to_excel('df2.xlsx')
In [18]:
df1=df1.set_index('Év',append=True)
df2=df2.set_index('Év',append=True)
In [19]:
df=df1.join(df2).replace('',np.nan).astype(float)
In [20]:
df['Bevétel']=np.round(df['Árbevétel']/1000000.0,3)
In [21]:
df['Bevétel/Alkalmazott']=np.round(df['Bevétel']/df['Alkalmazottak száma'],3)
In [22]:
data2=df.reset_index().join(d1,on='Cégnév').set_index('Cégnév')

Normalize names

In [149]:
#[' '.join([j.title() if len(j)>3 else j for j in i.split(' ')]) for i in data2.index.str.replace(' SA','').str.replace(' SRL','').str.replace(' ROMANIA ','')]
data2.index=data2.index.str.replace(' SA','').str.replace(' SRL','').str.replace(' ROMANIA','')
In [150]:
data2.to_excel('export2.xlsx')

Calculate percentages

In [183]:
totals=data2.groupby(['Régió','Év']).sum()[['Alkalmazottak száma','Bevétel']]
totals.columns=['TAlkalmazottak száma','TBevétel']
totals=totals.unstack()
totals=(np.round(totals/totals.sum()*100,0)).stack().astype(str)
totals['TAlkalmazottak száma']=totals['TAlkalmazottak száma'].str[:-2]+'%'
totals['TBevétel']=totals['TBevétel'].str[:-2]+'%'
In [274]:
totals2=data2.groupby(['Cégnév','Év']).sum()[['Alkalmazottak száma','Bevétel']]
totals2.columns=['TAlkalmazottak száma','TBevétel']
totals2=totals2.unstack()
totals2=(np.round(totals2/totals2.sum()*100,1)).stack().astype(str)
totals2['TAlkalmazottak száma']=totals2['TAlkalmazottak száma'].str[:]+'%'
totals2['TBevétel']=totals2['TBevétel'].str[:]+'%'
totals2.columns=['T2Alkalmazottak száma','T2Bevétel']
In [275]:
totals2.loc['AZOMURES']
Out[275]:
T2Alkalmazottak száma T2Bevétel
Év
2014 3.9% 9.8%
2015 2.9% 8.2%
2016 2.4% 6.6%
2017 2.3% 6.2%
2018 2.1% 6.8%
In [276]:
totals3=data2.groupby(['Cégnév','Év','Régió']).sum()[['Alkalmazottak száma','Bevétel']]
totals3.columns=['TAlkalmazottak száma','TBevétel']
totals3=totals3.unstack().unstack()
totals3=(np.round(totals3/totals3.sum()*100,1)).stack().stack().astype(str)
totals3['TAlkalmazottak száma']=totals3['TAlkalmazottak száma'].str[:]+'%'
totals3['TBevétel']=totals3['TBevétel'].str[:]+'%'
totals3.columns=['T3Alkalmazottak száma','T3Bevétel']
In [277]:
totals3.loc['AZOMURES']
Out[277]:
T3Alkalmazottak száma T3Bevétel
Év Régió
2014 Marosszék 12.1% 15.6%
2015 Marosszék 8.7% 12.8%
2016 Marosszék 6.7% 10.7%
2017 Marosszék 6.1% 10.3%
2018 Marosszék 5.5% 11.3%
In [313]:
data22=data2.reset_index().set_index(['Régió','Év']).join(totals).reset_index()
data22=data22.set_index(['Cégnév','Év']).join(totals2).reset_index()
data22=data22.set_index(['Cégnév','Év','Régió']).join(totals3).reset_index()
In [329]:
data221=data22[['Régió','Év','Bevétel','TBevétel','T2Bevétel','T3Bevétel','Cégnév']]
data221['Régió %']=data221['TBevétel']+' '+data221['Régió']
data221['Cégnév %']=data221['Cégnév']+' | '+data221['T2Bevétel']+' | megyében '+data221['T3Bevétel']
data221=data221.set_index(['Cégnév %','Régió %','Év'])['Bevétel'].unstack()
data221['Type']='Árbevétel (millió RON)'
data221=data221.reset_index()
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:2: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:3: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  This is separate from the ipykernel package so we can avoid doing imports until
In [330]:
data222=data22[['Régió','Év','Alkalmazottak száma','TAlkalmazottak száma','T2Alkalmazottak száma','T3Alkalmazottak száma','Cégnév']]
data222['Régió %']=data222['TAlkalmazottak száma']+' '+data222['Régió']
data222['Cégnév %']=data222['Cégnév']+' | ' +data222['T2Alkalmazottak száma']+' | megyében '+data222['T3Alkalmazottak száma']
data222=data222.set_index(['Cégnév %','Régió %','Év'])['Alkalmazottak száma'].unstack()
data222['Type']='Alkalmazottak száma'
data222=data222.reset_index()
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:2: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:3: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  This is separate from the ipykernel package so we can avoid doing imports until
In [331]:
data223=pd.concat([data221,data222])
In [332]:
data223.to_excel('export22.xlsx')
In [333]:
colors22={'Alsó-háromszék': '#855c75',
'Csíkszék': '#526a83',
'Felső-háromszék': '#625377',
'Gyergyószék': '#af6458',
'Marosszék': '#736f4c',
'Udvarhelyszék': '#d9af6b'}
In [337]:
for i in data223['Régió %'].unique():
    print(i,':',colors22[i[i.find(' ')+1:]])
10% Alsó-háromszék : #855c75
11% Alsó-háromszék : #855c75
12% Udvarhelyszék : #d9af6b
11% Udvarhelyszék : #d9af6b
5% Gyergyószék : #af6458
6% Gyergyószék : #af6458
61% Marosszék : #736f4c
62% Marosszék : #736f4c
64% Marosszék : #736f4c
60% Marosszék : #736f4c
63% Marosszék : #736f4c
7% Csíkszék : #526a83
6% Csíkszék : #526a83
5% Felső-háromszék : #625377
4% Felső-háromszék : #625377
15% Alsó-háromszék : #855c75
16% Alsó-háromszék : #855c75
17% Alsó-háromszék : #855c75
17% Udvarhelyszék : #d9af6b
18% Udvarhelyszék : #d9af6b
10% Gyergyószék : #af6458
11% Gyergyószék : #af6458
32% Marosszék : #736f4c
33% Marosszék : #736f4c
37% Marosszék : #736f4c
38% Marosszék : #736f4c
11% Csíkszék : #526a83
10% Csíkszék : #526a83
10% Felső-háromszék : #625377
11% Felső-háromszék : #625377
12% Felső-háromszék : #625377

Simplify

In [338]:
data3=df.unstack()
data3.columns=data3.columns.get_level_values(1).astype(str)
data3=data3.reset_index().join(d1,on='Cégnév').set_index('Cégnév')
data3.index.name=None
data3.index=data3.index.str.replace(' SA','').str.replace(' SRL','').str.replace(' ROMANIA','')
data3.to_excel('export3.xlsx')
In [339]:
data3b=data3.copy()
data3b.columns=range(len(data3b.columns))
data3b=data3b[[14,20,21,22,23]]
data3b['Size']=data3b[14]**0.5+5
data3b.dropna(subset=[14]).to_excel('export3b.xlsx')
In [340]:
data4=data3.groupby(['Iparág','Régió']).sum()
data4b=data3.groupby(['Régió']).sum()
data4=data4.unstack().T
data4b=data4b.unstack().T
data4['Mind']=data4b
data4=data4.unstack().T
data4.reset_index().to_excel('export4.xlsx')
In [341]:
data4=data3.groupby(['Régió','Iparág']).sum()
data4b=data3.groupby(['Iparág']).sum()
data4=data4.unstack().T
data4b=data4b.unstack().T
data4['Mind']=data4b
data4=data4.unstack().T
data4.reset_index().to_excel('export4b.xlsx')
In [342]:
d1s=[]
for y in ['2014','2015','2016','2017','2018']:
    d1=data4[[y]]
    d1.columns=[0,1,'Bevétel',2]
    d1=d1[['Bevétel']]
    d1['Év']=y
    d1s.append(d1)
d1s=pd.concat(d1s)
d1s.reset_index().to_excel('export5.xlsx')
In [426]:
d2s=d1s.reset_index().set_index(['Iparág','Év','Régió']).unstack()
d3s=d2s.reset_index().groupby(['Év']).sum()
d3s['Iparág']='Mind'
d3s=d3s.reset_index().set_index(['Iparág','Év'])
d6=pd.concat([d2s,d3s])['Bevétel']
d6.reset_index().to_excel('export6.xlsx')
In [432]:
d6T=d6.stack().reset_index().set_index(['Régió','Év','Iparág']).unstack().reset_index()
In [435]:
d6T[d6T['Régió']!='Mind'].to_excel('export6T.xlsx')
In [421]:
regiok=[i for i in d6.columns if i!='Mind']
d6=d6.reset_index()
In [422]:
for i in regiok:
    d6[i]=np.round(d6[i]*100/d6['Mind'],0)
In [423]:
d6=d6.replace(0,np.nan).replace(1,np.nan).replace(2,np.nan)
In [425]:
d6.to_excel('export6b.xlsx')