import requests, pandas as pd, numpy as np
from requests import session
from bs4 import BeautifulSoup
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')
len(data), len(manual)
(422, 2)
data=pd.concat([data,manual])
data['Sector']=sectors.set_index(0)[1]
Bring in 2014 data
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')
len(data4), len(manual4)
(414, 10)
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.
data=data.join(data4[['Alkalmazottak száma 2014','Árbevétel 2014 (RON)']])
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])
data.to_excel('export1.xlsx')
d1=data[['Régió', 'Latitude', 'Longitude', 'Sector']]
d1.columns=['Régió', 'Hosszúság', 'Szélesség', 'Iparág']
d1.to_excel('d1.xlsx')
data.columns
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')
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
df=pd.concat(ds,sort=False)
df1=pd.concat(ds1,sort=False)
df2=pd.concat(ds2,sort=False)
df1.to_excel('df1.xlsx')
df2.to_excel('df2.xlsx')
df1=df1.set_index('Év',append=True)
df2=df2.set_index('Év',append=True)
df=df1.join(df2).replace('',np.nan).astype(float)
df['Bevétel']=np.round(df['Árbevétel']/1000000.0,3)
df['Bevétel/Alkalmazott']=np.round(df['Bevétel']/df['Alkalmazottak száma'],3)
data2=df.reset_index().join(d1,on='Cégnév').set_index('Cégnév')
Normalize names
#[' '.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','')
data2.to_excel('export2.xlsx')
Calculate percentages
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]+'%'
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']
totals2.loc['AZOMURES']
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% |
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']
totals3.loc['AZOMURES']
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% |
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()
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
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
data223=pd.concat([data221,data222])
data223.to_excel('export22.xlsx')
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'}
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
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')
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')
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')
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')
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')
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')
d6T=d6.stack().reset_index().set_index(['Régió','Év','Iparág']).unstack().reset_index()
d6T[d6T['Régió']!='Mind'].to_excel('export6T.xlsx')
regiok=[i for i in d6.columns if i!='Mind']
d6=d6.reset_index()
for i in regiok:
d6[i]=np.round(d6[i]*100/d6['Mind'],0)
d6=d6.replace(0,np.nan).replace(1,np.nan).replace(2,np.nan)
d6.to_excel('export6b.xlsx')