<jupyter_start><jupyter_text>Vem finns i CERN? CERN är en ytterst internationell plats: Tusentals forskare, ingenjörer och studerande från världens alla hörn arbetar tillsammans med olika projekt. I denna övning ska vi ta en titt på statistik över människorna bakom kunskapen: Varifrån kommer de? Till vilka yrkesområden hör de? Hur många studerande tas in, och hurudan än könsfördelningen bland de anställda.> I detta exempel ser vi på statistiska tabeller, och åskådliggör dem. Vi lär oss hur man behandlar tabeller med siffervärden så väl som teckensträngar, och hur man med något bestämt kriterium söker upp värden ur tabellen.<jupyter_code># Kör denna cell först!
# Om du inte vet hur python fungerar rekommenderar vi att du tar en titt på våra guides och enklare exempel.

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline<jupyter_output><empty_output><jupyter_text>Vilka stater hör till samarbetet? CERN grundades på 50-talet efter det andra världskriget för att främja forskning i Europa. Vissa stater är medlemmar (Member States), andra står i samarbete med projektet eller söker medelmskap (Associate Member States), och övriga är utomstående övervakare (Observers). Till den sistnämnda kategorin hör också internationella organ så som UNESCO. Den här indelningen inkluderar inte alla världens stater, och på många håll gör man fristående vetenskapligt samarbete på mindre skala.Staternas medlemsstatus är viktig när man avgör vilka studerande som tas in och hur man budgeterar för olika projekt. Ur staternas perspektiv är det intressant attt veta hur mycket tid de ges att utnyttja CERNs beräkningsenhet, eller hur deras status tryggar de inhemska industriernas utveckling.<jupyter_code># Kör den här cellen för att läsa in information om medlemsstaterna.

stater = pd.read_csv("https://raw.githubusercontent.com/cms-opendata-education/cms-jupyter-materials-finnish/master/Data/CERN_memberstates.csv", na_filter=False)
# Den här cellen visar en del av tabellen.
# display.max_colwidth None gör så att tabellens information kan läsas fastän texten i vissa celler är för lån
#

pd.set_option('display.max_colwidth', None)
stater.head(5)
# Vi skriver ett kommando som hämtar information ur ett element i tabellen.

# Vi söker upp rätt rad, exempelvis Finland.
rad = stater[stater["Country"]=="Finland"]

# Sedan söker vi rätt kolumn, exempelvis status.
element = rad["Status"]

# Till sist skriver vi ut det element som vi har sökt fram.
print(element)<jupyter_output>15    Member State
Name: Status, dtype: object<jupyter_text>Testa dig fram och skriv din egen kod. Kopiera de bitar du behöver, och undersök t.ex. vilket år Norge kom med i samarbetet.<jupyter_code># Skriv din egen kod här!<jupyter_output><empty_output><jupyter_text>CERNs personal - Hur många arbetar egetligen där? Cern är en omfattande organisation, som kräver massor av arbetskraft. Där arbetar partikelfysiker, maskiningenjörer, koordinatorer, kontorspersonal, räddningspersnal, läkare, byggarbetare, och lärare. I synnerhet finska brandmän är eftertraktade på den internationella arbetsmarknaden, eftersom de samtidigt utbildas till ambulansförare här. Dessa kan delas in i ordinarie personal (Members of Personnel, MPE) och den mer varierande gruppen av tillfälligt anställda (Associated Members of personnel, MPA).<jupyter_code># Kör denna cell för att läsa in information om CERNs anställda år 2017.

personal = pd.read_csv("https://raw.githubusercontent.com/cms-opendata-education/cms-jupyter-materials-finnish/master/Data/CERN_staff_by_dept_2017.csv")
# Här kan vi se antalet anställda på varje avdelning.

personal<jupyter_output><empty_output><jupyter_text>I vilken avdelning arbetar flest? Vi kan förstås ta reda på det svaret genom att bara läsa tabellen, men tänk om tabellen skulle innehålla flera tusen rader. Då behöver vi veta hur vi använder datorn för att hitta rätt info.Vi testar!<jupyter_code># På vilken avdelning jobbar flest? Vi ber datorn göra en jämförelse.

# Den sista kolumnen i tabellen innehåller totala antalet anställda per avdelning.
# Vi läser in den, men lämnar bort den sista cellen med totalsumman.
grandtotal = personal["Grand Total"][0:(len(personal)-1)]

# Vi skiljer ut det största värdet i kolumnen.
flest = max(grandtotal)

# Vi söker den avdelning som har detta värde.
avdelning = personal[personal["Grand Total"]==flest]
namn = avdelning["Category"]

# Vi presenterar svaret på ett lättläsligt sätt.
print("Flest anställda finns på avdelningen " + nimi + ": " + str(flest) + " anställda.")<jupyter_output><empty_output><jupyter_text>Var finns det minsta antalet anställda då? Testa med koden ovan som modell, använd kommandot min() istället för max() för att söka det minsta värdet.<jupyter_code># Sök den minsta avdelningen med hjälp av kod.<jupyter_output><empty_output><jupyter_text>Hurudana roller har personalen?<jupyter_code># Kör denna cell för att läsa in information om personalens yrken.

yrken = pd.read_csv("https://raw.githubusercontent.com/cms-opendata-education/cms-jupyter-materials-finnish/master/Data/CERN_staff_by_profession.csv")
yrken<jupyter_output><empty_output><jupyter_text>I tabellen ovan exkluderas Users - en stor grupp användare av CERNs tjänster. Users räknades tidigare till MPA-kategorin. I tabelle ser vi tydligt, trots att de kvinnliga anställda har ökat mycket under de senaste årtionden, att de flesta områden är mansdominerade, men i vilken grad? Vi beräknar några förhållanden:<jupyter_code># Här skapar vi en tabell som beskriver andelen kvinnliga anställda för varje område och anställningsstatus.

# Först beräknar vi förhållandetalen
# Vi dividerar en kolumn med en annan, vilket resulterar i att varje element
# i kolumnen divideras med det motsvarande elementet i den andra.
kvotstaff = yrken["Staff, Female"]/yrken["Staff, Male"]
kvotfellows = yrken["Fellows, Female"]/yrken["Fellows, Male"]
kvotmpa = yrken["MPAs (excluding Users), Female"]/yrken["MPAs (excluding Users), Male"]

# Sedan sätter vi in förhållandetalen i en egen tabell, s.k. DataFrame
kvoter = pd.DataFrame(data=yrken["Category"])
kvoter["Staff"] = kvotstaff
kvoter["Fellows"] = kvotfellows
kvoter["MPAs"] = kvotmpa

kvoter<jupyter_output><empty_output><jupyter_text>Nu har vi kvoterna sammanfattade i en tabell. Vi ser ett par märkliga värden - NaN (Not a number) och inf ("infinity"). Vad beror de här på? Jämför med yrkestabellen.  Personalen genom åren<jupyter_code># Kör denna cell för att läsa in tidsserier av tabeller.

artionde = pd.read_csv("https://raw.githubusercontent.com/cms-opendata-education/cms-jupyter-materials-finnish/master/Data/CERN_staff_by_years.csv")
alder = pd.read_csv("https://raw.githubusercontent.com/cms-opendata-education/cms-jupyter-materials-finnish/master/Data/CERN_staff_age_over_a_decade.csv")<jupyter_output><empty_output><jupyter_text>Vi skapar ett par grafer för at göra det lät att se hur de anställdas antal har varierat under de senaste åren och hur personalens åldersfördelning har sett ut under de senaste tio åren.<jupyter_code># Här syns antalet anställda under åren 2013-2017.
artionde
# Vi sätter in talen ovan i en graf.


f, ax = plt.subplots(figsize=(10,5))
ax.set_xticks(artionde["End of year"])

plt.plot(artionde["End of year"], artionde["Staff members (MPE)"], label = "Staff members (MPE)")
plt.plot(artionde["End of year"], artionde["Fellows (MPE)"], label = "Fellows (MPE)")
plt.plot(artionde["End of year"], artionde["MPA excluding Users"], label = "MPA excluding Users")
plt.plot(artionde["End of year"], artionde["Users"], label = "Users")
plt.plot(artionde["End of year"], artionde["Grand total"], label = "Grand total")


plt.title("CERNs personal 2013-2017 \n")
plt.legend(loc="center right")
plt.show()<jupyter_output><empty_output><jupyter_text>Vad kan vi säga om utvecklingen utgående från den här grafen, då vi vet att de flesta Users deltar på distans?<jupyter_code># Här ser vi den fasta personalens åldersfördelning under tiden 2007-2017.
alder
# Först bestämmer vi grafens storlek och kategoriindelning.
plt.figure(figsize=(10,5))
indelning = np.arange(len(alder)-1)
w = 0.3
namn = alder["Age range"][0:len(alder)-1].tolist()

# Här ritar vi staplarna...
plt.bar(indelning-w, alder["2007"][0:len(alder)-1], width = w, alpha=0.5, color="r", label="2007")
plt.bar(indelning, alder["2012"][0:len(alder)-1], width = w, alpha=0.5, color="b", label="2012")
plt.bar(indelning+w, alder["2017"][0:len(alder)-1], width = w, alpha=0.5, color="g", label="2017")

# ...och så gör vi diagrammet läsligt.
plt.xticks(indelning, namn)
plt.title("Personalens åldrar \n", fontsize=15)
plt.xlabel("\n Ålder (år)")
plt.legend(loc="upper right")
plt.show()<jupyter_output><empty_output><jupyter_text>Kan du se några trender bland åldrarna? Har någon åldersgrupp tydligt flyttat från stapel till stapel mellan mätningarna?  Users - användare jorden runt. User - termen innefattar många aktörer. Utlandsforskare, sommarstuderande och tekniker, bland många andra. Den största andelen är inte direkt kopplade till CERNs affärer, utan fungerar genom sina egna länders institut i samma nätverk. (Liksom jag som skriver detta, Hej hej!)<jupyter_code># Vi läser in mer information om anställda år 2017

userGen = pd.read_csv("https://raw.githubusercontent.com/cms-opendata-education/cms-jupyter-materials-finnish/master/Data/CERN_users_gender.csv")
userExp = pd.read_csv("https://raw.githubusercontent.com/cms-opendata-education/cms-jupyter-materials-finnish/master/Data/CERN_users_experiment_profession_nationality.csv")

# Hur ser fördelningen av Users ut med avseende på yrkesområde och kön?
userGen
# Låt oss rita lite fler diagram: Ett cirkeldiagram över arbetsfördelningen.

labels = 'Research physicists', 'Scientific & Engineering work', 'Technical work', 'Manual work', 'Prof. Admin.'
sizes = [8421, 1015, 556, 3, 20]
explode = (0, 0, 0.1, 0.3, 0.5)  # explode drar ut de små sektorerna för att göra diagrammet tydligare.

fig1, ax1 = plt.subplots()
ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',
        shadow=True, startangle=90)
ax1.axis('equal')  # Equal hjälper oss att få en prydlig cirkel.

plt.title("Arbetsfördelning (män) \n")
plt.show()

labels1 = 'Research physicists', 'Scientific & Engineering work', 'Technical work', 'Manual work', 'Prof. Admin.'
sizes1 = [1995, 105, 60, 0, 61]
explode1 = (0, 0, 0.1, 0.3, 0.5)  # Vad händer om du ändrar dessa siffror?

fig2, ax2 = plt.subplots()
ax2.pie(sizes1, explode=explode1, labels=labels1, autopct='%1.1f%%',
        shadow=True, startangle=90)
ax2.axis('equal')  # Equal hjälper oss att få en prydlig cirkel.

plt.title("Arbetsfördelning (kvinnor) \n")
plt.show()
# Eller fördelningen mellan experimentdeltagande, nationalitet och yrke?
# I tabellen syns först de olika experimenten (ATLAS, CMS...) och sedan yrkesindelningen för samma människor.

userExp<jupyter_output><empty_output><jupyter_text>Minns du hur man söker information? Testa att gräva fram finlands information. I vilket experiment har Finland främst deltagit?<jupyter_code># Skriv en kod som söker fram Finlands (FI) rad ur tabellen.
# Du hittar tips i tidigare exempel, under den första tbellen i detta dokument.<jupyter_output><empty_output><jupyter_text>Studerande - Goda möjligheter för framtiden? CERN är en unik plats, och det märks på arbetsmiljöns mångsidighet och trivsamhet. CERN är också ett enastående mål för den nyfikna eleven. Man kan komma dit redan som ung sommarstuderande, eller senare som doktorand eller deltagare i något projekt. CERN är inte i sig själv en institution för utbildning, utan de studerande kommer oftast dit genom sina egna organisationers program. Vi tar en titt på de projekt som sponsrades genom CERN förra året. (Observera att många finska studerande deltar i egenskap av Users, och därför inte syns i denna statistik.)<jupyter_code># Vi läser in informationen om studerande.

studerande = pd.read_csv("https://raw.githubusercontent.com/cms-opendata-education/cms-jupyter-materials-finnish/master/Data/CERN_student_recruitment.csv")
studerande
# Vi tar en titt på könsfördelningen för ansökningar och antagningar för olika länder.
# dr_ans  ansökande doktorander
# dr_ant  antagna doktorander
# st_ans  ansökande studerande
# st_ant  antagna studerande

dr_ans = studerande["Doct. Application, Female"]/studerande["Doct. Application, Male"]
dr_ant = studerande["Doct. Selected, Female"]/studerande["Doct. Selected, Male"]
st_ans = studerande["Summer Application, Female"]/studerande["Summer Application, Male"]
st_ant = studerande["Summer Selected, Female"]/studerande["Summer Selected, Male"]

# Tässä tehdään taas dataframe-taulukko, johon äsken lasketut tiedot liitetään sarakkeina.
kvot = pd.DataFrame(data=studerande["Nationality"])
kvot["Doktorander - ansökningar"] = dr_ans
kvot["Doktorander - antagningar"] = dr_ant
kvot["Sommarstuderande - ansökningar"] = st_ans
kvot["Sommarstuderande - antagningar"] = st_ant

kvot<jupyter_output><empty_output><jupyter_text>Fastän tabellen ovan är beskrivande i sig själv, så ger den kanske inte en så informativ bild av antagningsförhållandena. Försök själv koda en cell som beräknar förhållandet mellan antagna och ansökande för de olika länderna och könen. Är det något som ser annorlunda ut? Är du kanske själv intresserad av att arbeta med CERN?<jupyter_code># Koda här!<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.08916149300620839, 'fraction_numerical': 0.011668785997456804, 'mean_word_length': 5.779918864097363, 'pattern_counts': {'":': 1, '<': 60, '<?xml version=': 0, '>': 61, 'https://': 8, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '15', 'dir': 'jupyter-structured-clean-dedup', 'id': '39484', 'license': 'CC-BY-4.0', 'n_tokens_mistral': 5109, 'n_tokens_neox': 4883, 'n_words': 1491, 'path': 'Demot/Muut_aiheet/CERNs personal.ipynb', 'repo_name': 'cms-opendata-education/cms-jupyter-materials-swedish', 'size': '13369'}