267 lines
9.4 KiB
Plaintext
267 lines
9.4 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Vizsgaminta 3."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"### 1. feladat [4p]\n",
|
|
"Készítsünk programot, amely pozitív egész számok egy nemüres listájára meghatározza és kiírja a lista azon elemét, amelyikben a számjegyek összege a legnagyobb! Ha több ilyen szám is lenne, akkor az elsőnek megtalált legyen az eredmény! Teszteljük a programot a `[245, 1132, 98, 465, 14231, 7854, 2542]` listával! "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Az eredmény szám: 7854, számjegyeinek összeg: 24\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"l = [245, 1132, 98, 465, 14231, 7854, 2542]\n",
|
|
"maxossz, er = 0, 0\n",
|
|
"for i in l:\n",
|
|
" s, ossz = str(i), 0\n",
|
|
" for j in s:\n",
|
|
" ossz += int(j)\n",
|
|
" if ossz > maxossz:\n",
|
|
" maxossz, er = ossz, i\n",
|
|
"print(f'Az eredmény szám: {er}, számjegyeinek összeg: {maxossz}')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"### 2. feladat [6p]\n",
|
|
"Az `edges` lista kitalált személyekből képezett párokat tartalmaz. Egy pár azt jelenti, hogy az adott személyek ismeri egymást. Készítsünk függvényt, amely egy adott, ilyen felépítésű listára meghatározza azt a 2 személyt, akiknek a legtöbb közös ismerősük van! Ha több ilyen személypár is lenne, akkor az egyik ilyen pár legyen az eredmény! Hívjuk meg a függvényt az `edges` listára és írjuk ki a kapott eredményeket!"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"A két legtöbb közös ismerőssel rendelkező személyek: Adél, Mihály\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"edges = [\n",
|
|
" (\"Adél\", \"Dezső\"), (\"Géza\", \"Mihály\"), (\"Károly\", \"Adél\"), (\"Antal\", \"Mihály\"), (\"Károly\", \"Sára\"),\n",
|
|
" (\"Mihály\", \"Vilma\"), (\"Dezső\", \"Vilma\"), (\"Vilma\", \"Antal\"), (\"Károly\", \"Mihály\"), (\"Elvira\", \"Adél\"),\n",
|
|
" (\"Izabella\", \"Adél\"), (\"Mihály\", \"Izabella\"), (\"Géza\", \"Vilma\"), (\"Károly\", \"Elvira\"), (\"Elvira\", \"Mihály\"),\n",
|
|
" (\"Géza\", \"Dezső\"), (\"Sára\", \"Adél\"), (\"Géza\", \"Adél\"), (\"Géza\", \"Izabella\"), (\"Izabella\", \"Dezső\") \n",
|
|
"]\n",
|
|
"\n",
|
|
"def f(edges):\n",
|
|
" # Felépítünk egy olyan szótárt, ahol a nevek a kulcsok és mindenkihez egy \n",
|
|
" # halmaz tartozik hozzá 'értékként', amely az ő ismerőseit tartalmazza\n",
|
|
" d = {}\n",
|
|
" for p in edges:\n",
|
|
" if p[0] in d:\n",
|
|
" d[p[0]] = d[p[0]] | {p[1]}\n",
|
|
" else:\n",
|
|
" d[p[0]] = {p[1]}\n",
|
|
" if p[1] in d:\n",
|
|
" d[p[1]] = d[p[1]] | {p[0]}\n",
|
|
" else:\n",
|
|
" d[p[1]] = {p[0]}\n",
|
|
" # A két legtöbb közös ismerőssel rendelkező személy megkeresése\n",
|
|
" maxdb = 0\n",
|
|
" for i in d:\n",
|
|
" for j in d:\n",
|
|
" if i != j:\n",
|
|
" # A két személy közös ismerőseinek száma\n",
|
|
" db = len(d[i] & d[j])\n",
|
|
" if db > maxdb:\n",
|
|
" maxdb = db\n",
|
|
" er = (i, j)\n",
|
|
" return er\n",
|
|
"\n",
|
|
"# A függvény tesztje\n",
|
|
"er = f(edges)\n",
|
|
"print(f'A két legtöbb közös ismerőssel rendelkező személyek: {er[0]}, {er[1]}')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"### 3. feladat [10p]\n",
|
|
"\n",
|
|
"Az [unicef.txt](unicef.txt) szövegfájl a világ 5 év alatti népességének élelmezési helyzetéről tartalmaz adatokat. Az egyes sorok felméréseknek felelnek meg, a felmérések országonként időbeli sorrendben vannak felsorolva. Töltsük be az adatokat, határozzuk meg és írjuk ki az alábbi statisztikákat!\n",
|
|
"- Hány felmérés készült és hány országot érintett?\n",
|
|
"- Az alábbi statisztikákat csak azon felmérések alapján készítsük el, amelyeknél mind a három érintett indikátor (`Severe Wasting`, `Underweight`, `Overweight`) definiált (azaz ezek pozitív adatok). Ha egy országra több ilyen felmérés is van, akkor a legutóbbit vegyük figyelembe!\n",
|
|
" - Mely 5 országban a legmagasabb a `Severe Wasting` indikátor?\n",
|
|
" - Az országok hányadrészében magasabb az `Underweight` indikátor az `Overweight` indikátornál?"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"A felmérések száma: 854\n",
|
|
"Az érintett országok száma: 152\n",
|
|
"\n",
|
|
"Az 5 ország, ahol a legmagasabb a 'Severe Wasting' indikátor:\n",
|
|
"1. SOUTH SUDAN 11.9\n",
|
|
"2. DJIBOUTI 9.2\n",
|
|
"3. INDIA 7.7\n",
|
|
"4. INDONESIA 6.7\n",
|
|
"5. PAPUA NEW GUINEA 6.4\n",
|
|
"\n",
|
|
"Az 'Underweight' > 'Overweight' százalékos arány: 53.62318840579711\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Megoldás 1. (hagyományos eszközökkel)\n",
|
|
"\n",
|
|
"# Segédfüggvény ami egy sztringben megadott tizedesvesszős számot valós számmá alakít\n",
|
|
"# Az üres sztringre 0-t adunk eredményként\n",
|
|
"def atalakit(s):\n",
|
|
" if s == '': \n",
|
|
" st = '0.0'\n",
|
|
" else:\n",
|
|
" st = ''\n",
|
|
" for c in s:\n",
|
|
" if c == ',': st = st + '.'\n",
|
|
" else: st = st + c\n",
|
|
" return float(st)\n",
|
|
"\n",
|
|
"# Adatbeolvasás\n",
|
|
"f = open('unicef.txt')\n",
|
|
"# A fejlécsor beolvasása\n",
|
|
"fej = f.readline().strip().split('|')\n",
|
|
"# A többi sor beolvasása\n",
|
|
"lines = f.readlines()\n",
|
|
"f.close()\n",
|
|
"\n",
|
|
"# Az adatsorok átalakítása és tárolása \n",
|
|
"# o: az országok nevei (halmazként)\n",
|
|
"# d: a megfelelő felmérések (szótárként, kulcs az ország neve, adat a 3 indikátor egy szótárban) \n",
|
|
"o = set()\n",
|
|
"d = {}\n",
|
|
"for l in lines:\n",
|
|
" t = l.strip().split('|')\n",
|
|
" adat = {\n",
|
|
" fej[6]: atalakit(t[6]), # Severe Wasting \n",
|
|
" fej[9]: atalakit(t[9]), # Underweight\n",
|
|
" fej[10]: atalakit(t[10]) # Overweight\n",
|
|
" }\n",
|
|
" o.add(t[0])\n",
|
|
" if adat['Severe Wasting'] > 0 and adat['Underweight'] > 0 and adat['Overweight'] > 0:\n",
|
|
" d[t[0]] = adat\n",
|
|
"\n",
|
|
"# 1. feladat\n",
|
|
"print('A felmérések száma:', len(lines))\n",
|
|
"print('Az érintett országok száma:', len(o))\n",
|
|
"print()\n",
|
|
"\n",
|
|
"# 2. feladat\n",
|
|
"l = [(o, d[o]['Severe Wasting']) for o in d]\n",
|
|
"l.sort(key = lambda p: p[1], reverse = True)\n",
|
|
"print(\"Az 5 ország, ahol a legmagasabb a 'Severe Wasting' indikátor:\")\n",
|
|
"for i in range(5):\n",
|
|
" print(f'{i + 1}. {l[i][0]:20} {l[i][1]:5}')\n",
|
|
"print()\n",
|
|
"\n",
|
|
"# 3. feladat\n",
|
|
"er = sum([d[o]['Underweight'] > d[o]['Overweight'] for o in d]) / len(d) * 100\n",
|
|
"print(f\"Az 'Underweight' > 'Overweight' százalékos arány: {er}\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"A felmérések száma: 854\n",
|
|
"Az érintett országok száma: 152\n",
|
|
"\n",
|
|
"Az 5 ország, ahol a legmagasabb a 'Severe Wasting' indikátor:\n",
|
|
"Country\n",
|
|
"SOUTH SUDAN 11.9\n",
|
|
"DJIBOUTI 9.2\n",
|
|
"INDIA 7.7\n",
|
|
"INDONESIA 6.7\n",
|
|
"PAPUA NEW GUINEA 6.4\n",
|
|
"Name: Severe Wasting, dtype: float64\n",
|
|
"\n",
|
|
"Az 'Underweight' > 'Overweight' százalékos arány: 53.62318840579711\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Megoldás 2. (pandas segítségével)\n",
|
|
"import pandas as pd\n",
|
|
"\n",
|
|
"# Beolvasás DataFrame-be\n",
|
|
"df = pd.read_csv('unicef.txt', sep='|', decimal=',')\n",
|
|
"print('A felmérések száma:', len(df))\n",
|
|
"print('Az érintett országok száma:', len(df.groupby('Country')))\n",
|
|
"print()\n",
|
|
"\n",
|
|
"# 2. feladat\n",
|
|
"# A megfelelő adatok kiszűrése\n",
|
|
"df1 = df[(df['Severe Wasting'] > 0) & (df['Underweight'] > 0) & (df['Overweight'] > 0)]\n",
|
|
"df2 = df1.groupby('Country').last()\n",
|
|
"\n",
|
|
"print(\"Az 5 ország, ahol a legmagasabb a 'Severe Wasting' indikátor:\")\n",
|
|
"print(df2['Severe Wasting'].sort_values(ascending=False)[:5])\n",
|
|
"print()\n",
|
|
"\n",
|
|
"# 3. feladat\n",
|
|
"er = sum(df2['Underweight'] > df2['Overweight']) / len(df2) * 100\n",
|
|
"print(f\"Az 'Underweight' > 'Overweight' százalékos arány: {er}\")"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3 (ipykernel)",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.11.3"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|